From ab0add613975b5141c6a033d3631724d1c6cdc19 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 06:52:45 -0300 Subject: [PATCH 01/23] chore: prepare berrysdk packages for publication --- .gitignore | 15 + Dockerfile | 16 + LICENSE | 17 + README.md | 640 + berryprotocol-auth-0.1.0.tgz | Bin 0 -> 24716 bytes berryprotocol-cli-0.1.0.tgz | Bin 0 -> 25892 bytes berryprotocol-core-0.1.0.tgz | Bin 0 -> 36282 bytes berryprotocol-events-0.1.0.tgz | Bin 0 -> 26371 bytes berryprotocol-gateway-0.1.0.tgz | Bin 0 -> 25952 bytes berryprotocol-media-0.1.0.tgz | Bin 0 -> 24538 bytes berryprotocol-messages-0.1.0.tgz | Bin 0 -> 24713 bytes berryprotocol-proto-0.1.0.tgz | Bin 0 -> 25880 bytes berryprotocol-socket-0.1.0.tgz | Bin 0 -> 38281 bytes berryprotocol-store-0.1.0.tgz | Bin 0 -> 25749 bytes berryprotocol-wa-message-0.1.0.tgz | Bin 0 -> 34699 bytes berrysdk-auth-0.1.0.tgz | Bin 0 -> 1745 bytes berrysdk-cli-0.1.0.tgz | Bin 0 -> 2518 bytes berrysdk-core-0.1.0.tgz | Bin 0 -> 7261 bytes berrysdk-events-0.1.0.tgz | Bin 0 -> 3406 bytes berrysdk-gateway-0.1.0.tgz | Bin 0 -> 2654 bytes berrysdk-media-0.1.0.tgz | Bin 0 -> 1684 bytes berrysdk-messages-0.1.0.tgz | Bin 0 -> 1689 bytes berrysdk-proto-0.1.0.tgz | Bin 0 -> 2180 bytes berrysdk-socket-0.1.0.tgz | Bin 0 -> 9339 bytes berrysdk-store-0.1.0.tgz | Bin 0 -> 2637 bytes berrysdk-wa-message-0.1.0.tgz | Bin 0 -> 5907 bytes docker-compose.yml | 18 + docs/publishing.md | 93 + docs/whatsapp-rendering-notes.md | 398 + examples/rest/requests.http | 93 + examples/sdk/basic.ts | 16 + examples/sdk/berryotp.js | 389 + examples/sdk/compare-berry-vs-baileys.js | 177 + examples/sdk/list-and-reply.js | 142 + examples/sdk/list.ts | 29 + examples/sdk/test-all.js | 191 + examples/sdk/test-baileys-same-session.js | 364 + examples/sdk/test-berry-new-ways.js | 317 + examples/sdk/test-berry-otp.js | 69 + package-lock.json | 17091 ++++++++++++++++++++ package.json | 45 + packages/auth/package.json | 26 + packages/auth/src/index.ts | 63 + packages/auth/tsconfig.json | 21 + packages/cli/package.json | 27 + packages/cli/src/index.ts | 111 + packages/cli/tsconfig.json | 18 + packages/core/package.json | 31 + packages/core/src/index.ts | 571 + packages/core/tsconfig.json | 33 + packages/events/package.json | 22 + packages/events/src/index.d.ts | 185 + packages/events/src/index.d.ts.map | 1 + packages/events/src/index.js | 31 + packages/events/src/index.js.map | 1 + packages/events/src/index.ts | 309 + packages/events/tsconfig.json | 13 + packages/gateway/package.json | 27 + packages/gateway/src/index.ts | 148 + packages/gateway/tsconfig.json | 18 + packages/media/package.json | 22 + packages/media/src/index.ts | 68 + packages/media/tsconfig.json | 18 + packages/messages/package.json | 25 + packages/messages/src/index.ts | 85 + packages/messages/tsconfig.json | 18 + packages/protocol/package.json | 26 + packages/protocol/src/index.ts | 86 + packages/protocol/tsconfig.json | 13 + packages/socket/package.json | 30 + packages/socket/src/index.ts | 638 + packages/socket/tsconfig.json | 24 + packages/store/package.json | 26 + packages/store/src/index.ts | 188 + packages/store/tsconfig.json | 18 + packages/wa-message/package.json | 27 + packages/wa-message/src/index.ts | 465 + packages/wa-message/tsconfig.json | 21 + scripts/patch-baileys-esm.mjs | 23 + tsconfig.json | 24 + 80 files changed, 23621 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 berryprotocol-auth-0.1.0.tgz create mode 100644 berryprotocol-cli-0.1.0.tgz create mode 100644 berryprotocol-core-0.1.0.tgz create mode 100644 berryprotocol-events-0.1.0.tgz create mode 100644 berryprotocol-gateway-0.1.0.tgz create mode 100644 berryprotocol-media-0.1.0.tgz create mode 100644 berryprotocol-messages-0.1.0.tgz create mode 100644 berryprotocol-proto-0.1.0.tgz create mode 100644 berryprotocol-socket-0.1.0.tgz create mode 100644 berryprotocol-store-0.1.0.tgz create mode 100644 berryprotocol-wa-message-0.1.0.tgz create mode 100644 berrysdk-auth-0.1.0.tgz create mode 100644 berrysdk-cli-0.1.0.tgz create mode 100644 berrysdk-core-0.1.0.tgz create mode 100644 berrysdk-events-0.1.0.tgz create mode 100644 berrysdk-gateway-0.1.0.tgz create mode 100644 berrysdk-media-0.1.0.tgz create mode 100644 berrysdk-messages-0.1.0.tgz create mode 100644 berrysdk-proto-0.1.0.tgz create mode 100644 berrysdk-socket-0.1.0.tgz create mode 100644 berrysdk-store-0.1.0.tgz create mode 100644 berrysdk-wa-message-0.1.0.tgz create mode 100644 docker-compose.yml create mode 100644 docs/publishing.md create mode 100644 docs/whatsapp-rendering-notes.md create mode 100644 examples/rest/requests.http create mode 100644 examples/sdk/basic.ts create mode 100644 examples/sdk/berryotp.js create mode 100644 examples/sdk/compare-berry-vs-baileys.js create mode 100644 examples/sdk/list-and-reply.js create mode 100644 examples/sdk/list.ts create mode 100644 examples/sdk/test-all.js create mode 100644 examples/sdk/test-baileys-same-session.js create mode 100644 examples/sdk/test-berry-new-ways.js create mode 100644 examples/sdk/test-berry-otp.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 packages/auth/package.json create mode 100644 packages/auth/src/index.ts create mode 100644 packages/auth/tsconfig.json create mode 100644 packages/cli/package.json create mode 100644 packages/cli/src/index.ts create mode 100644 packages/cli/tsconfig.json create mode 100644 packages/core/package.json create mode 100644 packages/core/src/index.ts create mode 100644 packages/core/tsconfig.json create mode 100644 packages/events/package.json create mode 100644 packages/events/src/index.d.ts create mode 100644 packages/events/src/index.d.ts.map create mode 100644 packages/events/src/index.js create mode 100644 packages/events/src/index.js.map create mode 100644 packages/events/src/index.ts create mode 100644 packages/events/tsconfig.json create mode 100644 packages/gateway/package.json create mode 100644 packages/gateway/src/index.ts create mode 100644 packages/gateway/tsconfig.json create mode 100644 packages/media/package.json create mode 100644 packages/media/src/index.ts create mode 100644 packages/media/tsconfig.json create mode 100644 packages/messages/package.json create mode 100644 packages/messages/src/index.ts create mode 100644 packages/messages/tsconfig.json create mode 100644 packages/protocol/package.json create mode 100644 packages/protocol/src/index.ts create mode 100644 packages/protocol/tsconfig.json create mode 100644 packages/socket/package.json create mode 100644 packages/socket/src/index.ts create mode 100644 packages/socket/tsconfig.json create mode 100644 packages/store/package.json create mode 100644 packages/store/src/index.ts create mode 100644 packages/store/tsconfig.json create mode 100644 packages/wa-message/package.json create mode 100644 packages/wa-message/src/index.ts create mode 100644 packages/wa-message/tsconfig.json create mode 100644 scripts/patch-baileys-esm.mjs create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..379d65f --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +node_modules +dist +.env +*.log +coverage +packages/*/dist +packages/*/.tsbuildinfo +.baileys-sessions +.berry-sessions +.vscode +berryprotocol.db +berrysdk.db +_reference_baileys2 +_vendor_whatsapp_proto +_vendor_wppconnect_wa_proto diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..95006c9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM node:22-bookworm-slim + +WORKDIR /app + +COPY package.json tsconfig.json ./ +COPY packages ./packages + +RUN npm install +RUN npm run build + +EXPOSE 3000 + +ENV BERRY_AUTH_FOLDER=/data/auth +ENV BERRY_SQLITE_PATH=/data/berryprotocol.db + +CMD ["node", "packages/gateway/dist/index.js"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..55203e8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,17 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +Copyright 2026 Lipe Devv and Berry Protocol + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0990086 --- /dev/null +++ b/README.md @@ -0,0 +1,640 @@ +# BerryProtocol + +BerryProtocol is a modular TypeScript SDK for connecting to the real WhatsApp Web stack. + +Internally it uses Baileys as the transport engine, while exposing a BerryProtocol API focused on: + +- modular architecture +- typed events +- persistent sessions +- multi-instance usage +- REST gateway +- CLI workflows +- Docker-friendly deployment + +## Features + +- real WhatsApp Web connection +- three authentication modes: + - `link` + - `qr` + - `pairing_code` +- persistent auth state per session +- reconnect lifecycle +- SQLite persistence for metadata +- text, image, audio, document, buttons, list, reaction, location and contact sending +- presence helpers +- history, chats, contacts and groups sync events +- CLI and REST examples + +## Authentication modes + +BerryProtocol supports three explicit auth modes: + +### 1. `link` + +Returns the raw link payload emitted by WhatsApp Web. + +Use when you want the same payload style you are currently seeing in the terminal. + +### 2. `qr` + +Emits the login payload and renders it as a terminal QR in the CLI. + +Use when you want a scan-ready terminal experience. + +### 3. `pairing_code` + +Requests a typed code for device linking. + +BerryProtocol now enforces an **8-digit numeric pairing code**. +If you do not provide one, BerryProtocol generates one automatically. + +## Project structure + +```text +packages/ + auth/ + cli/ + core/ + events/ + gateway/ + media/ + messages/ + protocol/ # workspace folder for @berrysdk/proto + socket/ + store/ + wa-message/ +examples/ + rest/ + sdk/ +scripts/ + patch-baileys-esm.mjs +_reference_baileys2/ +``` + +## Packages + +### `@berrysdk/core` + +Public SDK: + +- `BerryClient` +- auth entrypoints +- queueing +- event bridge +- media send helpers + +### `@berrysdk/socket` + +WhatsApp transport adapter: + +- Baileys socket integration +- auth mode handling +- reconnect handling +- event normalization +- sync bridging + +### `@berrysdk/events` + +Shared domain types: + +- event map +- auth options +- message contracts +- sync models + +### `@berrysdk/proto` + +Berry-owned proto wrapper: + +- exports `proto` / `WAProto` +- wraps the vendored `WPPConnect/WA-Proto` +- keeps protobuf-related code isolated for easier protocol evolution + +### `@berrysdk/wa-message` + +WhatsApp message helpers owned by Berry: + +- builders for `InteractiveMessage`, `TemplateMessage` and button payloads +- validated builders for working WhatsApp Web/mobile rendering paths +- incoming message normalization +- ACK/status normalization + +### `@berrysdk/store` + +SQLite storage for: + +- session metadata +- chats +- contacts +- groups +- messages +- ACKs + +### `@berrysdk/gateway` + +HTTP API for multi-instance control. + +### `@berrysdk/cli` + +Developer CLI for connect and send-text flows. + +## Installation + +```bash +npm install +``` + +After install, BerryProtocol runs `postinstall` and patches local Baileys ESM imports for this environment. + +## Build + +```bash +npm run build +``` + +## Rendering notes + +For the WhatsApp Web/mobile rendering workarounds currently used by BerryProtocol, see: + +- [docs/whatsapp-rendering-notes.md](C:/Users/felip/BerryProtocol/docs/whatsapp-rendering-notes.md) +- [docs/publishing.md](C:/Users/felip/BerryProtocol/docs/publishing.md) + +Currently validated rendering paths include: + +- legacy `listMessage` +- native-flow `quick_reply` +- native-flow `cta_copy` +- native-flow `cta_url` + +## SDK quick start + +```ts +import { BerryClient } from "@berrysdk/core"; + +const client = new BerryClient({ + sessionId: "store-001", +}); + +client.on("auth.link", ({ value }) => console.log("link:", value)); +client.on("auth.qr", ({ value }) => console.log("qr payload:", value)); +client.on("auth.pairing_code", ({ code }) => console.log("pairing:", code)); +client.on("connection.open", (state) => console.log("open", state)); +client.on("message.received", (message) => console.log(message)); +``` + +## SDK authentication examples + +### Link mode + +```ts +await client.connectWithLink(); +``` + +### QR mode + +```ts +await client.connectWithQr(); +``` + +### Pairing code mode + +```ts +await client.connectWithPairingCode("5519997530219"); +``` + +### Pairing code with custom 8-digit code + +```ts +await client.connect({ + method: "pairing_code", + phoneNumber: "5519997530219", + customPairingCode: "12345678", +}); +``` + +## Sending messages + +### Text + +```ts +await client.sendText("5516999999999@s.whatsapp.net", "Olá pelo BerryProtocol!"); +``` + +### List + +```ts +await client.sendList("5516999999999@s.whatsapp.net", { + title: "Cardápio", + text: "Escolha uma opção", + buttonText: "Ver opções", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pão, carne e queijo", + }, + ], + }, + ], +}); +``` + +### Baileys-style `sendMessage` + +```ts +await client.sendMessage("5516999999999@s.whatsapp.net", { + text: "Olá no formato do Baileys", +}); +``` + +### Baileys-style `list` + +```ts +await client.sendMessage("5516999999999@s.whatsapp.net", { + list: { + title: "Cardápio", + text: "Escolha uma opção", + buttonText: "Ver opções", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pão, carne e queijo", + }, + ], + }, + ], + }, +}); +``` + +### Baileys-style `interactiveMessage` + +```ts +await client.sendMessage("5516999999999@s.whatsapp.net", { + interactiveMessage: { + body: { + text: "Escolha uma opção", + }, + footer: { + text: "BerryProtocol", + }, + nativeFlowMessage: { + buttons: [ + { + name: "single_select", + buttonParamsJson: JSON.stringify({ + title: "Ver opções", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pão, carne e queijo", + }, + ], + }, + ], + }), + }, + ], + }, + }, +}); +``` + +## `BerryClient` API + +### Connection + +- `connect(authOptions?)` +- `connectWithLink()` +- `connectWithQr()` +- `connectWithPairingCode(phoneNumber, customPairingCode?)` +- `disconnect()` +- `reconnect()` +- `logout()` + +### Messaging + +- `sendText()` +- `sendMessage()` +- `sendImage()` +- `sendAudio()` +- `sendDocument()` +- `sendButtons()` +- `sendList()` +- `sendReaction()` +- `sendLocation()` +- `sendContact()` + +`sendMessage()` accepts Baileys-style payloads for: + +- `text` +- `image` +- `audio` +- `document` +- `buttonsMessage` +- `list` +- `listMessage` +- `interactiveMessage` +- `react` +- `location` +- `contacts` + +### Presence and sync + +- `fetchGroups()` +- `subscribePresence()` +- `sendPresence()` + +## Event reference + +### Auth events + +- `auth.link` +- `auth.qr` +- `auth.pairing_code` +- `auth.success` +- `auth.error` + +### Connection events + +- `connection.open` +- `connection.close` +- `connection.reconnecting` + +### Messaging events + +- `message.received` +- `message.sent` +- `message.ack` + +### Sync events + +- `chats.update` +- `presence.update` +- `sync.history` +- `sync.contacts` +- `sync.groups` +- `sync.messages` +- `protocol.error` + +## CLI + +### Help + +```bash +npm run dev:cli -- --help +``` + +### Link auth + +```bash +npm run dev:cli -- --session store-001 connect +``` + +### QR auth + +```bash +npm run dev:cli -- --session store-001 connect --auth qr +``` + +### Pairing code auth + +```bash +npm run dev:cli -- --session store-002 connect --auth pairing_code --phone 5519997530219 +``` + +### Pairing code auth with custom 8-digit code + +```bash +npm run dev:cli -- --session store-003 connect --auth pairing_code --phone 5519997530219 --pairing-code 12345678 +``` + +### Send text + +```bash +npm run dev:cli -- --session store-001 send-text --to 5516999999999@s.whatsapp.net --message "Olá" +``` + +### CLI notes + +- For `pairing_code`, prefer a fresh `sessionId`. +- If a session already has previous credentials, logout it first or use a new session. +- The CLI prints a friendly tip when pairing fails. + +## REST gateway + +### Start + +```bash +npm run dev:gateway +``` + +### Environment variables + +- `BERRY_HTTP_HOST` +- `BERRY_HTTP_PORT` +- `BERRY_SQLITE_PATH` +- `BERRY_AUTH_FOLDER` + +### Create instance with link auth + +```http +POST /instances +Content-Type: application/json + +{ + "sessionId": "store-001", + "authMethod": "link" +} +``` + +### Create instance with QR auth + +```http +POST /instances +Content-Type: application/json + +{ + "sessionId": "store-qr", + "authMethod": "qr" +} +``` + +### Create instance with pairing code auth + +```http +POST /instances +Content-Type: application/json + +{ + "sessionId": "store-code", + "authMethod": "pairing_code", + "phoneNumber": "5519997530219" +} +``` + +### Read auth artifacts + +```http +GET /instances/store-001/link +GET /instances/store-qr/qr +GET /instances/store-code/pairing-code +``` + +### Send text + +```http +POST /instances/store-001/send-text +Content-Type: application/json + +{ + "to": "5516999999999@s.whatsapp.net", + "text": "Olá pelo BerryProtocol!" +} +``` + +### Send image + +```http +POST /instances/store-001/send-image +Content-Type: application/json + +{ + "to": "5516999999999@s.whatsapp.net", + "media": { + "url": "https://example.com/banner.jpg", + "caption": "Banner BerryProtocol" + } +} +``` + +### Send list + +```http +POST /instances/store-001/send-list +Content-Type: application/json + +{ + "to": "5516999999999@s.whatsapp.net", + "list": { + "title": "Cardápio", + "text": "Escolha uma opção", + "buttonText": "Ver opções", + "sections": [ + { + "title": "Lanches", + "rows": [ + { + "id": "xburger", + "title": "X-Burger", + "description": "Pão, carne e queijo" + } + ] + } + ] + } +} +``` + +### Logout + +```http +DELETE /instances/store-001/logout +``` + +See full request samples in `C:\Users\felip\BerryProtocol\examples\rest\requests.http`. + +## Storage + +### Auth files + +By default: + +```text +.berry-sessions/ +``` + +Override with: + +- `BERRY_AUTH_FOLDER` + +### SQLite database + +Default: + +```text +berrysdk.db +``` + +Override with: + +- `BERRY_SQLITE_PATH` + +## Docker + +### Run + +```bash +docker compose up --build +``` + +### Defaults + +- `BERRY_HTTP_PORT=3000` +- `BERRY_SQLITE_PATH=/data/berrysdk.db` +- `BERRY_AUTH_FOLDER=/data/auth` + +## Troubleshooting + +### Pairing code failed with logged out / connection failure + +Usually this means the session already has stale or conflicting credentials. + +Recommended fixes: + +1. use a new `sessionId` +2. or call `logout()` for the old session +3. or remove the old session folder from `.berry-sessions/` + +### Pairing code must be 8 digits + +BerryProtocol now enforces this automatically. + +- auto-generated codes are numeric and 8 digits +- custom codes must also be numeric and 8 digits + +### QR does not show in terminal + +Use: + +```bash +npm run dev:cli -- --session my-session connect --auth qr +``` + +### Link payload keeps printing + +That is expected for `link` auth mode. +Use `qr` if you want a renderable terminal QR instead. + +## Examples + +- SDK basic: `C:\Users\felip\BerryProtocol\examples\sdk\basic.ts` +- SDK list: `C:\Users\felip\BerryProtocol\examples\sdk\list.ts` +- REST requests: `C:\Users\felip\BerryProtocol\examples\rest\requests.http` + +## Important note + +BerryProtocol is operational through Baileys as the underlying WhatsApp Web implementation. The Berry layer focuses on API shape, modularity, persistence, and operational ergonomics on top of that real transport. diff --git a/berryprotocol-auth-0.1.0.tgz b/berryprotocol-auth-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..ad6dddb8ec098eb7ec95feb0dd659ccc3efe73fc GIT binary patch literal 24716 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

Cn9fO2|Z7Y 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 Lj=TR00DJ)eY!Qu} literal 0 HcmV?d00001 diff --git a/berryprotocol-core-0.1.0.tgz b/berryprotocol-core-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..373bf89a6530a184b4840071d5b65d835f8d03ad GIT binary patch literal 36282 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
D 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 GECK+qrqX5r literal 0 HcmV?d00001 diff --git a/berryprotocol-events-0.1.0.tgz b/berryprotocol-events-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5099139ec43ef81e87aa900c831f85a57bf97c24 GIT binary patch literal 26371 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 We){|A@29^<{{A;!VW&+1k^un3Gta*O literal 0 HcmV?d00001 diff --git a/berryprotocol-gateway-0.1.0.tgz b/berryprotocol-gateway-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..0094b65fea8c02efd8132f7caf1049412cae11f9 GIT binary patch literal 25952 zcmV)KK)SyliwFP!00002|J=RXZk$Q3F4&LKsOxl@hX@AQS97%o0}SS7E*BOWj0lEH zU9#jQ$yM#WG4DR$FUcjlQqD|e)*j3*l$EK>KNu$lgNKjQCm+B1hj>4)?jPR&{BYkt zUtQ0un|1rQ%l!ucQp(@=eGXKpa{c??xC$VOK>7RM0I3T8{crHM{|WznzJKt$zX4oe zk^u1cudn|<`R{-Hw63n>|MHJ<|IiO^IxUWCYpC9gj+MUvd0N>b5-qx(Wt(m^9nZ2nQ!P}bQ+nUkI&F1aLH?_HX zh&%7s@utRp|K(=9nZobUf4{x^HST`C`uOSg?&0z4`;+NB{`$-9{lipCfBD#Nug`4# zdt6`tdUN~x&0EEu-`)9_pRaDl_2(IHC31E1aQ#*Rx(%RzUMue2EQ9?a-rDxI|Le_r z*nYnM#qVN%jE}c>U*1gP;qL0@!&_UQv-J7R+}8j8t@qd_M$eQ2dZsXbBJ%c?(DTHI z{(Ki7;@_X%dZ|Ai!8bNOhkxxX-m|kLn7w_!2!8HYAFgg5-mDJ2RbCLB#VG{m3yh@k z_D##ym$*0x&f314&ma36#XaG9TYzURAO8G%_^)@d-rD@_t43$Y38J6l?(U89ndq!h zpCO=#&e|+`yIj7Be?R;@ukJtH-oMSlh;h5!i1+6-y^aq)-n`@M^YwvE``@<4+h^~` z?Z;34aMiD_uO7a7CH-)9vl`yZZ-!xIeMcDU9hi^Eysi zzwXz5Gh)6wu`B;@+Qxpo9lyT2x_OAZJk=*L(bn`${hiEyTdNaSVrz3U-);_`lV=q- zzrFkA;o;M}w>7_uhr2KDp19=XcBl5{pRP`L`UP*CvW}l0uC7lKVz<9u#Yr3Gr%Be| zqu<|-U*n{0-R`Q}&v)b0E8_0dt7u;Nhnw5`hpTb_Zv5gmH*wnX-8{t2!}i-L&3yb4 zC-K5b8q&*a|A>q5wWc@z+tr7|-lEr<-#^^m`G*tKO25C4yN6Ssf1j4eIH}o}oAJ+I zZf}3RKUr}+Uc>$6>U#e3)7|Ze`%@I->(BQOC-rlCbANl9?tXLs;0HCqZ<^eF`Sfsm z{PXj}oqs&x@jp)BKaVcj#&UIY|LF*&d4H29_jSzU8$W(_{PQ<)f+V>;Vd9_s;RG@KDel&(BI;ye^Xc== zmvK8!Se^g+9Cu%i@$|fGlvncg)lHn<;tjlh7oSd$9{1rVJp5nRR}Ux5;{M?-PLYF; z&%a^LPYqMDfBqPEr?>n)`bllBZa(}oyVzv&6jp1`=j`~B4kPj7IHe?I(@r~HIf{O_C3_4rHU zSdIBUZsrM(|JNzn_?_Q;hFM*$D;)CL(e{%bze;tB!Rp>>&MTkj7-I*+1qiP1cK{&fBH^CFZka)YMB=lu~7(jzHd z#E#k=#_x{`8yrdN62t1Zx7Xn} vc9FYt16{vA277%htxH{>A2wRs>&2*DU@NyI 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 literal 0 HcmV?d00001 diff --git a/berryprotocol-proto-0.1.0.tgz b/berryprotocol-proto-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c681186529639f78aee5bbb2fbceafeed67d4788 GIT binary patch literal 25880 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 literal 0 HcmV?d00001 diff --git a/berryprotocol-socket-0.1.0.tgz b/berryprotocol-socket-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5a16181d9aab9f40b07b10fd494bc6a87427cba7 GIT binary patch literal 38281 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

Lz#&uA*>H@oZ&GSUIS-Z518AG-k_(`^~SS?Rj zMPJCmD`h3UE1~3$g{L=}PIC?gX|}2)Hn5quOHJPdcobD?Y3T`mQPGYGj7Pg`$}1JoA#XL97x$?Z>y9nF6ZidkN?8 zCB^S-74d+XAj0_=f@63Xg-54x~cf;-v&@PJ*tv z+ssd_cDya651zhZqtLw2UOTeYyG`nj6jDIhT{an|G(q^i9zmSAb;$13BI5R04B%1) z;-)1_+jtK}pg_lN#A;&H6anM?AVDns+X9uyKlg@Y!LJmP5M-j>8ZwC;WEi06aAVsy zh%WTz4KDN=Vhd2fTy+5<*jF+F8^S))zQjXHj$`SK@;3_dh*n@#95qRzyFABCjZJlf z2#akHk)$cR<7KG*6P{G>RSR`!9_=~+yaCO7957VD;1~j5ch)3 zE*!EQ+#0j$UUQs9kZMBs6Bb8-dY;RAg!L+HYIY7rY`=Yx;!(k>So z{_NOk7zc-Ka~N%x`;m1;72$0OJ^=32PzT~swNMOqiniChIbe|wOO*M^7dk=UcbBU= zAnsmB%XAL>lf42X(S(ri-B6j{LP{X2n#V$?>RS64nGKCj1eLkFbEqubHB0LJl|2{C z4}v<15;}y`4cD1-+y`)g=(f;guRq_d&sl}wEO1f8i4T|qb6X&Ws}-O)7t?cVl17bu z+49?i z7hCNTB|8s3KfrPOTx|W?(&T!g>sV~fviFdh@u?g2AUzuOCu!?w)SpiIZU1K6sD@C48A>_RlON80@2H0(yP*I%ptYqzho(!{TFb1xhQL@d8zXbiIB%crFotW*D~e9jtgxvmbP-JFF_|3|`DDRx zrR~e^BJiW_PcW15VVV{oKMOF(vOGO(V?r+14kqNPkiCcPmLcpD_~xnph%&4%=v3)W zki+FCloBrZew3d;>ag(3X_^gezK5iwyvJpAtVYoOl>aMg|p$H zUJ#&ZTlzI-C0(#7W?2&1)<3PEj`H(yK84hG@V^NvI{UwIe>P1A_;Z%A+_SB-;h;eh zkJIAl6qlMQ7dN)}{PnjL^86|T3cN@M!~TNH+v2FeK3B8j<8<;gsFz-6#c=d0?GLWS z>q*)#Qaz)iZ1A=})J6BlX(n`@Oswd?_A<*!H5yEVCY6xPV&uOsr`_qegfgv9pKBAx deDz!B@Bi-q?*H!p?*Hok{sljjbz1;L0su6n5q$sv literal 0 HcmV?d00001 diff --git a/berryprotocol-store-0.1.0.tgz b/berryprotocol-store-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..dccfcf9daba9d89b650431048790862d838db43b GIT binary patch literal 25749 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 Y=l$pX=l$pX=U4vx4_U(ZjsS)M0KCgH3IG5A literal 0 HcmV?d00001 diff --git a/berryprotocol-wa-message-0.1.0.tgz b/berryprotocol-wa-message-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e9d025ea1cb5da400e03902626a5b1d3b64b751c GIT binary patch literal 34699 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 literal 0 HcmV?d00001 diff --git a/berrysdk-auth-0.1.0.tgz b/berrysdk-auth-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3cfa21b592bcd8e55b9467d00adcddc871b57ea6 GIT binary patch literal 1745 zcmV;?1}^y@iwFP!00002|Ls}bQ`#0DcG6s?FfGk79j?;{ zVT(jy%RWiT0X_cr8-2u8sQuFinpG2 zc%FCA>w%_q&+~Todb^;tw}0Suy9Wne547auunSsV>lwy^3&dKU_XJLQo(J;Z|C2$I zEM)?G1`N?CP0r3HLvRl+S(*TcrV;Lk>^2jrGuXm6iZhH6=U{qzOaz`{&PhtAB4rqS z-U0vsF6RR^4O7YmTZAHI+iLlR;gLhk33t^hII@NA)lbB4X$ayJMcZ8Km_)WT!(zdx z1>(-IFxFTSbx4kuxL{}lPEp3^sc1IMmFzWGORBDb;Uu+HtO1U2j0IkA@qH!Sn&AXd zG{bBaYAgB;5x1yyBkYYkYCy7GnqkrGk5ZQh0~`VL7b2pr!L4lMAV(mVV7qAxtUX?l z3!(dp0U^Uk;0PR50E!K(;LZpanBk}oE>X;JnH~kD>LrO4^`lBLipSXk z;FBWisw~MmX*q5_wSnDE6SU&dA6zx2EAHfp@?NRR78fz$^B|>{WL79dVTid>q8LIa z7l?3%X@qG=uw`Jer+A5}GTqw95`+3QDd<}|!ESQokC6W>=k-Yo=NIz-;bE_u|920& zoB#iwC;t}-ey^=^pVN2jyyfVRtM_RtoW7I)&7J;7$8|fLh341@?tE&iQX*-e+D@Xs z$GFpXAcSzB#u%QA2M`9owckScwmpJy)FwWJ#Mko^2v6GAK7`kPJAg2dyliMOe}M3V z#cE^?>-c4$mlfAJgy(|^4EFr?1j318YEL1YTJmEE#~NKx4V+pnWE8pt8myVide}run;Q$6*>GNpV{?msLsi-Bs^ty2UF0cTUb!zqo!Z(AN58<(z7LgrH z;OH*+ci|dL;H3Lxk&zScYVwV`<#IQMJv|C9gQ^o94o-hMs*_x3mW|G&=vS5KGy zr_eg)XAquQrxeM%Y4Z2!oyp&dTbBWOW#M1~;i1ZH2fjS;*Z$xX!q}H!Z{$Hg&aVNI zyyMjc8PTD2K}tD^NQ|KCYh?wgU{{tFH>;GmyZLnVfQCHT?J8xZttvOT$V@AZ zFPk-%vWxa<-)~ftN4misQB;-JI%yXBuu7bh(k`4s=&4=k`YI`%%WW{pGtd&&Htg9Z zmvX5#`Oeo0mD`H0{w&;B;ns>%;f91U0WQjmqMYYhKM$+qj{ViNplT+kYT=|bV3pr$>kw#@FYca0WxRM#& zz~WYn3cRQ>O@FS0Z-TFjLgiEER2}~EHI-3_8iP=(hx&Bw`Rnyps&na9>|3`&*UKN| z|G#JL|LxZ6e|L9(Q~#f1bar;Ozz%q&pU!~#m8uo%i4TnE9MKR*AiUmw@+muG~4UtBOMc~662@bPtrJcLVK=U97iq}B3tlt#DLl25uV5hT{cRt}l%%}3b za=Pkdts0=Ux3fVZWjdg$gI4F)PicA6RC#}iLJS&OrseKfA8^44oxSKwa}&bxFLeX| z26Pd}zv?bXxfipNFS?Zdx`!6{G9{4#s&-i#OflSfdosddj2K?u6(&g*<3t9p$@Pqp zrF@T4Ex}n no-{x_0>9D{d?346J0AZ409Zo&l2WGB3|w4FjZ-R_)j zYiyAS9Lq>bfMN3A_eioW*>M=!!(q02(1+mYzF*z@NODMn@FE!C<%n>xOp*v+yXSo2 zVMn{&-dJ0Mx_L=jU*CX*)%A^br?auqUW0{pr?aX4EY`5D`{QXYG z^0Q})@C<$((P$iFP=BbJi7*ctNd=(^^pjzbggAl`<~$f+;5dm$GJr5hgHsX{K`;lB zgz;ES2l456#9I&sEaEMxjwAxJAQWVR;dCqnO?V4}BmzdlA&hWD0^s8`rA)vnzM)A3 zTm(rJun0a31Hn<6=GM8Z9E?eb6OI9;K{&)qD{fm&2V*g$3=T<(p@%0EWyQmc-N0{* z3L4UQ5uPnCl94iY3qBohG92TRGDu3u%Niy8f~xFdLC1hz-}RHsi+x zC!$dI>#3aN(ZzB|8Fsc7Lz-{_DWd}xj9>>6e3kpqXy)XQ;XvR_)ebZ`=A6*vAZoz~ ziy@6#kPc~r-;776m^ESN7p2E?pmDnh0AK{wSDBq%8b_FQr3)eE+{MYn_4-FgA3vj$ z_xqoB-yZh*M~1x%T9X`^?c%%TgPxqW7N;f)o0nM^js+vhAQLSV2SNnlP$rEghlC59V8*41P=!7}M>-PC<t(-^xk9W<1h=2k(U>fB^ARr8nZYm8sA z8PmEV-GNL)Ah0&yf?MFDAdb5rn9_S+f6{=+q<@x5wP&jO|H`qF*j?HA@|)(=Y8yY^ zTB|f|cHzfcNtk}QkHaBN5*$j9a%qYa=`I(6z{*$KsFRU3^-e`$OgX+oQ%;|!Dyv?X z;SiGvj-;w=ZbsS56q!(Vum$t z5{z)eQF!DuT?^nFjslJxAHhF7aGEZ|mt(?k^fu#J;w@NO$^ZqnN%V`;0w@1YBBxoH zQa-yGk`~EzntGn*3YTOou&t{|X;TyWdlzJ%!Jlx+;7_O&W!8gLeX5dRJ5jZy6zUm0 zApt2@1iDOT6lm&_D$Q;AskDS+F6gKv3s*!8;h$19W+a4&42a;l#z2))Bj7hl2o0@Y zZiqS~HWn#BW0Xpm&&X~XFr0`N(l6e~DnPc|50dYNo2A_DF)?KHN^JoONgK{_u`ED1 zW=Yds3S=lqYWh-SqU2_>$ z`ZU58x0y6D({ic;5e^G@FkY2W;)`Fv9-IXv#*u_yYv0Zkl)(6#fM45l-jlQ|R~7rps;a)$#p zm^8N*mzVzmoQ_$DUk7PQlEKN*;ZA<3c1J<_zjyyjv-^Mc*FEPnS$Nd@f2X~Y-t68lna$N-lf+G`=JneQJvR!7a%dqnbEpkOh zJtMKA{;t45@i>bBpA->a%PYSmYpioz$J~>RVt2Vtwc^n)4Q80mxl`cmRGCW0r!nC} zpC)HyUjV8od0yz+_s^mB%x~hxx3-E zm7&Gy;=R%Eso?``^dGe}nL=Ed_Z_*RkQs(Fd9% zN`=#PitpU%{_eQ$GG}2{HiA2!T52niv`;N(q|ZQHicOz7?Yrs!2S2L*#qU3x>zgzE zzqYaZ)c=2T|DQip_alVRmKuBL_1+dj{(kE%LT_7rg!m%G10951~Q9+fOnJN?;G6z19Ij2bO%!_&k&Uh|ovPC@HOD zWjXhB>=j07_LwR0uXnX(6UqVdBPo9@pWe4l5IV7fSK5so9irs?!`F%=>()Euzf^w7 zr#DLZ)+^-yd&@`uu9nOLIJ8n}^u9tUl&Vflv<2an4pu!Gf}yG>f)F>YH zWS0FS@`YEs9ObyAGUgSlx?hd>0QL84ot3M9PiN0(oGq%La5nWUEAJ3`XE|#$ny+OI zMJOHr8$ua**~*oIF&0X}bY_AHvpO`vJooNs1ij2kd`=M8y>AF2Q*I_IsjF1H@yZlV zUBw?DKke5VyzmgZ_!ff(pyn79_cUk}-EB~%*%WO>wq_A(eCq7h`lL|iz9}%_)?9&V8%VR6&^NOx@=d zz|C@B_pOAR3aRX^?{ciqESP1z@esQ4$|baETDWJO04i=BsQ7c4<$AQKD+ZI1+_zz` z*0*sFp>eP5+iHKlZ>C-08=OJegFUf literal 0 HcmV?d00001 diff --git a/berrysdk-core-0.1.0.tgz b/berrysdk-core-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1bacffaa9f857ab6b3d5973b52ab9e93f2a24b3c GIT binary patch literal 7261 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 literal 0 HcmV?d00001 diff --git a/berrysdk-events-0.1.0.tgz b/berrysdk-events-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4fcf6aab88249c390e1ee8eadb2cbf4702d4445b GIT binary patch literal 3406 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 literal 0 HcmV?d00001 diff --git a/berrysdk-messages-0.1.0.tgz b/berrysdk-messages-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..26eede496297241a0bbbfcee1077da79291aa790 GIT binary patch literal 1689 zcmV;K24?vmiwFP!00002|Ls}ZZreBz^|QZ%(7vRBR+jBt00muiq`0n;q-m3;*|z8d zEipC|OH@TVo3zNkFG%X{OB2L(QNVn#D01e^Avqk%oEZBzctlzO<)THSfZSQvys_G1 z+xFhh4w~0)+jghZ-ban@?w;Ll@9o(;s39x+9n`QJYbaALaMG~t6%5k0ZInO%kV31;p`_`&cmJpy{)S3pAY4N#J5m&`Y!>?qgyi!Cs)3 z|DdfOO@t7lfm6cTdSR+o!O|xU2^Tnw9TbuO&>xCuQ;QaJlBs3aj3fRAKkP(w8 zpwY-km8H4n!;6C^xl^n)B|jlpkPqZeoDk0ONK<1b668*lsackl)88^=uc6qd=;Tf; zL?48BL~8IM2`FBSPo+xPfRbNm0j2?EPqTof%Hu5@GJhJ9NIcC*kZL{Njyn~CMZ9Ka zs9P5sN(IVx(x!!$jw!E?W8$AJ1VkNt>69IhCl4J8fHN&0~?ketmL%-MZLTDo{3+Hfc+()?bLT zY2uR;9LF>oU7Q`i%uXFE#BpO&)?4EA{7;|OHD^&{t>=H+wmUQD|894GbN;WR$X#qi zI3$LHj8{XFB=@b9M3>w2N~%*kjQZ9Tf(#?-QwMpXX1Zn-`@QHTTlEif_v9gvCnXfa@;cX z_u3g_!f=fIog2;BC9?0Kj`=o&ubj zJ@AgrPXM1}?X&3v__7wvtq}ksYgZ+WOMpvR`?pjp&6-dE0_dBU(C;2*AiXywj1+$!hME;cR$+XC ze$@MA7~fogZ;!$t&=>PDmW1It=>*dQZzR$<_*_^87$>wzYld*VXuL9zI)Pu=h zhncx_r92^*cX0S*)C+(M?L$Z4-AR!C;WMYm&!@(+w* zK%YtK5UP))+tVtFYJpZAw-mg4JeA_en4xk65ULp(xpT*6W41XX~{!g5*)kFVE7*3Uhz76Ca?DZ z?VA$?V0btcBi}f{#!?BZErWxHhQJ6PLX;r z)l$0NMZIW@BcBBM-7eROS>)pw59x#odCf~Be==3gcru)Z+(bT30&Yq;8VQofMA$9K z(|YQvH=+JmClnE%#wrmtB=;-|5EnQKa1x-)F%}%+IJ3?zMKHY(M#XKgYSwqkXxW8w z6K%JedFH#Ec{Nd*y?lr7CkzKBN;6^g_gub~RW(sLRcs=eqRe$m`AQRI3B97Xn&C6i ziJX% literal 0 HcmV?d00001 diff --git a/berrysdk-proto-0.1.0.tgz b/berrysdk-proto-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..274f4f724d2c4186e39872566851e851f517f386 GIT binary patch literal 2180 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 literal 0 HcmV?d00001 diff --git a/berrysdk-wa-message-0.1.0.tgz b/berrysdk-wa-message-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..be7e3fd08e685bd6bf4ac2051b1fc84e31e84159 GIT binary patch literal 5907 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 + + +``` + +This was the breakthrough that made the list render on both WhatsApp Web and mobile. + +## Current status + +### Legacy list + +Status: working + +Berry now sends lists through the legacy path by default: + +- file: [packages/wa-message/src/index.ts](C:/Users/felip/BerryProtocol/packages/wa-message/src/index.ts) +- file: [packages/socket/src/index.ts](C:/Users/felip/BerryProtocol/packages/socket/src/index.ts) + +Relevant builder: + +```ts +listMessage: proto.Message.ListMessage.fromObject({ + title, + description, + buttonText, + listType: proto.Message.ListMessage.ListType.SINGLE_SELECT, + footerText, + sections, +}) +``` + +Relevant relay metadata: + +```ts +additionalNodes: [ + { + tag: "biz", + attrs: {}, + content: [ + { + tag: "list", + attrs: { type: "product_list", v: "2" }, + }, + ], + }, +] +``` + +### Reply buttons + +Status: working + +Berry reply buttons render correctly when sent through native-flow interactive payloads using `quick_reply` buttons plus the `biz/interactive/native_flow` relay metadata. + +Working builder: + +```ts +interactivePayloadToMessageContent({ + body: { + text, + }, + footer: footer ? { text: footer } : undefined, + nativeFlowMessage: { + buttons: buttons.map((button) => ({ + name: "quick_reply", + buttonParamsJson: JSON.stringify({ + display_text: button.title, + id: button.id, + }), + })), + messageParamsJson: "", + messageVersion: 1, + }, +}) +``` + +Working relay metadata: + +```ts +additionalNodes: [ + { + tag: "biz", + attrs: {}, + content: [ + { + tag: "interactive", + attrs: { type: "native_flow", v: "1" }, + content: [ + { + tag: "native_flow", + attrs: { v: "9", name: "mixed" }, + }, + ], + }, + ], + }, +] +``` + +Legacy builder kept as historical reference: + +```ts +buttonsMessage: proto.Message.ButtonsMessage.fromObject({ + contentText: text, + footerText: footer, + buttons: [ + { + buttonId, + buttonText: { displayText }, + type: proto.Message.ButtonsMessage.Button.Type.RESPONSE, + }, + ], + headerType: proto.Message.ButtonsMessage.HeaderType.EMPTY, +}) +``` + +### Copy code buttons + +Status: working + +Berry copy-code buttons render correctly when sent through the same native-flow interactive path used for reply buttons, but with the native button name `cta_copy`. + +Working builder: + +```ts +interactivePayloadToMessageContent({ + body: { + text, + }, + footer: footer ? { text: footer } : undefined, + nativeFlowMessage: { + buttons: [ + { + name: "cta_copy", + buttonParamsJson: JSON.stringify({ + display_text: title, + copy_code: code, + }), + }, + ], + messageParamsJson: "", + messageVersion: 1, + }, +}) +``` + +Working relay metadata: + +```ts +additionalNodes: [ + { + tag: "biz", + attrs: {}, + content: [ + { + tag: "interactive", + attrs: { type: "native_flow", v: "1" }, + content: [ + { + tag: "native_flow", + attrs: { v: "9", name: "mixed" }, + }, + ], + }, + ], + }, +] +``` + +### CTA URL buttons + +Status: working + +Berry CTA URL buttons render correctly when sent through the same native-flow interactive path used for reply and copy-code buttons, but with the native button name `cta_url`. + +Working builder: + +```ts +interactivePayloadToMessageContent({ + body: { + text, + }, + footer: footer ? { text: footer } : undefined, + nativeFlowMessage: { + buttons: [ + { + name: "cta_url", + buttonParamsJson: JSON.stringify({ + display_text: title, + url, + merchant_url: url, + }), + }, + ], + messageParamsJson: "", + messageVersion: 1, + }, +}) +``` + +Working relay metadata: + +```ts +additionalNodes: [ + { + tag: "biz", + attrs: {}, + content: [ + { + tag: "interactive", + attrs: { type: "native_flow", v: "1" }, + content: [ + { + tag: "native_flow", + attrs: { v: "9", name: "mixed" }, + }, + ], + }, + ], + }, +] +``` + +### Native-flow interactive messages + +Status: still unstable for current clients + +Berry now uses: + +1. `proto.Message.InteractiveMessage.create(...)` +2. `relayMessage(...)` +3. `additionalNodes`: + +```xml + + + + + +``` + +Current relay metadata: + +```ts +additionalNodes: [ + { + tag: "biz", + attrs: {}, + content: [ + { + tag: "interactive", + attrs: { type: "native_flow", v: "1" }, + content: [ + { + tag: "native_flow", + attrs: { v: "9", name: "mixed" }, + }, + ], + }, + ], + }, +] +``` + +Important note: + +- Berry no longer wraps this interactive payload in `viewOnceMessage` for the native-flow path. +- This change was based on recent reports that the wrapper can break rendering in newer clients. +- The same native-flow relay path is now also used for working reply, copy-code, and CTA URL buttons. + +## Files involved + +### Core builders + +- [packages/wa-message/src/index.ts](C:/Users/felip/BerryProtocol/packages/wa-message/src/index.ts) + +Contains: + +- `listToLegacyListMessageContent` +- `legacyListAdditionalNodes` +- `buttonsPayloadToNativeFlowInteractiveContent` +- `buttonsPayloadToLegacyButtonsMessageContent` +- `interactivePayloadToMessageContent` +- `interactiveNativeFlowAdditionalNodes` + +### Transport + +- [packages/socket/src/index.ts](C:/Users/felip/BerryProtocol/packages/socket/src/index.ts) + +Contains: + +- `sendListMessage(...)` +- `sendReplyButtonsMessage(...)` +- `sendInteractiveMessage(...)` + +These methods call `generateWAMessageFromContent(...)` and then `relayMessage(...)` with the required extra nodes. + +## Why list started working + +The most important changes were: + +1. stop using `interactiveMessage + single_select` as the default list format +2. use legacy `listMessage` +3. set `listType: SINGLE_SELECT` +4. inject the `biz/list` node through `additionalNodes` + +That combination was what finally rendered correctly in current WhatsApp Web and mobile tests. + +## Safe defaults for Berry right now + +Use these as the default public behavior: + +- `list` -> legacy `listMessage` +- `listMessage` -> legacy `listMessage` +- `buttonsMessage` -> native-flow interactive buttons +- `interactiveMessage` -> explicit advanced path only + +Working button variants already validated: + +- `quick_reply` +- `cta_copy` +- `cta_url` + +This keeps the public API stable while steering users into the paths that currently render best. + +## Test flow used + +Primary test script: + +- [examples/sdk/test-berry-new-ways.js](C:/Users/felip/BerryProtocol/examples/sdk/test-berry-new-ways.js) + +Baileys reference test: + +- [examples/sdk/test-baileys-same-session.js](C:/Users/felip/BerryProtocol/examples/sdk/test-baileys-same-session.js) + +Payload comparison: + +- [examples/sdk/compare-berry-vs-baileys.js](C:/Users/felip/BerryProtocol/examples/sdk/compare-berry-vs-baileys.js) + +## Next steps + +Priority order: + +1. document and stabilize the validated button variants +2. add documented helpers for working button types +3. expand to other advanced interactive formats +4. keep a compatibility matrix for Web/Desktop/mobile behavior + +## Practical conclusion + +To make WhatsApp rich messages render in current clients, payload shape alone is not enough. The relay path and the extra business nodes matter. + +The working rule discovered so far is: + +- use legacy list for list UIs +- use native-flow quick reply for reply buttons +- use native-flow `cta_copy` for copy-code buttons +- use native-flow `cta_url` for CTA URL buttons +- use native-flow only as an explicit advanced path with the correct `additionalNodes` diff --git a/examples/rest/requests.http b/examples/rest/requests.http new file mode 100644 index 0000000..810cf34 --- /dev/null +++ b/examples/rest/requests.http @@ -0,0 +1,93 @@ +POST http://localhost:3000/instances +Content-Type: application/json + +{ + "sessionId": "store-001", + "authMethod": "link" +} + +### + +GET http://localhost:3000/instances/store-001/link + +### + +POST http://localhost:3000/instances +Content-Type: application/json + +{ + "sessionId": "store-qr", + "authMethod": "qr" +} + +### + +GET http://localhost:3000/instances/store-qr/qr + +### + +POST http://localhost:3000/instances +Content-Type: application/json + +{ + "sessionId": "store-code", + "authMethod": "pairing_code", + "phoneNumber": "5516999999999" +} + +### + +GET http://localhost:3000/instances/store-code/pairing-code + +### + +POST http://localhost:3000/instances/store-001/send-text +Content-Type: application/json + +{ + "to": "5516999999999@s.whatsapp.net", + "text": "Olá pelo BerryProtocol!" +} + +### + +POST http://localhost:3000/instances/store-001/send-image +Content-Type: application/json + +{ + "to": "5516999999999@s.whatsapp.net", + "media": { + "url": "https://example.com/banner.jpg", + "caption": "Banner BerryProtocol" + } +} + +### + +POST http://localhost:3000/instances/store-001/send-list +Content-Type: application/json + +{ + "to": "5516999999999@s.whatsapp.net", + "list": { + "title": "Cardápio", + "text": "Escolha uma opção", + "buttonText": "Ver opções", + "sections": [ + { + "title": "Lanches", + "rows": [ + { + "id": "xburger", + "title": "X-Burger", + "description": "Pão, carne e queijo" + } + ] + } + ] + } +} + +### + +DELETE http://localhost:3000/instances/store-001/logout diff --git a/examples/sdk/basic.ts b/examples/sdk/basic.ts new file mode 100644 index 0000000..c2a10ae --- /dev/null +++ b/examples/sdk/basic.ts @@ -0,0 +1,16 @@ +import { BerryClient } from "@berrysdk/core"; + +async function main(): Promise { + const client = new BerryClient({ + sessionId: "store-001", + }); + + client.on("qr", (qr) => console.log(qr)); + client.on("message.received", (message) => console.log(message)); + + await client.connect(); + + await client.sendText("5516999999999@s.whatsapp.net", "Olá pelo BerryProtocol!"); +} + +void main(); diff --git a/examples/sdk/berryotp.js b/examples/sdk/berryotp.js new file mode 100644 index 0000000..52fdd4d --- /dev/null +++ b/examples/sdk/berryotp.js @@ -0,0 +1,389 @@ +import crypto from "node:crypto"; +import { EventEmitter } from "node:events"; + +export class BerryOTP extends EventEmitter { + constructor(client, options = {}) { + super(); + + if (!client) { + throw new Error("BerryOTP precisa de uma instância de BerryClient."); + } + + this.client = client; + + this.options = { + issuer: options.issuer ?? "BerryOTP", + codeLength: options.codeLength ?? 6, + ttlMs: options.ttlMs ?? 5 * 60 * 1000, + footer: options.footer ?? "Este código dura {minutes} minutos.", + editOnExpire: options.editOnExpire ?? true, + mode: options.mode ?? "stable", + maxAttempts: options.maxAttempts ?? 5, + rateLimitMs: options.rateLimitMs ?? 60 * 1000, + autoReplyOnDenied: options.autoReplyOnDenied ?? true, + }; + + this.records = new Map(); + this.lastSentByTo = new Map(); + + this._bindIncomingMessages(); + this._startCleaner(); + } + + async send(to, input = {}) { + this._assertTo(to); + this._checkRateLimit(to); + + const otpId = this._id(); + const ttlMs = input.ttlMs ?? this.options.ttlMs; + const code = String(input.code ?? this._generateCode(this.options.codeLength)); + const expiresAt = Date.now() + ttlMs; + + const salt = this._id(); + const codeHash = this._hashCode(code, salt); + + const purpose = input.purpose ?? "verificação"; + const footer = this._formatFooter(input.footer ?? this.options.footer, ttlMs); + + const text = [ + "🔐 Código de verificação", + "", + `Use o código abaixo para ${purpose}:`, + "", + `*${code}*`, + ].join("\n"); + + let sent; + + if (this.options.mode === "experimental-copy-code") { + sent = await this._sendExperimentalCopyCode(to, { + otpId, + text, + footer, + code, + }); + } else { + sent = await this._sendStableReplyButton(to, { + otpId, + text, + footer, + }); + } + + const messageId = sent?.id ?? sent?.key?.id ?? sent?.messageId; + + if (!messageId) { + throw new Error("Não foi possível obter o messageId da mensagem OTP enviada."); + } + + const record = { + id: otpId, + to, + codeHash, + salt, + messageId, + expiresAt, + status: "active", + attempts: 0, + metadata: input.metadata ?? {}, + createdAt: Date.now(), + }; + + this.records.set(otpId, record); + this.lastSentByTo.set(to, Date.now()); + + setTimeout(() => { + this._expire(otpId).catch((error) => { + this.emit("error", error); + }); + }, ttlMs); + + return { + id: otpId, + to, + code, + expiresAt: new Date(expiresAt), + messageId, + status: "sent", + }; + } + + async verify(to, code) { + this._assertTo(to); + + const record = this._findActiveByCode(to, code); + + if (!record) { + return { valid: false, reason: "not_found" }; + } + + if (record.status !== "active") { + return { valid: false, reason: record.status }; + } + + if (Date.now() > record.expiresAt) { + await this._expire(record.id); + return { valid: false, reason: "expired" }; + } + + if (record.attempts >= this.options.maxAttempts) { + record.status = "blocked"; + return { valid: false, reason: "too_many_attempts" }; + } + + const ok = this._safeCompare( + this._hashCode(String(code), record.salt), + record.codeHash, + ); + + record.attempts += 1; + + if (!ok) { + return { valid: false, reason: "invalid_code" }; + } + + record.status = "used"; + record.usedAt = Date.now(); + + this.emit("used", { + otpId: record.id, + to: record.to, + metadata: record.metadata, + }); + + return { + valid: true, + metadata: record.metadata, + }; + } + + async _sendStableReplyButton(to, { otpId, text, footer }) { + return this.client.sendMessage(to, { + buttonsMessage: { + text, + footer, + buttons: [ + { + id: `berryotp:not_requested:${otpId}`, + title: "Não pedi nenhum código", + }, + ], + }, + }); + } + + async _sendExperimentalCopyCode(to, { otpId, text, footer, code }) { + return this.client.sendMessage(to, { + buttonsMessage: { + text, + footer, + buttons: [ + { + id: `berryotp:copy:${otpId}`, + title: "Copiar código", + kind: "copy_code", + code, + }, + { + id: `berryotp:not_requested:${otpId}`, + title: "Não pedi nenhum código", + kind: "quick_reply", + }, + ], + }, + }); + } + + async _expire(otpId) { + const record = this.records.get(otpId); + + if (!record || record.status !== "active") { + return; + } + + if (Date.now() < record.expiresAt) { + return; + } + + record.status = "expired"; + record.expiredAt = Date.now(); + + this.emit("expired", { + otpId: record.id, + to: record.to, + metadata: record.metadata, + }); + + if (!this.options.editOnExpire) { + return; + } + + const expiredText = [ + "🔒 Código expirado", + "", + "Este código não é mais válido.", + "Solicite um novo código para continuar.", + ].join("\n"); + + try { + await this._editMessage(record.to, record.messageId, expiredText); + } catch (error) { + this.emit("warning", { + type: "edit_failed", + otpId: record.id, + error, + }); + } + } + + async _editMessage(to, messageId, text) { + if (typeof this.client.editMessage === "function") { + return this.client.editMessage(to, messageId, { text }); + } + + return this.client.sendMessage(to, { + text, + edit: messageId, + }); + } + + _bindIncomingMessages() { + if (typeof this.client.on !== "function") { + return; + } + + this.client.on("message.received", async (message) => { + const buttonId = + message?.buttonId ?? + message?.selectedButtonId ?? + message?.message?.buttonsResponseMessage?.selectedButtonId; + + if (!buttonId?.startsWith("berryotp:not_requested:")) { + return; + } + + const otpId = buttonId.replace("berryotp:not_requested:", ""); + const record = this.records.get(otpId); + + if (!record || record.status !== "active") { + return; + } + + record.status = "denied"; + record.deniedAt = Date.now(); + + this.emit("denied", { + otpId, + to: record.to, + metadata: record.metadata, + }); + + if (this.options.autoReplyOnDenied) { + await this.client.sendMessage(record.to, { + text: "Entendido. Esse código foi cancelado e não poderá ser usado.", + }); + } + }); + } + + _findActiveByCode(to, code) { + for (const record of this.records.values()) { + if (record.to !== to || record.status !== "active") { + continue; + } + + if (Date.now() > record.expiresAt) { + continue; + } + + const hash = this._hashCode(String(code), record.salt); + + if (this._safeCompare(hash, record.codeHash)) { + return record; + } + } + + return null; + } + + _checkRateLimit(to) { + const lastSentAt = this.lastSentByTo.get(to); + + if (!lastSentAt) { + return; + } + + const elapsed = Date.now() - lastSentAt; + + if (elapsed < this.options.rateLimitMs) { + const waitMs = this.options.rateLimitMs - elapsed; + throw new Error(`Aguarde ${Math.ceil(waitMs / 1000)}s antes de enviar outro OTP.`); + } + } + + _generateCode(length) { + let code = ""; + + for (let i = 0; i < length; i += 1) { + code += crypto.randomInt(0, 10).toString(); + } + + return code; + } + + _hashCode(code, salt) { + return crypto + .createHash("sha256") + .update(`${salt}:${code}`) + .digest("hex"); + } + + _safeCompare(a, b) { + const left = Buffer.from(String(a)); + const right = Buffer.from(String(b)); + + if (left.length !== right.length) { + return false; + } + + return crypto.timingSafeEqual(left, right); + } + + _formatFooter(template, ttlMs) { + const minutes = Math.max(1, Math.ceil(ttlMs / 60000)); + + return String(template) + .replaceAll("{minutes}", String(minutes)) + .replaceAll("{seconds}", String(Math.ceil(ttlMs / 1000))); + } + + _assertTo(to) { + if (!to || typeof to !== "string") { + throw new Error("Informe o destino do WhatsApp."); + } + } + + _id() { + return crypto.randomBytes(16).toString("hex"); + } + + _startCleaner() { + this.cleaner = setInterval(() => { + const now = Date.now(); + + for (const [id, record] of this.records.entries()) { + const keepUsedForMs = 10 * 60 * 1000; + + if (record.status !== "active" && now - record.createdAt > keepUsedForMs) { + this.records.delete(id); + } + } + }, 60 * 1000); + + if (typeof this.cleaner.unref === "function") { + this.cleaner.unref(); + } + } +} + +export default BerryOTP; \ No newline at end of file diff --git a/examples/sdk/compare-berry-vs-baileys.js b/examples/sdk/compare-berry-vs-baileys.js new file mode 100644 index 0000000..208002b --- /dev/null +++ b/examples/sdk/compare-berry-vs-baileys.js @@ -0,0 +1,177 @@ +import { generateWAMessageFromContent } from "baileys"; +import { + buttonsPayloadToLegacyButtonsMessageContent, + buttonsPayloadToTemplateMessageContent, + interactivePayloadToMessageContent, + listToLegacyListMessageContent, + listToInteractiveMessageContent, + listToInteractivePayload, +} from "../../packages/wa-message/dist/index.js"; + +const recipient = process.env.BERRY_TEST_TO ?? "5511999999999@s.whatsapp.net"; +const userJid = process.env.BERRY_TEST_USER_JID ?? "5511999999999:31@s.whatsapp.net"; + +const sampleList = { + title: "Menu BerryProtocol", + text: "Escolha uma opcao na lista", + footer: "BerryProtocol", + buttonText: "Abrir lista", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pao, carne e queijo", + }, + { + id: "xbacon", + title: "X-Bacon", + description: "Com bacon crocante", + }, + ], + }, + ], +}; + +const sampleButtons = { + text: "Escolha uma opcao", + footer: "BerryProtocol", + buttons: [ + { id: "reply_1", title: "Opcao 1" }, + { id: "reply_2", title: "Opcao 2" }, + ], +}; + +function printComparison(label, berryContent, baileysContent) { + const berry = generateWAMessageFromContent(recipient, berryContent, { userJid }); + const baileys = generateWAMessageFromContent(recipient, baileysContent, { userJid }); + + const berryJson = JSON.stringify(berry.message, null, 2); + const baileysJson = JSON.stringify(baileys.message, null, 2); + + console.log(`\n=== ${label} ===`); + console.log("\nBerry message:"); + console.log(berryJson); + console.log("\nBaileys message:"); + console.log(baileysJson); + console.log("\nEqual:", berryJson === baileysJson); +} + +function main() { + const berryInteractiveList = listToInteractiveMessageContent(sampleList); + const berryLegacyList = listToLegacyListMessageContent(sampleList); + const baileysInteractiveList = { + viewOnceMessage: { + message: { + messageContextInfo: { + deviceListMetadata: {}, + deviceListMetadataVersion: 2, + }, + interactiveMessage: { + header: { + title: sampleList.title, + hasMediaAttachment: false, + }, + body: { + text: sampleList.text, + }, + footer: { + text: sampleList.footer, + }, + nativeFlowMessage: { + buttons: [ + { + name: "single_select", + buttonParamsJson: JSON.stringify({ + title: sampleList.buttonText, + sections: sampleList.sections, + }), + }, + ], + messageParamsJson: "", + messageVersion: 1, + }, + }, + }, + }, + }; + const baileysLegacyList = { + listMessage: { + title: sampleList.title, + description: sampleList.text, + buttonText: sampleList.buttonText, + footerText: sampleList.footer, + sections: sampleList.sections.map((section) => ({ + title: section.title, + rows: section.rows.map((row) => ({ + rowId: row.id, + title: row.title, + description: row.description ?? "", + })), + })), + }, + }; + + const berryTemplateButtons = buttonsPayloadToTemplateMessageContent(sampleButtons); + const baileysTemplateButtons = { + templateMessage: { + hydratedTemplate: { + hydratedContentText: sampleButtons.text, + hydratedFooterText: sampleButtons.footer, + hydratedButtons: [ + { + index: 0, + quickReplyButton: { + displayText: "Opcao 1", + id: "reply_1", + }, + }, + { + index: 1, + quickReplyButton: { + displayText: "Opcao 2", + id: "reply_2", + }, + }, + ], + }, + }, + }; + const berryLegacyButtons = buttonsPayloadToLegacyButtonsMessageContent(sampleButtons); + const baileysLegacyButtons = { + buttonsMessage: { + contentText: sampleButtons.text, + footerText: sampleButtons.footer, + buttons: [ + { + buttonId: "reply_1", + buttonText: { + displayText: "Opcao 1", + }, + type: "RESPONSE", + }, + { + buttonId: "reply_2", + buttonText: { + displayText: "Opcao 2", + }, + type: "RESPONSE", + }, + ], + headerType: "EMPTY", + }, + }; + + const berryInteractive = interactivePayloadToMessageContent(listToInteractivePayload(sampleList)); + const baileysInteractive = baileysInteractiveList; + + printComparison("list legacy", berryLegacyList, baileysLegacyList); + printComparison("list interactive", berryInteractiveList, baileysInteractiveList); + printComparison("buttons legacy", berryLegacyButtons, baileysLegacyButtons); + printComparison("buttons template", berryTemplateButtons, baileysTemplateButtons); + printComparison("interactive", berryInteractive, baileysInteractive); +} + +main(); diff --git a/examples/sdk/list-and-reply.js b/examples/sdk/list-and-reply.js new file mode 100644 index 0000000..f61ed84 --- /dev/null +++ b/examples/sdk/list-and-reply.js @@ -0,0 +1,142 @@ +import { BerryClient } from "../../packages/core/dist/index.js"; +import qrcode from "qrcode-terminal"; + +const sessionId = process.env.BERRY_TEST_SESSION_ID ?? "test-session-qr"; +const recipient = process.env.BERRY_TEST_TO ?? "5519997530219@s.whatsapp.net"; +const authMethod = process.env.BERRY_TEST_AUTH ?? "qr"; +const pairingPhone = process.env.BERRY_TEST_PHONE; + +function waitForOpen(client) { + return new Promise((resolve) => { + client.once("connection.open", (state) => { + console.log("CONNECTED:", state); + resolve(state); + }); + }); +} + +async function safeTest(name, fn) { + try { + console.log(`\nTesting: ${name}`); + const result = await fn(); + console.log(`OK: ${name}`, result ?? ""); + } catch (error) { + console.log(`ERROR in ${name}:`, error instanceof Error ? error.message : error); + } +} + +function buildClient() { + return new BerryClient({ + sessionId, + authFolder: process.env.BERRY_AUTH_FOLDER, + auth: { + method: authMethod, + phoneNumber: pairingPhone, + }, + }); +} + +async function connectClient(client) { + if (authMethod === "pairing_code") { + if (!pairingPhone) { + throw new Error("Define BERRY_TEST_PHONE para usar pairing_code."); + } + + await client.connectWithPairingCode(pairingPhone); + return; + } + + if (authMethod === "link") { + await client.connectWithLink(); + return; + } + + await client.connectWithQr(); +} + +async function main() { + const client = buildClient(); + + client.on("auth.link", ({ value }) => { + console.log("\nLink gerado:"); + console.log(value); + }); + + client.on("auth.qr", ({ value }) => { + console.log("\nEscaneie este QR Code:"); + qrcode.generate(value, { small: true }); + }); + + client.on("auth.pairing_code", ({ code }) => { + console.log(`\nPairing code: ${code}`); + }); + + client.on("auth.success", (data) => { + console.log("AUTH SUCCESS:", data); + }); + + client.on("auth.error", (error) => { + console.log("AUTH ERROR:", error); + }); + + client.on("connection.close", (state) => { + console.log("DISCONNECTED:", state); + }); + + client.on("message.received", (message) => { + console.log("MESSAGE RECEIVED:", message); + }); + + console.log(`Connecting with auth=${authMethod}...`); + const opened = waitForOpen(client); + await connectClient(client); + await opened; + + await safeTest("sendMessage(list)", () => + client.sendMessage(recipient, { + list: { + title: "Menu BerryProtocol", + text: "Escolha uma opcao na lista", + footer: "BerryProtocol", + buttonText: "Abrir lista", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pao, carne e queijo", + }, + { + id: "xbacon", + title: "X-Bacon", + description: "Com bacon crocante", + }, + ], + }, + ], + }, + }), + ); + + await safeTest("sendMessage(reply button)", () => + client.sendMessage(recipient, { + buttonsMessage: { + text: "Escolha uma opcao", + footer: "BerryProtocol", + buttons: [ + { id: "reply_1", title: "Opcao 1" }, + { id: "reply_2", title: "Opcao 2" }, + ], + }, + }), + ); + + console.log("\nDone."); +} + +main().catch((error) => { + console.error("Fatal error:", error); + process.exitCode = 1; +}); diff --git a/examples/sdk/list.ts b/examples/sdk/list.ts new file mode 100644 index 0000000..fd1f508 --- /dev/null +++ b/examples/sdk/list.ts @@ -0,0 +1,29 @@ +import { BerryClient } from "@berrysdk/core"; + +async function main(): Promise { + const client = new BerryClient({ + sessionId: "store-001", + }); + + await client.connect(); + + await client.sendList("5516999999999@s.whatsapp.net", { + title: "Cardápio", + text: "Escolha uma opção", + buttonText: "Ver opções", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pão, carne e queijo", + }, + ], + }, + ], + }); +} + +void main(); diff --git a/examples/sdk/test-all.js b/examples/sdk/test-all.js new file mode 100644 index 0000000..480f864 --- /dev/null +++ b/examples/sdk/test-all.js @@ -0,0 +1,191 @@ +import { BerryClient } from "../../packages/core/dist/index.js"; +import qrcode from "qrcode-terminal"; + +const sessionId = process.env.BERRY_TEST_SESSION_ID ?? "test-session-qr"; +const recipient = process.env.BERRY_TEST_TO ?? "55199991466943@s.whatsapp.net"; +const authMethod = process.env.BERRY_TEST_AUTH ?? "qr"; +const pairingPhone = process.env.BERRY_TEST_PHONE; + +function waitForOpen(client) { + return new Promise((resolve) => { + client.once("connection.open", (state) => { + console.log("🟢 CONECTADO:", state); + resolve(state); + }); + }); +} + +async function safeTest(name, fn) { + try { + console.log(`\n🧪 Testando: ${name}`); + const result = await fn(); + console.log(`✅ OK: ${name}`, result ?? ""); + } catch (error) { + console.log(`❌ ERRO em ${name}:`, error instanceof Error ? error.message : error); + } +} + +function buildClient() { + return new BerryClient({ + sessionId, + authFolder: process.env.BERRY_AUTH_FOLDER, + auth: { + method: authMethod, + phoneNumber: pairingPhone, + }, + }); +} + +async function connectClient(client) { + if (authMethod === "pairing_code") { + if (!pairingPhone) { + throw new Error("Define BERRY_TEST_PHONE para usar pairing_code."); + } + + await client.connectWithPairingCode(pairingPhone); + return; + } + + if (authMethod === "link") { + await client.connectWithLink(); + return; + } + + await client.connectWithQr(); +} + +async function main() { + const client = buildClient(); + + client.on("auth.link", ({ value }) => { + console.log("\n🔗 Link gerado:"); + console.log(value); + }); + + client.on("auth.qr", ({ value }) => { + console.log("\n📱 Escaneie este QR Code:"); + qrcode.generate(value, { small: true }); + }); + + client.on("auth.pairing_code", ({ code }) => { + console.log(`\n🔢 Pairing code: ${code}`); + }); + + client.on("auth.success", (data) => { + console.log("✅ AUTH SUCCESS:", data); + }); + + client.on("auth.error", (error) => { + console.log("❌ AUTH ERROR:", error); + }); + + client.on("connection.close", (state) => { + console.log("🔴 DESCONECTADO:", state); + }); + + client.on("message.received", (message) => { + console.log("📩 MESSAGE RECEIVED:", message); + }); + + console.log(`🚀 Conectando com auth=${authMethod}...`); + const opened = waitForOpen(client); + await connectClient(client); + await opened; + + await safeTest("sendText", () => + client.sendText(recipient, "🚀 Teste de texto BerryProtocol"), + ); + + await safeTest("sendImage", () => + client.sendImage(recipient, { + url: "https://picsum.photos/600/400", + caption: "🖼 Teste de imagem BerryProtocol", + }), + ); + + await safeTest("sendAudio", () => + client.sendAudio(recipient, { + url: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3", + mimetype: "audio/mpeg", + }), + ); + + await safeTest("sendDocument", () => + client.sendDocument(recipient, { + url: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", + fileName: "teste.pdf", + mimetype: "application/pdf", + caption: "📄 Teste de documento BerryProtocol", + }), + ); + + await safeTest("sendButtons", () => + client.sendButtons(recipient, { + text: "Escolha uma opção", + footer: "BerryProtocol", + buttons: [ + { id: "btn_1", title: "Opção 1" }, + { id: "btn_2", title: "Opção 2" }, + ], + }), + ); + + await safeTest("sendList", () => + client.sendList(recipient, { + title: "🍔 Cardápio", + text: "Escolha um lanche", + footer: "BerryProtocol", + buttonText: "Abrir lista", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pão, carne e queijo", + }, + { + id: "xbacon", + title: "X-Bacon", + description: "Com bacon crocante", + }, + ], + }, + ], + }), + ); + + await safeTest("sendLocation", () => + client.sendLocation(recipient, { + latitude: -21.7104, + longitude: -47.478, + name: "BerryProtocol HQ", + address: "Santa Rita do Passa Quatro - SP", + }), + ); + + await safeTest("sendContact", () => + client.sendContact(recipient, { + displayName: "BerryProtocol", + vcard: [ + "BEGIN:VCARD", + "VERSION:3.0", + "FN:BerryProtocol", + "TEL;type=CELL;type=VOICE;waid=5511999999999:+55 11 99999-9999", + "END:VCARD", + ].join("\n"), + }), + ); + + await safeTest("subscribePresence", () => client.subscribePresence(recipient)); + await safeTest("sendPresence", () => client.sendPresence("composing", recipient)); + await safeTest("fetchGroups", () => client.fetchGroups()); + + console.log("\n✅ Todos os testes executados."); +} + +main().catch((error) => { + console.error("❌ Falha fatal:", error); + process.exitCode = 1; +}); diff --git a/examples/sdk/test-baileys-same-session.js b/examples/sdk/test-baileys-same-session.js new file mode 100644 index 0000000..751800d --- /dev/null +++ b/examples/sdk/test-baileys-same-session.js @@ -0,0 +1,364 @@ +import { mkdir } from "node:fs/promises"; +import { join } from "node:path"; +import pino from "pino"; +import qrcode from "qrcode-terminal"; +import makeWASocket, { + fetchLatestBaileysVersion, + generateWAMessageFromContent, + makeCacheableSignalKeyStore, + proto, + useMultiFileAuthState, +} from "baileys"; + +const sessionId = process.env.BAILEYS_TEST_SESSION_ID ?? "baileys-test-session"; +const recipient = process.env.BAILEYS_TEST_TO ?? process.env.BERRY_TEST_TO ?? "55199991466943@s.whatsapp.net"; +const authBaseFolder = + process.env.BAILEYS_AUTH_FOLDER ?? join(process.cwd(), ".baileys-sessions"); +const sessionDir = join(authBaseFolder, sessionId); +const logger = pino({ level: "silent" }); +const shouldDebugGeneratedMessage = process.env.BAILEYS_DEBUG_WA_MESSAGE === "1"; + +async function ensureSessionDir() { + await mkdir(sessionDir, { recursive: true }); +} + +function waitForOpen(sock) { + return new Promise((resolve, reject) => { + sock.ev.on("connection.update", (update) => { + if (update.qr) { + console.log("\nEscaneie este QR Code:"); + qrcode.generate(update.qr, { small: true }); + } + + if (update.connection === "open") { + console.log("CONNECTED"); + resolve(); + } + + if (update.connection === "close") { + reject(update.lastDisconnect?.error ?? new Error("Connection closed")); + } + }); + }); +} + +async function createSocket() { + await ensureSessionDir(); + + const { state, saveCreds } = await useMultiFileAuthState(sessionDir); + const { version } = await fetchLatestBaileysVersion(); + + const sock = makeWASocket({ + version, + logger, + auth: { + creds: state.creds, + keys: makeCacheableSignalKeyStore(state.keys, logger), + }, + printQRInTerminal: false, + syncFullHistory: false, + markOnlineOnConnect: false, + shouldSyncHistoryMessage: () => false, + }); + + sock.ev.on("creds.update", saveCreds); + return sock; +} + +async function safeSend(name, fn) { + try { + console.log(`\nTesting: ${name}`); + const result = await fn(); + console.log(`OK: ${name}`, result?.key?.id ?? ""); + } catch (error) { + console.error(`ERROR in ${name}:`, error instanceof Error ? error.message : error); + } +} + +async function relayProtoContent(sock, content) { + const fullMessage = generateWAMessageFromContent(recipient, content, { + userJid: sock.user.id, + }); + + if (shouldDebugGeneratedMessage) { + console.log("\nBAILEYS GENERATED MESSAGE:"); + console.log(JSON.stringify(fullMessage.message, null, 2)); + } + + await sock.relayMessage(recipient, fullMessage.message, { + messageId: fullMessage.key.id, + }); + + return fullMessage; +} + +async function sendText(sock) { + const result = await sock.sendMessage(recipient, { + text: "Baileys text delivery probe", + }); + + if (shouldDebugGeneratedMessage) { + console.log("\nBAILEYS GENERATED TEXT MESSAGE:"); + console.log(JSON.stringify(result.message, null, 2)); + } + + return result; +} + +async function sendList(sock) { + return relayProtoContent(sock, { + viewOnceMessage: { + message: { + messageContextInfo: { + deviceListMetadata: {}, + deviceListMetadataVersion: 2, + }, + interactiveMessage: proto.Message.InteractiveMessage.fromObject({ + header: { + title: "Menu Baileys", + hasMediaAttachment: false, + }, + body: { + text: "Escolha uma opcao na lista", + }, + footer: { + text: "Baileys direto", + }, + nativeFlowMessage: { + buttons: [ + { + name: "single_select", + buttonParamsJson: JSON.stringify({ + title: "Abrir lista", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pao, carne e queijo", + }, + { + id: "xbacon", + title: "X-Bacon", + description: "Com bacon crocante", + }, + ], + }, + ], + }), + }, + ], + messageParamsJson: "", + messageVersion: 1, + }, + }), + }, + }, + }); +} + +async function sendHydratedQuickReplyButtons(sock) { + return relayProtoContent(sock, { + templateMessage: { + hydratedTemplate: { + hydratedContentText: "Quick reply buttons", + hydratedFooterText: "Baileys direto", + hydratedButtons: [ + { + index: 0, + quickReplyButton: { + displayText: "Opcao 1", + id: "reply_1", + }, + }, + { + index: 1, + quickReplyButton: { + displayText: "Opcao 2", + id: "reply_2", + }, + }, + ], + }, + }, + }); +} + +async function sendHydratedUrlButton(sock) { + return relayProtoContent(sock, { + templateMessage: { + hydratedTemplate: { + hydratedContentText: "URL button", + hydratedFooterText: "Baileys direto", + hydratedButtons: [ + { + index: 0, + urlButton: { + displayText: "Abrir site", + url: "https://example.com", + }, + }, + ], + }, + }, + }); +} + +async function sendHydratedCallButton(sock) { + return relayProtoContent(sock, { + templateMessage: { + hydratedTemplate: { + hydratedContentText: "Call button", + hydratedFooterText: "Baileys direto", + hydratedButtons: [ + { + index: 0, + callButton: { + displayText: "Ligar agora", + phoneNumber: "+5511999999999", + }, + }, + ], + }, + }, + }); +} + +async function sendHydratedMixedButtons(sock) { + return relayProtoContent(sock, { + templateMessage: { + hydratedTemplate: { + hydratedContentText: "Mixed buttons", + hydratedFooterText: "Baileys direto", + hydratedButtons: [ + { + index: 0, + quickReplyButton: { + displayText: "Resposta", + id: "mixed_reply_1", + }, + }, + { + index: 1, + urlButton: { + displayText: "Site", + url: "https://example.com", + }, + }, + { + index: 2, + callButton: { + displayText: "Ligar", + phoneNumber: "+5511999999999", + }, + }, + ], + }, + }, + }); +} + +async function sendLegacyButtonsMessage(sock) { + return relayProtoContent(sock, { + buttonsMessage: proto.Message.ButtonsMessage.fromObject({ + contentText: "Legacy buttonsMessage", + footerText: "Baileys direto", + headerType: proto.Message.ButtonsMessage.HeaderType.EMPTY, + buttons: [ + { + buttonId: "legacy_1", + buttonText: { displayText: "Opcao 1" }, + type: proto.Message.ButtonsMessage.Button.Type.RESPONSE, + }, + { + buttonId: "legacy_2", + buttonText: { displayText: "Opcao 2" }, + type: proto.Message.ButtonsMessage.Button.Type.RESPONSE, + }, + ], + }), + }); +} + +async function sendLegacyListMessage(sock) { + return relayProtoContent(sock, { + listMessage: proto.Message.ListMessage.fromObject({ + title: "Legacy listMessage", + description: "Escolha uma opcao na lista", + buttonText: "Abrir lista", + footerText: "Baileys direto", + sections: [ + { + title: "Lanches", + rows: [ + { + rowId: "xburger", + title: "X-Burger", + description: "Pao, carne e queijo", + }, + { + rowId: "xbacon", + title: "X-Bacon", + description: "Com bacon crocante", + }, + ], + }, + ], + }), + }); +} + +async function sendButtonsMessageNativeFlow(sock) { + return relayProtoContent(sock, { + buttonsMessage: proto.Message.ButtonsMessage.fromObject({ + contentText: "ButtonsMessage native flow", + footerText: "Baileys direto", + headerType: proto.Message.ButtonsMessage.HeaderType.EMPTY, + buttons: [ + { + buttonId: "native_url_1", + buttonText: { displayText: "Abrir site" }, + type: proto.Message.ButtonsMessage.Button.Type.NATIVE_FLOW, + nativeFlowInfo: { + name: "cta_url", + paramsJson: JSON.stringify({ + display_text: "Abrir site", + url: "https://example.com", + }), + }, + }, + ], + }), + }); +} + +async function main() { + console.log(`Usando sessao do Baileys: ${sessionId}`); + console.log(`Pasta da sessao do Baileys: ${sessionDir}`); + console.log(`Destino: ${recipient}`); + console.log("Este teste usa uma sessao separada do BerryProtocol.\n"); + + const sock = await createSocket(); + await waitForOpen(sock); + + await safeSend("baileys text", () => sendText(sock)); + await safeSend("baileys list", () => sendList(sock)); + await safeSend("hydrated quick reply buttons", () => sendHydratedQuickReplyButtons(sock)); + await safeSend("hydrated url button", () => sendHydratedUrlButton(sock)); + await safeSend("hydrated call button", () => sendHydratedCallButton(sock)); + await safeSend("hydrated mixed buttons", () => sendHydratedMixedButtons(sock)); + await safeSend("legacy listMessage", () => sendLegacyListMessage(sock)); + await safeSend("legacy buttonsMessage", () => sendLegacyButtonsMessage(sock)); + await safeSend("buttonsMessage native flow", () => sendButtonsMessageNativeFlow(sock)); + + console.log("\nDone."); + sock.end(new Error("done")); + sock.ws.close(); +} + +main().catch((error) => { + console.error("Fatal error:", error); + process.exitCode = 1; +}); diff --git a/examples/sdk/test-berry-new-ways.js b/examples/sdk/test-berry-new-ways.js new file mode 100644 index 0000000..9945eb4 --- /dev/null +++ b/examples/sdk/test-berry-new-ways.js @@ -0,0 +1,317 @@ +import { BerryClient } from "../../packages/core/dist/index.js"; +import { + buttonsPayloadToLegacyButtonsMessageContent, + buttonsPayloadToNativeFlowInteractiveContent, + buttonsPayloadToTemplateMessageContent, + interactivePayloadToMessageContent, + listToLegacyListMessageContent, + listToInteractiveMessageContent, + listToInteractivePayload, +} from "../../packages/wa-message/dist/index.js"; +import qrcode from "qrcode-terminal"; + +const sessionId = process.env.BERRY_TEST_SESSION_ID ?? "test-session-qr"; +const recipient = process.env.BERRY_TEST_TO; +const authMethod = process.env.BERRY_TEST_AUTH ?? "qr"; +const pairingPhone = process.env.BERRY_TEST_PHONE; + +const sampleList = { + title: "Menu BerryProtocol", + text: "Escolha uma opcao na lista", + footer: "BerryProtocol", + buttonText: "Abrir lista", + sections: [ + { + title: "Lanches", + rows: [ + { + id: "xburger", + title: "X-Burger", + description: "Pao, carne e queijo", + }, + { + id: "xbacon", + title: "X-Bacon", + description: "Com bacon crocante", + }, + ], + }, + ], +}; + +const sampleButtons = { + text: "Escolha uma opcao", + footer: "BerryProtocol", + buttons: [ + { id: "reply_1", title: "Opcao 1" }, + { id: "reply_2", title: "Opcao 2" }, + ], +}; + +const sampleCopyCodeButtons = { + text: "Use este cupom", + footer: "BerryProtocol", + buttons: [ + { id: "copy_code_1", title: "Copiar cupom", kind: "copy_code", code: "BERRY10" }, + ], +}; + +const sampleUrlButtons = { + text: "Acesse nosso site", + footer: "BerryProtocol", + buttons: [ + { + id: "cta_url_1", + title: "Abrir site", + kind: "cta_url", + url: "https://example.com", + }, + ], +}; + +function waitForOpen(client) { + return new Promise((resolve) => { + client.once("connection.open", (state) => { + console.log("CONNECTED:", state); + resolve(state); + }); + }); +} + +function waitForAck(client, messageId, timeoutMs = 15000) { + return new Promise((resolve, reject) => { + let settled = false; + const timeout = setTimeout(() => { + settled = true; + reject(new Error(`Timeout esperando ACK final para ${messageId}`)); + }, timeoutMs); + + const listener = (ack) => { + if (settled) { + return; + } + + if (ack.messageId !== messageId) { + return; + } + + if (ack.ack === "delivered" || ack.ack === "read") { + settled = true; + clearTimeout(timeout); + resolve(ack); + } + }; + + client.on("message.ack", listener); + }); +} + +async function safeTest(name, fn) { + try { + console.log(`\nTesting: ${name}`); + const result = await fn(); + console.log(`OK: ${name}`, result ?? ""); + } catch (error) { + console.log(`ERROR in ${name}:`, error instanceof Error ? error.message : error); + } +} + +function buildClient() { + return new BerryClient({ + sessionId, + authFolder: process.env.BERRY_AUTH_FOLDER, + auth: { + method: authMethod, + phoneNumber: pairingPhone, + }, + }); +} + +async function connectClient(client) { + if (authMethod === "pairing_code") { + if (!pairingPhone) { + throw new Error("Define BERRY_TEST_PHONE para usar pairing_code."); + } + + await client.connectWithPairingCode(pairingPhone); + return; + } + + if (authMethod === "link") { + await client.connectWithLink(); + return; + } + + await client.connectWithQr(); +} + +function printPreview(label, value) { + console.log(`\nPreview: ${label}`); + console.log(JSON.stringify(value, null, 2)); +} + +async function main() { + if (!recipient) { + throw new Error( + "Define BERRY_TEST_TO com outro numero de teste. Exemplo: 5511999999999@s.whatsapp.net", + ); + } + + const client = buildClient(); + + client.on("auth.link", ({ value }) => { + console.log("\nLink gerado:"); + console.log(value); + }); + + client.on("auth.qr", ({ value }) => { + console.log("\nEscaneie este QR Code:"); + qrcode.generate(value, { small: true }); + }); + + client.on("auth.pairing_code", ({ code }) => { + console.log(`\nPairing code: ${code}`); + }); + + client.on("auth.success", (data) => { + console.log("AUTH SUCCESS:", data); + }); + + client.on("auth.error", (error) => { + console.log("AUTH ERROR:", error); + }); + + client.on("connection.close", (state) => { + console.log("DISCONNECTED:", state); + }); + + client.on("message.received", (message) => { + console.log("MESSAGE RECEIVED:", message); + }); + + client.on("message.ack", (ack) => { + console.log("MESSAGE ACK:", ack); + }); + + await safeTest("wa-message listToInteractivePayload", async () => { + const payload = listToInteractivePayload(sampleList); + printPreview("interactive payload from list", payload); + return "payload generated"; + }); + + await safeTest("wa-message listToInteractiveMessageContent", async () => { + const content = listToInteractiveMessageContent(sampleList); + printPreview("interactive message content from list", content); + return "content generated"; + }); + + await safeTest("wa-message listToLegacyListMessageContent", async () => { + const content = listToLegacyListMessageContent(sampleList); + printPreview("legacy list message content from list", content); + return "content generated"; + }); + + await safeTest("wa-message buttonsPayloadToTemplateMessageContent", async () => { + const content = buttonsPayloadToTemplateMessageContent(sampleButtons); + printPreview("template message content from buttons", content); + return "content generated"; + }); + + await safeTest("wa-message buttonsPayloadToLegacyButtonsMessageContent", async () => { + const content = buttonsPayloadToLegacyButtonsMessageContent(sampleButtons); + printPreview("legacy buttons message content from buttons", content); + return "content generated"; + }); + + await safeTest("wa-message buttonsPayloadToNativeFlowInteractiveContent", async () => { + const content = buttonsPayloadToNativeFlowInteractiveContent(sampleCopyCodeButtons); + printPreview("native flow interactive content from buttons", content); + return "content generated"; + }); + + await safeTest("wa-message buttonsPayloadToNativeFlowInteractiveContent cta_url", async () => { + const content = buttonsPayloadToNativeFlowInteractiveContent(sampleUrlButtons); + printPreview("native flow interactive content from url buttons", content); + return "content generated"; + }); + + await safeTest("wa-message interactivePayloadToMessageContent", async () => { + const interactivePayload = { + body: { + text: "Escolha uma opcao", + }, + footer: { + text: "BerryProtocol", + }, + nativeFlowMessage: { + buttons: [ + { + name: "single_select", + buttonParamsJson: JSON.stringify({ + title: "Abrir lista", + sections: sampleList.sections, + }), + }, + ], + }, + }; + const content = interactivePayloadToMessageContent(interactivePayload); + printPreview("interactive message content", content); + return "content generated"; + }); + + console.log(`\nConnecting with auth=${authMethod}...`); + console.log(`Recipient under test: ${recipient}`); + const opened = waitForOpen(client); + await connectClient(client); + await opened; + + await safeTest("BerryClient sendText with delivered/read wait", async () => { + const sent = await client.sendText(recipient, "BerryProtocol text delivery probe"); + const ack = await waitForAck(client, sent.id, 20000); + return { sent, ack }; + }); + + await safeTest("BerryClient sendMessage(list)", () => + client.sendMessage(recipient, { + list: sampleList, + }), + ); + + await safeTest("BerryClient sendMessage(listMessage)", () => + client.sendMessage(recipient, { + listMessage: sampleList, + }), + ); + + await safeTest("BerryClient sendMessage(buttonsMessage)", () => + client.sendMessage(recipient, { + buttonsMessage: sampleButtons, + }), + ); + + await safeTest("BerryClient sendMessage(interactiveMessage)", () => + client.sendMessage(recipient, { + interactiveMessage: listToInteractivePayload(sampleList), + }), + ); + + await safeTest("BerryClient sendMessage(buttonsMessage copy_code)", () => + client.sendMessage(recipient, { + buttonsMessage: sampleCopyCodeButtons, + }), + ); + + await safeTest("BerryClient sendMessage(buttonsMessage cta_url)", () => + client.sendMessage(recipient, { + buttonsMessage: sampleUrlButtons, + }), + ); + + console.log("\nDone."); +} + +main().catch((error) => { + console.error("Fatal error:", error); + process.exitCode = 1; +}); diff --git a/examples/sdk/test-berry-otp.js b/examples/sdk/test-berry-otp.js new file mode 100644 index 0000000..08285dc --- /dev/null +++ b/examples/sdk/test-berry-otp.js @@ -0,0 +1,69 @@ +import { createRequire } from "node:module"; +import BerryOTP from "./berryotp.js"; + +const require = createRequire(import.meta.url); +import { BerryClient } from "../../packages/core/src/index.ts"; + +const client = new BerryClient({ + sessionId: "test-session-qr", +}); + +client.on("auth.qr", ({ value }) => { + console.log("QR:", value); +}); + +client.on("connection.open", () => { + console.log("Conectado!"); +}); + +await client.connectWithQr(); + +// cria o BerryOTP +const otp = new BerryOTP(client, { + issuer: "BerryProtocol", + ttlMs: 2 * 60 * 1000, + mode: "experimental-copy-code", +}); + +// eventos +otp.on("expired", (data) => { + console.log("OTP expirou:", data); +}); + +otp.on("used", (data) => { + console.log("OTP usado:", data); +}); + +otp.on("denied", (data) => { + console.log("Usuário clicou em NÃO PEDI:", data); +}); + +// número +const to = "5519997530219@s.whatsapp.net"; + +// envia OTP +const sent = await otp.send(to, { + purpose: "entrar na conta", +}); + +console.log("OTP enviado:"); +console.log(sent); + +/* +Retorno: + +{ + id, + to, + code, + expiresAt, + messageId, + status: "sent" +} +*/ + +// verificar código depois +const result = await otp.verify(to, sent.code); + +console.log("VERIFY:"); +console.log(result); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..031357d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,17091 @@ +{ + "name": "berryprotocol", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "berryprotocol", + "version": "0.1.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "baileys": "7.0.0-rc10", + "qrcode-terminal": "^0.12.0" + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.13", + "@types/express": "^5.0.1", + "@types/node": "^22.15.3", + "@types/qrcode-terminal": "^0.12.2", + "@types/ws": "^8.18.1", + "rimraf": "^6.0.1", + "tsx": "^4.19.4", + "typescript": "^5.8.3" + } + }, + "_reference_baileys2": { + "name": "baileys", + "version": "7.0.0-rc10", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node", + "lru-cache": "^11.1.0", + "music-metadata": "^11.12.3", + "p-queue": "^9.0.0", + "pino": "^9.6", + "protobufjs": "^7.5.6", + "whatsapp-rust-bridge": "0.5.4", + "ws": "^8.13.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.31.0", + "@types/jest": "^30.0.0", + "@types/node": "^20.9.0", + "@types/ws": "^8.0.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "@whiskeysockets/eslint-config": "^1.0.0", + "conventional-changelog": "^7.1.1", + "conventional-changelog-angular": "^8.0.0", + "esbuild-register": "^3.6.0", + "eslint": "^9", + "eslint-config-prettier": "^10.1.2", + "eslint-plugin-prettier": "^5.4.0", + "jest": "^30.0.5", + "jimp": "^1.6.1", + "jiti": "^2.4.2", + "json": "^11.0.0", + "link-preview-js": "^3.0.0", + "lru-cache": "^11.1.0", + "open": "^8.4.2", + "pino-pretty": "^13.1.1", + "prettier": "^3.5.3", + "protobufjs-cli": "^1.1.3", + "release-it": "^20.0.1", + "ts-jest": "^29.4.0", + "tsc-esm-fix": "^3.1.2", + "tsx": "^4.20.3", + "typedoc": "^0.27.9", + "typedoc-plugin-markdown": "4.4.2", + "typescript": "^5.8.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "audio-decode": "^2.1.3", + "jimp": "^1.6.1", + "link-preview-js": "^3.0.0", + "sharp": "*" + }, + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + } + } + }, + "_reference_baileys2/node_modules/@types/node": { + "version": "20.19.40", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.40.tgz", + "integrity": "sha512-xxx6M2IpSTnnKcR0cMvIiohkiCx20/oRPtWGbenFygKCGl3zqUzdNjQ/1V4solq1LU+dgv0nQzeGOuqkqZGg0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "_vendor_whatsapp_proto": { + "name": "@raphaelvserafim/whatsapp-proto", + "version": "2.0.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.3", + "acorn-walk": "^8.3.2", + "protobufjs": "^7.5.4", + "request": "^2.88.2", + "request-promise-native": "^1.0.9" + }, + "devDependencies": { + "protobufjs-cli": "^1.1.3" + } + }, + "_vendor_wppconnect_wa_proto": { + "name": "@wppconnect/wa-proto", + "version": "2.3000.1039300149", + "license": "Apache-2.0", + "dependencies": { + "long": "^5.3.2", + "protobufjs": "^7.4.0" + }, + "devDependencies": { + "acorn": "^8.16.0", + "acorn-walk": "^8.3.5", + "conventional-changelog-cli": "^4.1.0", + "protobufjs-cli": "^1.1.3", + "release-it": "^17.11.0", + "request": "^2.88.2", + "request-promise-core": "^1.1.4", + "request-promise-native": "^1.0.9" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/endpoint": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/graphql": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "dev": true, + "license": "MIT" + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/plugin-paginate-rest": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/plugin-request-log": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/request": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/request-error": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/rest": { + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", + "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.2.2" + }, + "engines": { + "node": ">= 18" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^24.2.0" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true, + "license": "Apache-2.0" + }, + "_vendor_wppconnect_wa_proto/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "_vendor_wppconnect_wa_proto/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/execa": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.0.tgz", + "integrity": "sha512-CTNS0BcKBcoOsawKBlpcKNmK4Kjuyz5jVLhf+PUsHGMqiKMVTa4cN3U7r7bRY8KTpfOGpXMo27fdy0dYVg2pqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/git-url-parse": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", + "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^7.0.0" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "_vendor_wppconnect_wa_proto/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/ora": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.1.1.tgz", + "integrity": "sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/os-name": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-5.1.0.tgz", + "integrity": "sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "macos-release": "^3.1.0", + "windows-release": "^5.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/release-it": { + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-17.11.0.tgz", + "integrity": "sha512-qQGgfMbUZ3/vpXUPmngsgjFObOLjlkwtiozHUYen9fo9AEGciXjG1ZpGr+FNmuBT8R7TOSY+x/s84wOCRKJjbA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/webpro" + } + ], + "license": "MIT", + "dependencies": { + "@iarna/toml": "2.2.5", + "@octokit/rest": "20.1.1", + "async-retry": "1.3.3", + "chalk": "5.4.1", + "ci-info": "^4.1.0", + "cosmiconfig": "9.0.0", + "execa": "8.0.0", + "git-url-parse": "14.0.0", + "globby": "14.0.2", + "inquirer": "9.3.2", + "issue-parser": "7.0.1", + "lodash": "4.17.21", + "mime-types": "2.1.35", + "new-github-release-url": "2.0.0", + "open": "10.1.0", + "ora": "8.1.1", + "os-name": "5.1.0", + "proxy-agent": "6.5.0", + "semver": "7.6.3", + "shelljs": "0.8.5", + "update-notifier": "7.3.1", + "url-join": "5.0.0", + "wildcard-match": "5.1.4", + "yargs-parser": "21.1.1" + }, + "bin": { + "release-it": "bin/release-it.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || ^22.0.0" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-5.1.1.tgz", + "integrity": "sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "_vendor_wppconnect_wa_proto/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@berryprotocol/auth": { + "resolved": "packages/auth", + "link": true + }, + "node_modules/@berryprotocol/cli": { + "resolved": "packages/cli", + "link": true + }, + "node_modules/@berryprotocol/core": { + "resolved": "packages/core", + "link": true + }, + "node_modules/@berryprotocol/events": { + "resolved": "packages/events", + "link": true + }, + "node_modules/@berryprotocol/gateway": { + "resolved": "packages/gateway", + "link": true + }, + "node_modules/@berryprotocol/media": { + "resolved": "packages/media", + "link": true + }, + "node_modules/@berryprotocol/messages": { + "resolved": "packages/messages", + "link": true + }, + "node_modules/@berryprotocol/proto": { + "resolved": "packages/protocol", + "link": true + }, + "node_modules/@berryprotocol/socket": { + "resolved": "packages/socket", + "link": true + }, + "node_modules/@berryprotocol/store": { + "resolved": "packages/store", + "link": true + }, + "node_modules/@berryprotocol/wa-message": { + "resolved": "packages/wa-message", + "link": true + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@cacheable/memory": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", + "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.4.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/node-cache": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", + "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", + "license": "MIT", + "dependencies": { + "cacheable": "^2.3.1", + "hookified": "^1.14.0", + "keyv": "^5.5.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@conventional-changelog/git-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.7.0.tgz", + "integrity": "sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/child-process-utils": "^1.0.0", + "@simple-libs/stream-utils": "^1.2.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.4.0" + }, + "peerDependenciesMeta": { + "conventional-commits-filter": { + "optional": true + }, + "conventional-commits-parser": { + "optional": true + } + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@gerrit0/mini-shiki": { + "version": "1.27.2", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.27.2.tgz", + "integrity": "sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^1.27.2", + "@shikijs/types": "^1.27.2", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@hutson/parse-repository-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-5.0.0.tgz", + "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true, + "license": "ISC" + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.5.tgz", + "integrity": "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.5.tgz", + "integrity": "sha512-Jmf9tgBHIEK5SAOB7swYfStqmtkZb00xOTpSQmkoGEpdxOTpJi9RS0A8bkfDPHTTItZRJrRdZrEMu25wyj0VfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.5", + "@inquirer/core": "^11.1.10", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.13.tgz", + "integrity": "sha512-wkGPC7yJ5WJk1DJ5SX7fzk+gfj4BM8cf5dDDi71B/551xHrdsZVRJOC0WyikXd0pEsb/9cLniuE4atbsMqmFkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.10", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "11.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.10.tgz", + "integrity": "sha512-a4Q5BXHQAHa9eO202sTaFCHFYVB3x5fauDuThEAdZ9gfn76pSxiKU7wWcEH0N1O0XmQvNfQNU6QXpiRxmYQx+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.5", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/editor": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.2.tgz", + "integrity": "sha512-Y3Nor7S/DhIPo+8Ym/dSY4efwKI4BsflKDwXh0jNeXJsSF3dteS/3Yf+z4wkibVZDvYMyCgknSTQlNahfunGHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.10", + "@inquirer/external-editor": "^3.0.0", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.14.tgz", + "integrity": "sha512-qyY9zcIX2eKYwaAUiQo9zORd61Lc3sXeM72fVbeHkYnDkqfr8/armcRbmVAIrExeJhI2puk+uomeKtWrpUVUmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.10", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.0.tgz", + "integrity": "sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.5.tgz", + "integrity": "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.13.tgz", + "integrity": "sha512-0l0jCHlJnXIV8CTxwQC0C+5Ziq8WP22edWgmciW2xYvoeoSck4v5FvCS1ctKdqLLR0dUo93uAHgWHywgBSoRyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.10", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.13.tgz", + "integrity": "sha512-WHmkYnnJAou5gx7RgcvAfUggnHNM1zWfoh0dFPl3dxVssuqt+dK5rIbaOYQXNyOegvFnopbKupjnhw2O8gANNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.10", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.13.tgz", + "integrity": "sha512-XDGu64ROHZjOOXLAANvJN7iIxWKhOSCG5VakrZ5kaScVR+snVJCFglD/hL3/677awtWcu4pXoWa280CDIYcBeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.5", + "@inquirer/core": "^11.1.10", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.2.tgz", + "integrity": "sha512-XJmn/wY4AX56l1BRU+ZjDrFtg9+2uBEi4JvJQj82kwJDQKiPgSn4CEsbfGGygS4Gw6rkL4W18oATjfVfaqub2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.1.4", + "@inquirer/confirm": "^6.0.12", + "@inquirer/editor": "^5.1.1", + "@inquirer/expand": "^5.0.13", + "@inquirer/input": "^5.0.12", + "@inquirer/number": "^4.0.12", + "@inquirer/password": "^5.0.12", + "@inquirer/rawlist": "^5.2.8", + "@inquirer/search": "^4.1.8", + "@inquirer/select": "^5.1.4" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.9.tgz", + "integrity": "sha512-a1ErXEfgjfPYpyQ89dp+7n2IISjH9oQg3ygvF5adz8B7aHn4n2PjEgu1wpVTp69K3bj3lVLxP0qJ2b1clk1Whw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.10", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.9.tgz", + "integrity": "sha512-ZlbM28Q9lmLkFPNAIv+ZuY530n5Km8U1WW48oYEvDhe9yc2uL3m3t+JSdRUkQlk5fuIuskgiIVjcb7czFzQpuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.1.10", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.5.tgz", + "integrity": "sha512-6SRg6kHfK/sjLXOsuqNebuir+sjwrf/iWuRUnXgB2slzEewppI1WfzeS16XxDcOQmXBruMmmB9Cgrz7wsAxqMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.5", + "@inquirer/core": "^11.1.10", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.5.tgz", + "integrity": "sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.4.1.tgz", + "integrity": "sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.4.2.tgz", + "integrity": "sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.4.1", + "@jest/pattern": "30.4.0", + "@jest/reporters": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.4.1", + "jest-config": "30.4.2", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-resolve-dependencies": "30.4.2", + "jest-runner": "30.4.2", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "jest-watcher": "30.4.1", + "pretty-format": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", + "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "30.4.1", + "jest-snapshot": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", + "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.4.1.tgz", + "integrity": "sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/types": "30.4.1", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.4.1.tgz", + "integrity": "sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.4.1.tgz", + "integrity": "sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.4.1.tgz", + "integrity": "sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.4.1", + "@jest/types": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.4.1.tgz", + "integrity": "sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.4.1", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.4.1.tgz", + "integrity": "sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jimp/core": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-1.6.1.tgz", + "integrity": "sha512-+BoKC5G6hkrSy501zcJ2EpfnllP+avPevcBfRcZe/CW+EwEfY6X1EZ8QWyT7NpDIvEEJb1fdJnMMfUnFkxmw9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/file-ops": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "await-to-js": "^3.0.0", + "exif-parser": "^0.1.12", + "file-type": "^21.3.3", + "mime": "3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/diff": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/diff/-/diff-1.6.1.tgz", + "integrity": "sha512-YkKDPdHjLgo1Api3+Bhc0GLAygldlpt97NfOKoNg1U6IUNXA6X2MgosCjPfSBiSvJvrrz1fsIR+/4cfYXBI/HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "pixelmatch": "^5.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/file-ops": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/file-ops/-/file-ops-1.6.1.tgz", + "integrity": "sha512-T+gX6osHjprbDRad0/B71Evyre7ZdVY1z/gFGEG9Z8KOtZPKboWvPeP2UjbZYWQLy9UKCPQX1FNAnDiOPkJL7w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-bmp": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-bmp/-/js-bmp-1.6.1.tgz", + "integrity": "sha512-xzWzNT4/u5zGrTT3Tme9sGU7YzIKxi13+BCQwLqACbt5DXf9SAfdzRkopZQnmDko+6In5nqaT89Gjs43/WdnYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "bmp-ts": "^1.0.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-gif": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-gif/-/js-gif-1.6.1.tgz", + "integrity": "sha512-YjY2W26rQa05XhanYhRZ7dingCiNN+T2Ymb1JiigIbABY0B28wHE3v3Cf1/HZPWGu0hOg36ylaKgV5KxF2M58w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "gifwrap": "^0.10.1", + "omggif": "^1.0.10" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-jpeg": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-jpeg/-/js-jpeg-1.6.1.tgz", + "integrity": "sha512-HT9H3yOmlOFzYmdI15IYdfy6ggQhSRIaHeA+OTJSEORXBqEo97sUZu/DsgHIcX5NJ7TkJBTgZ9BZXsV6UbsyMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "jpeg-js": "^0.4.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-png": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-png/-/js-png-1.6.1.tgz", + "integrity": "sha512-SZ/KVhI5UjcSzzlXsXdIi/LhJ7UShf2NkMOtVrbZQcGzsqNtynAelrOXeoTxcanfVqmNhAoVHg8yR2cYoqrYjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "pngjs": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/js-tiff": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/js-tiff/-/js-tiff-1.6.1.tgz", + "integrity": "sha512-jDG/eJquID1M4MBlKMmDRBmz2TpXMv7TUyu2nIRUxhlUc2ogC82T+VQUkca9GJH1BBJ9dx5sSE5dGkWNjIbZxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "utif2": "^4.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-1.6.1.tgz", + "integrity": "sha512-MwnI7C7K81uWddY9FLw1fCOIy6SsPIUftUz36Spt7jisCn8/40DhQMlSxpxTNelnZb/2SnloFimQfRZAmHLOqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-1.6.1.tgz", + "integrity": "sha512-lIo7Tzp5jQu30EFFSK/phXANK3citKVEjepDjQ6ljHoIFtuMRrnybnmI2Md24ulvWlDaz+hh3n6qrMb8ydwhZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/utils": "1.6.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-1.6.1.tgz", + "integrity": "sha512-kK1PavY6cKHNNKce37vdV4Tmpc1/zDKngGoeOV3j+EMatoHFZUinV3s6F9aWryPs3A0xhCLZgdJ6Zeea1d5LCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-1.6.1.tgz", + "integrity": "sha512-LtUN1vAP+LRlZAtTNVhDRSiXx+26Kbz3zJaG6a5k59gQ95jgT5mknnF8lxkHcqJthM4MEk3/tPxkdJpEybyF/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "tinycolor2": "^1.6.0", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-1.6.1.tgz", + "integrity": "sha512-m0qhrfA8jkTqretGv4w+T/ADFR4GwBpE0sCOC2uJ0dzr44/ddOMsIdrpi89kabqYiPYIrxkgdCVCLm3zn1Vkkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-blit": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-1.6.1.tgz", + "integrity": "sha512-hZytnsth0zoll6cPf434BrT+p/v569Wr5tyO6Dp0dH1IDPhzhB5F38sZGMLDo7bzQiN9JFVB3fxkcJ/WYCJ3Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-crop": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-1.6.1.tgz", + "integrity": "sha512-EerRSLlclXyKDnYc/H9w/1amZW7b7v3OGi/VlerPd2M/pAu5X8TkyYWtfqYCXnNp1Ixtd8oCo9zGfY9zoXT4rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-1.6.1.tgz", + "integrity": "sha512-K07QVl7xQwIfD6KfxRV/c3E9e7ZBXxUXdWuvoTWcKHL2qV48MOF5Nqbz/aJW4ThnQARIsxvYlZjPFiqkCjlU+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-1.6.1.tgz", + "integrity": "sha512-+2V+GCV2WycMoX1/z977TkZ8Zq/4MVSKElHYatgUqtwXMi2fDK2gKYU2g9V39IqFvTJsTIsK0+58VFz/ROBVew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-1.6.1.tgz", + "integrity": "sha512-XtS5ZyoZ0vxZxJ6gkqI63SivhtI58vX95foMPM+cyzYkRsJXMOYCr8DScxF5bp4Xr003NjYm/P+7+08tibwzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-1.6.1.tgz", + "integrity": "sha512-ws38W/sGj7LobNRayQ83garxiktOyWxM5vO/y4a/2cy9v65SLEUzVkrj+oeAaUSSObdz4HcCEla7XtGlnAGAaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-hash": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-hash/-/plugin-hash-1.6.1.tgz", + "integrity": "sha512-sZt6ZcMX6i8vFWb4GYnw0pR/o9++ef0dTVcboTB5B/g7nrxCODIB4wfEkJ/YqZM5wUvol77K1qeS0/rVO6z21A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/js-bmp": "1.6.1", + "@jimp/js-jpeg": "1.6.1", + "@jimp/js-png": "1.6.1", + "@jimp/js-tiff": "1.6.1", + "@jimp/plugin-color": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "any-base": "^1.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-1.6.1.tgz", + "integrity": "sha512-SIG0/FcmEj3tkwFxc7fAGLO8o4uNzMpSOdQOhbCgxefQKq5wOVMk9BQx/sdMPBwtMLr9WLq0GzLA/rk6t2v20A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-1.6.1.tgz", + "integrity": "sha512-BYVz/X3Xzv8XYilVeDy11NOp0h7BTDjlOtu0BekIFHP1yHVd24AXNzbOy52XlzYZWQ0Dl36HOHEpl/nSNrzc6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/js-jpeg": "1.6.1", + "@jimp/js-png": "1.6.1", + "@jimp/plugin-blit": "1.6.1", + "@jimp/types": "1.6.1", + "parse-bmfont-ascii": "^1.0.6", + "parse-bmfont-binary": "^1.0.6", + "parse-bmfont-xml": "^1.1.6", + "simple-xml-to-json": "^1.2.2", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-quantize": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-quantize/-/plugin-quantize-1.6.1.tgz", + "integrity": "sha512-J2En9PLURfP+vwYDtuZ9T8yBW6BWYZBScydAjRiPBmJfEhTcNQqiiQODrZf7EqbbX/Sy5H6dAeRiqkgoV9N6Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "image-q": "^4.0.0", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-1.6.1.tgz", + "integrity": "sha512-CLkrtJoIz2HdWnpYiN6p8KYcPc00rCH/SUu6o+lfZL05Q4uhecJlnvXuj9x+U6mDn3ldPmJj6aZqMHuUJzdVqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-1.6.1.tgz", + "integrity": "sha512-nOjVjbbj705B02ksysKnh0POAwEBXZtJ9zQ5qC+X7Tavl3JNn+P3BzQovbBxLPSbUSld6XID9z5ijin4PtOAUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-crop": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-1.6.1.tgz", + "integrity": "sha512-JOKv9F8s6tnVLf4sB/2fF0F339EFnHvgEdFYugO6VhowKLsap0pEZmLyE/DlRnYtIj2RddHZVxVMp/eKJ04l2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-color": "1.6.1", + "@jimp/plugin-hash": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/types": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-1.6.1.tgz", + "integrity": "sha512-leI7YbveTNi565m910XgIOwXyuu074H5qazAD1357HImJSv2hqxnWXpwxQbadGWZ7goZRYBDZy5lpqud0p7q5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-veFPRd93FCnS7AgmCkPgARVGoDRrJ9cm1ujuNyA+UfQ5VKbED2002sm5XfFLFwTsKC8j04heTrwe+tU1dluXOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "tinycolor2": "^1.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdoc/salty": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.12.tgz", + "integrity": "sha512-TuB0x50EoAvEX/UEWITd8Mkn3WhiTjSvbTMCLj0BhsQEl5iUzjXdA0bETEVpTk+5TGTLR6QktI9H4hLviVeaAQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.18.1" + }, + "engines": { + "node": ">=v12.0.0" + } + }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/endpoint": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", + "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", + "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/request": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", + "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "json-with-bigint": "^3.5.3", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/rest": { + "version": "22.0.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.1.tgz", + "integrity": "sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^7.0.6", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^17.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^27.0.0" + } + }, + "node_modules/@phun-ky/typeof": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@phun-ky/typeof/-/typeof-2.0.3.tgz", + "integrity": "sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.9.0 || >=22.0.0", + "npm": ">=10.8.2" + }, + "funding": { + "url": "https://github.com/phun-ky/typeof?sponsor=1" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", + "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", + "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.29.2", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, + "node_modules/@shikijs/types": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz", + "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@simple-libs/child-process-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz", + "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@simple-libs/hosted-git-info": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@simple-libs/hosted-git-info/-/hosted-git-info-1.0.2.tgz", + "integrity": "sha512-aAmGQdMH+ZinytKuA2832u0ATeOFNYNk4meBEXtB5xaPotUgggYNhq5tYU/v17wEbmTW5P9iHNqNrFyrhnqBAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@simple-libs/stream-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz", + "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.49", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", + "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@topoconfig/extends": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@topoconfig/extends/-/extends-0.16.5.tgz", + "integrity": "sha512-JuBgOuFAK28D3+SsRKw6wVmACKHdxhBvVlAcf2ReRXYw5ftW8pTuTkv5T91xTiRtHcUWMC9XNQksUlQAc/yZ7A==", + "dev": true, + "license": "MIT", + "bin": { + "xtends": "target/esm/cli.mjs" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/better-sqlite3": { + "version": "7.6.13", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", + "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.18.tgz", + "integrity": "sha512-9v00a+dn2yWVsYDEunWC4g/TcRKVq3r8N5FuZp7u0SGrPvdN9c2yXI9bBuf5Fl0hNCb+QTIePTn5pJs2pwBOQQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-path": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", + "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qrcode-terminal": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", + "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.2.tgz", + "integrity": "sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.2", + "@typescript-eslint/type-utils": "8.59.2", + "@typescript-eslint/utils": "8.59.2", + "@typescript-eslint/visitor-keys": "8.59.2", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.59.2", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.2.tgz", + "integrity": "sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.59.2", + "@typescript-eslint/types": "8.59.2", + "@typescript-eslint/typescript-estree": "8.59.2", + "@typescript-eslint/visitor-keys": "8.59.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.2.tgz", + "integrity": "sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.2", + "@typescript-eslint/types": "^8.59.2", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.2.tgz", + "integrity": "sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.2", + "@typescript-eslint/visitor-keys": "8.59.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.2.tgz", + "integrity": "sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.2.tgz", + "integrity": "sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.2", + "@typescript-eslint/typescript-estree": "8.59.2", + "@typescript-eslint/utils": "8.59.2", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz", + "integrity": "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.2.tgz", + "integrity": "sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.59.2", + "@typescript-eslint/tsconfig-utils": "8.59.2", + "@typescript-eslint/types": "8.59.2", + "@typescript-eslint/visitor-keys": "8.59.2", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.2.tgz", + "integrity": "sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.59.2", + "@typescript-eslint/types": "8.59.2", + "@typescript-eslint/typescript-estree": "8.59.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.59.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.2.tgz", + "integrity": "sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.2", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@whiskeysockets/eslint-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@whiskeysockets/eslint-config/-/eslint-config-1.0.0.tgz", + "integrity": "sha512-NbcIFEbcOPtB7XpNGJv8FcwX66ZbHcobykdIUfE0EpUKlYkLCOxiqD2K0/HjAhzwTCmpYM3SjynE5D6FdAfOWA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^8.37.0", + "@typescript-eslint/parser": "^8.37.0", + "eslint-plugin-simple-import-sort": "^12.1.1" + }, + "peerDependencies": { + "eslint": "^9.31.0", + "typescript": ">=4" + } + }, + "node_modules/@wppconnect/wa-proto": { + "resolved": "_vendor_wppconnect_wa_proto", + "link": true + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-8.0.0.tgz", + "integrity": "sha512-QT8i0hCz6C/KQ+KTAbSNwCHDGdmUJl2tp2ZpNlGSWCfhUNVbYG2WLE3MdZGBAgXPV4GAvjGMxo+C1hroyxmZEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/atomically": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" + } + }, + "node_modules/await-to-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/await-to-js/-/await-to-js-3.0.0.tgz", + "integrity": "sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.4.1.tgz", + "integrity": "sha512-fATAbM8piYxkiXQp3RBXmZHxZVNJZAVXXfyeyCN2Tida3+qJ8ea9UxhiJ2y4fLO90ZImKt6k9FlcH2+rLkJGhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "30.4.1", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.4.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "dev": true, + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.4.0.tgz", + "integrity": "sha512-9EdtWM/sSfXLOGLwSn+GS6pIXyBnL07/8gyJlwFXjWy4DxMOyItqyUT29d4lQiS380EZwYlX7/At4PgBS+m2aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.4.0.tgz", + "integrity": "sha512-lBY4jxsNmCnSiu7kquw8ZC9F4+XLMOKypT3RnNHPvU2Kpd4W0xaPuLr5ZkRyOsvLYAY4yaW1ZwTW4xB7NIiZzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.4.0", + "babel-preset-current-node-syntax": "^1.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + } + }, + "node_modules/baileys": { + "resolved": "_reference_baileys2", + "link": true + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.29", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.29.tgz", + "integrity": "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-ftp": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/bmp-ts": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bmp-ts/-/bmp-ts-1.0.9.tgz", + "integrity": "sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.3.tgz", + "integrity": "sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.8", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/cacheable": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", + "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.1", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001792", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz", + "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.11", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.11.tgz", + "integrity": "sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", + "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/configstore/node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/configstore/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-7.2.0.tgz", + "integrity": "sha512-BEdgG+vPl53EVlTTk9sZ96aagFp0AQ5pw/ggiQMy2SClLbTo1r0l+8dSg79gkLOO5DS1Lswuhp5fWn6RwE+ivg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@conventional-changelog/git-client": "^2.6.0", + "@simple-libs/hosted-git-info": "^1.0.2", + "@types/normalize-package-data": "^2.4.4", + "conventional-changelog-preset-loader": "^5.0.0", + "conventional-changelog-writer": "^8.3.0", + "conventional-commits-parser": "^6.3.0", + "fd-package-json": "^2.0.0", + "meow": "^13.0.0", + "normalize-package-data": "^7.0.0" + }, + "bin": { + "conventional-changelog": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.1.tgz", + "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-atom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-4.0.0.tgz", + "integrity": "sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-cli": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-4.1.0.tgz", + "integrity": "sha512-MscvILWZ6nWOoC+p/3Nn3D2cVLkjeQjyZPUr0bQ+vUORE/SPrkClJh8BOoMNpS4yk+zFJ5LlgXACxH6XGQoRXA==", + "deprecated": "This package is no longer maintained. Please use the conventional-changelog package instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog": "^5.1.0", + "meow": "^12.0.1", + "tempfile": "^5.0.0" + }, + "bin": { + "conventional-changelog": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-cli/node_modules/conventional-changelog": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-5.1.0.tgz", + "integrity": "sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-angular": "^7.0.0", + "conventional-changelog-atom": "^4.0.0", + "conventional-changelog-codemirror": "^4.0.0", + "conventional-changelog-conventionalcommits": "^7.0.2", + "conventional-changelog-core": "^7.0.0", + "conventional-changelog-ember": "^4.0.0", + "conventional-changelog-eslint": "^5.0.0", + "conventional-changelog-express": "^4.0.0", + "conventional-changelog-jquery": "^5.0.0", + "conventional-changelog-jshint": "^4.0.0", + "conventional-changelog-preset-loader": "^4.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-preset-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-4.1.0.tgz", + "integrity": "sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-cli/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-changelog-codemirror": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-4.0.0.tgz", + "integrity": "sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-7.0.0.tgz", + "integrity": "sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^5.0.0", + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^7.0.0", + "conventional-commits-parser": "^5.0.0", + "git-raw-commits": "^4.0.0", + "git-semver-tags": "^7.0.0", + "hosted-git-info": "^7.0.0", + "normalize-package-data": "^6.0.0", + "read-pkg": "^8.0.0", + "read-pkg-up": "^10.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz", + "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^4.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "meow": "^12.0.1", + "semver": "^7.5.2", + "split2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core/node_modules/conventional-commits-filter": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz", + "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/conventional-changelog-core/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/conventional-changelog-core/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/conventional-changelog-ember": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-4.0.0.tgz", + "integrity": "sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-eslint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-5.0.0.tgz", + "integrity": "sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-express": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-4.0.0.tgz", + "integrity": "sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-jquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-5.0.0.tgz", + "integrity": "sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-jshint": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-4.0.0.tgz", + "integrity": "sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-5.0.0.tgz", + "integrity": "sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.4.0.tgz", + "integrity": "sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", + "conventional-commits-filter": "^5.0.0", + "handlebars": "^4.7.7", + "meow": "^13.0.0", + "semver": "^7.5.2" + }, + "bin": { + "conventional-changelog-writer": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-filter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", + "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-parser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.4.0.tgz", + "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", + "meow": "^13.0.0" + }, + "bin": { + "conventional-commits-parser": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", + "license": "MIT" + }, + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-7.0.0.tgz", + "integrity": "sha512-CuRUx0TXGSbbWdEci3VK/XOZGP3n0P4pIKpsqpVtBqaIIuj3GKK8H45oAqA4Rg8FHipc+CzRdUzmD4YQXxv66Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/degenerator": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-6.0.0.tgz", + "integrity": "sha512-j5MdXdefrecJeSqTpUrgZd4fBsD2IxZx0JlJD+n1Q7+aTf7/HcyXSfHsicPW6ekPurX159v1ZYla6OJgSPh2Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "quickjs-wasi": "^0.0.1" + } + }, + "node_modules/degenerator/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/depseek": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/depseek/-/depseek-0.4.6.tgz", + "integrity": "sha512-bWgCO97Q18pAlNdmYef1XMWUFCzZ3zoPzh67mIlrrPF2iVzqUT0/1ZsynfCMpWjBxcwY8JjjFHk9FNqgptFrlg==", + "dev": true, + "license": "MIT" + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.353", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.353.tgz", + "integrity": "sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.5.1.tgz", + "integrity": "sha512-EaNCGm+8XEIU7YNcc+THptWAO5NfKBHHARxt+wxZljj9bTr/+arRoOm9/MpGt4n6xn9fLnPFRSoLD0WFYGFUxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/bgub/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==", + "dev": true + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/fast-copy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.3.tgz", + "integrity": "sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz", + "integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-2.0.0.tgz", + "integrity": "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "walk-up-path": "^4.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flat-cache/node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/get-uri": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-7.0.0.tgz", + "integrity": "sha512-ZsC7KQxm1Hra8yO0RvMZ4lGJT7vnBtSNpEHKq39MPN7vjuvCiu1aQ8rkXUaIXG1y/TSDez97Gmv04ibnYqCp/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "7.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gifwrap": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", + "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/git-raw-commits/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-semver-tags": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-7.0.1.tgz", + "integrity": "sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==", + "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^12.0.1", + "semver": "^7.5.2" + }, + "bin": { + "git-semver-tags": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/git-semver-tags/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-up": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^9.2.0" + } + }, + "node_modules/git-url-parse": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^8.1.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-8.0.0.tgz", + "integrity": "sha512-7pose0uGgrCJeH2Qh4JcNhWZp3u/oNrWjNYDK4ydOLxOpTw8V8ogHFAmkz0VWq96JBFj4umVJpvmQi287rSYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "8.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-8.0.0.tgz", + "integrity": "sha512-YYeW+iCnAS3xhvj2dvVoWgsbca3RfQy/IlaNHHOtDmU0jMqPI9euIq3Y9BJETdxk16h9NHHCKqp/KB9nIMStCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "8.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.2.tgz", + "integrity": "sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.3", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ci": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", + "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", + "dev": true, + "license": "MIT", + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/issue-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + }, + "engines": { + "node": "^18.17 || >=20.6.1" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.4.2.tgz", + "integrity": "sha512-Yi1jqNC/Oq0N4hBgNH/YvBpP1P57QqundgytzYqy3yqAa7NZPNjSoi4SGbRAXDMdBzNE6xBCi5U7RgfrvMEUVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.4.2", + "@jest/types": "30.4.1", + "import-local": "^3.2.0", + "jest-cli": "30.4.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.4.1.tgz", + "integrity": "sha512-IuctmYrxi21iOSOaIXpJWalHyPAsVv0GeBHKDn8C1CA4W5htHn7INL+wdnL4Bo0+olEndvAFkmb++tIQJG+vvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "jest-util": "30.4.1", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.4.2.tgz", + "integrity": "sha512-rvHH7VlY6LgbJXJTQ87GW62g1FntOtbhh0zT+v04kC+pgL6aBKyYINXxWukCpj3dcIBMw5/XUbtDS9dU9JTXeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "p-limit": "^3.1.0", + "pretty-format": "30.4.1", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.4.2.tgz", + "integrity": "sha512-jfA2ocvVHMXS2QijrJ0d31ektP+d/W0T5RpcTX2Pq+3sVqHlsXVCM2+FmwpL+bdY8OfHpIg9xMxLF17Zg0U49Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.4.2", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.4.2.tgz", + "integrity": "sha512-rNHAShJQqQwFNoL0hbf3BphSBOWnpOUAKvidLS/AjNVLPfoj5mSf4jQMfW3cYOs6hXeZC7nF7mDHaBnbxELOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.4.0", + "@jest/test-sequencer": "30.4.1", + "@jest/types": "30.4.1", + "babel-jest": "30.4.1", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "jest-circus": "30.4.2", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-runner": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "parse-json": "^5.2.0", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-config/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-diff": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", + "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.4.0", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.4.0.tgz", + "integrity": "sha512-ZPMabUZCx5MpbZ2eBYSvZ0J8fvo3dR9oM+eeUpb3aKNQFuS2tu3Duw1TNlMoP8k3WQgKGJuhcMFvwcVuq6T7oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.4.1.tgz", + "integrity": "sha512-/8MJbH6fuj48TstjrMf+u/pd06Qezz5xOXvZA6442heNOWr8bdeoGZX2d9fCn028CoMgYmroH9//zky5GfyYmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "jest-util": "30.4.1", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.4.1.tgz", + "integrity": "sha512-4FZYVOk85hz2AyT6BbarKy9u37g6DbrDyCdFhsnDdXqyrueYQvB+0zO4f/kqLCRD0BsPRXPMNJeQwihKZV8naw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.4.1.tgz", + "integrity": "sha512-rFrcONd8jeFsyw+Z9CrScJgglRf2+NFmNam8dKu7n+SoHqNYT47mn0DdEcVUZJpvh7Iz6/si7f7yUH7GJHVgnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", + "picomatch": "^4.0.3", + "walker": "^1.0.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-leak-detector": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.4.1.tgz", + "integrity": "sha512-IpmyiioeHxiWDhesHnUFmOxcTzwCwKpgACgWajtAP+nYQXiY7DakTxB6Bx9JFiRMljr0AX1PvnQdaU1KFoz6NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.4.1.tgz", + "integrity": "sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.4.1", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.4.1.tgz", + "integrity": "sha512-Zry8Yq/yJcNAZ7dJ5F2heic8AheXvbFZ7XI5V+h28nrYZ7Qoyy4dItq8OodjnYD270mvX+ZudmrNV9cysqhW5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.4.2.tgz", + "integrity": "sha512-gDiVh1I+GxYzz9oXlyw+1wv6VOYX1WYxMOfjsA3iGKePV2oxmbHhwxfkALxNxYy1ciw6APWwkW2zZONwP97aEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "30.4.0", + "jest-snapshot": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.4.2.tgz", + "integrity": "sha512-2dw0PslVYXxffXGpLo+Ejad+KcI1Qkjn7f4X4619gf21oCUmL+SPfjqIa/losUem3yEOvfNZe/F1HWUcNpODcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.4.1", + "@jest/environment": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-haste-map": "30.4.1", + "jest-leak-detector": "30.4.1", + "jest-message-util": "30.4.1", + "jest-resolve": "30.4.1", + "jest-runtime": "30.4.2", + "jest-util": "30.4.1", + "jest-watcher": "30.4.1", + "jest-worker": "30.4.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.4.2.tgz", + "integrity": "sha512-3/5e8iPz2k/VLqlr8DgTftYyLUv8Su3FkCAO2/Od81UsUTpSxOrS6O5x5KkoQwyUjmpYyDJKeyAvg2T2nvpNkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/globals": "30.4.1", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-snapshot": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.4.1.tgz", + "integrity": "sha512-tEOkkfOMppUyeiHwjZswOQ3lcnoTnws/q5FnGIaeIh/jmoU0ZlgMYRR8sTlTj+nNGCoJ0RDq6SfxGxCsyMTPmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.4.1", + "graceful-fs": "^4.2.11", + "jest-diff": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "pretty-format": "30.4.1", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.4.1.tgz", + "integrity": "sha512-PDWi4SOwLnwqNDfHZjOcsEFyZ4fc/2W2gVL3DEoyqnB6jCQMLRtfBong8s6omIw3lI0HWOus12xfnFmQtjW3fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.4.1", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.4.1.tgz", + "integrity": "sha512-/l9UonmvCwjHH7d2h3iAwIloLc1H0S8mJZ/LNK3i86hqwPAz8otUJjP9MfYtz9Tt77Su5FD2xGjZn8d31IZHlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.4.1", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.4.1.tgz", + "integrity": "sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.4.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jimp": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-1.6.1.tgz", + "integrity": "sha512-hNQh6rZtWfSVWSNVmvq87N5BPJsNH7k7I7qyrXf9DOma9xATQk3fsyHazCQe51nCjdkoWdTmh0vD7bjVSLoxxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/diff": "1.6.1", + "@jimp/js-bmp": "1.6.1", + "@jimp/js-gif": "1.6.1", + "@jimp/js-jpeg": "1.6.1", + "@jimp/js-png": "1.6.1", + "@jimp/js-tiff": "1.6.1", + "@jimp/plugin-blit": "1.6.1", + "@jimp/plugin-blur": "1.6.1", + "@jimp/plugin-circle": "1.6.1", + "@jimp/plugin-color": "1.6.1", + "@jimp/plugin-contain": "1.6.1", + "@jimp/plugin-cover": "1.6.1", + "@jimp/plugin-crop": "1.6.1", + "@jimp/plugin-displace": "1.6.1", + "@jimp/plugin-dither": "1.6.1", + "@jimp/plugin-fisheye": "1.6.1", + "@jimp/plugin-flip": "1.6.1", + "@jimp/plugin-hash": "1.6.1", + "@jimp/plugin-mask": "1.6.1", + "@jimp/plugin-print": "1.6.1", + "@jimp/plugin-quantize": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/plugin-rotate": "1.6.1", + "@jimp/plugin-threshold": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdoc": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.5.tgz", + "integrity": "sha512-P4C6MWP9yIlMiK8nwoZvxN84vb6MsnXcHuy7XzVOvQoCizWX5JFCBsWIIWKXBltpoRZXddUOVQmCTOZt9yDj9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^14.1.1", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdoc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/json/-/json-11.0.0.tgz", + "integrity": "sha512-N/ITv3Yw9Za8cGxuQqSqrq6RHnlaHWZkAFavcfpH/R52522c26EbihMxnY7A1chxfXJ4d+cEFIsyTgfi9GihrA==", + "dev": true, + "bin": { + "json": "lib/json.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json-with-bigint": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.8.tgz", + "integrity": "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/ky": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", + "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/latest-version": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", + "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "package-json": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libsignal": { + "name": "@whiskeysockets/libsignal-node", + "version": "2.0.1", + "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67", + "license": "GPL-3.0", + "dependencies": { + "curve25519-js": "^0.0.4", + "protobufjs": "6.8.8" + } + }, + "node_modules/libsignal/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "license": "MIT" + }, + "node_modules/libsignal/node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" + }, + "node_modules/libsignal/node_modules/protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/link-preview-js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/link-preview-js/-/link-preview-js-3.2.0.tgz", + "integrity": "sha512-FvrLltjOPGbTzt+RugbzM7g8XuUNLPO2U/INSLczrYdAA32E7nZVUrVL1gr61DGOArGJA2QkPGMEvNMLLsXREA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio": "1.0.0-rc.11", + "url": "0.11.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/macos-release": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", + "integrity": "sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "dev": true, + "license": "Unlicense", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/music-metadata": { + "version": "11.12.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.12.3.tgz", + "integrity": "sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.2", + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "file-type": "^21.3.1", + "media-typer": "^1.1.0", + "strtok3": "^10.3.4", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0", + "win-guid": "^0.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/new-github-release-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz", + "integrity": "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^2.5.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/new-github-release-url/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.1.tgz", + "integrity": "sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nypm": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.6.tgz", + "integrity": "sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.2.2", + "pathe": "^2.0.3", + "tinyexec": "^1.1.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz", + "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", + "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.1", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/os-name": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-7.0.0.tgz", + "integrity": "sha512-/HfRU/lPPr4T2VigM+cvM3cU77es+XF4OEAa4aE5zpdvrxHGD2NmH0AFIWpMNAb+CsZL45rlcIO49Re0ZcRseg==", + "dev": true, + "license": "MIT", + "dependencies": { + "macos-release": "^3.4.0", + "windows-release": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", + "integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-8.0.0.tgz", + "integrity": "sha512-HyCoVbyQ/nbVlQ/R6wBu0YXhbG2oAnEK5BQ3xMyj1OffQmU5NoOnpLzgPlKHaobUzz5NK0+AZHby4TdydAEBUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "8.0.0", + "debug": "^4.3.4", + "get-uri": "7.0.0", + "http-proxy-agent": "8.0.0", + "https-proxy-agent": "8.0.0", + "pac-resolver": "8.0.0", + "quickjs-wasi": "^0.0.1", + "socks-proxy-agent": "9.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-8.0.0.tgz", + "integrity": "sha512-SVNzOxVq2zuTew3WAt7U8UghwzJzuWYuJryd3y8FxyLTZdjVoCzY8kLP39PpEqQCDvlMWdQXwViu0sYT3eiU2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "degenerator": "6.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "quickjs-wasi": "^0.0.1" + } + }, + "node_modules/package-json": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", + "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ky": "^1.2.0", + "registry-auth-token": "^5.0.2", + "registry-url": "^6.0.1", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", + "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.5.0" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-path": "^7.0.0", + "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz", + "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^4.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^3.0.0", + "pump": "^3.0.0", + "secure-json-parse": "^4.0.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^5.0.2" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/pino-abstract-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty/node_modules/strip-json-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pixelmatch": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", + "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "pngjs": "^6.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.4", + "exsolve": "^1.0.8", + "pathe": "^2.0.3" + } + }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.19.0" + } + }, + "node_modules/powershell-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.0.tgz", + "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.4.1", + "ansi-styles": "^5.2.0", + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/protobufjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.7.tgz", + "integrity": "sha512-NGnrxS/nLKUo5nkbVQxlC71sB4hdfImdYIbFeSCidxtwATx0AHRPcANSLd0q5Bb2BkoSWo2iisQhGg5/r+ihbA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.1", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs-cli": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.2.2.tgz", + "integrity": "sha512-gc27fy6Om+92g4UxqOs9ECTc3Xy7zXsnBSFR0dCSEvIRG8cn3eU8x+CcN8ouBB3EjIBVnEOeQb0iVKC4lnBoKA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": ">=7.5.6 <8" + } + }, + "node_modules/protobufjs-cli/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/protobufjs-cli/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/protobufjs-cli/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/protobufjs-cli/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/protobufjs-cli/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/protocols": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-7.0.0.tgz", + "integrity": "sha512-okTgt79rHTvMHkr/Ney5rZpgCHh3g1g3tI5uhkgN5b7OeI3n0Q/ui1uv9OdrnZNJM9WIZJqZPh/UJs+YtO/TMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "8.0.0", + "debug": "^4.3.4", + "http-proxy-agent": "8.0.0", + "https-proxy-agent": "8.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "8.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "9.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "license": "MIT" + }, + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/quickjs-wasi": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-0.0.1.tgz", + "integrity": "sha512-fBWNLTBkxkLAhe1AzF1hyXEvuA+N+vV1WMP2D6iiMUblvmOt8Pp5t8zUcgvz7aYA1ldUdxDlgUse15dmcKjkNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/react-is-18": { + "name": "react-is", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.6.tgz", + "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==", + "dev": true, + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^6.0.0", + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg/node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", + "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/parse-json/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/registry-auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^3.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/release-it": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-20.0.1.tgz", + "integrity": "sha512-3ob1P1aV+3+ZOoR7qgobfYyMlQbpitzOK09iKTtQ145vFi4rWxlRTgHwtVl8kokCvqiF/cJPxRlfcmZmF5aDJA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/webpro" + } + ], + "license": "MIT", + "dependencies": { + "@inquirer/prompts": "8.4.2", + "@octokit/rest": "22.0.1", + "@phun-ky/typeof": "2.0.3", + "async-retry": "1.3.3", + "c12": "3.3.3", + "ci-info": "^4.4.0", + "defu": "^6.1.7", + "eta": "4.5.1", + "git-url-parse": "16.1.0", + "issue-parser": "7.0.1", + "lodash.merge": "4.6.2", + "mime-types": "3.0.2", + "new-github-release-url": "2.0.0", + "open": "11.0.0", + "ora": "9.3.0", + "os-name": "7.0.0", + "proxy-agent": "7.0.0", + "semver": "7.7.4", + "tinyglobby": "0.2.15", + "undici": "7.24.5", + "url-join": "5.0.0", + "wildcard-match": "5.1.4", + "yargs-parser": "22.0.0" + }, + "bin": { + "release-it": "bin/release-it.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + } + }, + "node_modules/release-it/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/release-it/node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/release-it/node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/release-it/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/release-it/node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "license": "ISC", + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/secure-json-parse": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz", + "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-xml-to-json": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/simple-xml-to-json/-/simple-xml-to-json-1.2.7.tgz", + "integrity": "sha512-mz9VXphOxQWX3eQ/uXCtm6upltoN0DLx8Zb5T4TFC4FHB7S9FDPGre8CfLWqPWQQH/GrQYd2AXhhVM5LDpYx6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.12.2" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-9.0.0.tgz", + "integrity": "sha512-fFlbMlfsXhK02ZB8aZY7Hwxh/IHBV9b1Oq9bvBk6tkFWXvdAxUgA0wbw/NYR5liU3Y5+KI6U4FH3kYJt9QYv0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "8.0.0", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tempfile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-5.0.0.tgz", + "integrity": "sha512-bX655WZI/F7EoTDw9JvQURqAXiPHi8o8+yFxPF2lWYyz1aHnmMRuXWqL6YB6GmeO0o4DIYWHLgGNi/X64T+X4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "temp-dir": "^3.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.2.tgz", + "integrity": "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-jest": { + "version": "29.4.9", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.9.tgz", + "integrity": "sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.4", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/tsc-esm-fix": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tsc-esm-fix/-/tsc-esm-fix-3.1.2.tgz", + "integrity": "sha512-1/OpZssMcEp2ae6DyZV+yvDviofuCdDf7dEWEaBvm/ac8vtS04lFyl0LVs8LQE56vjKHytgzVjPIL9udM4QuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@topoconfig/extends": "^0.16.2", + "depseek": "^0.4.1", + "fast-glob": "^3.3.2", + "fs-extra": "^11.2.0", + "json5": "^2.2.3", + "type-flag": "^3.0.0" + }, + "bin": { + "tsc-esm-fix": "target/esm/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/type-flag/-/type-flag-3.0.0.tgz", + "integrity": "sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/type-flag?sponsor=1" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedoc": { + "version": "0.27.9", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.9.tgz", + "integrity": "sha512-/z585740YHURLl9DN2jCWe6OW7zKYm6VoQ93H0sxZ1cwHQEQrUn5BJrEnkWhfzUdyO+BLGjnKUZ9iz9hKloFDw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^1.24.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.6.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.4.2.tgz", + "integrity": "sha512-kJVkU2Wd+AXQpyL6DlYXXRrfNrHrEIUgiABWH8Z+2Lz5Sq6an4dQ/hfvP75bbokjNDUskOdFlEEm/0fSVyC7eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.27.x" + } + }, + "node_modules/typedoc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/underscore": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.5.tgz", + "integrity": "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", + "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^8.0.1", + "chalk": "^5.3.0", + "configstore": "^7.0.0", + "is-in-ci": "^1.0.0", + "is-installed-globally": "^1.0.0", + "is-npm": "^6.0.0", + "latest-version": "^9.0.0", + "pupa": "^3.1.0", + "semver": "^7.6.3", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utif2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", + "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^1.0.11" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/whatsapp-rust-bridge": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.4.tgz", + "integrity": "sha512-yYO1qSs0Fe7tGtnxOFHomocUD6IZtoAgmA4oDFyGIRZ67D3QZk3w7swA6XXFXNQngiyrg2k7tul6IrM3eUFh7A==", + "license": "MIT" + }, + "node_modules/when-exit": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wildcard-match": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.4.tgz", + "integrity": "sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==", + "dev": true, + "license": "ISC" + }, + "node_modules/win-guid": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", + "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", + "license": "MIT" + }, + "node_modules/windows-release": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-7.1.1.tgz", + "integrity": "sha512-0GBwC9WmR8Bm3WYiz3FC391054BsFHZ2gzBVdYj9uj5eIVYzbn/YPYCYW9SWdh9vwnLuzpn1UGwJKiMG4F236w==", + "dev": true, + "license": "MIT", + "dependencies": { + "powershell-utils": "^0.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", + "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "packages/auth": { + "name": "@berryprotocol/auth", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/events": "0.1.0", + "@berryprotocol/store": "0.1.0" + } + }, + "packages/cli": { + "name": "@berryprotocol/cli", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/core": "0.1.0", + "commander": "^14.0.0", + "pino": "^9.6.0" + } + }, + "packages/core": { + "name": "@berryprotocol/core", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/auth": "0.1.0", + "@berryprotocol/events": "0.1.0", + "@berryprotocol/media": "0.1.0", + "@berryprotocol/messages": "0.1.0", + "@berryprotocol/socket": "0.1.0", + "@berryprotocol/store": "0.1.0", + "pino": "^9.6.0" + } + }, + "packages/events": { + "name": "@berryprotocol/events", + "version": "0.1.0", + "license": "Apache-2.0" + }, + "packages/gateway": { + "name": "@berryprotocol/gateway", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/core": "0.1.0", + "express": "^5.1.0", + "pino": "^9.6.0" + } + }, + "packages/media": { + "name": "@berryprotocol/media", + "version": "0.1.0", + "license": "Apache-2.0" + }, + "packages/messages": { + "name": "@berryprotocol/messages", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/events": "0.1.0" + } + }, + "packages/protocol": { + "name": "@berryprotocol/proto", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@wppconnect/wa-proto": "^2.3000.1039300149", + "protobufjs": "^7.4.0" + } + }, + "packages/socket": { + "name": "@berryprotocol/socket", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/events": "0.1.0", + "@berryprotocol/proto": "0.1.0", + "@berryprotocol/wa-message": "0.1.0", + "baileys": "7.0.0-rc10", + "pino": "^9.6.0", + "ws": "^8.18.1" + } + }, + "packages/store": { + "name": "@berryprotocol/store", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/events": "0.1.0", + "better-sqlite3": "^11.10.0" + } + }, + "packages/wa-message": { + "name": "@berryprotocol/wa-message", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@berryprotocol/events": "0.1.0", + "@berryprotocol/proto": "0.1.0", + "baileys": "7.0.0-rc10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..de819fc --- /dev/null +++ b/package.json @@ -0,0 +1,45 @@ +{ + "name": "berrysdk", + "version": "0.1.0", + "private": true, + "type": "module", + "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "keywords": [ + "whatsapp", + "baileys", + "sdk", + "bot", + "berrysdk", + "whatsapp-web" + ], + "workspaces": [ + "packages/*" + ], + "dependencies": { + "baileys": "7.0.0-rc10", + "qrcode-terminal": "^0.12.0" + }, + "scripts": { + "postinstall": "node scripts/patch-baileys-esm.mjs", + "build": "tsc -b packages/events packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/gateway packages/cli", + "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName 'dist') -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName '.tsbuildinfo') -ErrorAction SilentlyContinue }\"", + "prepare:publish": "npm run clean && npm run build", + "pack:check": "npm pack --workspaces --json", + "dev:gateway": "npm run build && node packages/gateway/dist/index.js", + "dev:cli": "npm run build && node packages/cli/dist/index.js", + "start:gateway": "node packages/gateway/dist/index.js", + "start:cli": "node packages/cli/dist/index.js" + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.13", + "@types/express": "^5.0.1", + "@types/node": "^22.15.3", + "@types/qrcode-terminal": "^0.12.2", + "@types/ws": "^8.18.1", + "rimraf": "^6.0.1", + "tsx": "^4.19.4", + "typescript": "^5.8.3" + } +} diff --git a/packages/auth/package.json b/packages/auth/package.json new file mode 100644 index 0000000..83f6752 --- /dev/null +++ b/packages/auth/package.json @@ -0,0 +1,26 @@ +{ + "name": "@berrysdk/auth", + "version": "0.1.0", + "description": "Session and auth state helpers for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.0", + "@berrysdk/store": "0.1.0" + } +} diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts new file mode 100644 index 0000000..5eaf203 --- /dev/null +++ b/packages/auth/src/index.ts @@ -0,0 +1,63 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { AuthStateSnapshot } from "@berrysdk/events"; +import { SQLiteStore } from "@berrysdk/store"; +import { randomUUID } from "node:crypto"; + +export interface SessionStore { + load(sessionId: string): Promise; + save(sessionId: string, snapshot: AuthStateSnapshot): Promise; + remove(sessionId: string): Promise; +} + +export class SQLiteSessionStore implements SessionStore { + constructor(private readonly store: SQLiteStore) {} + + async load(sessionId: string): Promise { + return this.store.getSession(sessionId); + } + + async save(sessionId: string, snapshot: AuthStateSnapshot): Promise { + this.store.saveSession(sessionId, snapshot); + } + + async remove(sessionId: string): Promise { + this.store.deleteSession(sessionId); + } +} + +export class SessionManager { + constructor(private readonly sessionStore: SessionStore) {} + + async get(sessionId: string): Promise { + const snapshot = await this.sessionStore.load(sessionId); + if (snapshot) { + return snapshot; + } + + const created: AuthStateSnapshot = { + sessionId, + registered: false, + clientId: randomUUID(), + }; + + await this.sessionStore.save(sessionId, created); + return created; + } + + async update(sessionId: string, partial: Partial): Promise { + const current = await this.get(sessionId); + const next = { ...current, ...partial }; + await this.sessionStore.save(sessionId, next); + return next; + } + + async clear(sessionId: string): Promise { + await this.sessionStore.remove(sessionId); + } +} diff --git a/packages/auth/tsconfig.json b/packages/auth/tsconfig.json new file mode 100644 index 0000000..a062b9e --- /dev/null +++ b/packages/auth/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../events" + }, + { + "path": "../store" + } + ] +} + diff --git a/packages/cli/package.json b/packages/cli/package.json new file mode 100644 index 0000000..6a5d1ca --- /dev/null +++ b/packages/cli/package.json @@ -0,0 +1,27 @@ +{ + "name": "@berrysdk/cli", + "version": "0.1.0", + "description": "CLI tooling for Berry Protocol sessions and message testing.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.0", + "commander": "^14.0.0", + "pino": "^9.6.0" + } +} diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts new file mode 100644 index 0000000..33c7c75 --- /dev/null +++ b/packages/cli/src/index.ts @@ -0,0 +1,111 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { Command } from "commander"; +import qrcode from "qrcode-terminal"; +import { BerryClient, type BerryAuthMethod } from "@berrysdk/core"; + +const program = new Command(); + +const createClient = (sessionId: string, method: BerryAuthMethod, phoneNumber?: string) => + new BerryClient({ + sessionId, + authFolder: process.env.BERRY_AUTH_FOLDER, + auth: { + method, + phoneNumber, + }, + }); + +const formatError = (error: unknown): string => (error instanceof Error ? error.message : String(error)); + +const attachCommonListeners = ( + client: BerryClient, + method: BerryAuthMethod, + phoneNumber?: string, +): void => { + client.on("auth.link", ({ value }) => { + if (method === "link") { + console.log(value); + } + }); + + client.on("auth.qr", ({ value }) => { + if (method === "qr") { + qrcode.generate(value, { small: true }); + } + }); + + client.on("auth.pairing_code", ({ code }) => { + if (method === "pairing_code") { + console.log(`Pairing code (${phoneNumber}): ${code}`); + } + }); + + client.on("connection.open", (state) => console.log("open", state)); + client.on("connection.close", (state) => console.log("close", state)); + client.on("message.received", (message) => console.log(JSON.stringify(message, null, 2))); + client.on("auth.error", (error) => console.error(error)); +}; + +program.name("berry").description("BerryProtocol CLI").requiredOption("-s, --session ", "session id"); + +program + .command("connect") + .option("--auth ", "auth method: link | qr | pairing_code", "link") + .option("--phone ", "phone number for pairing code") + .option("--pairing-code ", "custom pairing code with 8 numeric digits") + .action(async (options, command) => { + const root = command.parent?.opts() as { session?: string } | undefined; + if (!root?.session) { + throw new Error("Session id is required."); + } + + const method = options.auth as BerryAuthMethod; + if (method === "pairing_code" && !options.phone) { + throw new Error("--phone is required when --auth pairing_code is used."); + } + + const client = createClient(root.session, method, options.phone); + attachCommonListeners(client, method, options.phone); + try { + await client.connect({ + method, + phoneNumber: options.phone, + customPairingCode: options.pairingCode, + }); + } catch (error) { + console.error(`Connection failed: ${formatError(error)}`); + if (method === "pairing_code") { + console.error( + "Tip: use a new --session or logout the existing one before requesting a new pairing code.", + ); + } + process.exitCode = 1; + } + }); + +program + .command("send-text") + .requiredOption("-t, --to ", "recipient jid") + .requiredOption("-m, --message ", "text") + .action(async (options, command) => { + const root = command.parent?.opts() as { session?: string } | undefined; + if (!root?.session) { + throw new Error("Session id is required."); + } + + const client = new BerryClient({ + sessionId: root.session, + authFolder: process.env.BERRY_AUTH_FOLDER, + }); + await client.connect(); + await client.sendText(options.to, options.message); + await client.disconnect(); + }); + +program.parseAsync(process.argv); diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json new file mode 100644 index 0000000..75647e1 --- /dev/null +++ b/packages/cli/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../core" + } + ] +} + diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000..a29e3fd --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,31 @@ +{ + "name": "@berrysdk/core", + "version": "0.1.0", + "description": "Public SDK for Berry Protocol WhatsApp integrations.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/auth": "0.1.0", + "@berrysdk/events": "0.1.0", + "@berrysdk/media": "0.1.0", + "@berrysdk/messages": "0.1.0", + "@berrysdk/socket": "0.1.0", + "@berrysdk/store": "0.1.0", + "pino": "^9.6.0" + } +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 0000000..ebd2049 --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,571 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import pino, { type Logger } from "pino"; +import { randomUUID } from "node:crypto"; +import { type URL } from "node:url"; +import { SessionManager, SQLiteSessionStore } from "@berrysdk/auth"; +import { type AnyMessageContent } from "baileys"; +import { + type BerryAuthOptions, + BerryEventBus, + type BerryEventMap, + type ButtonsPayload, + type ContactPayload, + type IncomingMessage, + type InteractivePayload, + type ListPayload, + type LocationPayload, + type MediaPayload, + type MessageAck, + type OutgoingMessage, + type PresenceRecord, +} from "@berrysdk/events"; +import { MediaManager } from "@berrysdk/media"; +import { + createContactMessage, + createLocationMessage, + createReactionMessage, + createTextMessage, +} from "@berrysdk/messages"; +import { BerrySocket } from "@berrysdk/socket"; +import { SQLiteStore } from "@berrysdk/store"; + +export interface BerryClientOptions { + sessionId: string; + databasePath?: string; + authFolder?: string; + auth?: BerryAuthOptions; + logger?: Logger; + reconnectMaxAttempts?: number; + reconnectDelayMs?: number; +} + +type BerryMediaSource = Buffer | { url: string | URL }; + +export interface BerrySendMessageContent { + text?: string; + image?: BerryMediaSource; + audio?: BerryMediaSource; + document?: BerryMediaSource; + caption?: string; + mimetype?: string; + fileName?: string; + ptt?: boolean; + footer?: string; + buttons?: Array<{ + buttonId?: string; + buttonText?: { displayText?: string }; + type?: number; + }>; + headerType?: number; + react?: { + text?: string; + key?: { + id?: string; + remoteJid?: string; + }; + }; + location?: { + degreesLatitude?: number; + degreesLongitude?: number; + name?: string; + address?: string; + }; + contacts?: { + displayName?: string; + contacts: Array<{ + displayName?: string; + vcard?: string; + }>; + }; + list?: ListPayload; + listMessage?: ListPayload; + buttonsMessage?: ButtonsPayload; + interactiveMessage?: InteractivePayload; + [key: string]: unknown; +} + +class MessageQueue { + private tail = Promise.resolve(); + + enqueue(job: () => Promise): Promise { + const next = this.tail.then(job, job); + this.tail = next.then(() => undefined, () => undefined); + return next; + } +} + +export class BerryClient { + private readonly logger: Logger; + private readonly store: SQLiteStore; + private readonly sessions: SessionManager; + private readonly media = new MediaManager(); + private readonly bus = new BerryEventBus(); + private readonly queue = new MessageQueue(); + private readonly socket: BerrySocket; + private lastQr?: string; + + constructor(private readonly options: BerryClientOptions) { + this.logger = options.logger ?? pino({ name: "berry-client" }); + this.store = new SQLiteStore(options.databasePath); + this.sessions = new SessionManager(new SQLiteSessionStore(this.store)); + this.socket = new BerrySocket( + { + sessionId: options.sessionId, + logger: this.logger, + reconnectDelayMs: options.reconnectDelayMs, + reconnectMaxAttempts: options.reconnectMaxAttempts, + authFolder: options.authFolder, + auth: options.auth, + }, + this.bus, + ); + this.bindInternals(); + } + + on( + event: EventName, + listener: (payload: BerryEventMap[EventName]) => void, + ): this { + this.bus.on(event, listener); + return this; + } + + once( + event: EventName, + listener: (payload: BerryEventMap[EventName]) => void, + ): this { + this.bus.once(event, listener); + return this; + } + + async connect(auth?: BerryAuthOptions): Promise { + await this.sessions.get(this.options.sessionId); + await this.socket.connect(auth); + } + + async connectWithLink(): Promise { + await this.connect({ method: "link" }); + } + + async connectWithQr(): Promise { + await this.connect({ method: "qr" }); + } + + async connectWithPairingCode( + phoneNumber: string, + customPairingCode?: string, + ): Promise { + await this.connect({ + method: "pairing_code", + phoneNumber, + customPairingCode, + }); + } + + async disconnect(): Promise { + await this.socket.disconnect(); + } + + async reconnect(): Promise { + await this.socket.reconnect(); + } + + async logout(): Promise { + await this.socket.logout(); + await this.sessions.clear(this.options.sessionId); + } + + getQrCode(): string | undefined { + return this.lastQr; + } + + async sendText(to: string, text: string): Promise { + return this.sendMessage(to, { text }); + } + + async sendImage(to: string, media: MediaPayload): Promise { + const loaded = await this.media.load(media); + return this.sendMessage(to, { + image: loaded.buffer, + caption: media.caption, + mimetype: media.mimetype ?? loaded.metadata.mimetype, + fileName: media.fileName ?? loaded.metadata.fileName, + }); + } + + async sendAudio(to: string, media: MediaPayload): Promise { + const loaded = await this.media.load(media); + return this.sendMessage(to, { + audio: loaded.buffer, + mimetype: media.mimetype ?? loaded.metadata.mimetype, + ptt: false, + }); + } + + async sendDocument(to: string, media: MediaPayload): Promise { + const loaded = await this.media.load(media); + return this.sendMessage(to, { + document: loaded.buffer, + mimetype: media.mimetype ?? loaded.metadata.mimetype ?? "application/octet-stream", + fileName: media.fileName ?? loaded.metadata.fileName, + caption: media.caption, + }); + } + + async sendButtons(to: string, payload: ButtonsPayload): Promise { + return this.sendMessage(to, { buttonsMessage: payload }); + } + + async sendList(to: string, list: ListPayload): Promise { + return this.sendMessage(to, { list }); + } + + async sendReaction( + to: string, + emoji: string, + targetMessageId: string, + ): Promise { + return this.sendMessage(to, { + react: { + text: emoji, + key: { + id: targetMessageId, + remoteJid: to, + }, + }, + }); + } + + async sendLocation(to: string, location: LocationPayload): Promise { + return this.sendMessage(to, { + location: { + degreesLatitude: location.latitude, + degreesLongitude: location.longitude, + name: location.name, + address: location.address, + }, + }); + } + + async sendContact(to: string, contact: ContactPayload): Promise { + return this.sendMessage(to, { + contacts: { + displayName: contact.displayName, + contacts: [ + { + displayName: contact.displayName, + vcard: contact.vcard, + }, + ], + }, + }); + } + + async fetchGroups() { + return this.socket.fetchGroups(); + } + + async subscribePresence(jid: string): Promise { + await this.socket.subscribePresence(jid); + } + + async sendPresence( + status: "available" | "composing" | "recording" | "paused" | "unavailable", + jid?: string, + ): Promise { + await this.socket.sendPresenceUpdate(status, jid); + } + + async sendMessage( + to: string, + content: BerrySendMessageContent, + ): Promise { + return this.queue.enqueue(async () => { + const normalized = await this.normalizeOutgoingMessage(to, content); + const result = await normalized.dispatch(); + const sent = { + ...normalized.message, + id: result.key.id ?? normalized.message.id, + ack: "sent" as const, + }; + this.bus.emit("message.sent", sent); + return sent; + }); + } + + private async normalizeOutgoingMessage( + to: string, + content: BerrySendMessageContent, + ): Promise<{ + message: OutgoingMessage; + dispatch: () => Promise<{ key: { id?: string | null } }>; + }> { + if (typeof content.text === "string") { + const text = content.text; + const message = createTextMessage(to, text); + return { + message, + dispatch: () => this.socket.sendBaileysMessage(to, { text }), + }; + } + + if (content.image) { + const media = await this.loadMediaPayload(content.image, { + caption: content.caption, + mimetype: content.mimetype, + fileName: content.fileName, + }); + return { + message: { + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending", + type: "image", + media, + }, + dispatch: () => + this.socket.sendBaileysMessage(to, { + ...content, + image: media.buffer!, + caption: media.caption, + mimetype: media.mimetype, + fileName: media.fileName, + }), + }; + } + + if (content.audio) { + const media = await this.loadMediaPayload(content.audio, { + caption: undefined, + mimetype: content.mimetype, + fileName: content.fileName, + }); + return { + message: { + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending", + type: "audio", + media, + }, + dispatch: () => + this.socket.sendBaileysMessage(to, { + ...content, + audio: media.buffer!, + mimetype: media.mimetype, + }), + }; + } + + if (content.document) { + const media = await this.loadMediaPayload(content.document, { + caption: content.caption, + mimetype: content.mimetype, + fileName: content.fileName, + }); + return { + message: { + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending", + type: "document", + media, + }, + dispatch: () => + this.socket.sendBaileysMessage(to, { + ...content, + document: media.buffer!, + caption: media.caption, + mimetype: media.mimetype ?? "application/octet-stream", + fileName: media.fileName, + }), + }; + } + + if (content.buttonsMessage) { + const message: OutgoingMessage = { + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending", + type: "buttons", + buttons: content.buttonsMessage, + }; + + return { + message, + dispatch: () => this.socket.sendReplyButtonsMessage(to, content.buttonsMessage!), + }; + } + + const list = content.list ?? content.listMessage; + if (list) { + const message: OutgoingMessage = { + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending", + type: "list", + list, + }; + + return { + message, + dispatch: () => this.socket.sendListMessage(to, list), + }; + } + + if (content.interactiveMessage) { + const message: OutgoingMessage = { + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending", + type: "interactive", + interactive: content.interactiveMessage, + }; + + return { + message, + dispatch: () => this.socket.sendInteractiveMessage(to, content.interactiveMessage!), + }; + } + + if (content.react) { + const message = createReactionMessage( + to, + content.react.text ?? "", + content.react.key?.id ?? "", + ); + return { + message, + dispatch: () => this.socket.sendBaileysMessage(to, { react: content.react! }), + }; + } + + if (content.location) { + const location = { + latitude: content.location.degreesLatitude ?? 0, + longitude: content.location.degreesLongitude ?? 0, + name: content.location.name ?? undefined, + address: content.location.address ?? undefined, + }; + return { + message: createLocationMessage(to, location), + dispatch: () => this.socket.sendBaileysMessage(to, { location: content.location! }), + }; + } + + if (content.contacts?.contacts?.[0]) { + const contact = { + displayName: content.contacts.displayName ?? content.contacts.contacts[0].displayName ?? "", + vcard: content.contacts.contacts[0].vcard ?? "", + }; + return { + message: createContactMessage(to, contact), + dispatch: () => this.socket.sendBaileysMessage(to, { contacts: content.contacts! }), + }; + } + + throw new Error( + "Unsupported message content. Use text, image, audio, document, buttonsMessage, list/listMessage, interactiveMessage, react, location or contacts.", + ); + } + + private async loadMediaPayload( + source: BerryMediaSource, + extras: Pick, + ): Promise { + if (Buffer.isBuffer(source)) { + return { + ...extras, + buffer: source, + }; + } + + if (typeof source === "object" && source && "url" in source) { + const loaded = await this.media.load({ + url: String(source.url), + ...extras, + }); + return { + ...extras, + buffer: loaded.buffer, + mimetype: extras.mimetype ?? loaded.metadata.mimetype, + fileName: extras.fileName ?? loaded.metadata.fileName, + }; + } + + throw new Error("Only Buffer or { url } media inputs are supported for Baileys-compatible sends."); + } + + private bindInternals(): void { + this.bus.on("qr", async (qr) => { + this.lastQr = qr; + await this.sessions.update(this.options.sessionId, { qr }); + }); + + this.bus.on("auth.link", async ({ value }) => { + await this.sessions.update(this.options.sessionId, { + authMethod: "link", + linkCode: value, + }); + }); + + this.bus.on("auth.qr", async ({ value }) => { + await this.sessions.update(this.options.sessionId, { + authMethod: "qr", + qr: value, + }); + }); + + this.bus.on("auth.pairing_code", async ({ code }) => { + await this.sessions.update(this.options.sessionId, { + authMethod: "pairing_code", + pairingCode: code, + }); + }); + + this.bus.on("connection.open", async () => { + const session = await this.sessions.update(this.options.sessionId, { registered: true }); + this.bus.emit("auth.success", session); + }); + + this.bus.on("protocol.error", async ({ error }) => { + this.bus.emit("auth.error", { + sessionId: this.options.sessionId, + error, + }); + }); + + this.bus.on("message.received", (message: IncomingMessage) => { + this.store.upsertMessages(this.options.sessionId, [message]); + }); + + this.bus.on("message.ack", (ack: MessageAck) => { + this.store.upsertAck(this.options.sessionId, ack); + }); + + this.bus.on("presence.update", (_presence: PresenceRecord) => undefined); + this.bus.on("chats.update", (chats) => { + this.store.upsertChats(this.options.sessionId, chats); + }); + this.bus.on("sync.contacts", (contacts) => { + this.store.upsertContacts(this.options.sessionId, contacts); + }); + this.bus.on("sync.groups", (groups) => { + this.store.upsertGroups(this.options.sessionId, groups); + }); + } +} + +export * from "@berrysdk/events"; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000..c9caa01 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,33 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../auth" + }, + { + "path": "../events" + }, + { + "path": "../media" + }, + { + "path": "../messages" + }, + { + "path": "../socket" + }, + { + "path": "../store" + } + ] +} + diff --git a/packages/events/package.json b/packages/events/package.json new file mode 100644 index 0000000..4d3faf7 --- /dev/null +++ b/packages/events/package.json @@ -0,0 +1,22 @@ +{ + "name": "@berrysdk/events", + "version": "0.1.0", + "description": "Shared event and message contracts for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/events/src/index.d.ts b/packages/events/src/index.d.ts new file mode 100644 index 0000000..091cc1c --- /dev/null +++ b/packages/events/src/index.d.ts @@ -0,0 +1,185 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +export type AckStatus = "pending" | "sent" | "delivered" | "read" | "failed"; +export interface ConnectionState { + sessionId: string; + connectedAt?: string; + disconnectedAt?: string; + reason?: string; +} +export interface AuthStateSnapshot { + sessionId: string; + registered: boolean; + clientId?: string; + serverToken?: string; + clientToken?: string; + qr?: string; +} +export interface ContactRecord { + id: string; + name?: string; + pushName?: string; + shortName?: string; +} +export interface ChatRecord { + id: string; + name?: string; + unreadCount?: number; + lastMessageAt?: string; +} +export interface GroupRecord { + id: string; + subject: string; + participants: string[]; +} +export interface PresenceRecord { + id: string; + status: "available" | "composing" | "recording" | "paused" | "unavailable"; + lastSeenAt?: string; +} +export interface LocationPayload { + latitude: number; + longitude: number; + name?: string; + address?: string; +} +export interface ContactPayload { + displayName: string; + vcard: string; +} +export interface ButtonRow { + id: string; + title: string; +} +export interface ButtonsPayload { + text: string; + footer?: string; + buttons: ButtonRow[]; +} +export interface ListRow { + id: string; + title: string; + description?: string; +} +export interface ListSection { + title: string; + rows: ListRow[]; +} +export interface ListPayload { + title?: string; + text: string; + footer?: string; + buttonText: string; + sections: ListSection[]; +} +export interface MediaPayload { + url?: string; + path?: string; + buffer?: Buffer; + fileName?: string; + mimetype?: string; + caption?: string; +} +export interface BaseMessage { + id: string; + to: string; + from?: string; + timestamp: string; + ack: AckStatus; + type: "text" | "image" | "audio" | "document" | "buttons" | "list" | "reaction" | "location" | "contact"; +} +export interface TextMessage extends BaseMessage { + type: "text"; + text: string; +} +export interface ImageMessage extends BaseMessage { + type: "image"; + media: MediaPayload; +} +export interface AudioMessage extends BaseMessage { + type: "audio"; + media: MediaPayload; +} +export interface DocumentMessage extends BaseMessage { + type: "document"; + media: MediaPayload; +} +export interface ButtonsMessage extends BaseMessage { + type: "buttons"; + buttons: ButtonsPayload; +} +export interface ListMessage extends BaseMessage { + type: "list"; + list: ListPayload; +} +export interface ReactionMessage extends BaseMessage { + type: "reaction"; + emoji: string; + targetMessageId: string; +} +export interface LocationMessage extends BaseMessage { + type: "location"; + location: LocationPayload; +} +export interface ContactMessage extends BaseMessage { + type: "contact"; + contact: ContactPayload; +} +export type OutgoingMessage = TextMessage | ImageMessage | AudioMessage | DocumentMessage | ButtonsMessage | ListMessage | ReactionMessage | LocationMessage | ContactMessage; +export interface IncomingMessage extends OutgoingMessage { + from: string; +} +export interface MessageAck { + messageId: string; + remoteJid: string; + ack: AckStatus; + updatedAt: string; +} +export interface SyncBundle { + contacts: ContactRecord[]; + chats: ChatRecord[]; + groups: GroupRecord[]; + messages: IncomingMessage[]; +} +export interface BerryEventMap { + qr: string; + "connection.open": ConnectionState; + "connection.close": ConnectionState; + "connection.reconnecting": { + sessionId: string; + attempt: number; + delayMs: number; + }; + "auth.success": AuthStateSnapshot; + "auth.error": { + sessionId: string; + error: string; + }; + "message.received": IncomingMessage; + "message.sent": OutgoingMessage; + "message.ack": MessageAck; + "presence.update": PresenceRecord; + "chats.update": ChatRecord[]; + "sync.history": SyncBundle; + "sync.contacts": ContactRecord[]; + "sync.groups": GroupRecord[]; + "sync.messages": IncomingMessage[]; + "raw.frame": Buffer; + "protocol.error": { + sessionId: string; + error: string; + }; +} +export declare class BerryEventBus { + private readonly emitter; + on(event: EventName, listener: (payload: BerryEventMap[EventName]) => void): this; + once(event: EventName, listener: (payload: BerryEventMap[EventName]) => void): this; + off(event: EventName, listener: (payload: BerryEventMap[EventName]) => void): this; + emit(event: EventName, payload: BerryEventMap[EventName]): boolean; +} +//# sourceMappingURL=index.d.ts.map diff --git a/packages/events/src/index.d.ts.map b/packages/events/src/index.d.ts.map new file mode 100644 index 0000000..fa2bb08 --- /dev/null +++ b/packages/events/src/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/events/src/index.js b/packages/events/src/index.js new file mode 100644 index 0000000..5e55292 --- /dev/null +++ b/packages/events/src/index.js @@ -0,0 +1,31 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BerryEventBus = void 0; +const node_events_1 = require("node:events"); +class BerryEventBus { + emitter = new node_events_1.EventEmitter(); + on(event, listener) { + this.emitter.on(event, listener); + return this; + } + once(event, listener) { + this.emitter.once(event, listener); + return this; + } + off(event, listener) { + this.emitter.off(event, listener); + return this; + } + emit(event, payload) { + return this.emitter.emit(event, payload); + } +} +exports.BerryEventBus = BerryEventBus; +//# sourceMappingURL=index.js.map diff --git a/packages/events/src/index.js.map b/packages/events/src/index.js.map new file mode 100644 index 0000000..ce922bd --- /dev/null +++ b/packages/events/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAkN3C,MAAa,aAAa;IACP,OAAO,GAAG,IAAI,0BAAY,EAAE,CAAC;IAE9C,EAAE,CACA,KAAgB,EAChB,QAAqD;QAErD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAgB,EAChB,QAAqD;QAErD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CACD,KAAgB,EAChB,QAAqD;QAErD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAgB,EAChB,OAAiC;QAEjC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF;AAjCD,sCAiCC"} \ No newline at end of file diff --git a/packages/events/src/index.ts b/packages/events/src/index.ts new file mode 100644 index 0000000..af4be57 --- /dev/null +++ b/packages/events/src/index.ts @@ -0,0 +1,309 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { EventEmitter } from "node:events"; + +export type AckStatus = "pending" | "sent" | "delivered" | "read" | "failed"; + +export interface ConnectionState { + sessionId: string; + connectedAt?: string; + disconnectedAt?: string; + reason?: string; +} + +export interface AuthStateSnapshot { + sessionId: string; + registered: boolean; + clientId?: string; + serverToken?: string; + clientToken?: string; + qr?: string; + linkCode?: string; + pairingCode?: string; + authMethod?: BerryAuthMethod; +} + +export type BerryAuthMethod = "link" | "qr" | "pairing_code"; + +export interface BerryAuthOptions { + method?: BerryAuthMethod; + phoneNumber?: string; + customPairingCode?: string; +} + +export interface ContactRecord { + id: string; + name?: string; + pushName?: string; + shortName?: string; +} + +export interface ChatRecord { + id: string; + name?: string; + unreadCount?: number; + lastMessageAt?: string; +} + +export interface GroupRecord { + id: string; + subject: string; + participants: string[]; +} + +export interface PresenceRecord { + id: string; + status: "available" | "composing" | "recording" | "paused" | "unavailable"; + lastSeenAt?: string; +} + +export interface LocationPayload { + latitude: number; + longitude: number; + name?: string; + address?: string; +} + +export interface ContactPayload { + displayName: string; + vcard: string; +} + +export interface ButtonRow { + id: string; + title: string; + kind?: "reply" | "copy_code" | "cta_url"; + code?: string; + url?: string; + nativeFlowName?: string; + buttonParamsJson?: string; +} + +export interface InteractiveHeader { + title?: string; + subtitle?: string; + hasMediaAttachment?: boolean; +} + +export interface InteractiveBody { + text: string; +} + +export interface InteractiveFooter { + text?: string; +} + +export interface InteractiveNativeButton { + name: string; + buttonParamsJson: string; +} + +export interface InteractiveNativeFlowPayload { + buttons: InteractiveNativeButton[]; + messageParamsJson?: string; + messageVersion?: number; +} + +export interface InteractivePayload { + header?: InteractiveHeader; + body: InteractiveBody; + footer?: InteractiveFooter; + nativeFlowMessage?: InteractiveNativeFlowPayload; +} + +export interface ButtonsPayload { + text: string; + footer?: string; + buttons: ButtonRow[]; +} + +export interface ListRow { + id: string; + title: string; + description?: string; +} + +export interface ListSection { + title: string; + rows: ListRow[]; +} + +export interface ListPayload { + title?: string; + text: string; + footer?: string; + buttonText: string; + sections: ListSection[]; +} + +export interface MediaPayload { + url?: string; + path?: string; + buffer?: Buffer; + fileName?: string; + mimetype?: string; + caption?: string; +} + +export interface BaseMessage { + id: string; + to: string; + from?: string; + timestamp: string; + ack: AckStatus; + type: + | "text" + | "image" + | "audio" + | "document" + | "buttons" + | "list" + | "interactive" + | "reaction" + | "location" + | "contact"; +} + +export interface TextMessage extends BaseMessage { + type: "text"; + text: string; +} + +export interface ImageMessage extends BaseMessage { + type: "image"; + media: MediaPayload; +} + +export interface AudioMessage extends BaseMessage { + type: "audio"; + media: MediaPayload; +} + +export interface DocumentMessage extends BaseMessage { + type: "document"; + media: MediaPayload; +} + +export interface ButtonsMessage extends BaseMessage { + type: "buttons"; + buttons: ButtonsPayload; +} + +export interface ListMessage extends BaseMessage { + type: "list"; + list: ListPayload; +} + +export interface InteractiveMessage extends BaseMessage { + type: "interactive"; + interactive: InteractivePayload; +} + +export interface ReactionMessage extends BaseMessage { + type: "reaction"; + emoji: string; + targetMessageId: string; +} + +export interface LocationMessage extends BaseMessage { + type: "location"; + location: LocationPayload; +} + +export interface ContactMessage extends BaseMessage { + type: "contact"; + contact: ContactPayload; +} + +export type OutgoingMessage = + | TextMessage + | ImageMessage + | AudioMessage + | DocumentMessage + | ButtonsMessage + | ListMessage + | InteractiveMessage + | ReactionMessage + | LocationMessage + | ContactMessage; + +export type IncomingMessage = OutgoingMessage & { + from: string; +}; + +export interface MessageAck { + messageId: string; + remoteJid: string; + ack: AckStatus; + updatedAt: string; +} + +export interface SyncBundle { + contacts: ContactRecord[]; + chats: ChatRecord[]; + groups: GroupRecord[]; + messages: IncomingMessage[]; +} + +export interface BerryEventMap { + qr: string; + "auth.link": { sessionId: string; value: string }; + "auth.qr": { sessionId: string; value: string }; + "auth.pairing_code": { sessionId: string; phoneNumber: string; code: string }; + "connection.open": ConnectionState; + "connection.close": ConnectionState; + "connection.reconnecting": { sessionId: string; attempt: number; delayMs: number }; + "auth.success": AuthStateSnapshot; + "auth.error": { sessionId: string; error: string }; + "message.received": IncomingMessage; + "message.sent": OutgoingMessage; + "message.ack": MessageAck; + "presence.update": PresenceRecord; + "chats.update": ChatRecord[]; + "sync.history": SyncBundle; + "sync.contacts": ContactRecord[]; + "sync.groups": GroupRecord[]; + "sync.messages": IncomingMessage[]; + "raw.frame": Buffer; + "protocol.error": { sessionId: string; error: string }; +} + +export class BerryEventBus { + private readonly emitter = new EventEmitter(); + + on( + event: EventName, + listener: (payload: BerryEventMap[EventName]) => void, + ): this { + this.emitter.on(event, listener); + return this; + } + + once( + event: EventName, + listener: (payload: BerryEventMap[EventName]) => void, + ): this { + this.emitter.once(event, listener); + return this; + } + + off( + event: EventName, + listener: (payload: BerryEventMap[EventName]) => void, + ): this { + this.emitter.off(event, listener); + return this; + } + + emit( + event: EventName, + payload: BerryEventMap[EventName], + ): boolean { + return this.emitter.emit(event, payload); + } +} diff --git a/packages/events/tsconfig.json b/packages/events/tsconfig.json new file mode 100644 index 0000000..f0720b6 --- /dev/null +++ b/packages/events/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ] +} + diff --git a/packages/gateway/package.json b/packages/gateway/package.json new file mode 100644 index 0000000..d216ed6 --- /dev/null +++ b/packages/gateway/package.json @@ -0,0 +1,27 @@ +{ + "name": "@berrysdk/gateway", + "version": "0.1.0", + "description": "HTTP gateway for multi-instance Berry Protocol control.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.0", + "express": "^5.1.0", + "pino": "^9.6.0" + } +} diff --git a/packages/gateway/src/index.ts b/packages/gateway/src/index.ts new file mode 100644 index 0000000..d6be60d --- /dev/null +++ b/packages/gateway/src/index.ts @@ -0,0 +1,148 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import express from "express"; +import pino from "pino"; +import { BerryClient, type BerryAuthMethod, type ListPayload, type MediaPayload } from "@berrysdk/core"; + +const logger = pino({ name: "berry-gateway" }); +const app = express(); +app.use(express.json({ limit: "25mb" })); + +type InstanceAuthState = { + link?: string; + qr?: string; + pairingCode?: string; +}; + +const clients = new Map(); +const authStates = new Map(); + +const getClient = (id: string, method: BerryAuthMethod = "link", phoneNumber?: string): BerryClient => { + const existing = clients.get(id); + if (existing) { + return existing; + } + + const client = new BerryClient({ + sessionId: id, + databasePath: process.env.BERRY_SQLITE_PATH, + authFolder: process.env.BERRY_AUTH_FOLDER, + auth: { + method, + phoneNumber, + }, + }); + + client.on("auth.link", ({ value }) => { + authStates.set(id, { ...authStates.get(id), link: value }); + }); + + client.on("auth.qr", ({ value }) => { + authStates.set(id, { ...authStates.get(id), qr: value }); + }); + + client.on("auth.pairing_code", ({ code }) => { + authStates.set(id, { ...authStates.get(id), pairingCode: code }); + }); + + clients.set(id, client); + return client; +}; + +app.post("/instances", async (req, res) => { + const sessionId = req.body.sessionId as string | undefined; + const authMethod = (req.body.authMethod as BerryAuthMethod | undefined) ?? "link"; + const phoneNumber = req.body.phoneNumber as string | undefined; + + if (!sessionId) { + res.status(400).json({ error: "sessionId is required" }); + return; + } + + if (authMethod === "pairing_code" && !phoneNumber) { + res.status(400).json({ error: "phoneNumber is required for pairing_code auth" }); + return; + } + + const client = getClient(sessionId, authMethod, phoneNumber); + await client.connect({ + method: authMethod, + phoneNumber, + }); + res.status(201).json({ sessionId, status: "connecting", authMethod }); +}); + +app.get("/instances/:id/link", async (req, res) => { + const auth = authStates.get(req.params.id); + if (!auth?.link) { + res.status(404).json({ error: "Link auth value not available" }); + return; + } + + res.json({ sessionId: req.params.id, link: auth.link }); +}); + +app.get("/instances/:id/qr", async (req, res) => { + const auth = authStates.get(req.params.id); + if (!auth?.qr) { + res.status(404).json({ error: "QR code not available" }); + return; + } + + res.json({ sessionId: req.params.id, qr: auth.qr }); +}); + +app.get("/instances/:id/pairing-code", async (req, res) => { + const auth = authStates.get(req.params.id); + if (!auth?.pairingCode) { + res.status(404).json({ error: "Pairing code not available" }); + return; + } + + res.json({ sessionId: req.params.id, pairingCode: auth.pairingCode }); +}); + +app.post("/instances/:id/send-text", async (req, res) => { + const client = getClient(req.params.id); + const result = await client.sendText(req.body.to, req.body.text); + res.json(result); +}); + +app.post("/instances/:id/send-image", async (req, res) => { + const client = getClient(req.params.id); + const media = req.body.media as MediaPayload; + const result = await client.sendImage(req.body.to, media); + res.json(result); +}); + +app.post("/instances/:id/send-list", async (req, res) => { + const client = getClient(req.params.id); + const list = req.body.list as ListPayload; + const result = await client.sendList(req.body.to, list); + res.json(result); +}); + +app.delete("/instances/:id/logout", async (req, res) => { + const client = getClient(req.params.id); + await client.logout(); + clients.delete(req.params.id); + authStates.delete(req.params.id); + res.status(204).send(); +}); + +app.use((error: Error, _req: express.Request, res: express.Response, _next: express.NextFunction) => { + logger.error({ err: error }, "request failed"); + res.status(500).json({ error: error.message }); +}); + +const port = Number(process.env.BERRY_HTTP_PORT ?? 3000); +const host = process.env.BERRY_HTTP_HOST ?? "0.0.0.0"; + +app.listen(port, host, () => { + logger.info({ host, port }, "BerryProtocol gateway listening"); +}); diff --git a/packages/gateway/tsconfig.json b/packages/gateway/tsconfig.json new file mode 100644 index 0000000..75647e1 --- /dev/null +++ b/packages/gateway/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../core" + } + ] +} + diff --git a/packages/media/package.json b/packages/media/package.json new file mode 100644 index 0000000..8a2d400 --- /dev/null +++ b/packages/media/package.json @@ -0,0 +1,22 @@ +{ + "name": "@berrysdk/media", + "version": "0.1.0", + "description": "Media loading and normalization helpers for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/media/src/index.ts b/packages/media/src/index.ts new file mode 100644 index 0000000..288fb8f --- /dev/null +++ b/packages/media/src/index.ts @@ -0,0 +1,68 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { createReadStream, promises as fs } from "node:fs"; +import { Readable } from "node:stream"; +import { MediaPayload } from "@berrysdk/events"; + +export interface MediaDescriptor { + fileName?: string; + mimetype?: string; + byteLength: number; +} + +export class MediaManager { + async load(payload: MediaPayload): Promise<{ buffer: Buffer; metadata: MediaDescriptor }> { + if (payload.buffer) { + return { + buffer: payload.buffer, + metadata: { + fileName: payload.fileName, + mimetype: payload.mimetype, + byteLength: payload.buffer.byteLength, + }, + }; + } + + if (payload.path) { + const buffer = await fs.readFile(payload.path); + return { + buffer, + metadata: { + fileName: payload.fileName ?? payload.path.split(/[\\/]/).at(-1), + mimetype: payload.mimetype, + byteLength: buffer.byteLength, + }, + }; + } + + if (payload.url) { + const response = await fetch(payload.url); + const arrayBuffer = await response.arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); + return { + buffer, + metadata: { + fileName: payload.fileName, + mimetype: payload.mimetype ?? response.headers.get("content-type") ?? undefined, + byteLength: buffer.byteLength, + }, + }; + } + + throw new Error("Media payload requires buffer, path or url."); + } + + async download(url: string): Promise { + const response = await fetch(url); + return Buffer.from(await response.arrayBuffer()); + } + + stream(path: string): Readable { + return createReadStream(path); + } +} diff --git a/packages/media/tsconfig.json b/packages/media/tsconfig.json new file mode 100644 index 0000000..1fa4f81 --- /dev/null +++ b/packages/media/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../events" + } + ] +} + diff --git a/packages/messages/package.json b/packages/messages/package.json new file mode 100644 index 0000000..c2e5861 --- /dev/null +++ b/packages/messages/package.json @@ -0,0 +1,25 @@ +{ + "name": "@berrysdk/messages", + "version": "0.1.0", + "description": "Outgoing message factories for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.0" + } +} diff --git a/packages/messages/src/index.ts b/packages/messages/src/index.ts new file mode 100644 index 0000000..46b28a9 --- /dev/null +++ b/packages/messages/src/index.ts @@ -0,0 +1,85 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { + AudioMessage, + ButtonsPayload, + ContactPayload, + ContactMessage, + DocumentMessage, + ImageMessage, + ListPayload, + ListMessage, + LocationPayload, + LocationMessage, + MediaPayload, + OutgoingMessage, + ReactionMessage, + TextMessage, +} from "@berrysdk/events"; +import { randomUUID } from "node:crypto"; + +const buildBase = (type: T, to: string) => ({ + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending" as const, + type, +}); + +export const createTextMessage = (to: string, text: string): TextMessage => ({ + ...buildBase("text", to), + text, +}); + +export const createImageMessage = (to: string, media: MediaPayload): ImageMessage => ({ + ...buildBase("image", to), + media, +}); + +export const createAudioMessage = (to: string, media: MediaPayload): AudioMessage => ({ + ...buildBase("audio", to), + media, +}); + +export const createDocumentMessage = (to: string, media: MediaPayload): DocumentMessage => ({ + ...buildBase("document", to), + media, +}); + +export const createButtonsMessage = (to: string, buttons: ButtonsPayload): OutgoingMessage => ({ + ...buildBase("buttons", to), + buttons, +}); + +export const createListMessage = (to: string, list: ListPayload): ListMessage => ({ + ...buildBase("list", to), + list, +}); + +export const createReactionMessage = ( + to: string, + emoji: string, + targetMessageId: string, +): ReactionMessage => ({ + ...buildBase("reaction", to), + emoji, + targetMessageId, +}); + +export const createLocationMessage = ( + to: string, + location: LocationPayload, +): LocationMessage => ({ + ...buildBase("location", to), + location, +}); + +export const createContactMessage = (to: string, contact: ContactPayload): ContactMessage => ({ + ...buildBase("contact", to), + contact, +}); diff --git a/packages/messages/tsconfig.json b/packages/messages/tsconfig.json new file mode 100644 index 0000000..1fa4f81 --- /dev/null +++ b/packages/messages/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../events" + } + ] +} + diff --git a/packages/protocol/package.json b/packages/protocol/package.json new file mode 100644 index 0000000..12508de --- /dev/null +++ b/packages/protocol/package.json @@ -0,0 +1,26 @@ +{ + "name": "@berrysdk/proto", + "version": "0.1.0", + "description": "Berry Protocol proto wrapper around WhatsApp Web protobuf definitions.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@wppconnect/wa-proto": "^2.3000.1039300149", + "protobufjs": "^7.4.0" + } +} diff --git a/packages/protocol/src/index.ts b/packages/protocol/src/index.ts new file mode 100644 index 0000000..1f1901b --- /dev/null +++ b/packages/protocol/src/index.ts @@ -0,0 +1,86 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import protobuf from "protobufjs"; +import * as whatsappProto from "@wppconnect/wa-proto"; + +export interface ProtocolFrame { + stanza: string; + attrs: Record; + payload: Buffer; +} + +export interface WhatsAppWebConfig { + webSocketUrl: string; + origin: string; + userAgent: string; +} + +export class ProtocolError extends Error { + constructor(message: string) { + super(message); + this.name = "ProtocolError"; + } +} + +const frameSchema = ` +syntax = "proto3"; +message WaEnvelope { + string stanza = 1; + map attrs = 2; + bytes payload = 3; +} +`; + +const root = protobuf.parse(frameSchema).root; +const envelopeType = root.lookupType("WaEnvelope"); + +export class BinaryFrameCodec { + encode(frame: ProtocolFrame): Buffer { + const payload = envelopeType.create({ + stanza: frame.stanza, + attrs: frame.attrs, + payload: frame.payload, + }); + + return Buffer.from(envelopeType.encode(payload).finish()); + } + + decode(buffer: Buffer): ProtocolFrame { + try { + const decoded = envelopeType.decode(buffer); + const object = envelopeType.toObject(decoded, { + bytes: Buffer, + }) as { + stanza: string; + attrs?: Record; + payload?: Buffer; + }; + + return { + stanza: object.stanza, + attrs: object.attrs ?? {}, + payload: object.payload ?? Buffer.alloc(0), + }; + } catch (error) { + throw new ProtocolError( + `Unable to decode incoming frame as Berry envelope: ${(error as Error).message}`, + ); + } + } +} + +export const defaultWhatsAppWebConfig: WhatsAppWebConfig = { + webSocketUrl: process.env.BERRY_WHATSAPP_WS_URL ?? "wss://web.whatsapp.com/ws/chat", + origin: "https://web.whatsapp.com", + userAgent: + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36", +}; + +export const proto = whatsappProto.waproto; +export const WAProto = proto; +export type WAProtoNamespace = typeof proto; diff --git a/packages/protocol/tsconfig.json b/packages/protocol/tsconfig.json new file mode 100644 index 0000000..f0720b6 --- /dev/null +++ b/packages/protocol/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ] +} + diff --git a/packages/socket/package.json b/packages/socket/package.json new file mode 100644 index 0000000..fbaf33e --- /dev/null +++ b/packages/socket/package.json @@ -0,0 +1,30 @@ +{ + "name": "@berrysdk/socket", + "version": "0.1.0", + "description": "Baileys-based transport adapter for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.0", + "@berrysdk/proto": "0.1.0", + "@berrysdk/wa-message": "0.1.0", + "baileys": "7.0.0-rc10", + "pino": "^9.6.0", + "ws": "^8.18.1" + } +} diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts new file mode 100644 index 0000000..50c9609 --- /dev/null +++ b/packages/socket/src/index.ts @@ -0,0 +1,638 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { mkdir } from "node:fs/promises"; +import { join } from "node:path"; +import makeWASocket, { + type AnyMessageContent, + DisconnectReason, + downloadMediaMessage, + fetchLatestBaileysVersion, + generateWAMessageFromContent, + makeCacheableSignalKeyStore, + useMultiFileAuthState, + type WAMessage, + type WASocket, +} from "baileys"; +import pino, { type Logger } from "pino"; +import { + type BerryAuthOptions, + type BerryEventBus, + type ButtonsPayload, + type ChatRecord, + type ContactRecord, + type GroupRecord, + type IncomingMessage, + type InteractivePayload, + type ListPayload, + type MessageAck, + type PresenceRecord, + type SyncBundle, +} from "@berrysdk/events"; +import { + ackFromWebMessageStatus, + buttonsPayloadToLegacyButtonsMessageContent, + buttonsPayloadToNativeFlowInteractiveContent, + interactivePayloadToMessageContent, + interactiveNativeFlowAdditionalNodes, + legacyListAdditionalNodes, + listToLegacyListMessageContent, + normalizeIncomingMessage, +} from "@berrysdk/wa-message"; + +export interface SocketOptions { + sessionId: string; + logger?: Logger; + reconnectMaxAttempts?: number; + reconnectDelayMs?: number; + authFolder?: string; + auth?: BerryAuthOptions; +} + +type MessageContent = Record; +const shouldDebugOutgoingMessages = process.env.BERRY_DEBUG_WA_MESSAGE === "1"; + +const debugJsonReplacer = (_key: string, value: unknown) => { + if (Buffer.isBuffer(value)) { + return ``; + } + + if (value instanceof Uint8Array) { + return ``; + } + + return value; +}; + +const normalizePhoneNumber = (value: string): string => value.replace(/\D/g, ""); + +const generateNumericPairingCode = (): string => + Math.floor(10_000_000 + Math.random() * 90_000_000).toString(); + +const getStatusCode = (error: unknown): number | undefined => { + if (!error || typeof error !== "object") { + return undefined; + } + + const candidate = error as { + output?: { statusCode?: number }; + data?: { attrs?: { code?: string | number } }; + message?: string; + }; + + const directCode = candidate.output?.statusCode; + if (typeof directCode === "number") { + return directCode; + } + + const streamCode = candidate.data?.attrs?.code; + if (typeof streamCode === "number") { + return streamCode; + } + + if (typeof streamCode === "string" && /^\d+$/.test(streamCode)) { + return Number(streamCode); + } + + if (typeof candidate.message === "string") { + if (candidate.message.toLowerCase().includes("restart required")) { + return DisconnectReason.restartRequired; + } + + const match = candidate.message.match(/\b(401|408|411|428|440|500|503|515)\b/); + if (match) { + return Number(match[1]); + } + } + + return undefined; +}; + +const toChatRecord = (chat: Record): ChatRecord => ({ + id: String(chat.id ?? ""), + name: typeof chat.name === "string" ? chat.name : undefined, + unreadCount: typeof chat.unreadCount === "number" ? chat.unreadCount : undefined, + lastMessageAt: + typeof chat.conversationTimestamp === "number" + ? new Date(chat.conversationTimestamp * 1000).toISOString() + : undefined, +}); + +const toContactRecord = (contact: Record): ContactRecord => ({ + id: String(contact.id ?? ""), + name: typeof contact.name === "string" ? contact.name : undefined, + pushName: typeof contact.notify === "string" ? contact.notify : undefined, + shortName: typeof contact.verifiedName === "string" ? contact.verifiedName : undefined, +}); + +const toGroupRecord = (group: Record): GroupRecord => ({ + id: String(group.id ?? ""), + subject: String(group.subject ?? ""), + participants: Array.isArray(group.participants) + ? group.participants + .map((participant) => + typeof participant === "object" && participant && "id" in participant + ? String((participant as { id?: string }).id ?? "") + : "", + ) + .filter(Boolean) + : [], +}); + +export class BerrySocket { + private readonly logger: Logger; + private reconnectAttempts = 0; + private reconnectTimer?: NodeJS.Timeout; + private manualClose = false; + private sock?: WASocket; + private connectPromise?: Promise; + private authFolder?: string; + private auth: BerryAuthOptions; + private pairingCodeRequested = false; + private readonly retryCounterMap = new Map(); + private readonly msgRetryCounterCache = { + get: (key: string) => this.retryCounterMap.get(key) as T | undefined, + set: (key: string, value: T) => { + this.retryCounterMap.set(key, value); + return true; + }, + del: (key: string) => this.retryCounterMap.delete(key), + flushAll: () => this.retryCounterMap.clear(), + }; + private readonly sentMessages = new Map(); + + constructor( + private readonly options: SocketOptions, + private readonly bus: BerryEventBus, + ) { + this.logger = options.logger ?? pino({ name: "berry-socket" }); + this.auth = options.auth ?? { method: "link" }; + } + + setAuth(auth: BerryAuthOptions): void { + const method = auth.method ?? "link"; + const customPairingCode = + method === "pairing_code" + ? this.resolvePairingCode(auth.customPairingCode) + : auth.customPairingCode; + + this.auth = { + method, + phoneNumber: auth.phoneNumber ? normalizePhoneNumber(auth.phoneNumber) : undefined, + customPairingCode, + }; + this.pairingCodeRequested = false; + } + + async connect(auth?: BerryAuthOptions): Promise { + if (auth) { + this.setAuth(auth); + } + + if (this.connectPromise) { + return this.connectPromise; + } + + this.manualClose = false; + this.pairingCodeRequested = false; + this.connectPromise = this.connectUntilReady(); + return this.connectPromise.finally(() => { + this.connectPromise = undefined; + }); + } + + async disconnect(reason = "manual"): Promise { + this.manualClose = true; + clearTimeout(this.reconnectTimer); + this.sock?.end(new Error(reason)); + this.sock?.ws.close(); + this.sock = undefined; + } + + async reconnect(): Promise { + await this.disconnect("reconnect"); + await this.connect(); + } + + async logout(): Promise { + this.manualClose = true; + clearTimeout(this.reconnectTimer); + await this.sock?.logout(); + this.sock = undefined; + } + + async sendMessage(to: string, content: MessageContent): Promise { + if (!this.sock) { + throw new Error("Socket is not connected."); + } + + const result = await this.sock.sendMessage(to, content as never); + if (!result) { + throw new Error("WhatsApp did not return a message receipt for the send operation."); + } + + if (result.key.id) { + this.sentMessages.set(result.key.id, result); + } + + return result; + } + + async sendBaileysMessage(to: string, content: AnyMessageContent): Promise { + return this.sendMessage(to, content as MessageContent); + } + + async sendInteractiveMessage(to: string, interactive: InteractivePayload): Promise { + if (!this.sock?.user?.id) { + throw new Error("Socket is not connected."); + } + + const content = interactivePayloadToMessageContent(interactive); + const fullMessage = generateWAMessageFromContent(to, content, { + userJid: this.sock.user.id, + }); + this.logOutgoingMessage("interactive", fullMessage); + + await this.sock.relayMessage(to, fullMessage.message!, { + messageId: fullMessage.key.id!, + additionalNodes: interactiveNativeFlowAdditionalNodes(), + }); + + return fullMessage as WAMessage; + } + + async sendReplyButtonsMessage(to: string, buttons: ButtonsPayload): Promise { + if (!this.sock?.user?.id) { + throw new Error("Socket is not connected."); + } + + const content = buttonsPayloadToNativeFlowInteractiveContent(buttons); + const fullMessage = generateWAMessageFromContent(to, content, { + userJid: this.sock.user.id, + }); + this.logOutgoingMessage("buttons", fullMessage); + + await this.sock.relayMessage(to, fullMessage.message!, { + messageId: fullMessage.key.id!, + additionalNodes: interactiveNativeFlowAdditionalNodes(), + }); + + return fullMessage as WAMessage; + } + + async sendListMessage(to: string, list: ListPayload): Promise { + if (!this.sock?.user?.id) { + throw new Error("Socket is not connected."); + } + + const content = listToLegacyListMessageContent(list); + const fullMessage = generateWAMessageFromContent(to, content, { + userJid: this.sock.user.id, + }); + this.logOutgoingMessage("list", fullMessage); + + await this.sock.relayMessage(to, fullMessage.message!, { + messageId: fullMessage.key.id!, + additionalNodes: legacyListAdditionalNodes(), + }); + + return fullMessage as WAMessage; + } + + async subscribePresence(jid: string): Promise { + if (!this.sock) { + throw new Error("Socket is not connected."); + } + + await this.sock.presenceSubscribe(jid); + } + + async sendPresenceUpdate( + status: "available" | "composing" | "recording" | "paused" | "unavailable", + jid?: string, + ): Promise { + if (!this.sock) { + throw new Error("Socket is not connected."); + } + + await this.sock.sendPresenceUpdate(status, jid); + } + + async fetchGroups(): Promise { + if (!this.sock) { + throw new Error("Socket is not connected."); + } + + const groups = await this.sock.groupFetchAllParticipating(); + return Object.values(groups).map((group) => + toGroupRecord(group as unknown as Record), + ); + } + + async downloadMedia(message: WAMessage): Promise { + const data = await downloadMediaMessage(message, "buffer", {}); + return Buffer.isBuffer(data) ? data : Buffer.from(data); + } + + private async connectUntilReady(): Promise { + while (true) { + const outcome = await this.createSocketAndWaitUntilOpen(); + if (outcome === "open") { + return; + } + + if (outcome === "restart_required") { + this.bus.emit("connection.reconnecting", { + sessionId: this.options.sessionId, + attempt: this.reconnectAttempts + 1, + delayMs: 0, + }); + this.sock = undefined; + continue; + } + + return; + } + } + + private async createSocketAndWaitUntilOpen(): Promise<"open" | "restart_required"> { + const sessionDir = await this.ensureAuthDir(); + const { state, saveCreds } = await useMultiFileAuthState(sessionDir); + const { version } = await fetchLatestBaileysVersion(); + + return new Promise<"open" | "restart_required">((resolve, reject) => { + const sock = makeWASocket({ + version, + logger: this.logger, + auth: { + creds: state.creds, + keys: makeCacheableSignalKeyStore(state.keys, this.logger), + }, + printQRInTerminal: false, + syncFullHistory: true, + markOnlineOnConnect: false, + emitOwnEvents: true, + msgRetryCounterCache: this.msgRetryCounterCache, + getMessage: async (key) => { + if (!key.id) { + return undefined; + } + + return this.sentMessages.get(key.id)?.message ?? undefined; + }, + }); + + this.sock = sock; + + sock.ev.on("creds.update", () => { + void saveCreds(); + }); + + sock.ev.on("connection.update", (update) => { + if (update.qr) { + this.bus.emit("qr", update.qr); + this.bus.emit("auth.link", { + sessionId: this.options.sessionId, + value: update.qr, + }); + this.bus.emit("auth.qr", { + sessionId: this.options.sessionId, + value: update.qr, + }); + void this.maybeRequestPairingCode(sock); + } + + if (update.connection === "open") { + this.reconnectAttempts = 0; + this.bus.emit("connection.open", { + sessionId: this.options.sessionId, + connectedAt: new Date().toISOString(), + }); + resolve("open"); + return; + } + + if (update.connection === "close") { + const statusCode = getStatusCode(update.lastDisconnect?.error); + const reason = + statusCode === DisconnectReason.loggedOut + ? "logged_out" + : statusCode === DisconnectReason.restartRequired + ? "restart_required" + : "connection_closed"; + + this.bus.emit("connection.close", { + sessionId: this.options.sessionId, + disconnectedAt: new Date().toISOString(), + reason, + }); + + if (statusCode === DisconnectReason.loggedOut) { + reject(new Error("WhatsApp session logged out.")); + return; + } + + if (statusCode === DisconnectReason.restartRequired) { + resolve("restart_required"); + return; + } + + if (!this.manualClose) { + this.scheduleReconnect(); + } + } + }); + + sock.ev.on("messages.upsert", ({ messages, type }) => { + for (const message of messages) { + const normalized = normalizeIncomingMessage(message); + if (!normalized) { + continue; + } + + if (!message.key.fromMe && type === "notify") { + this.bus.emit("message.received", normalized); + } + } + }); + + sock.ev.on("messages.update", (updates) => { + for (const item of updates) { + const ack: MessageAck = { + messageId: item.key.id ?? "", + remoteJid: item.key.remoteJid ?? "", + ack: ackFromWebMessageStatus(item.update.status), + updatedAt: new Date().toISOString(), + }; + this.bus.emit("message.ack", ack); + } + }); + + sock.ev.on("message-receipt.update", (receipts) => { + for (const receipt of receipts) { + this.bus.emit("message.ack", { + messageId: receipt.key.id ?? "", + remoteJid: receipt.key.remoteJid ?? "", + ack: receipt.receipt.readTimestamp ? "read" : "delivered", + updatedAt: new Date().toISOString(), + }); + } + }); + + sock.ev.on("presence.update", ({ id, presences }) => { + for (const presence of Object.values(presences)) { + const payload: PresenceRecord = { + id, + status: (presence.lastKnownPresence as PresenceRecord["status"]) ?? "available", + lastSeenAt: + typeof presence.lastSeen === "number" + ? new Date(presence.lastSeen * 1000).toISOString() + : undefined, + }; + this.bus.emit("presence.update", payload); + } + }); + + sock.ev.on("chats.update", (chats) => { + this.bus.emit( + "chats.update", + chats.map((chat) => toChatRecord(chat as unknown as Record)), + ); + }); + + sock.ev.on("contacts.upsert", (contacts) => { + this.bus.emit( + "sync.contacts", + contacts.map((contact) => toContactRecord(contact as unknown as Record)), + ); + }); + + sock.ev.on("groups.upsert", (groups) => { + this.bus.emit( + "sync.groups", + groups.map((group) => toGroupRecord(group as unknown as Record)), + ); + }); + + sock.ev.on("messaging-history.set", ({ chats, contacts, messages }) => { + const incomingMessages = messages + .map((message) => normalizeIncomingMessage(message)) + .filter((message): message is IncomingMessage => !!message); + + const payload: SyncBundle = { + contacts: contacts.map((contact) => + toContactRecord(contact as unknown as Record), + ), + chats: chats.map((chat) => toChatRecord(chat as unknown as Record)), + groups: [], + messages: incomingMessages, + }; + + this.bus.emit("sync.history", payload); + this.bus.emit("sync.messages", incomingMessages); + }); + }); + } + + private scheduleReconnect(): void { + const maxAttempts = this.options.reconnectMaxAttempts ?? 10; + if (this.reconnectAttempts >= maxAttempts) { + return; + } + + this.reconnectAttempts += 1; + const delayMs = (this.options.reconnectDelayMs ?? 3_000) * this.reconnectAttempts; + this.bus.emit("connection.reconnecting", { + sessionId: this.options.sessionId, + attempt: this.reconnectAttempts, + delayMs, + }); + + this.reconnectTimer = setTimeout(() => { + void this.connect().catch((error) => { + this.bus.emit("protocol.error", { + sessionId: this.options.sessionId, + error: (error as Error).message, + }); + }); + }, delayMs); + } + + private async ensureAuthDir(): Promise { + const baseFolder = this.options.authFolder ?? join(process.cwd(), ".berry-sessions"); + const sessionDir = join(baseFolder, this.options.sessionId); + await mkdir(sessionDir, { recursive: true }); + this.authFolder = sessionDir; + return sessionDir; + } + + private async maybeRequestPairingCode(sock: WASocket): Promise { + if (this.auth.method !== "pairing_code") { + return; + } + + if (this.pairingCodeRequested || sock.authState.creds.registered) { + return; + } + + if (!this.auth.phoneNumber) { + this.bus.emit("protocol.error", { + sessionId: this.options.sessionId, + error: "phoneNumber is required for pairing_code authentication.", + }); + return; + } + + this.pairingCodeRequested = true; + + try { + const code = await sock.requestPairingCode( + this.auth.phoneNumber, + this.auth.customPairingCode, + ); + this.bus.emit("auth.pairing_code", { + sessionId: this.options.sessionId, + phoneNumber: this.auth.phoneNumber, + code, + }); + } catch (error) { + this.pairingCodeRequested = false; + this.bus.emit("protocol.error", { + sessionId: this.options.sessionId, + error: `Unable to request pairing code: ${(error as Error).message}`, + }); + } + } + + private resolvePairingCode(customPairingCode?: string): string { + if (!customPairingCode) { + return generateNumericPairingCode(); + } + + const normalized = customPairingCode.replace(/\D/g, ""); + if (!/^\d{8}$/.test(normalized)) { + throw new Error("Pairing code must be exactly 8 numeric digits."); + } + + return normalized; + } + + private logOutgoingMessage(kind: string, message: WAMessage): void { + if (!shouldDebugOutgoingMessages) { + return; + } + + this.logger.info( + { + kind, + key: message.key, + message: JSON.parse(JSON.stringify(message.message, debugJsonReplacer)), + }, + "berry outgoing message", + ); + } +} diff --git a/packages/socket/tsconfig.json b/packages/socket/tsconfig.json new file mode 100644 index 0000000..c58438f --- /dev/null +++ b/packages/socket/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../events" + }, + { + "path": "../protocol" + }, + { + "path": "../wa-message" + } + ] +} + diff --git a/packages/store/package.json b/packages/store/package.json new file mode 100644 index 0000000..c549d84 --- /dev/null +++ b/packages/store/package.json @@ -0,0 +1,26 @@ +{ + "name": "@berrysdk/store", + "version": "0.1.0", + "description": "SQLite-backed persistence for Berry Protocol sessions and metadata.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.0", + "better-sqlite3": "^11.10.0" + } +} diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts new file mode 100644 index 0000000..d5773aa --- /dev/null +++ b/packages/store/src/index.ts @@ -0,0 +1,188 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import Database from "better-sqlite3"; +import { + AuthStateSnapshot, + ChatRecord, + ContactRecord, + GroupRecord, + IncomingMessage, + MessageAck, +} from "@berrysdk/events"; + +export class SQLiteStore { + readonly db: Database.Database; + + constructor(path = process.env.BERRY_SQLITE_PATH ?? "berrysdk.db") { + this.db = new Database(path); + this.migrate(); + } + + private migrate(): void { + this.db.exec(` + CREATE TABLE IF NOT EXISTS auth_sessions ( + session_id TEXT PRIMARY KEY, + payload TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + + CREATE TABLE IF NOT EXISTS chats ( + id TEXT NOT NULL, + session_id TEXT NOT NULL, + payload TEXT NOT NULL, + PRIMARY KEY (id, session_id) + ); + + CREATE TABLE IF NOT EXISTS contacts ( + id TEXT NOT NULL, + session_id TEXT NOT NULL, + payload TEXT NOT NULL, + PRIMARY KEY (id, session_id) + ); + + CREATE TABLE IF NOT EXISTS groups ( + id TEXT NOT NULL, + session_id TEXT NOT NULL, + payload TEXT NOT NULL, + PRIMARY KEY (id, session_id) + ); + + CREATE TABLE IF NOT EXISTS messages ( + id TEXT NOT NULL, + session_id TEXT NOT NULL, + remote_jid TEXT NOT NULL, + payload TEXT NOT NULL, + PRIMARY KEY (id, session_id) + ); + + CREATE TABLE IF NOT EXISTS message_acks ( + message_id TEXT NOT NULL, + session_id TEXT NOT NULL, + payload TEXT NOT NULL, + PRIMARY KEY (message_id, session_id) + ); + `); + } + + saveSession(sessionId: string, snapshot: AuthStateSnapshot): void { + this.db + .prepare( + ` + INSERT INTO auth_sessions(session_id, payload, updated_at) + VALUES (@session_id, @payload, @updated_at) + ON CONFLICT(session_id) DO UPDATE SET + payload = excluded.payload, + updated_at = excluded.updated_at + `, + ) + .run({ + session_id: sessionId, + payload: JSON.stringify(snapshot), + updated_at: new Date().toISOString(), + }); + } + + getSession(sessionId: string): AuthStateSnapshot | null { + const row = this.db + .prepare(`SELECT payload FROM auth_sessions WHERE session_id = ?`) + .get(sessionId) as { payload: string } | undefined; + + return row ? (JSON.parse(row.payload) as AuthStateSnapshot) : null; + } + + deleteSession(sessionId: string): void { + this.db.prepare(`DELETE FROM auth_sessions WHERE session_id = ?`).run(sessionId); + } + + upsertChats(sessionId: string, chats: ChatRecord[]): void { + const statement = this.db.prepare(` + INSERT INTO chats(id, session_id, payload) + VALUES (@id, @session_id, @payload) + ON CONFLICT(id, session_id) DO UPDATE SET payload = excluded.payload + `); + const transaction = this.db.transaction((items: ChatRecord[]) => { + for (const chat of items) { + statement.run({ + id: chat.id, + session_id: sessionId, + payload: JSON.stringify(chat), + }); + } + }); + transaction(chats); + } + + upsertContacts(sessionId: string, contacts: ContactRecord[]): void { + const statement = this.db.prepare(` + INSERT INTO contacts(id, session_id, payload) + VALUES (@id, @session_id, @payload) + ON CONFLICT(id, session_id) DO UPDATE SET payload = excluded.payload + `); + const transaction = this.db.transaction((items: ContactRecord[]) => { + for (const contact of items) { + statement.run({ + id: contact.id, + session_id: sessionId, + payload: JSON.stringify(contact), + }); + } + }); + transaction(contacts); + } + + upsertGroups(sessionId: string, groups: GroupRecord[]): void { + const statement = this.db.prepare(` + INSERT INTO groups(id, session_id, payload) + VALUES (@id, @session_id, @payload) + ON CONFLICT(id, session_id) DO UPDATE SET payload = excluded.payload + `); + const transaction = this.db.transaction((items: GroupRecord[]) => { + for (const group of items) { + statement.run({ + id: group.id, + session_id: sessionId, + payload: JSON.stringify(group), + }); + } + }); + transaction(groups); + } + + upsertMessages(sessionId: string, messages: IncomingMessage[]): void { + const statement = this.db.prepare(` + INSERT INTO messages(id, session_id, remote_jid, payload) + VALUES (@id, @session_id, @remote_jid, @payload) + ON CONFLICT(id, session_id) DO UPDATE SET payload = excluded.payload + `); + const transaction = this.db.transaction((items: IncomingMessage[]) => { + for (const message of items) { + statement.run({ + id: message.id, + session_id: sessionId, + remote_jid: message.from, + payload: JSON.stringify(message), + }); + } + }); + transaction(messages); + } + + upsertAck(sessionId: string, ack: MessageAck): void { + this.db + .prepare(` + INSERT INTO message_acks(message_id, session_id, payload) + VALUES (@message_id, @session_id, @payload) + ON CONFLICT(message_id, session_id) DO UPDATE SET payload = excluded.payload + `) + .run({ + message_id: ack.messageId, + session_id: sessionId, + payload: JSON.stringify(ack), + }); + } +} diff --git a/packages/store/tsconfig.json b/packages/store/tsconfig.json new file mode 100644 index 0000000..1fa4f81 --- /dev/null +++ b/packages/store/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../events" + } + ] +} + diff --git a/packages/wa-message/package.json b/packages/wa-message/package.json new file mode 100644 index 0000000..63f3049 --- /dev/null +++ b/packages/wa-message/package.json @@ -0,0 +1,27 @@ +{ + "name": "@berrysdk/wa-message", + "version": "0.1.0", + "description": "Rendering-aware WhatsApp message builders for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.0", + "@berrysdk/proto": "0.1.0", + "baileys": "7.0.0-rc10" + } +} diff --git a/packages/wa-message/src/index.ts b/packages/wa-message/src/index.ts new file mode 100644 index 0000000..827bb41 --- /dev/null +++ b/packages/wa-message/src/index.ts @@ -0,0 +1,465 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { randomUUID } from "node:crypto"; +import { + type ButtonsPayload, + type IncomingMessage, + type InteractivePayload, + type ListPayload, + type MessageAck, +} from "@berrysdk/events"; +import { proto, type BinaryNode, type WAMessage } from "baileys"; + +export const ackFromWebMessageStatus = (status?: number | null): MessageAck["ack"] => { + switch (status) { + case proto.WebMessageInfo.Status.SERVER_ACK: + return "sent"; + case proto.WebMessageInfo.Status.DELIVERY_ACK: + return "delivered"; + case proto.WebMessageInfo.Status.READ: + case proto.WebMessageInfo.Status.PLAYED: + return "read"; + case proto.WebMessageInfo.Status.ERROR: + return "failed"; + default: + return "pending"; + } +}; + +export const normalizeMessageText = (message: WAMessage["message"]): string | undefined => + message?.conversation ?? + message?.extendedTextMessage?.text ?? + message?.imageMessage?.caption ?? + message?.videoMessage?.caption ?? + message?.documentMessage?.caption ?? + undefined; + +export const listToInteractivePayload = (list: ListPayload): InteractivePayload => ({ + header: list.title + ? { + title: list.title, + hasMediaAttachment: false, + } + : undefined, + body: { + text: list.text, + }, + footer: list.footer + ? { + text: list.footer, + } + : undefined, + nativeFlowMessage: { + buttons: [ + { + name: "single_select", + buttonParamsJson: JSON.stringify({ + title: list.buttonText, + sections: list.sections.map((section) => ({ + title: section.title, + rows: section.rows.map((row) => ({ + id: row.id, + title: row.title, + description: row.description ?? "", + })), + })), + }), + }, + ], + messageParamsJson: "", + messageVersion: 1, + }, +}); + +export const interactivePayloadToMessageContent = ( + interactive: InteractivePayload, +): Record => { + const payload = proto.Message.InteractiveMessage.create({ + header: interactive.header, + body: interactive.body, + footer: interactive.footer, + nativeFlowMessage: interactive.nativeFlowMessage + ? { + buttons: interactive.nativeFlowMessage.buttons, + messageParamsJson: interactive.nativeFlowMessage.messageParamsJson ?? "", + messageVersion: interactive.nativeFlowMessage.messageVersion ?? 1, + } + : undefined, + }); + + return { + messageContextInfo: { + deviceListMetadata: {}, + deviceListMetadataVersion: 2, + }, + interactiveMessage: payload, + }; +}; + +export const interactiveNativeFlowAdditionalNodes = (): BinaryNode[] => [ + { + tag: "biz", + attrs: {}, + content: [ + { + tag: "interactive", + attrs: { + type: "native_flow", + v: "1", + }, + content: [ + { + tag: "native_flow", + attrs: { + v: "9", + name: "mixed", + }, + }, + ], + }, + ], + }, +]; + +export const buttonsPayloadToTemplateMessageContent = ( + buttons: ButtonsPayload, +): Record => ({ + templateMessage: { + hydratedTemplate: { + hydratedContentText: buttons.text, + hydratedFooterText: buttons.footer ?? "", + hydratedButtons: buttons.buttons.map((button, index) => ({ + index, + quickReplyButton: { + displayText: button.title, + id: button.id, + }, + })), + }, + }, +}); + +export const buttonsPayloadToNativeFlowInteractiveContent = ( + buttons: ButtonsPayload, +): Record => + interactivePayloadToMessageContent({ + body: { + text: buttons.text, + }, + footer: buttons.footer + ? { + text: buttons.footer, + } + : undefined, + nativeFlowMessage: { + buttons: buttons.buttons.map((button) => { + if (button.nativeFlowName && button.buttonParamsJson) { + return { + name: button.nativeFlowName, + buttonParamsJson: button.buttonParamsJson, + }; + } + + if (button.kind === "copy_code") { + return { + name: "cta_copy", + buttonParamsJson: JSON.stringify({ + display_text: button.title, + copy_code: button.code ?? button.id, + }), + }; + } + + if (button.kind === "cta_url") { + const url = button.url ?? ""; + return { + name: "cta_url", + buttonParamsJson: JSON.stringify({ + display_text: button.title, + url, + merchant_url: url, + }), + }; + } + + return { + name: "quick_reply", + buttonParamsJson: JSON.stringify({ + display_text: button.title, + id: button.id, + }), + }; + }), + messageParamsJson: "", + messageVersion: 1, + }, + }); + +export const buttonsPayloadToLegacyButtonsMessageContent = ( + buttons: ButtonsPayload, +): Record => ({ + buttonsMessage: proto.Message.ButtonsMessage.fromObject({ + contentText: buttons.text, + footerText: buttons.footer ?? "", + buttons: buttons.buttons.map((button) => ({ + buttonId: button.id, + buttonText: { + displayText: button.title, + }, + type: proto.Message.ButtonsMessage.Button.Type.RESPONSE, + })), + headerType: proto.Message.ButtonsMessage.HeaderType.EMPTY, + }), +}); + +export const listToLegacyListMessageContent = (list: ListPayload): Record => ({ + listMessage: proto.Message.ListMessage.fromObject({ + title: list.title ?? "", + description: list.text, + buttonText: list.buttonText, + listType: proto.Message.ListMessage.ListType.SINGLE_SELECT, + footerText: list.footer ?? "", + sections: list.sections.map((section) => ({ + title: section.title, + rows: section.rows.map((row) => ({ + rowId: row.id, + title: row.title, + description: row.description ?? "", + })), + })), + }), +}); + +export const legacyListAdditionalNodes = (): BinaryNode[] => [ + { + tag: "biz", + attrs: {}, + content: [ + { + tag: "list", + attrs: { + type: "product_list", + v: "2", + }, + }, + ], + }, +]; + +export const listToInteractiveMessageContent = (list: ListPayload): Record => + interactivePayloadToMessageContent(listToInteractivePayload(list)); + +export const extractInteractivePayload = ( + message: NonNullable, +): InteractivePayload | null => { + const interactive = message.interactiveMessage; + if (!interactive) { + return null; + } + + return { + header: interactive.header + ? { + title: interactive.header.title ?? undefined, + subtitle: interactive.header.subtitle ?? undefined, + hasMediaAttachment: interactive.header.hasMediaAttachment ?? undefined, + } + : undefined, + body: { + text: interactive.body?.text ?? "", + }, + footer: interactive.footer + ? { + text: interactive.footer.text ?? undefined, + } + : undefined, + nativeFlowMessage: interactive.nativeFlowMessage + ? { + buttons: + interactive.nativeFlowMessage.buttons?.map((button) => ({ + name: button.name ?? "", + buttonParamsJson: button.buttonParamsJson ?? "", + })) ?? [], + messageParamsJson: interactive.nativeFlowMessage.messageParamsJson ?? undefined, + messageVersion: interactive.nativeFlowMessage.messageVersion ?? undefined, + } + : undefined, + }; +}; + +export const extractButtonsPayload = ( + message: NonNullable, +): ButtonsPayload | null => { + if (message.buttonsMessage) { + return { + text: message.buttonsMessage.contentText ?? "", + footer: message.buttonsMessage.footerText ?? undefined, + buttons: + message.buttonsMessage.buttons?.map((button, index) => ({ + id: button.buttonId ?? `button-${index}`, + title: button.buttonText?.displayText ?? button.buttonId ?? `Button ${index + 1}`, + })) ?? [], + }; + } + + const hydratedTemplate = message.templateMessage?.hydratedTemplate; + if (!hydratedTemplate) { + return null; + } + + return { + text: hydratedTemplate.hydratedContentText ?? "", + footer: hydratedTemplate.hydratedFooterText ?? undefined, + buttons: + hydratedTemplate.hydratedButtons?.map((button, index) => ({ + id: button.quickReplyButton?.id ?? `button-${index}`, + title: + button.quickReplyButton?.displayText ?? + button.urlButton?.displayText ?? + button.callButton?.displayText ?? + `Button ${index + 1}`, + })) ?? [], + }; +}; + +export const normalizeIncomingMessage = (waMessage: WAMessage): IncomingMessage | null => { + const key = waMessage.key; + const base = { + id: key.id ?? randomUUID(), + to: key.remoteJid ?? "", + from: key.participant ?? key.remoteJid ?? "", + timestamp: new Date(Number(waMessage.messageTimestamp ?? Date.now()) * 1000).toISOString(), + ack: ackFromWebMessageStatus(waMessage.status), + } as const; + + const message = waMessage.message; + if (!message) { + return null; + } + + if (message.conversation || message.extendedTextMessage?.text) { + return { + ...base, + type: "text", + text: normalizeMessageText(message) ?? "", + }; + } + + if (message.imageMessage) { + return { + ...base, + type: "image", + media: { + mimetype: message.imageMessage.mimetype ?? undefined, + caption: message.imageMessage.caption ?? undefined, + }, + }; + } + + if (message.audioMessage) { + return { + ...base, + type: "audio", + media: { + mimetype: message.audioMessage.mimetype ?? undefined, + }, + }; + } + + if (message.documentMessage) { + return { + ...base, + type: "document", + media: { + mimetype: message.documentMessage.mimetype ?? undefined, + fileName: message.documentMessage.fileName ?? undefined, + caption: message.documentMessage.caption ?? undefined, + }, + }; + } + + const buttons = extractButtonsPayload(message); + if (buttons) { + return { + ...base, + type: "buttons", + buttons, + }; + } + + if (message.listMessage) { + return { + ...base, + type: "list", + list: { + title: message.listMessage.title ?? undefined, + text: message.listMessage.description ?? "", + footer: message.listMessage.footerText ?? undefined, + buttonText: message.listMessage.buttonText ?? "", + sections: + message.listMessage.sections?.map((section) => ({ + title: section.title ?? "", + rows: + section.rows?.map((row) => ({ + id: row.rowId ?? "", + title: row.title ?? "", + description: row.description ?? undefined, + })) ?? [], + })) ?? [], + }, + }; + } + + const interactive = extractInteractivePayload(message); + if (interactive) { + return { + ...base, + type: "interactive", + interactive, + }; + } + + if (message.reactionMessage) { + return { + ...base, + type: "reaction", + emoji: message.reactionMessage.text ?? "", + targetMessageId: message.reactionMessage.key?.id ?? "", + }; + } + + if (message.locationMessage) { + return { + ...base, + type: "location", + location: { + latitude: message.locationMessage.degreesLatitude ?? 0, + longitude: message.locationMessage.degreesLongitude ?? 0, + name: message.locationMessage.name ?? undefined, + address: message.locationMessage.address ?? undefined, + }, + }; + } + + if (message.contactMessage) { + return { + ...base, + type: "contact", + contact: { + displayName: message.contactMessage.displayName ?? "", + vcard: message.contactMessage.vcard ?? "", + }, + }; + } + + return { + ...base, + type: "text", + text: normalizeMessageText(message) ?? "[unsupported message]", + }; +}; diff --git a/packages/wa-message/tsconfig.json b/packages/wa-message/tsconfig.json new file mode 100644 index 0000000..7f7ff28 --- /dev/null +++ b/packages/wa-message/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../events" + }, + { + "path": "../protocol" + } + ] +} + diff --git a/scripts/patch-baileys-esm.mjs b/scripts/patch-baileys-esm.mjs new file mode 100644 index 0000000..e0ca6d2 --- /dev/null +++ b/scripts/patch-baileys-esm.mjs @@ -0,0 +1,23 @@ +import { readFile, writeFile } from "node:fs/promises"; +import { resolve } from "node:path"; + +const replacements = [ + ["_reference_baileys2/lib/Signal/libsignal.js", "libsignal/src/protobufs", "libsignal/src/protobufs.js"], + ["_reference_baileys2/lib/Utils/crypto.js", "libsignal/src/curve", "libsignal/src/curve.js"], + ["_reference_baileys2/lib/Signal/Group/group_cipher.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], + ["_reference_baileys2/lib/Signal/Group/keyhelper.js", "libsignal/src/curve", "libsignal/src/curve.js"], + ["_reference_baileys2/lib/Signal/Group/sender-chain-key.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], + ["_reference_baileys2/lib/Signal/Group/sender-key-message.js", "libsignal/src/curve", "libsignal/src/curve.js"], + ["_reference_baileys2/lib/Signal/Group/sender-message-key.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], +]; + +for (const [relativePath, from, to] of replacements) { + const filePath = resolve(relativePath); + const source = await readFile(filePath, "utf8"); + const next = source.replaceAll(from, to); + if (next !== source) { + await writeFile(filePath, next, "utf8"); + } +} + +console.log("Patched Baileys ESM imports."); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..41961dc --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "strict": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "baseUrl": ".", + "paths": { + "@berrysdk/proto": [ + "packages/protocol/src/index.ts" + ], + "@berrysdk/*": [ + "packages/*/src/index.ts" + ] + } + } +} From 74a6a655a91770835fad35167487d3acb3639555 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 06:53:19 -0300 Subject: [PATCH 02/23] chore: clean publish artifacts from repository --- .gitignore | 1 + berryprotocol-auth-0.1.0.tgz | Bin 24716 -> 0 bytes berryprotocol-cli-0.1.0.tgz | Bin 25892 -> 0 bytes berryprotocol-core-0.1.0.tgz | Bin 36282 -> 0 bytes berryprotocol-events-0.1.0.tgz | Bin 26371 -> 0 bytes berryprotocol-gateway-0.1.0.tgz | Bin 25952 -> 0 bytes berryprotocol-media-0.1.0.tgz | Bin 24538 -> 0 bytes berryprotocol-messages-0.1.0.tgz | Bin 24713 -> 0 bytes berryprotocol-proto-0.1.0.tgz | Bin 25880 -> 0 bytes berryprotocol-socket-0.1.0.tgz | Bin 38281 -> 0 bytes berryprotocol-store-0.1.0.tgz | Bin 25749 -> 0 bytes berryprotocol-wa-message-0.1.0.tgz | Bin 34699 -> 0 bytes berrysdk-auth-0.1.0.tgz | Bin 1745 -> 0 bytes berrysdk-cli-0.1.0.tgz | Bin 2518 -> 0 bytes berrysdk-core-0.1.0.tgz | Bin 7261 -> 0 bytes berrysdk-events-0.1.0.tgz | Bin 3406 -> 0 bytes berrysdk-gateway-0.1.0.tgz | Bin 2654 -> 0 bytes berrysdk-media-0.1.0.tgz | Bin 1684 -> 0 bytes berrysdk-messages-0.1.0.tgz | Bin 1689 -> 0 bytes berrysdk-proto-0.1.0.tgz | Bin 2180 -> 0 bytes berrysdk-socket-0.1.0.tgz | Bin 9339 -> 0 bytes berrysdk-store-0.1.0.tgz | Bin 2637 -> 0 bytes berrysdk-wa-message-0.1.0.tgz | Bin 5907 -> 0 bytes packages/events/src/index.d.ts | 185 ----------------------------- packages/events/src/index.d.ts.map | 1 - packages/events/src/index.js | 31 ----- packages/events/src/index.js.map | 1 - 27 files changed, 1 insertion(+), 218 deletions(-) delete mode 100644 berryprotocol-auth-0.1.0.tgz delete mode 100644 berryprotocol-cli-0.1.0.tgz delete mode 100644 berryprotocol-core-0.1.0.tgz delete mode 100644 berryprotocol-events-0.1.0.tgz delete mode 100644 berryprotocol-gateway-0.1.0.tgz delete mode 100644 berryprotocol-media-0.1.0.tgz delete mode 100644 berryprotocol-messages-0.1.0.tgz delete mode 100644 berryprotocol-proto-0.1.0.tgz delete mode 100644 berryprotocol-socket-0.1.0.tgz delete mode 100644 berryprotocol-store-0.1.0.tgz delete mode 100644 berryprotocol-wa-message-0.1.0.tgz delete mode 100644 berrysdk-auth-0.1.0.tgz delete mode 100644 berrysdk-cli-0.1.0.tgz delete mode 100644 berrysdk-core-0.1.0.tgz delete mode 100644 berrysdk-events-0.1.0.tgz delete mode 100644 berrysdk-gateway-0.1.0.tgz delete mode 100644 berrysdk-media-0.1.0.tgz delete mode 100644 berrysdk-messages-0.1.0.tgz delete mode 100644 berrysdk-proto-0.1.0.tgz delete mode 100644 berrysdk-socket-0.1.0.tgz delete mode 100644 berrysdk-store-0.1.0.tgz delete mode 100644 berrysdk-wa-message-0.1.0.tgz delete mode 100644 packages/events/src/index.d.ts delete mode 100644 packages/events/src/index.d.ts.map delete mode 100644 packages/events/src/index.js delete mode 100644 packages/events/src/index.js.map diff --git a/.gitignore b/.gitignore index 379d65f..97abbcc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules dist .env *.log +*.tgz coverage packages/*/dist packages/*/.tsbuildinfo diff --git a/berryprotocol-auth-0.1.0.tgz b/berryprotocol-auth-0.1.0.tgz deleted file mode 100644 index ad6dddb8ec098eb7ec95feb0dd659ccc3efe73fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24716 zcmV)TK(W6ciwFP!00002|J=P>Z=1=kHn@JuMqeu(9*Qj1x|*vQ3^16Rx!l-TU{$fY zz1p#}ZDsY!H<hh}Ac@F-{0;v0KjFVmk9&Xk8^9GN z2>}1`<@Ns~|NY-Tt()8UKm9{I{`B|%{ORYP-#`6-cR%AFAMWR;+jxAx|NJo?$HUFX z{rlUSp8tN1NBMdFynp;@cTO7ud}A|xTeJGMX7;vb?M=-H-qsA?){M?>Ht#>Ysm;wk z9=zYin;QG$=ezM{3cpAH{r=&%c=-9|!^iuF{nOWvXVZE5_1F8y{ad+x+&{$I+uq*B z*x%gWy_Lc*aTgE1zkhfufj95KbNi1E_aAN^FKPbo&u?w~5G$AOt<4`lf9UtO7qQ6`Tjg2qi-*yr2wTmQJd;5M7{M>JTxw+fFSsi+-ydb!UQwS~>7)j&p zo0hGwad8k_w0(D;57F`#5ERkBs2-#=qR&cfWo7 zN@qH~?Xz}!ijsS%%aa@Y9{t^OqxatLANJ$^ZvT)*-ox97%=-`V?-3u5n~1Mbcw)I9 zw|!cdQ#Rz&-Mkq$@1FYlHGCeM*f$Lx!sl_8`=&`cug-Zq_T$%cp1*(iFn#Z5G#U4I zcQKCY+TXUhy@_Mm(l-sZ%i{5j1}PAHKYl%HKc0Bx-6d`BA5sxKqus~*``dSqd*45v z+2|a`^t*W*XRTlNTfZAI-<{c&|8m~Oez+gMy}P;F$3vd#vzTaW`lkNQX1}e~nJcli zIh$`c|IgX8io1Wk`*pwn`0j1ZA7cOT`Q0;@oZar+-u&au8Bc%38|SR!r~S?CSwigo zx0^U?qx?L{`g`=p`|(?xwXNG-b^qyMoO?w)oO>0`8~^3*{&9aZ9^Z{${q8Q#TfVz} z-0ipD&S~c3*Eow8&eD*+zV=VJ2w!V@=l{C-<+wBHwdRle`v?E!47Ji9ALC(v?(^@{ zFd1hx`+PV4@$3ElZ;xjyj;Cw5zuw%=e|&tnAMtpOVto7Qaer1n_jix?=jrZuk9$9= z34YV$;q%A+{pruoUmpC!8IS*Q0{?N+3H+w<-Q!sgzkhaFoYU(5gWsH?bf2PVfBpPA z>)AIC{JiYPLXQw}Z7iUP4`!go~(f4PF;g9jK z&J|H-3!9Ih?mmzEdB*De_osOHe2OFJ>qdDc-`?EC`7PeS>kskq4C(P0e#XQ9eS5P% zV-}D5hd4(LK0W`2IX^c{$^Pj>Je=S1_vmM}xw-r0AL$&M=iF5Lcs%21?QhPT$I8|frvERqTyQkC5hZ?3L8;5`Hz2m z3G1HJ^r^d#{_q$N+3U^SFVB?TJ$-mi*ZcVJ@z(co{-E~{{;zm=d_&7b(wx!i*%5b6 zKlk(V^IDwIDpFjYGqA_Fn`b=!-{%;54}SMcykQRi{`e4&kMADi;a{=2-)_dcGuL}_ zxI8&{&RUE=dOUx?XSDcqcV1NGS3m3Vn>3&Lr`vb8H~rnX|5v1u`_}dkk(jl&w0>%N z+PeHR9{0JBG4}8B%1B55&Fx97Iezuq-%je}F_BAtvq_xj_y2zGWBl_eGWPx{+Wq+Q zdL?St7@6OF&VN^+a*fe^@Q)v3KEJ&CEk0kB-a|Zoy4_zo)%2jedx`sf_v>|OUt>j6 z(YU|6{ru(4wduWE5BDG5U2}!MbaBo3zq{YUhkpC#Pp;m>HO9TUsvbV2>HqcnD^k72 zC~r4jy?uGT618iLEbcyi*nV7t&NT+KKHY5?=Pz%rMejP?_Tl5FeatU!u0`(}gS(4= z#lzFjt5CYen6?1b?XkU@y&-KZhU%py!qEx@2*DiI@|i_>*eJ-w63#k>-|vxB zFId=giQiqD?DrpBoBlPFl0Ol>&QYK7?-xrTp@k3kALC*FIlViNSEhY+SHyQ6{Ds54 z+}HID^-F1eaY0?jv2|6K)^nWm{YeQpCsVtMdJ_Be_3y7i=IZX$>(IK!u)a9TuH=FH z6TRyTf~)%W{CB@e=g9Nxm8e}~WWUAd`}Oqms)G6}x>p?G)pz;e^y6;-a1zJ0ex7&|v(79fa z_5CU7;HT2MjstAQy19$_$GfXhyvkYdhyBfyMVYVHrS=z`ujdY~;{?pa-1n#C=blRI zN-o{|hxz<+9a`5J)_;Gxd5HPt&9&+M6`|zkF0SH(dGNc(%$5A(-PI^wMcdyVe2KkX zhuF>Cy4XGUOzI>w`pLt(!u@r>&wp2-avjh1h7Egqxel$XD4Sc^g!iXZPdJs&nWJw%@EYs~J6(se}XFP}cd-Tup)Ytg&L;C}h!5A*$RH+SVNc4Ao{1qd)G zYh3L1{hsDuumIn5@D~pEa$oiL)UV}0eW80LCV23%e|i0j&e%77{1qdjrFs?Y-NVh@`rqf{|8euU|LO1l`JWYcNU%e$J7n8oE&sLq?!!NQuwy&$AvW6) zz>c8o2Y1xtLj?{KkVMmpBRAom7JF>DPvmG_qQKKETvZGda)Y^^#cMN66pgTs`G188) z>=^TR+cCk8iFQn7$D}(Z+cD#gx$KyA$2s9bJ1%9%rS7=29SiPQc*jzAth{5**S6z| zJFdAvuw$bgTiLPI!;8g?hrVbB)|+1=vCZQZQjF~ftq!#y-~%6G`)bc*+k;p8qyzl3 zqhg0Xq(c*>9Wx*L;!tNV+_Z6rZJh9BR}Zd8Imoy574mp!*c*q}XRdzcXny9@uek3I z?)r+e4vtCSP}lf{@++GRuJv=@3g2zA^yh*E&4J8i&M7p6+e^ z@)XK}5v53Y{mYFjp5?|y>B}nYSjvt?53Of@A&0+A$@I#U_>aN9bfIu$Mh73r0sm>R zZO3|W^X>Ud$Om?;bgauCEux;gh+1~6hZb@BLJogPc&J6LY=IpYJmEt5a+%a;q4a~x zqzj)v|uxEZbbd}UY43z)cjuduuh)=gK z>Jgc|QAq**2fw~@&~n9IRz+Tw*@u?+d3nE#7rz}=F4MtTtGzCo54Wg?&i0=aqWabN zzTR4X+Qu(ir$5-Pa_Ec^?TB)z4vAWL(ZA@atJkkodS!Mwn0n}Tu9RQwxRxDP*>Tk! z*LtGBto(xwe~~}igNMYN9%@~4HM3>DZ-<3rKJa7C{Dz0>reYlBnWwYf{?L|^W4GRP z8_o~z<3qCp+!3U9^QtQM+KG8-`6oFf2N>{s?V3-R=r@Gr6#*yTc5qN-uivTY$4(`* z6GwAM20V}A>7140y={vOIYj%T!C`JWq)*|YC+*M#N;%YAexT(Y)$j~=WV9pWS5AP@ z59agr1FthJe`g;&FZHuPe;NWGAyQKw(`%=66Ns-Y!}b9EK;b`l_`g!y4-crxj+(wQ zpe9GA^F`FZvNnfq_=C5)99m6Y4-Q2y0e3^9U^tD4DlJ1D|7}}4_Ha%vxy=J`A!CgK$kg~E_RyiL_FId%eEr1^?e#Ce{sIrQsS20&Fs)Xo~C=~i>=k6FAhGfUv251$kane`sIOb zeGifR{tG&I_z$$ygWQ<=N3UGF$rRsmzPuvKzY!|(+95im5PY#zUL@eR(wDzlny=+2 zzsS#LwtHbYdu>qdAa6W<`D3M|9@0JZHHn*DeNXY_K0oNSl^r+Q@hjTJp%%L1cF@Xw zrf;&d?_|r%E}9%znwRh3&l_O$rzU^CSiWW@I7I7@^*BJUd_}L;UA3LzE_Jy>2llIZ zH2U*!Yu(uaHp(tRcL?>scLx^bnW?^PVzxaro7!HVs2mvG_P9N*0_Plar*vmE_p8CK zVa}@Yu9aPrUDI8wyJoxAb_lRT$g$84fp-XHhagXL0^1?99U|-y^VHBQYXAp7f9mtk z-|+V3HkvbozWc|1(`g0>!O85AF~C~T&o(|S`dNm z##qUGL5$VvWY#i8ivG0w$=8apfBfIJzxeupjr))B)8F?GpJMmZ&4-V-H!=U$4F&qs z-|_$1ecg4DUcHOKjNx27TBR1P4&B$&6WkI@SR%AHF~q z3|T|84bjr(WNFrDG;2l+Zi|PtDqa?6+)LvaYnC;7 zTLY#Y?Lci-?!^(MwABXmI$3BUM8l9d+?G2tQD42*u8PKO6zVu!W9F$waLi6DtR{^T{>eor-`T(7QNs&zRA#N zP+x&0Bec!lk%))MRGVcIw>s;zf@oU1i~&4iG@wDuRr!J=2z5c_g>7nGwam)Y(PubV z;2f$QyV$HX=T^8e&Iq2hnbVqbN!PPF56d%>R6Y7!qdHluLwJDWsH{|^@p7mTMf()4 zp&QSGU(mHdpjoRSW~FN-E@rbVQ6bbCwRZt3s}-$>XvTKvZz$5bHH%K@I>l)>@@p z(6yjU=(V>VPQe&nVl=gAF;jH5oNiymY0BsmN|-4(!{)*LqFIAT>$ud|M->o{BDk72 z9Z?34MtzQo1yKcu>zp0Jth>8U^^4B+92j-P^wzDnUPJ~vO|2aY(#rb-`lO|*qGOs# zcFowqx^TUO%|aWl-a>|!SiMQ9U>wD{K*K(INT0nRPz^?ip4VcXO}*J=Y-Uqib@E2d zWsT0(tE)&WK(IzEkQk^82F00cF{3tQEnzJ%;SybDEpit2zRV3GxHVr=X-4mPg?5_E zKG{a;rPMOks*5zL3U`|qblq6Pz$dFygmK=rz5p!hC_{WjkB2M+EgAge6&pkAZaT=cR*%lDC(Smq1lvu4c@QzarN`cv=VDm{@40SmQKyx#}NG1A`n@gK_ zw2|7*m@PFfo@f@nQUL}8V%b*N2ZLY--rCsoAjbP%*^L)F#(bd}(a~ zeJ+=2g(d`(7_4k z+&N9*ne46_tI2A8t!8aDEuc91GIY3P!7J9rRZ$%)R01Oua*D-*qo=N92DEzVw5Io5 ziq@>KRcW;hzsUNCI$N(@AY>7xFzrI(V~CgLsW(^|%a+mv(H0_g$XKIv^3AAw`>Y4o zRYsG-i*c?IQ%AJ|0ct~B+()n78X|gOEgh#&)owx}mmDssS`h?PEI;%&SxNvc; z6y!W+h+0gr*3iv^i-W;hh=RVzdR?_y5M9LKpsWC@MW86c3Xax##p>x@Sk|!tfYs$4 zdKo^kG|TftDUi|%V7 zpJ_OE4Jbyvl0k)Dm0LuiF!t7Q5KRJUjjHI1v<_xl#mgm!i~Ecf*w-vmX9NW4+MHcH z#z3-#J)Ndg0M{yRWARX~NB|*m35QEtod%?m0=;wxNLMcR1~ryU;evg0Y)qVeiOn^w ziHh~pH8>r|)oB1? zk)mB>lrn9=!YP{%FUV%S#G#Su2!MER=%rZ^3AeervU^*`%PG7z9z4yROX*P@wb}%o z+}cHIVVkUD&LvT&RB{z4k_OeHCOTSW7t`rtA(J#k9X7PGX6tszUN@D+n%WMhmR&-} za02$i(S{q~2sWbKHbM)L7AhJ*4RMW*(qP&^#clv{LDyYI zR4)~Jh99he6>3mmlwcQjs#OGtoM}yvpwYFJsDP=yk4r>~l~nSpHG|+zkYNofE4jEk zZ=Ts$90A%KQb|oeq3duX9Hm|)QpoCT6HHd0n&xh+*h=Xtz4VZ3(v}pIRa&YNu0BU= zC4Gqt;F5FQ(-Ym%8=_GmTryW{t(gsNu&~UG@H7+X1$<1|nkCYjmE8GoDYbYyTC`blmJU#waym_;qk9*= z#Dm16`)rQgOUZ-HKpK-RO1B<>=Dm}O%JMo|N#n98`^<=F9R-hul$-{tLnDDX`|Qqu zeXLl$E?z~v0?VLj5_4GV(P`AcHKa%ICN7U$`=erp?F_i4&N_OfMcgREl8z(tLYO+W zmeNP+I$cULS?qbLF7XC=FBl6Kjp?h~T*Z12jM=nJtD-;|CYCk_wi0c$I?SbN#(Y68 zG2Kc^bXe4#$-76d%_P8A007OvhP97cqLtQNOro?E-Bo7Fr%N;r!fDtBRvs``9fLn#-vGs!`d3dGj4uC*EoAd+lNbSP}=Z@kP;!wCB0NS{){6o!UBjNYCiGWA!bJO-0ptWk}E# zEt(64i4^xsX1yqF{%La)c92%lsCm_PBC2IrqbMCBy}Vk@ZKSNU&8;1)@I`k`8^qnK zx%WW0|JAQ=XtF;`(MM!-fcYxdH6HPqIck2!jyHf&W1UffE}m`a%RakPU`G)=-zP|Zj+ zgoS&tnE`g~1M*Ee1FO!3QPUyVVKfiI23dezgu=lZH4qSyY&+>1dm zRD@Flse&d?M0(yEQWRPVia-c*7tf<9>Mh+l%3)(QSBc^$pq3ImrG+ZB3`lWCXlX_% z6(_mdwSU*5VA7j#Bba z(10;IZ}&{=s~?}i@Hxy!Oa{!5rqofQM&;Fqhj8hzq$4@kjsnvl#EZC>9)0xV>J6K? z_Xeni-K7K$)+MnRp*G}>FtJPTw!!6?XCdWo;4teVIDXq|g;@&c`R{GEW)vee&LV2s zGg9lktnuu5<4+G*vlhbYWe^@mEkQb2NzJFPGMy#ra$^|Q499XJpFKnIymW2egp6*O zwH7MXj|009xoJ%EQU;J`@YlBMtfb$uEmIAf9z5D02^+Zj;Ed@&U)cN64$@IPtWLm0 zig3cK973j>7cb;EOsPWD&XZ=iOcXV;1es-I|7Zur8oMssg=tqHUX{wU(~UfVF9l7Gz71daV^Fz&g%FsRe0k+LlJeDz!jQ z62yqK7C~FB^mM|E$-P611njgm6Iw^*xYk)#w9v#spq5%Jtfo4)YHF1h&~$^S#l$*j z5%{tUbw?`J1LyG$s7M-htqT$t1ZhfTq+h;PO82;qEd<80Dpo|R zl^T0f!6;=(YKDXZ6Tv6C+8D<-c}}Lv;WJ~9k#G%aCC#SUV-S_P!2w}tOT8P=i*dT( zR-^5V9N%ORBTAo`PtItFQa~--x(|b)eGHx50~@tmy0MDZ7|_#aA9Va2z)Wa@M$Id; zD5H+N7^<1sVjda8_vyXGnmC5_^v6%1F{>+_pxK2c-eFlQy=fQiPnWz23$8KG%I!xUpRmJ`l_qI5T#fMhXI`!Y`4 z#^_yrEs((xG&_y~%bIrqFO6GYX{PgW<<}E%p79H-MXRMCo+2>J7U@`xQ?s)vx)7*o zOJ!*+k6Ah-%I)|P^=aBIY^kfej*{`Rz%okW6A95F;pqkoY|^kXnk66|G;NvVo6J~4 zc}8?XA5a&!MoYRtVnL1B7N%>jtlle0jlM)HOJAE7d|az2HG%vIEF@T+Y{-h{vn3FH zb!jbQ6)h%45s%R+)ifm_v;ta=?*WC$>@9T7%40dFwqpU_GuBbCZa@^qLfjKzRv_Vy zTL7Ykg`Q#`1k|=d%BZ@U46UnM1H;YjSHZ)qQ4 zUXnJ{IznDm!wfM2{Kd^}PS#kRv{EtYbo_qg^u9Fjt~5A(G^zY2nlo^Dl~K0q8OO?P zUsa&i$~C#H1H%cDjXG#=yk2QdJt&c##W>u^7dC9Tuf^ z9Yg8~wu^}b&@`?!LoDg#2~o=MB~~t_u*KazL{Ht)h0}PnBtb@StM%(EUaN%g6tE2REYW1;cJ-kYZ zu5PM`t+bQIjwPUO07HcnK9=JQET*MSlL@O*`a7b{5NINEDR?c`7D(g1&@=8Xgz>D(>#P+{NIVl`7EeHV z+V!dRXa-t+)VVt5aG6AG85SnxX`Pr#&$yxDac{3@j$&Xk3^VGi5ru2dOv@JH>XDad zYS)^8aiCdR=1QVB$>7Uz;h(YK%4rKV1BAj*I!qeAMNqJ3rf9mOX2v%Q6d>zXCEX%! z>-ZU;sNA&=;!3?NsH9L!9ewBk*OEY-^g4#K2{A}C^HF$s0tHTRh=(q3K1&^G(XUl` z!#D%AiF1@nL(yhP#;L;tY^^~F?P6V4*CjAL*M(fCO2+YxXqFXbg{+3!nu^uLVe(9j z3kkS@Y*K8wrGz}eb72|RZpEw3Ob1HFsZwFhKARHd#IeiB=>7nkHDykb;0;S3Cs=Hm zEs6=g>PqQpMqJ1`IUNftanoxKNPvi-&Q$hsF(~H!QtI*TZ<+GUvq6#4mx{WO7t`7n zwzf1Cu#C8D5v(?G_$otfQTS?vm+Vd-k*3X3^=_*JV1-Pg8;JvHHG#t2N)Mc5QZa!! z9YCf;%VXn>HLq!J2VAZ4o_<;^Ek1&e}zROYg0(jCaW_i~A_rX!TL{^h(enM4f*e}(xGA5pW6jt_?ZBvQOP^R$S}909FH6A{ zT1w2AV+`;vji^9|SjGt#uz?T{fNtq?rQF2;ESYN9ATh9|t_-Yj;xtGH2Jk4Y5b7GN z$F&!(8G|T-1-)c$b{K@}qDHK2@J%M`RrqU~sFmP|IC2sA{rASX<;vV_b`%_}0^oNHPb(`%FTR;-y>5Cq3h z$gs&Fj+UT6-9oKVY?Lwb8c3_3sHgyFb*!W&38m;%v(`kJ$EDPQ9*Lu@Hl~y|TVnVJ z!yuwTj#ho(Sj}*@R#q=n9eoZ(w%V~=1pM@vI4fam9gw)7&`M`D6z!vxx+N6Mnpuz( z%>%M1gS7y4X>@|iK_p|AYf;bo6vZTjQj(22maokIFPSu3b^6THGmA=M($aQ6!QZUf z9XkyUcGglnakyg&C(y4HZ&_M^<_cO8#?=!*RnXCEh9HkCuQdeAl1z$Ovkz45!fnlo zt3*RAi&{gJMlR72yd{9pk;m}Cn7|c+2?Imi7bH zga%ULCcQzdi}3tby#ddROxBX&lFm}0jHuIFnRU%f-*2fdS;YZC-KtxfilLXd95UA9 zkg-r=pFt@^`&t>T@8bzRYDES{mlSLW#>knvD!xQ9 zG5Q`E^iI^{kd_Hay(@Zy)fn-(*69ICxlm0IKw(HGdo>{su6e<%&dX8*teNcJat>X-Jd#HdlsBPONo2g)THaqD0;${^)L@s!;0ynA~~R865? ziyr4MYLx3-7c_{OnT@bmTFYcbV-4)S!Gb1E;<2*sfs9O&(ZK@q1haf(m4RMY2Pt)8 z`dnsjnYSiBy?R17gdBYg&8XoJDiXyqwr3j>^YP}FJKukLh^;I~Fql`-o<%`=E^@5{ zyjJ(9Gcd(E+XV7VQqyS-vzLwu#5&HdB0AEm%rRI;optmCM+x>&jlB3<1`SH)@^eOZ zaXKu_2z$-g`0?JL`^(V zdw@Kvk#ITygEC7v^L%;?nOt)k)>`I$#}rMZ6nkWWnG>oYRY>{PxwcMqq^p${c5hS@ zP(oyyse2vzmgvmZwc^SWNt8o5!O_OO)+|C4tGdr=>KIZMEwFH6*Azw>w}cj{(@w@k zj4`3WI-yWhf>@)khz)@l+(ftOvel$ z&6fOJuq8ZzAXRwd5vg!vUgBOQ^E+ig0`63gOP(=cX6AESj3Xn8+^b8knfQ>27g<-t z7Dh6`vOK}7*VHniC+zvSV5nJvAq}QN*m@aZOG=eFSSHV)*l;}#nbe%_$T92E=9%2W z8BRLxE8>#yxkWQ`|5sLiz*#G;)jE&5`LadFfz}}VJ%e$ro$-Gb2w*jy|QKgz79Md#mnjsV}V*0hH8YEg@f8iRo(=fRKS{0 zB(J^IH0LVSQtL#?`Y)xPf)PpVP*2SnmgF&6)AHVlx`t#@cqw%#f!I`EYEyeweVAHG zYsZa(#4NKmVs@mVD^;k)&>R9 z$~!)>Vlk;h;YoF|)QB-4dcx4H07#pqP>~ZrC$Rw zXUlXg!wfx?%C^Rk6ReIUS@5h+B4|3vs|oXJC4fd|j2F(LTv><#y=YTOA6edW=&kVa z4q|2XGz?Cqs6|?16WfBUOjS##QJ^#&AlznKSaRL^jLAzX>j^V}i6!x+qu`pOX1xks z6%!>+5Iu1(1r|W&YgS392+NeNJmyNP;<&znP=cllQ<@RfxH4ujCz$C(T74LxmEN;U z?dh&@s6~79uFCU-ihm7VR_}>at3#RQvNlG7h(SuC>NILWj-HMyqf{E|S`l+KqZ0yq zGA!foPRaBwJ^JQ-5%zS827sr>4=FDPP?(Bais67rHTV?kyZeCA=fXZrJSx=HaLol= z1GkVKw^U&BtTdEaVt9v=a=y(IZi>`o6U7AL(wmAtKfn%Bq!pq~$avK~pomom8zS)BQ*4_i9ucw@L(dXnePr-+5dt@sE!cD1(kVrXXBE?dS?I#HQVd~Z&e=+X z9#%Uy>>{Mjyv#C0mGR=qX|x`nK?7vWqKq^*+XxFSs)FKJMiw4ZT#FNr9)X+MXCpE% zLcOdL!oz6^q%w{4aj!992eCi4A$(c|tUBhw3 zs9E6@$CB`|6xzxt3bxQ1$i9G9%+exjP}R(FKYpV*r2kWRj3w^a)i&)0vZf|w9zvFR zm0~yu0@JOUT3@G`7i&GCyy*%ez**TN)xDmm;ek&v&z4nmRvFwNExgrcAzGNVdq!>6 z)*5z7s)Mp>D%J@n9a&ipMg|xb+W?3NQKtmjOTnSDHELS0XA)Vn6J}6a9X_cu81swTW}tdTfF6*&PQ-Niz+j&qQy>e7!fJhbdWToIG#jI!PZ^wQ@~SGDxmk7s zZZlK0rUGQv5_Ak1L;#t*GR4JuNvmjNLPYC2tf^JR87(iHp{F28vbe!mkSAa3n9X{I zt7b_&MhN5D68vW-)NlrLwYUi?s9v9NzOE~L9MNfZ?kB)1 zV>X}C1ygNYZR(O%-Lv)`j@SLpy5Y0##3!O&>pD?+*4~FCF`)Dx|pxC*W%;D87RXFRMj*=+~m}TCY=J|t3 z(b=~uk*lZZq7wpc%yX>nmZ96cF;mEu$%RJA8qzaujlt>n(nM3m+Tg!lQ)5oR^l<|> zC=1&~-;_EVYtF0@&^uw4n2sxalYULmwOb$K50N57L9Xl-K2Wk zqHZ*LR-nt`HQIaT$YhPf$ry{>K#@;Seo?f0fx=6PY-VPC=Bc-##Ndn=IBEifvh(}VYgZH8q&~~b^=zEs1L3QU=f`Os}@=5vg%xU z#V9SyAZALkH8G!=>Y6tcW}E`!1Rp@>tePmMHL*-97I2J;eP-lrWx-`KHByp=%sLmX z!5Ep7(!8G#o0pzR3njs~g_PPzJOQjg>md}G-&|p31Tvxipa|3%T*fpV*pG9O*RD`B z5umcB6HacON!1`dkxrHx@zP9g$V=0exo1h*UY5)gE*wiNo_dyM=9%RNiL;^-Paz#j ziU|tlL<|A4NnI_*Qpp5kO1<`{6AH_eItVNadS-C6HyL9_tu3PzGqMhJ%c3UJtz=OQ z*Of_NO)3vOVFn`$J7@lE^63of@hVXZ|>4329D1F40JIL)H|m?S#a!%+EB(XFhB<7?F~vNrHZ6YYEE{wrM9sqq0!(lmzWXx>BgsK+B?SRm)tU z18p@*Tciw7j>bJ}BV|E#U2%fHC>oBHKK9V8gqC@qG72|sNLI^MV_y}73iLU+NFAeQ zohKGgfZ1_jSGd##Jp(}1Y-DX8^igJH$&&C5`CQ2|pg$0^rdXCFpBV&beo6|cuE_kt zIiMFz*|C+rRwYSw?F2K{CTXXh85+59Bf=Rw)+}_EF~h{U0&^KoT{QJ3 z$-Bq88=PS2bM*LD`{U4&V;!kW*jYmN;$Na{qrwqa0Nvk;H?Dy!9=ciahz*9^n3 zEZ@>;wwf1Y77i{X%Nk@IA<1H-b*pJ>b8&$YESb+z*6}6EI-QB(X2AwkwG|LfGuXps z7U$wDBE;yK#F}*gY1Q;=fM6|4j-P|++Dc2^y2WtZN=I5cUwF&>H%sA>rGm0xPu7#o zKOEF}OZ@evCsc3&utf#JIRP+Rb;iij$})S_k|cDWoP~yCNfsWT$h^F!>o7w*CwNdXo{S)XObN)4iN(=7}QNL|@JB-a;l25Wv%}E;@nKW*eg11p)88Sl6eaUbUtOD0fv#4Up30H-x=(U6Tx3I^jS1rD778`RwrX=;1sGBP+N zAdw=J{n{q%_Y%yIwPbQQLFpda2t7H(R&flJxh;SMKzv`oZphTY$>kPdiWre$%5jKl ziYEC0@a>{;@<|f0V+ZNFAo`0Ou<|3&=mxywxq*6Tm@!&sBA^Ue>w|7!X3&OhVVDZX zsDPDQfZ)Oov?Zyqa{zm20lZwGp^6>im|D&zCU0U3FwHs&*)&@R%%_O)TmTV+lmZ#} z&?JDf83bw~ZaHe36Ar~z!w1O~ZHSm-a=`539spRjU=+1p8it+@7>$DMa1&S%J;B{TI{;ku5?EJgdOI}72K;M)Y88x|o|_{a?uYGO z;`v>7=INR2X#ljXCO@17{8ED2CJcCE62eS3ullvWPdKgiT+zH4H@0E||&P5cWRcThcA&)SWfjis?ET zP~=#sgP~h-9aA{2(z z0vD?lQ1`?ImO#^n9~FETv4t2?u!yyZl)LXH02cs3Q*}5?V7Q85c%c$W4uCHGX=w@) zgh8=#;9fn$j0W&1I6-FD5V#7>O6>_KZNOL#4%Sq7NI0BVo)*^?h+a8$#6JcYN;M)o zvX6;MVF%h8Dm8#f%0}(rj#iVYPT6=5BhJqS^Uw41pM>+D4h72abiz z0?luxhT~#GpsX{^59+!00>82rD&QK8);SrnWMgh)RNu6xC>}~r3p<@hBj78!=8|iX zyr6X(+YoHg0M^rLi-Q_;4zTVdADss_F2ZXTph*GMB;^8D#$GzZ$(W3gf596EXY`hG zAfFn7OodDfe5ZJX>RpG_jvWx>E)LLdnQAaBF)mX_yf#jS*t%vK0&meE zy`J9L0c+1&&~mok0Y(yXcQFk%ERpVdc(}VDjsyfAuA3G;s2(&IYo0!c>)>^TwH~_G zF-nAAeeUp!gxvr!1|9xHJ{ud0jV?r}9024X6gUg8`7&eFB;zyoM>yf>7#Y!_!1vM} z@q!GXYfqzh2IvPg0oLT$78r>Tn##t(%-f)K?>Ur~;t0L=prI+uW{g;IHrJ*Z4bOS- z-(kDf7T^GR+pKHOmF&9(NLQ{#`=)ya3^O1%z+zz$aWn=vqVz}(VP!T&3JVMrBNb{j zKpkXSt!QxoX|z`Bq#DUkh9edvz`Mpk7nb2^4ic4#^yjGqh=FG&#R^f>fNa)-3(dk( z6is#kU=SYBGZuF6qDd!m@a=$raLqdvW>ARmeuEwlg!xMr&X;VHb<2H8L*AgPkhV@+s*jSQ5JgLpL^I%|`JY54=L;>{XnyY}vi*RlW zNplq@2O#!6Zmf zpi4~=x|K@nr8d1_m}Wp>wbqI*06wU2eWw;fVN;2i#AWVDlju%$APL z5WE5b!CrEeNLLUz2)bj*Aghc3S%p@k0+vJrwkNm+-kQ{aEo-$2T)?Rdl-(Ax=;fM? z1BRkrn=QG+$3v%gEX`~Tbtfo1HUgy+m z^lacQm|SBJw19EKB%cNQw-g=NnDF$r1rg8A!YpKF8*k*+-hZ3Bo)cA#$L zBIsbb>tM(sS|`N105JeQTL7Pj>R0!Yj7!+|0Hlb>Yd_$@NzSsbonrQE2d1_S4i>!y zOzSNs_&jJhr&rxPXK2ji(u z4Fmz%8OYxl7}Q_1z(cAyFo6f3GW0DtHWfHDMw|&OKz+zW$R-{DqsfiAH!ld`1-z&W zFb_g=7Eu}rEe@gzM<^v2F8#0!Eq`$-!qS#Im|?V`(5iI+v|q3uVAD+4QfaIuX4LKr zrOLKg&lMh@!9~CUrK%B+tW6GLBZ(>51|H2G37bU%2)1GHW!m7iEjS$vSG^lx1|8xJd8D|7Oq&~!>}R2=n;d1REr57OWk{oPw3Ev!>UM zrq;<-#8SHG0HO#K(vl5OK?#S=;<6hAcfLXb5GIlE21B+C6Bih)4Z<4{=LF|ipo=zV zwKEN{5E+Bhk?~Zp=hhMEgW1AG1;ER$6hW#>V_59VpB5DZ{s@JQ(a{!{ zJd9(*2J1{S#S9Y}Y!T$)q?6$kU%V{@W*<9z3k%|ugX`o<^`IW;41)CntcW&pMBp{z z#He{~1h?8(E$l}KoyVHGAe0++I@lf;+R}g|kbQ5?1$Y5106PFsQt|^3bBsvUWDtecV$02YXySpKuECO2OzF7~ z$SLo%F5GDej{riW`@lvd1Mk8B$skw_cdl3mY2vJ5zNju}Ox|H5A#yrf7q~89qnP5# zpe^m4xcUw-aGQ&9a3R2sE*3z#!BpA_90R7~gyLGS(EKbo;n>bD!DD7%@{p5oxb?*`dW8;m7n%K}xx05lvCkf{fl*kBK@CS@N?jJ6`mDi44p1BBn{ z-s_~c2zbXVfi$p=QX@}*$AaoUz<0Ce+MuBIC5A}a4cjTOhE@h>v>`F#q+4CEWP(#Y zXO|e)35Vd%Xlk*YV;D^Xt3G#z8*Vg11M36I<{AaY zj9MO?5&kt?;Jjel0zYn84=qmCIv5wY2&7GF-S?hA&D4jFxmK_xvH`U~?mijsN_hGR z6$kLhe1i)wU~&5ZpKH&EvvWRB0YIZ83so>Nuuj*`x5Jv{Drs86^0386BTm=gqBGXfW=63;cjp302AEn`V6FZ_b z*+py~8<5N!fI@s|I@PA(bs;cgpt1u{W28ksUZaF$a_CH8G_u3=oDk|!WMcvR9^tSA zC58u{UWZ$2$An1>4j|BJBAzh@VE0i4n6`_Y0Fn$K)C!)61h6;Gsg>I^U&+dN24wKc`_yCpy(X!yPl z#HYp#1tf@HGQbrg&2HK3=4(%Hv4YA?cd+k1-q5di7(}=D7s8w`YOt%YeiKH$6;H6`rA{M7Z*RxNXS+#4>Ori*p0) zC}a)bBZDKSM*&KmPzUjFZh-q2N@(zoVvFV$>`lSoP`J0^tfk(4a*-oE9lbc?Mque^ zI3xz3H5eClG|(@A=Y)9?{8)nTTMA%%3KVOg&gn(db98lov%8fPfX>igi z!!Cd;X&s*6t@P#r{x?bkf0=FC>e^Wg!**@Ky00$S##-QYOrrs+Lg*hui3_3{ORChMCCfmq0t%3&!p2g`8BXKS zp@F$3fVT)S{Mi6h6;VqZ>H<4j1w~}9E!Y-EY7KM?t->V(A>p=<;fltl!bH%lM*}L* z92(%?vULkinKd(99oQp2({pyoMpGlTSkg!cG$jTQsLs?{$M%8+BNM@0et`oMa7YJL z8sJu>TvPTyYblAWFj9)YQiFGP5&~R+qg$}jf=D7P2tudc5lT2hCD0<&;Q_l)KqUt# zEYooGi7{8%5V%sH)At@@FKPBqi|YXY?+m!ZQiDXbwd@hUhj=l}S5aUOH!?6>fpj^7 zGX<2JTKfgz!=YQ>nrEwZcNqx9)xc$zaaQUvf#WRzMkE<)sZ!ECVKM^wlXwZnZyRuy zMG#WrU>x7uXLn>Ff}Do;_vq&6Y+m@i)W< zv`!W5iG8$;fNcbcc}Lw?)3Vie@B;9sIwJN~gAfMBH3Olw!wTNI0Ua*z;bTQ~Kpz2k z%Ow!}%Q^t37ueAV$P=)2g)NgyX^hR;ud(^nswfgZW6i)N&X@T(6QL$G%X`Ah%iItr@BHnBc&Oz)7pgr_iC% zM!Zu8a}W*f8e($nh;4+?Q^mQrSsUZioouzu!6Z1#6LhE!UQ0btX@nrp40r>Z8Po-y zLWDau0xYT_Y9lU)%S606_~mQz0mm@sTZJ*15>+sy4V^0kZ>v*JaGFU84i_3A`=%|J z$=G}p0#QLW8rXBdqsTbHHZbL|YZ@-Ih%k;gN+&l!P7-q}cKE(vCdUCLSx0sh09prf zJ_Vg%;qR6$!f&uQ1wS;nCyHSUYBL0g0&Q^tFym-;hz%2Zxfp%cAobL6AkHxg*mMI_ zaPgLG78p4watP6=D^{pwm=@5)5dGDZ;00 ziC;z4aPn!eM`1sgnu{?8V8*4uwU!Rg8~{iZIA=+)3}y)BVf)i(H0V`eIcrR&Bt*8` z5&&XgJb47e=AvuIa^cg+a{j291_3#whXuso6>OOm_}-#TXuSc$w$+T`5_1cPsw51U z=!k|H(PnZq;40C(UBdlY0~D^ZlhY{xj0bVV#sKYclw!5_P!)o!xHfBRBkO|Bh@u?} zcGoEaiPU%Btfmf#m=;^I5M>=!f{<*7hbtTS;(8a0iwV^1;NwjTe12;x(F2L4rUdRm zFo?tqF0BZ78IY!jYQTmK+g-G+c8gsOVccd5J%i%BR5h)K%L3Dg4a9w zP@*^102nZ2_$U%L>!ZtlfkUe)LmNs|VA;zIb8GVO_3};wI3Xt>G1++9e)1%M=F?Ct9UogEyMVKt}@ zlPZuiVbqWYg<=81)2ViApzt@X83($;GD^ZpOZz3-7NZGVO9;$Jjs}CBssUZCmxjqe z)$7qag2^Jl0kGSs9jKgE#{~xv)Aa}@6?hH9{XBP_5irlb*y<2XSqzSyxf%q}BHVr? zU9u+6#e~0wK75!KYjB}6Tz!*=TW*RT46p$jO@lpu$=J|1fEbJKMIQ|SI5t*ZfC~h$ zB_J4q6}XxRZK~0TIE~sw=Uizx-epRzSp#WSV+5!kR+F$mki#A%G5IAY0|^uhHWrC0 z1`{pt`YbbYTV{IUz(#=IKuE80# zrKmM&GCcqQW)XLbwF8jTV_1ZwSr4wl(9Os>=k6$bM0Z$hr%cz{wa!MvOyIztv;Z;& z%uA_QZl-cg2%Q1$Qex|eVbigp*OqMWz4jQPl~reO3+|Q+bw|acMY)>@WwJwxo9wJ>P&2MB?FzQCo=~4X5o7T z!;*%Y5M~Y#=J6s1AjG$f%s^U9a6oNCV%->)Pmr}oZ{Sc6Nt@Pm^tl)laN=5m(%yrH zlFL^%w&m_}#0k2&MjbRZox#&q${57WdpTbvmI(($inxG4Wf&vq1v*)I16s5}!AlT5 z45wWe4J77a;Z#}?6ast*AhGBL-oS`eiolfv8d@-jOK7l3STmgXvKKNjK}ihfA=pNO z$FbcIVx<;<-U#4NjivP7GteR_t|;7JngT~_I-PPefyoZ-LeQw~-csS`V8q)sNP={qSi<>Zx_aq(a3Iq5Z>6pO6U zJ}MSrqkWiXqg5=@#;{R5i5ts`CwXJ1L8FsaECNTTX*6<*ip?alrk!#U-KQbj+;b5P%NTJYkwsjqGAzJ2Dd~?8SSPQ4VI6oGRi15o#Ruv|^%qBHcJ9#eP~vS+U49 zj$vL`=ckiV?5FO*+9qYfgqnm_nupxnbq1X|iM*8Lj>VW4*=I2XMfh2w`8T6jL>+Tb zEFz9MUSC1R;W<=GgdA&9EK-g&?n%Qy{)&9_Q&~J-LlNeI>8F*BH8PXNL0^ivW9<}+ zykm5V2s}pL#pw+!*;Bsh>I$<$q#k2dh_qv@^&;jN9VzlHOsyBDiZbT0h&#sI7J0`Q zcp~sPkYbT|jA5CkH|A0s>=qD-K%qo$7Y_(z$e~cZ7$UlaR69LH9DHaLHkPIRL z*#@OW0REwYfY7ZF*=&M7S-kR5W6Tpe< z#mUt?{;^*ZF&gG%ucr(OIZYK-dfLHZ(oI{qG;bS`ut-%ujVN#C(L8<4{l#`_GJ=52e;`P>7zUJj> z{+b(MPHReJ&Sif2N`B1EIDO6CJ^eHH+w|Z(bmvuZUJC8}t@??H~O3KYeopN*2lT%WD?uB{SOevyAWi4dFmE7X1Tj)hu3^BB14TOxArH}bq zmSbGXBFN}&Sp+d8WetRsl_d~^RaQX85R?@#lG3sO%F;0cL{eS zGh9rW@SF+LRY`cBpp3~jFL=lXY5I9?Lf*Rc%{S`cH1GRvfATh;z3J`ces_Je+?=)k z=fifm-yNviilxJNXbyh*;2-dFk?VK)O@H1tyZv0fZ+E|N9`Kg4cJI36E zF?&yT^#LvduRfr^M+02$_IdjO(JxR*B3fO4|ATxEE_Z!3t5=Sm{jPl5>;ACyu{rC% z-=1Ie?f!=k`=2k)xBH!19sKc+S2~{qwfb@OeLlVHFILdXtbY3F=-K?>;TL_k6IIb! ze$%(Bk5|_}eE#WX-{+sd*q?9v>f_b-=bN^oqi6N}Y`0&XowxqSy8Yo|fBr{aeZ1QC z|GM04`-cbk;l=dB!AD2W>S^BXR*xk3Ja?PcAcZ$FgVAI;C;vwyqU z9q#6m+raWG^+i!3C{&IVEE0M!DeLt7x)*BC#+~x24%>!z+ zJIfclx99uEi*|^|A0&J0t%n(G`@8eoS-dCV)=&GszrVykJ^R_NdwBD@W9|-txl`^u z_@HlY{ra%DcQbyN((TH>>HEiPJ`J&}W?Ox{%74n6{lgp%?{)dnbqbrY`tY&Nx-}ZE ze!h9>r+Wpc+n)EmtvLyALZ@PkY`zKFHpe-GeFl z$RxWjIPcy#diMPJzpSpc;}@H=H(&n8rypM}+lTM+#b3Mr&)GOQKe|rF-akJH39nc{k(sZ}= zUEOXj_VX|ESY73_w!*8c-9GR8>TN&0=-b_DoNrghNPqSFIfKI~89aNwMGBv8F8b*A@^tVliYikH&V1ayW5+`clUmqHum^+ zY)<9ZuVsqLGY8LBt8e7TdA1(Bm?!epWaARsrvIZ2!KWN%?Q}=EJ9Chj8=I zvq@Ba@ayNF>GR0>4@32@SxWv|`5%J4FaJUR@T>g)yU70=*>04Gy@MAAchnrycH=+9 zd*I;u|J}ihuV*9vJZ$#6gKv~9CHU-FyX(NE4^ zPPgT$uh#3Yj$W@%%&~gCUcZ)y)EDdZ7q{O3WWD}mN?m@Piz0V#-jURi(98EHBv+rW z*Pq|1)4k*$CV4TxzMyRPUOri$FzWp3rTVYq^*XEXj@RpV$Efv9)&FvGD*-8;T>blc z{qIL_j@Ro?(~5?wG>i2`zsph=w$uL^E>TR*XxQlDUUXZ zv>2M?Kjm`DVQ$7(-@cskS>7ab(cc`OzI=b#mM*BKmW@KM(8B6zB|UG zTpzt&uY*W0e~cmh-SN@q>-Fie`VzzYlWS3RvR-FA`^nW5cy;#j))crSbv8)jgpa35 zaP!m6<6o}VU*4KKcSJK^U%vX89InNgmdw6?`Di|}9^IRxH?rp{$MkrPcjU)ZCwKg4 zHW`ijp6cvx){WmDt=H|Pdh>E!X9@Y)Z2|fEPG5YrUX%0%AB*t$3Y{?v$&=}gTb*HU z7yORQoC^MzX`0Dc2ERE%v zPq1~sJKs)O;PQV@Lqd|2RT4iR-^%Cpdc9VEI>tkvtkSR`PW&cW!C-R;X2a@m}2_M5(2ZO-cHrQFV^ok$u5#ZUN&#nG;Oa&ZD7Pnd;_Byg ziO*KQdH!tD!L5E=tuOa)zksUpiz~a(Pph##fA>DM+0o6bv;9kqQtx?b(xP42MyGZd zx%Sl~M$5Zarx#+EJ$v)f3l#j_X4n7c!=nD5)!F6g>HnHc33m+|SMT50312*{>#f9L zhn*9;Z>o5tDD%@-wu{viBG6awwaX$Vp}#{5K34UM?dE%Ei?=KNu$lgNKjQM<2iWFY$g}-9Nnl`Qg5Q zy1JfMH|zFqm-`O@q?Et!`y8lHYvu2M<0^nC0_E?21EebQ_rJm4{wMtR>Hfj*{swS? zNdmy%zr6ncchv|yNAcG?@y-l`0KB?_YZI7_Hla`Z*O~j z9pmBZ_U5e=eui(SO|Ni{e#&@xD`QF<6{_}@^dwpi> zKjQlOx0~BPZr&>P{O-;_|9o{bu0PFqE0L?4hwHZr&}{(y(^_%&W*O`c@z%Dt{a

Cn9fO2|Z7Y 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 Lj=TR00DJ)eY!Qu} diff --git a/berryprotocol-core-0.1.0.tgz b/berryprotocol-core-0.1.0.tgz deleted file mode 100644 index 373bf89a6530a184b4840071d5b65d835f8d03ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36282 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
D 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 GECK+qrqX5r diff --git a/berryprotocol-events-0.1.0.tgz b/berryprotocol-events-0.1.0.tgz deleted file mode 100644 index 5099139ec43ef81e87aa900c831f85a57bf97c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26371 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 We){|A@29^<{{A;!VW&+1k^un3Gta*O diff --git a/berryprotocol-gateway-0.1.0.tgz b/berryprotocol-gateway-0.1.0.tgz deleted file mode 100644 index 0094b65fea8c02efd8132f7caf1049412cae11f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25952 zcmV)KK)SyliwFP!00002|J=RXZk$Q3F4&LKsOxl@hX@AQS97%o0}SS7E*BOWj0lEH zU9#jQ$yM#WG4DR$FUcjlQqD|e)*j3*l$EK>KNu$lgNKjQCm+B1hj>4)?jPR&{BYkt zUtQ0un|1rQ%l!ucQp(@=eGXKpa{c??xC$VOK>7RM0I3T8{crHM{|WznzJKt$zX4oe zk^u1cudn|<`R{-Hw63n>|MHJ<|IiO^IxUWCYpC9gj+MUvd0N>b5-qx(Wt(m^9nZ2nQ!P}bQ+nUkI&F1aLH?_HX zh&%7s@utRp|K(=9nZobUf4{x^HST`C`uOSg?&0z4`;+NB{`$-9{lipCfBD#Nug`4# zdt6`tdUN~x&0EEu-`)9_pRaDl_2(IHC31E1aQ#*Rx(%RzUMue2EQ9?a-rDxI|Le_r z*nYnM#qVN%jE}c>U*1gP;qL0@!&_UQv-J7R+}8j8t@qd_M$eQ2dZsXbBJ%c?(DTHI z{(Ki7;@_X%dZ|Ai!8bNOhkxxX-m|kLn7w_!2!8HYAFgg5-mDJ2RbCLB#VG{m3yh@k z_D##ym$*0x&f314&ma36#XaG9TYzURAO8G%_^)@d-rD@_t43$Y38J6l?(U89ndq!h zpCO=#&e|+`yIj7Be?R;@ukJtH-oMSlh;h5!i1+6-y^aq)-n`@M^YwvE``@<4+h^~` z?Z;34aMiD_uO7a7CH-)9vl`yZZ-!xIeMcDU9hi^Eysi zzwXz5Gh)6wu`B;@+Qxpo9lyT2x_OAZJk=*L(bn`${hiEyTdNaSVrz3U-);_`lV=q- zzrFkA;o;M}w>7_uhr2KDp19=XcBl5{pRP`L`UP*CvW}l0uC7lKVz<9u#Yr3Gr%Be| zqu<|-U*n{0-R`Q}&v)b0E8_0dt7u;Nhnw5`hpTb_Zv5gmH*wnX-8{t2!}i-L&3yb4 zC-K5b8q&*a|A>q5wWc@z+tr7|-lEr<-#^^m`G*tKO25C4yN6Ssf1j4eIH}o}oAJ+I zZf}3RKUr}+Uc>$6>U#e3)7|Ze`%@I->(BQOC-rlCbANl9?tXLs;0HCqZ<^eF`Sfsm z{PXj}oqs&x@jp)BKaVcj#&UIY|LF*&d4H29_jSzU8$W(_{PQ<)f+V>;Vd9_s;RG@KDel&(BI;ye^Xc== zmvK8!Se^g+9Cu%i@$|fGlvncg)lHn<;tjlh7oSd$9{1rVJp5nRR}Ux5;{M?-PLYF; z&%a^LPYqMDfBqPEr?>n)`bllBZa(}oyVzv&6jp1`=j`~B4kPj7IHe?I(@r~HIf{O_C3_4rHU zSdIBUZsrM(|JNzn_?_Q;hFM*$D;)CL(e{%bze;tB!Rp>>&MTkj7-I*+1qiP1cK{&fBH^CFZka)YMB=lu~7(jzHd z#E#k=#_x{`8yrdN62t1Zx7Xn} vc9FYt16{vA277%htxH{>A2wRs>&2*DU@NyI zgZIbe8XQaOA_C&c$@T78N8bEomnOQdZVrc~PNw=CYP~ew`!6>S{ueB4`s!{jP4@c_ zE=~UuO39yyUgoIJ`1i9VkXXpO+fQ-#@Fl%F_ZOypaaY859sGsEJ>S>$4fS(reRV-y z#<6u#m)28Y_We;QK}S=&h zg3lj4tP9*j459~Y^WqDA6xw?7K$NBy7_Hr~YqqS{?a-Lr=MC}qI z`|b8>Za*$T=OUtO{1PAi>E$xC{N~Fg$z22@bA5Xg?=JvMcqEjFgv(I6$mH%K&-Nu| z_ekk7qV&V(k8$(x_06T|U1D$_KKtE#|LfJwya=HSto$RPOYqerrOVisTQKeZ>zhl_ zyO8yFb^mbpWh>a?50|2Lfvx;X>r&Xh+xx4B7w;}c@nT5V$DbFWbYb*uW~BJXNTk~< zAOAIdT?E4O@2$e?^XsF1ec?#-cYXX7Bfg|Z;JJg#Ebl|y%=_opcjK2h+wJ>3&A(s) zzUkmE9PatP>hGyv%7OY!_d-l?=i}k|^)EVO-}LcUjQGMVwsmkB_(&#wjd=Ix-!4q~ zQe%C%dQ^bFzP~8di(v2Wu5Ru(2hr2Jiz89~)WgLn4*zuZu;t)hjO6w0?{PQ${&EyQ z-~0u`{QT+Dg@<{e=+U#raxsnQ!dlQ>W`N$s{lg{bTxLKIpYI-%9A3V^Ak~Y6JMzcB z?$1XRZgl)Nf2>%032J9f@94DQNB7YQ8N;9M;^E=TyGMia_-5JJyLq+NiA_E}R@gi> zulcdR4#rQ)!Y1AHP1Gn&Vsje#*mN{O-g3=~YR#W-p)r&)xRN zwEmBI|9@WHKm7EM|M-svJ4D+d%MQ8iQ0ss0zWeY`AMDuh&mR)tj(~RrZAS<@LfR3Q z9ii+9bw>m{qOv2>9Wm{Q%Z^xf#JZybJ1VrJQg&2iM@4s3VMmpAB(Ni?JCe2|u^lzs zQR5vo*-_ISDep+zjtqBXyd$eSvbJM@9Ruwc%8ns_w;dzz80(I)?HFyxggYkQG1VPY z+cDXW8F$QO$2n299T(hjsXH!h#}#&5X~(tfxXO+Nb}X{v20L!F<5qU8xMSrVYu&Nt zV!{5!VlMl>pgrqdUL%q7pjSvS(GObf?_BnLNc3XQblZbh`=qvqU8wG3ms0l(nd^>O z_IXN>BO zD4A`asKsaft3G!1`juK=nOzR1?Yo^@%`bM`^1bf3*^U*C6qx%ce%>Sfc6W=eBj5N`I3inpBf(Kna8tEe`rg|vD=xoZ8$%;kN4i_Wk-W_(y~N+_F!f!hKKLz6q3lb{6Unw7i2Fo|YYH-I2;`C!qddJ})15ooVGe``~G* zp9K2j5aa-nmh$)&6(+yreX7H@4BG?s2MYh*!~a5U-#;MJ9hto{Ak#x@@+|6KS(|+~ z{GMB#%nn#HW#7JP9xvO`UaNE45<9f%cJ8L<@*NVcd$mr)SJv~@`wDbNV6S}fc+W<+R z$*_I-KZD5`4hRRSqJ^z zh<=89?K^$8S1{R*7!h~Gc>pS%B%x)a$++r1hjB6_h^FXvADG&20-fo~!k-wYdf_>J(*VN=^PqL=GJ zvTs0bhot+yu$Sb%Ut-u70E4ID)3+o2X6^PpROD$&Uw4E47~J;^zIR8yQq2d;pC7LF zeS>_ke!rqm4~g!?at|Bs8toeITG=7;4l!Tr3m(*OIU=|Bc_+6$kv~?LzMuW`SYHf- z^>NGvc35zSg?3nYho$VW)W?-7xnjD*l5>Nnq0ALYuU4?Pv2#S-*27bpPT&YN_x41wvX0}q5YX2zo6G-*V;~D zr@a5DznF*NpNHFIr+XMMyM($!kUih+S(ImXeBS!Y6mNzogZt`5S)nYgGiLeePzStx z_=37%)HSNus8VcBuBJxA)V0>yf&+$@W>SVnmj+E%nXMk|AWG?7d-u^6LX6Q=8t@8m z@zSjlsx1R;&`hDbE*@&FdJ{0AgB{esQ3eZvRF`gbEvqyjyaU35GRLIB#Y!l0FUB#} zENgUI1EwDAKy)_l#Sv?f#sHPzIkX8&4KSs#?Sn(JTAX7YvB@i9bnH=-V=~k7S!?yRw5qQ)4ZNs# zwC;@>MSzwDC3-_?RqXI4N9#UeVC_{+b-HWeh5=n|GIDQ1-jzqMow2LaL=*~*UT_@V zWH1`kS0L39VzYN7;-Phl&N7Lu%{H|lsC%Xc>MW~DC6pGe_X<>&6={W$ON>$6OGIN_YG-skCU9BB zY{;0y8&MY+P*v!*lj}&|Cx^`xy+kZ{2!01!H)LVWMF%Q*>HRx3A(f>*y0os0y2+d2l~#)=;Z;T%zowRj3}N z;xacGQ3emAK1aiXC>4jxoE<{7ySq>Ev(EJ#7;VIK>)NfCS_eB#X&nmE%KHQQq$MI% z##F7@HDd?umD@RN7Gk)%MIBONb*rU;aunwRhJEy?efEMtEf^tsUW;v-xaoOprcmo9aIYF0=9v( zv_1#Ub1^0vCy88l>6sHI3z@o|<67oDhGqzs!( z-k8N35Lc_()vQGyIJj$ty2?Ti>MdH!)oy}%M%U4KiVS6HSb6I5HYf11QFU@fgtkJd zjAoHKbuU836`PE?kj|Mk>jFX>7R1A_#^d7WITQX8%tO(U*^--!*oYD1)rDOS|pgHQQou@UI zRThPj7LATwHPl+~jZyQc2Pr`x;oi^aI`77{nn_+(piIj=uqc2ctIw+3Cn~C$_cmt} zbrO*V&{6Fi8D3_H!mK^DNNlSu(SU+hkcQ{}>#VKV9PZ($CfI0!6s~Hx#yKLT7BcA! z(`8mr#}t?jy-t&!ib5R?tZ5yXx-No&hHz1g5IN`i@L`oz6g!%z4h;{firATKax2A` zGz;i+d7WBlLNL`lZX9^dtieqz=31rCN>yuVJgJz~QDYJD5~(yLRuMF2u+By}rOsKn zons1H*y^(Z!zcwh^8~`_Sn6bAGA%=UZ-%m{wa~RD&q2YFa&4Z&;fffe>1r$1@ZP7F zzTCKTn!+>LT_l#(WqmDEn!kE2#plUOKJm zJ(t2v3u~*^%J8$Sk7(0+>lLCdq7THB~&jnc_Cqwejq z9^6(LRtqo2xkgMGO$!8wj_TEY^w!l7(F;rII4d>jTB+7^4p(i`5Cc#~-iZoDnn2+Y z2d@PSRjLBfYnx%qM_K}9HfyFs>p2RN+Q5#a*u8ailUPHVbi__lW;9oBWz=vC5o`-l z6&yJoH*=hGxLR3lIZdE8YiEuQrQy&}av9nPg@{ox1|yX=xHjj|pf%^H=Nzsnvw4(> z3m3OWLC#}F6^#jMhOQo592C|46({xtAwTkOlJcJt(K-4&g!>g@M15!zWUb+LME0?=Li&bakf_-yrOq_jH zoolL9soJNLo^@a6!d9dKa}8deW}KGcK3l3}T&4(}jb&Kytm!Jl6;uXvSSu~?N;bm#IhLj`p0iLHi=-9O#W2PioQ~t> zGyt*GBE8m8%G3c1XWe{wK|0$x4vkbt0IGLGFQ%o|aGk3QyW3J;PT|dX@Kkp$rAKj; zrW0hc*;#6#O_nj|s?la`=H7D6R;N!8?JyOSd~inR4f^)$dljE5D?or_B9*TyeA0e=;$C7WEga;t<8>W_SG8H zDYXlAvpJ&lXf@Avko2=OQl7%GsB7g?T8y$%Xp&|ifh--AL22%$Lb_J+s zblvNS=A}W;@Pii6LIwp!3HHiPtG?tFMHt#~?G#I!iq4p2-uou<*z zy;nZRgT$lzG{^3xUYle{7V0^cRY`#hi@Gy;_vp>E2KWj9pc!b``e-GrSof+mimm7_b*A_@ zMlqpGu)J`B@5Mk!l>s*ge$ zvq|Ae(a3eJ)KP|=6{%AY+x&|u=d}y1NmR&sWfqF&iwjLJPAoBLQs7WqV|a$O&*&Ow z&tUlQ+6;;fFKC?6yQy54^c9W4Qiqj{TE(*TkF{pTw)m`ILYmuLV66@lq)oAo9<^t1 z+p+l;Wu_wHyfR{^ix$lVLu)PW=gfLhn&eaGCW|1AmeKMi>_pVcP@^avBAu|()ODmN z)6MG~tMFM@feqsBP2KyT0H+4b3$<}`nXA4>h@n@?(u2!vYlI@Hn~tDA=FI@m#zgnq0-JwxQZ6maVj6~nso;$_H{ zirBy?o%6n5Ue*$>w0IrHI#3-7RbsBfSd@U3ysp_x?@dw6%*Pzv$cC;~gBM$A8S)6N zeH`py6iJJ%6Esy4iOQ9G(V6jY=>zgj`s$j@h0)Sq*I}3k;qoK!CTWIDN{A0ku0x>L zs8wXx!l*r38@|}mGsV&edI4lMG`C`l4&Qu3)}&FLtu87|O=Z~VI-_fYZW&@-tEG1Z z$gGy-eNHjzYYEz6%nwcpqy~~a5$PB=q$so!vw#rfUOkUy6}R-Z2#1bkE;WiD0V+yt zlN4%X886}tpwf&|8cuT8$)+p~XBj?VmA))34Fa7wVs1z9z#c4A5^S@Vs$seYrU6Nf zW&w9vYjMUhM=5zIXuueqw|mC=>W61Ad=B*ylL0g0SlcMkqVej(qjKr6YDaQz9V<+Q zs9vgj>Cs1@hk;#M-MaxwVfR`B2g|Cl7@-+*N0``a@4BJcm}ep3uHZ1+A~<~8N`qMn z=lSn8&6HxKLRhM(^bDjrFEyS$Z~W;2YqmnzybQv_pdv^gD2e*?Ri<-|wpFei(O!$R;t>OBq0(v02@&vyyH>TPhMdJ$Trl8ai(IA|oQc!DstkLT70fl9Z-s&JI%K|$u zuX*4pdBPBcZBgU0Dai-+AUBUKkUCb>AyT3DPPA=vHM8_Q2CPkc)F53Iskhc}0<6Pa zlvTb+Q8-}Hm7(F1u*+JC2R3V(5g1?Cr!>N@g5b;6@*>SEs)LFjAx)`_bep$E z>AjY*MX0#0h7D0$BV#wI7^SS5njzu91lUzsHpbyio|CC@_{ptx)Vl$_D5r;P8Et3e@Fqi5qI6mLD}eJBj+W610tXk@u`V-;yJpr=bc z=A!IiHC|Mk_2mW&i+p93}A6#ev`+Zs`aC+?5Qy{|C91k37DW>=vMpxBU5!C1!ih;txV zyQ@w>(wHcHDJQIA^e(;@)WH!nJB|TM&3gqe#@1Jw>3mrE^~8f`ctKl{rYVSLtuRy< z$ymmz+3BpZ5Xi(*SsKe@mJSI*JG?}Fs&oxq;^Ho&WH>9ZjFRv{LUc&$Lmj{fj0epsgm75c^-875ie4N>ADwDc zW9-JTM&pr?GF~0MfQ>JaS+c~uQn#KhMZSJydNVs(;6MQf+S_amqG#k{-F;Pla?@}FSK zz~!xuvR%(OR&M)h6u&nxh3zTT8U^ zgl4U~Em7;9kmSl6pw0$KIYNuC2n#d7o2ph<=$KQ;xGOA8eYy(LB5N5vX(>r1BeG@s z3OdI-Su2%2!PY!5DTr3z>20#TJ7_kW82ARf|FY+1tt@fv5J+Z7HiR*GvmwQ zjj(o9Oj+C+m|7d7wj*p8tu=tAa%&j@NiR=Sp^PqK<5CKHT^bVF@=4TDaAp*wrRsZx z{WvB4q_~_GG=~s&b1Xc?l?K&O7u39Bq+&Yi44d@KKw)TA4%?5)k6xZcIn!D^NF4|_ zR9+vw$xPj543Iv0T1p6GjZ3-O;3{E<{)>jm~m}pN@#Eh9dC7DO1BsuTuyy3TJ#Z zN|loEHkdO_*{B3jDosrv%V7qtDy2=W6IP@2cZAKTV71OA;H{`FsK$MvXIQ)v#*->9 zvo$y(FRUta^~8IpU7uQyWE|8-o2z3Em#J1=iiJsdYA2@Br`8ZW?CteTAq-50VMduP zqHyb(2x(DWJn|Av?OGDg4K#~oDkHkp489x|{u!!moVJiDAQXnuVbbs|f`UC0Iny0A zX|yO%fV69?=@xNahtK##;Vyj;H|k|UBY{@h=tBm$l*GxT*D;*65)j>d#UPmXOKFF<-!dba zr$MQuFR9{{yr?u=XtpF3u#C8D5iFZHe3c=(D0~^=IlI$Gq-nE6yzA-!*dTM4B59HcZ@12dGoSrp7u46~rrZqNB|4<&|1wu5|U*sCQO~OyM1rn99x7rK6H? zD~IucvqceaUVsD zrjH~1_nLWuiJqVha-}P(2X=GrzPeX~mE3)Y|st4iMvtVs-MS!>|% zCReGjO6#k0OOhIsZI(W!SIekMru}dxSy7fzh$sU=nxw1NcI%J4d6e#1?byn1KqV1?_mdpj62sCPyf}AMM#x?59%(+r)SLc=% z#`I=2y%lR_k^;fu6EbviR7XwBo@}AkC_2g*c@3o1PgJA=NONo?S`$jqsbwjMG7n3s z1w9hx*mTTVY+6F>2g4wuL5|vd;8>wv@sE3I@^ zLye+TP7(|m!1Tx?B)v$oXc4tJoA4imhj-%%$u&GVR!-M&Q2LTr6uX-lnxL+pqPt5&iE0nf6) zDARho^p!CG(o!UhfK{P&n`2eus7x96^%fC+7(SDg88V%KX6CQ1%wERX8m(oWN821e zRmOsZ%q$b@A*tiG-V!);1hRsiyCybLG`Q#*B~eyXYM*Va4Eht*mB|E#K&lD8P6z*T z&B7;#MdzxmY`78~W6Ot_kUqlhSG0!>uz2Oi@4_SgeJuNX{>l@}Zu`Sp@ zO3P_l8y^uceL)f0!(8q%XhiW0O;OY_Vhl8oaDW<3KI>f%|9XdZz+SCAS6S>Yk$ z=9wdaLuVPZIf%*2q&iB4o~cVzXLPD!ZK84J!X3W*nO3Qpmr)z8rZb(dt1p&GgG4R5 zjZMPW;);1_h9z=W(tmkGthspyrP+ERNOdQ3xSVjT)RU!Fh#_Sph}{Iopx&h`U@HDu z>g9+)sua&S@Jyp2i(zbN9r95(On3$~GbM7k+DHf2%<@Q+8QFDk&2w;n_2I@JKHtU0 zlmgaMJW$$OI$B#0S$eE@WVG3}wAL{(3YkiUj_LQK(pLr5!&_RbjEsG843^Pm8$BVM z6?=$8nkSZ_&5{K{IPoVq9Tp}Is3n5ua9map@GL4_-5Pb}*;1ehUSBY;z# zOT;_$Zb!uGT)c5ZwGorjvkbx|jMzG8i!w+!F~TMF$+YadC1$r!Z$%CZ=ayAg((6(P zt(OtHYH4*2u9Ig_Y~VnLEL@N=jWOF2ODPqcG3jG)I*H%vX}!Rz*~^*=^mlr}z?`(z7telv2zN8)k_cXE9=Sq#-NS*v5b{dKLv!$hw7#y|u&?cT2sFTA)-} zN=HCAfUDQJP`Tta5=4trRa^sOQisBm+Tz+G#(?OV3ZMm`+AM`iJpu@%VCh98##Xt8 z^b8*02F=V87toq#EPmj$%xF{0@K0&1Ym9n?<+p0qgzJ+COeT5L%Dk)u(8#3v!dbU0 zYgM2ZF{$aN%u|eRg%5WSD+|nFFegSc(juN{3$l1uE1gDxVmP3(O6#7zPp>Od+8!V<1-C5B0g=Mu7!OGI z0i(}_eQ5P)(3atv3%CVtVO6%(VLK~^b(R?3p`^^Ud4wTSMKzIRP@NocY*tOwWU8!V zG##8vW)xSYnQ4XLKC%>Q&4`N~0eq>oYF}7aYwRPf*I5&|Hq+xwO-mDDn0e3Fg-t?h zmY=Ign)MNmxH562*DlNQX@YN|u$ggM1uCg?LYAxOSw*dn3_veJVB@+4+zx9MrPShC z=yhP$0@1BnMd+AwS~2LMt+QdTmBg8sYK93jWNL~pX-8CmT|opm8+)WTp(k>C;A7m`ve3{f zgAEw6n!_wa3$wh@Xr{K-&|}g~ghkS5Oi1s@;(IVM$g@}nKtxn=%4COHaL65in=lx4c7EFR?m=s+JF@@lwtjdlU$n`W#JPH_USPzWQ|o=)~Bb3euY=l zF$(&ugVPJMnpDaBI6VS8o9S{>05Wq7Iz}Bt0GU8Et5@wME&h>7Db{7Ei8jO;mY2(P?(>M?hO+n$OxRrrNk{%Bt4fvpgV<^lmr{j`W1pgcTBG?dwIk;~lUZ zA&WBI$+CvCZ)#mhE2f#t%$#oEIn4lwW~7XT&LabWnB3h5!(q?Fuowvv?c7V|QOlOD zouyz$$utqnN_ZxD{$Nsc_N|cS>M6SDh@dC)9ILx#_&jgS6mn&9p;5BT_DomS;E9tY z5pA(H2)4J>m=m;q*nb+7wf~}TN}Y~1XO>auoiM8wdPa?qyCm>|01ZUD)+QOeSa3wx zBZ^|5G@uO)<6K+U+T6CtCyky(`m(-{^qzT2Sq5@4#$s0xmv-m*P z3a}x>;EWhJT7tC1D(b9@q7RbDN~?Vxagy7b7&2vXwV9>4(m}~wIn!EOWb$^@EO4C; z3#_AV1>XQGA@yTI7~H8B^3_tCo*8(`G8&LIp|aAG0IXECI`Qa~(B~`*4(Z3Ob_8CR zs1I%lBC0YI+Ft8QgS>O&6{A>Iip;cdwW>Zd-8gS3%vce|5te@EEG$`7TH?u8EZ`Uo z`^@O&%9_-qq9jxoGRs`F24iGika<4>A5nWIj+6vI7ZS3Om=0Kh+M`lrj(LNXQQ%Cs z070P6;B`!uf&DNSdFuj25`|mWbi&EjnM4%Q&*GF`Ia-nlCV6SPF!!w5+smr+hzmy( z4=JA2t9fQcM&c|w#j}zOA;AP@bE38YS!-JsV@b^WT`ig?L6SX>zoYLL)C^imaQw#8aCq zN~lwPWZKK)!8szYEBCC#5~`!?$^(^uu)vzHIakk|);V%lqvC@MWlEvaO_qLA0 zCWfS~Y=4G81S%Eib8x9`jFzRaxO#&84hy@&r7h^CMy3RgEPsSP%8V=<6TYF(8)hMjT;) zaFJ=iiHy*2voL9;du@p@rUZ||%urAkP-(pzM`rI+y1lp|96rgsrG{be`DY6dwPWvV zRGt$}2d}IlzS1a}$Ro><07VCttZbz92(5x9`lto9%siUCc8bQdl`8a74OgpKL#|<4 znW~e}Le4;_WU6%cBeKP3FhIeX1&r&cnP%z|qa`19mzmfMbDvqbOm5tW zaK?@;Yr$niB(cW8T!vGxl6q6kyGOe#9AW8m^9i1se_E%7pwXB{I_s89iZx3yXJNl0 z>9#G_(xgg7dn>4M_#E`e0yZu08_3LdkxYI=$7(neai2vvMxRz2YO$;zhqbAyr>xS?hVn9ie#5Pz=oyI-RDqydbl-a-q7^AZt0*tk>GMvcDPGEHHv=<`k86 zc!{!-+Y zO-<(uZ`Bu6Q+Q;#rYxG2C3o|0D;aOe*S_S4DmnnVs6aR;2x%)|8CiY0&YtBq3Ed}W zE#_D?YqL*eUf$Amm~rc!ncL28l z_2KDr>Rr34_G7Iav! zl`umVrJ|F~+F+zu;7oZ}fno%VoZ32e5MIOf-DHxavg?AzeI0n`(e5q6dO0$0D*U=;%D~$+N=ACvw!3=~9&$5qQ#qP9Ojg zup>f&D%gp-?!7jW5=c+RIIk+mE0iXa38uo{3!wdGpy-eVvrEimEdV#F2Xz^kx2N=r!u zj}QmDxd&+6j8Rlut{8gCOB++kiQx-ihO-gUG-W_}8*NI{k&O4Y!D!@7gBRM22o`D@ z+5te%XHTj?)7zjq)}W{Znl0lDwN$Od;l7*Z7*oMEtM8u4PIdt2mFT)PfWV4S+xVUV zKgnw^=zmm*fSr;7psS#qaz$#D8_hAf+ZqwCErY4qv}9yYDmtqhNO+6}ubD^eYcz=Y zkrA7|WQy;IV4g9Po0i!7fRakpkYck&E5oMisKFv+pbmy^#X7hXBd{dG$08am;WNT4 zmCeC~0%c8*x!IyA`)I0(GO8L)#V)h~=O{p7Sd3X@|uy!3xV=yNAPEIz`C1&S+PAa#kQijKK2g)$u!lE}>+QdFlZjM*5s}<9pA(v7O z27xRvA>`}=JnF0JIxDiSX)VDWQ%seKpa%|F>KU5fBrA@K6~W3@SJ!1rrDb@{R9^s@ zsg+7mOCwE4wfEwxax$<3?A^jnrCud4u57i@)*u}Nnrl-L@KOPoR7(wAR_GjH-H9$( z2l!xwIL$!x0H-e+L)Xa|tXHT5bYfN6c7+^i4_5IcO} zfHt7IgS!i2dBAaEo36ou4MR~j`tF0c@=g_4>!EAyJqN@#qz11q*bNZp(ctXqk~Sfm zV10nf0bm-;5;OxJF%d>h)GlFvgcF_$fe@h!j5XB|vq``Lce1xe0A7J6z~~g}3?mW3 zgGpPMc`LN;E%{ty=)RTa6*PrO_Z|w)=1Nzs5WN73Ky26Q3@j#RspvyIHeKoKY1)Z!1AcsQ)lYt#PE2*MEKyFRW z%y1%83cltlItq>y;PJY*3T!7GdUwFU*wV;(p8&TFRb=l43|FnAQSaVWNawTe)mIPi zAGL1R`U*_%_z#ioiZcO)~S5m1Wyw4;+M#Qe*IqY?W1O>v^h>|Wc*Op6FGlppb z99gY3s|@go;%ut2h7gS^9YG-hOkTzrlEq2|BcL)3l*b;zZw8!g0h)9NUz6%dD?pA| z6=HUXeonfX9s%% zW*`I*ECXQ*Qq0eAJqb-E?{Q{L0RRe)*;BI5N;wD5g91#GU|Ml00{Q@84GoMQh*7w^ z4_tR3w*gOsD@N*wwuZ62H)8pI9$fP3SNbwNgz^4L%+!)|j&~KsX0@ z%iS3y=+<#4W5+Ag0BdGp-t0P{=aodzd@j9$6G*~&R{8FHN~yaU3MrRBs8q2%>Od&S z)!I@cyz@0jX$I#_kfz4&DsZAeAP#gl@-g}uo8RnwD%nxY-VtcAb%LWw%`p^9U?h;* z5qL7FWw^WoG+R3Yv3ManC)PX5=$q`ZhZ>5m7UAzH))E|Pcnd~b2^=;c<6-3PC5CKoJyM?zzV3;F&&~({ zSe^oTAbJ)XW^8^DmWzX|!_m(Ll2~dX!wrbPGd8Nh!g#7;1xZ7)8uB-I0z2A_upXZ+ z$kM%w3HlZsn=%|41I`2nz)DgF$R_Fl1WJ{tRmUjp8Pu^eg2Q~Z20?%kEv`Faol#1V zfVyr7TK;TffTb-pkmo2ZeJ#dfK9W+mP%nQ(Y-X6Wh`W}L8y~2-rE33rdSkW z!j(>*Z6qN^Gea4IaFkl4MGOp>zl}q{Ores|;o3V1|7urs#Zf0k59_|_Fg`O1(%qsW z1ENe?jfg5JNF_Fl5U`F zDUG@|I+jcYE4=TYp8Q|b5+JZy_7P; zjt1gpU&WYe0ox^}<PCA%7N_VbjMhlF+8|=&P78M=-2${52!DJg9jAPw+V|CS8cO3|f z9n!%`C&4K`JCkKn1xs7Kdp)ql+a_%;4)hO=z(JpZ*HL>42v0*0udGgK#twHyF+mjI z3$UinV55MY4z>q^)w{G*y98dJ%3yQw2}FSaTTwR4UM%+6U{q67v+a2X!dkE1mIB&4 z+kig^wExtL>HyZR$#Q6;h0}5dK$Ir%je_^RNFQs_GrX1omnXe84lzn_H3}-K1pEe{ zoMV?3R{=6X#wzCtR6MY;6aY-mhzaxxh8YSCQF=Ky(>sDyyaC6Hk}wk1T#C)Dm|TJ8 zkX)E(ZjD zwvLTR0_KPYnuIqB?p&dCsU#%@^F^^IU_s}5nQsm+*&BoW)A}`e407xUxyh-D9{cdpdXa6osxpB4B_}HB8J#0$~YIN z7Rg0miTcp7%L~Dhi*m*ZN5Y>`muwmZ->U*&Kxzax+@QMx-U^h>B`}nntf^B%_*b`{ z(u{2j{J3E~G&or+udS!dutKpm*IEQUR_iXLQa~t48uSjSxu~7Z{_Z1G=)i1;F)O00HfINWLwMxks;5V5D zZ_WTlqTHRUfc&zp28fYdW_SuJ(kUr&K;sD<|{`Qih;q zEye3R$8jTg5DQyU7GNa483a0nh8CBx1m}uuo}kP~0kWG6?3`7PP$P5qC@PvN@LQ+_ z+nVzrD=aD*DG^5oucmB6GXT^8pkDzKAb?L|hURw$d61@_0O6(JcoQ0;G|2)6qg9~E zS7mH-zN%QNg4YE@y#a{Y{K zwKhzcIO6~UohITLg9m=1EC4jOfg*sa0Y+QE)e!->M=91^6#^g;)+8z6uz9!RMh9kM zX-*bzO;LedQ9#xPppdB!Jg~~>Zoqy-3~^IZCX*eaW2>CwwOpE!K-^LAeeZ}*4G9WJ zknbd5_XHqB0<#4HTru_x2?}ILD*5GX7 z5VzJt&WIG8Q3H@9mgHgug00VuTqwP?%yhu5)ezu`T3Yl_{DQ|M`szXo2#_-QZds%e z+rdyHjRu6L zx6-PfffUH}P1LPrOb;lbLCuOSnw_yX1&ctMOJ9Z5|G1yabjd9ZDdXfPUFy_fj!8B zI|?!UNdwpxQA^~@3_Dr@O=m0Bn;Lqo6_gjXz$F7A;imO&v%;oA2QbkG4La83D0qj9sHIu zm6#mBz;cv^SwY!fslq!uGDk1~>J5l{LFVCS1fk2;5K7p6k)Wn1-2rwXgU-)^|EuEY z6GAGyA+R|^r|%rbUR31#3^1Vp08I$s;yJ3VCWrVv#EW6RvI4u?o`9nZw9)RZ&Y(S2 z%FPHL_RY9j9T}yXO+bk*8ZNVhvr-EYJbNB6B2gP7i;Sv8Oh%xuN}7YSTsxd)5rh=U z>nsCF0=?p*6=xn1eh-B*Q0v2sS%nKk_>zp_oka1VU zP=S-3S=e&1&4a=bw1Y4oDI06@y|e38)Y6j6G9?fU&G6O?vbGT6z=*&}qoj+zL8Fa$ zrv~;W*_Ew`$uT|D?t6;`=iX{e2zPg~Q6_mE;VdtqL$&Z)YF_3l5#*TwZ(tIEKEg>K z;Es&|i=w5hJLRhtAficB8&r$($RJh#Do;H>8{O~$)SVI*GkhfK*hZT zE}Dw4@HayS;WyZuf};^t@Ib_ho=V9Lo;d)J$Z*c$U>VF1nYw9rpV6RKf#s}{)Hx!u z-DD3C1MQ?kFl@@IG%Ob`_QdCpl4O@a4r$)c;GG0xX#vJMYZGd#z!9z`VYq};J)$Zl z228M0cHM(X(#j53iPp><{?+24aOItxiXLD*h$Ggz)#7{3MmYynA^4(8HKtT)EO7ap z0?pA3?iQfIy5_1;vH>Edh8hh-S%a0pN7LZpN*cbn&W3D51baO=k>d=X-x70hKw>E| zg8vaLE+K)>EC5~x#Pz;tFp|S|7fdb9V3$MK$jTW?!D_&V)lBt>Bd(!J+hasPoldHN zTRl3TgVRO>_RJ^vC`ziv1)JOqhgO}t(lW{n%U&XwTcd-om$M4M2`K`h$#EE|&m?=v zHG{2QtL*1k0xNSfWdLzj)pKR9w-TXv56Na5bu7NZ9YkxOsru-x2S`%F-oDJx*}*{> zR)b_u^xhJ{y4WG+CO_Q26UwwFPBl?m6P5rQ95Ci&heRR|w3AR(1kISOvOT z%N3JB7N>e^2qp^v2f%KlG++)I6=objbW`2ynBg@H_w&?LLclz^Y>GuRW!5-$rlJu* zi*WlMRZdDe%G&=N3iqySDBk);aP^H2Zn-fyu<&|lG&T18IblO%0VK`77p+$S;FwTo z1}+f5mVjUcX6B*;w5eJl;xs57thKq~c$Z|f)o4hw5&|$=v6}c9f*kfBj>*p{YDl1v zv9XAq$z7>{!+o`htkE(xYeK0Y0#nrn z%C^E8wZ@>7R8lt&0GL_)ImUFre)nz=l4czEB7M_6rIebL$sxMKU^}Io0uCu@1v7yK zgVhYk7_eW(Y^dr&B_ebNxJ!|Y>zZ`KhF%$IT5F|+040wDk9||xf$CxoLC?UAuRt1= zPzE<@(85dCfo2O28&Ea?hF+xromPYfi`#Ang@Ub!t$;U{hRQ{O-Bcw>Iu)s*Gj&q; z4$fcr9>K7rpeBTw1EhsCi-igCEjR;71E}rW>dfky4ormsDv7UD=+8XB~|D6d=-f&91tnO3=*5JHKP}(X!s3i z(Yo}GgXm#6Z7M6^RdxfX(t@B6;6nh3Ma}RAMyyf*t{l+NyhdC?g-ya}pw0FUevS~K zB!=@4Y$M*`*sdjFrDlNMFyK!KIk#37xUDnbHo+eSP#w6Aw$Qp(Jyh()TL~}}1Y;DC z0%i~hXT+9D1)e8tBfGCjxehMDWQNI{5NNKp#};Q=B2ll}p~s!UjOZ z(&Y@c7J%tFjfU?nXn=kMoc_H@5e&W9s{>5ev|DTNl~`V$pKq5BzocNk63g?8?fU#| zvwZl&vYfxTINz+dSF*mga+)sFmP_;6t&h^h?rz(BbY5Scwx?&?c6okv`vu=zKBO4M z^8DrY@%nQ4aC!7#Im$5odGug&38mNOuj`8s*ZJgmD}UXkusMHuS=vEPo9*SgY$}q36F23MBr~NB0uK@Nxtxckc0AG zkm8FV2x%)zBTcIWaVEx&8^#IZ)U_AH*=Z|?^U-dU&ypa{5HE9%iiF}El@f~hCoR-? z*a*e7u~sO<7fvY7inLIUFN{zlhbR=Mtbtse{aN|CT!8)t>(o^nQ5?jfgy<#ux< zEa%{~u$+Te!g3CtgykH(5sq{4S~zYmD}@{F6h}|1AROnQoN%0jveUp(Ubs;!FB~^q zAmK(32HRA@=BmPwzw#xJ4+45V+i41fCATi8yL&L>#rXB8~~@MC7c!6_G3Hjfk9J z&?1iJQzCN8Qi{ka$0#DF9D^V^MvfOGxmspSOBG3w99L4198HPmIhzm#$uWFzHM%EE zwIwA;ayt?d;XDb640#d-O#&qdVu_-q5yT=zOD$-~6peeFnbuRn8ZU6J5GO;PNF``Y zFiDdjn*^Vgf`()v9M8Ij$FwL(qrs6K||aaBWRL0W6-E*1+l0{HNG0^T z8G{O`jpf1%8uCcFsV2BH#@BQQtz$^o{7B)9lQ6q@u z8hJCVtGo3T?;F0t+QwzVgc?FCjv;5Jt~2ON7I{Xh=?+p3d}Rf(@H0|Rzd1oH>Ig%I zMI2!mO;OFJ(Gv5+H*f>_Ft!aZ&nMS@tqxlv-wPZn=(OmXK&MHECPH;&SRSlp2^ zf>_=Wq&N#aQch49Z+Jm0@<@fNt0;IE_9dZ@S=tdgi^Uva1h9PbV|jI>c?fff#T{WT zvAiSf5Ln<5WD83?!a#`Qjj7a-1uXjr1C@mzVeqo_BSV5%{E@+~f(L`qf>;0&W*a=9iQ#F7IG$8`+Aog6Pl9@UjfBT9%1^7o z_$y4S?6fdV`?m2l64B#5J1u78YuYnUX^ljtT&9G_eAor*egv(rEt_oiN$2INRFqEC59NnBw_ zMY+3$e&b~@D4}>2(5if>83uVTT@Ivug=%Y}) z0%8%ElEUMhp%jW2Kpe7o{R^YEAx?k$X)s}=nej5NkUK^vuYwrXya-|}^U{YEh*v(0 zb6)TWivs5!yimO2g&-6!beJH#zIj}XOyn+;T|sDCOGqLU7CWfyG-akyjs|h`)mLJ9 znzn7TJ$atap0)aTySX}euFq=w?x-GZH%oD-b~*}2dim-%|Nnn3Qu%9o)*jULW;@m9 zo6TF!1Fmz%EN;6m;gTTz;y2nlN#vX~i{IeF%Ei_9|B%n} z<)$qrUCX0;-=@pO*I%z+T%2ESAGe-fo^BWKF79uiuQ!W-`IiO0k8b?_&f>rSd(mH> z6=;eU_g|dXcNRa~TPzlf%eH-aId0+Q7w7fp>#uhTq<0p7z@5dz#Se>R9Z4-8@~u~o z?!9_+@8kSUE8C;m`uePWa(RByF1O#`Z{H#7jaV%ANiD_VhsC$)^ksXvfVODy>YYdT z9{lci_ZGif{M*n>E%@u4@6@&_mupsrEuNe`PtX!AUbM|7J!^|iJFDxnXN!_9QeK~~ zx9hf9tk25nOTL{>^UD_-u_)=XZUmBBLlKtBcKvNzd~key@%s-%c;L z&(ALxAFeOj;&J=-Th8UUU0!~__~i0@dtS~@?=61!;9faD+iVx@yNk=V*?dilcW?IS z{mb^Zm+Q-Re>pw0eCM4<(`y&&v-2N+2TvTlP|hzKzi{=yzh#u^Vk*)DJg~fa{Pg_U zvv!FwCB>B4(bW6z-2Y*5mR_`nizTP<`)6s}{+_;Ha(|B3)5XQ~?p6KvufOx?Ub?tA zdbw%$U;Fjwo6Y&z{T~*m>lf?o!^KkB7a0lf>v6hnXWPx<-Njk^`{JW?aetrb%kA^e zwpamf`}JAdp76UU*t&|vi?)4!UKj5!mZ$5pzb?h%;`#Ym`;V6|a=UzI@$UbgX2-6Z z)|)Lx*1NkB96f8>`|JA7BYtY#7x#D1?B>T~Hu4$Wc+O$v7_W8rb#pQWvo6S)>`}XMg$)}(G^x@ObpM3qv z>hllwFQKX4J3p=M^0rr2fByV~uiyLl!^clPz5dF>gPP$pnowN3chHLaA6|{iS5s?^ zN*|q{-CrWvqp1V#PvT+m>Y)91d5@kw+Hk8wk{lf!9o(OKLoATi!>e>2{b;^_yL?-@ z{_S#Zo)>9-xjuXLbvZ|{2Xe>N&&qsC^5nd>hr85nE5tsj@%QxOG)Bigmg$(D7w4Pp z{pEx88N^^|o26K!&G%mu>UfB)J-)L(ClI^ZNbK)y+o-Pofqd?dIRrqX&2Y z@P}zy9=>%jv<_c8xV@i@zrD)$`gGhJZMJFqa&zBE`OZ$-w9Cu$%ZH2Qz5?sbPEgk6 zRV(fr>u??;x5N6p`|e_St&_2+{`Q)1nO&g68XpvC(a$dzhk0;=-c`^W0_RE~-oL80 zIOv$`@^GY+{+`ym6pqUI*;y-x5^9Kphlh#Wd!tx*bv62~T0lvCD@I{J?cNaHi7>3zJx=b%NN7tnNZ}Hq8SaiLy zL(OX)`r-QQuOp)&EzZuji}Y<;pQe1;?&?6KeY1HUF0K`DC;zU*>Ya_lGVmYLG=IDN z2@Uh7Plx1s`waroJW2aI8)KSNzn_HjKcra>r1ei|pHIeH|ENZ~wuBt6QzyISWY=sr z*9C4jY{!4UZQpHYG}%8!I* z)nol4J!@~fBIAT{uxjy*c~yOi0$r~wzx^}nc)H%a^}a%yhc(3C^D6k^dUK;M@$Q|~ ztL?OH+w0=~{Mq@-w^+Mt#T|*?zp<~HN^(f@3uV-yv--7Vh(eBv269m(K z42R`+7h_ew|N1%NgU>(zdoipJXGHB$_F2R#;+{p5&v6`Ho%x@ zXZMk-;1tB-{_AyzYsvi|rr)`Qs5&31cE|6h<8k|5{vmxLmByp8fgL z58vHs+m2qOi+{TQZ~Eq5`pqw?|C2wQ%ZH1bs+*kx1{>?W zavRf!j^wy|piILrm}XbA0EdYeFHg7Y-|yt;4Rsa7<@WOY^k}3t6kJQ*&AwU3HJ+Vx zWO#V5CL2F(zrW!7lTRAody&>$zH3_U{o|V(zYTppe(md1{`E^11^mqN-eU0;|2Qcl zmpk>v@@To&Wb6|@dT?9P{LIj?z4p*Io8{F;i&Y%Ui5R@+%ww}S%SrklIgp`%upQ=xm&99&T$)8*7 zKNzBKbxrzl`7g=JoAO`%YXAAA|@np3+!GBM1@9DT|t5q9UC-@crA$jRo;JGt^PQ!IEU+b?~?t~e@zAWc*^kokqlowS*>0kzgE;guU3D) zJz-k#rSNslE(+d`eL;@KgQ)~qDN0xCl^!u{%N)P(@5jv ztBPJr@~}alu1>z0+JWD@`uWkHRwsF+z(4GsK0V%DK6!jge?Ap|JzlN8xJtqwk2-O> zTvAT=FRRsG#=YChh#p!W<4Juo8gIs<|8=q-JCFXdI{9}l7_R;Ut@XvD&sHb@`RI?U zllQJw|H%iV0yi25Zyfx2V|ZMv&Dm7O+ZuZRAOG;i=T2@J|NHE&b(ep9b4^|RILUylzv>zWvQdh0uX zUajQx_r4ww81Ie0xiR0E;}@&ddf$W(9$zoaXV>LYKS*NVn)`b{F56!ovyi^gn~)%n zxf@XE&kuwgC&YE!mw={IiPpuP3Y3znvSwRksVFt^r?cH4{4 zFLtu|P@L>j;9ssrFAKNBMF;6{4UdOJ{p0H7Kd-0u!T&?m_vPH@v>(>{vR~T;e0R&r z{N#gM*ZaR6uU3CM{wb5>`P3%+)%rGJaa&Dqk#vXk-HVay0tJow{P^b$n`54{w+x#n zw+@@zCgF|lcw+@`)Zn)IUF$4*JiD_FrTx6liYNc@&f5RCYt;ISN}!+JS2ud?#;@1< zYCFHL+%fNAf6D6fkDpkt%j0i<-o!G;tChK}v*JIfvu^A2E;?1pgqrq-;`SpX$?GN7AZ>@Myo7-&ac(qbLsoB1LYt6>_ zy>Z9%M_$#gmhroq`nE#c*3_Kowc^m@x8JP)%+a_PK5rOSFZRt!Z)*gdW7p%ohGn4s}QWbv%0++|9D<^BTzDdj)*eGXKRs{F^_xC$VOK>3fqL4E}P@i+L}|APNM-#_@>-vBN! zNq`*m)9e3F{`;Rlt*h(!zx`v}|Md5N{PgqB?;roaxt;OPkGJ#lb=<#y`0^?4$KBPZ zhxgZ4J^%e2_x0!b^TYj5yHnZ_;2WFC+nTkvHPg2>vo|#(cv~}kTQfSj*}VPurZ!g( zap(Oy-qhIdzub&BQ}{jl@3(iq#@)|XA3xpRJv@GWe=?oNUw^s1e|RgmkK4O=d)w>l z7!OysH*clzA#UQ%A8zm7O5n{q@YMd(-R;M#`*WKA`^#G!-^I%1du#LiFCY8u^_i`I zkL&ASZ*G6Td8^p-yF35#^VQ9`{ygKYM6PZguHPy^w*mCeYsKB0Ww1ZQTif3Df4zAR z+t2sE_+8A8@$vTV%bRID++E##cx&r(mOj6k+xp+X^&Z>A=$TSL&lJW_MBcsO|5*G)-S=)E>`D1^hxFbdT@&25q*YUx}n|FMDzW#30;TqA3yoSRlmBvdie7GSSEa( z!q)v+1RmlTUOq5_;~RgtzU_W}|3W=IzU`ACag05&ugjww{2u+?Q=|9ZZ|@$)?ajko z+S7M$BQkG4#=l2=I&6)v|G4erx*W41pKs>XxO(^4*DvAo(8RuJa2Gxgv)ngL z(ocBGGt;e-Ti|<+@IL!6vp(Mc^xOMU-xUj88P3T*p+`cZDT*)j$hwh z-8{ryp6ZjBXlweW{!V7Ut<{Muv9&pwZ#P%l$+L=^-`@T5@bKx~+nV3S!`+v6Ph4_x zyHk7fPgf^A{em}6S;x;0SJx*AvD;s-;-ro8()d! zRWz^s!_Dpe!_~NdH-7P(n>cOxZXV+1Vf*crWF##K z{V9s^_2>JCllr;6xxYP4cfYxR@PnG*H%;!oe0sP&{`vXg&Oe^;_#Y?mpGTd*ZyMj+ zpY-tiC-2ZHt!_X1)d@=XF^cxf=hsQkzF`7+L7w(Bo%Z+%W4XGy|8#`XyuZnlcOd5R zjUPWd{`s3YL6Y2_F!4|RaDo{A6nE=X5p}Y#`Skhb%eb8RZj=L|%_}pGL$}9Q$ z>LyNa@djSMi%%y=kNfZw9{#WEtA`V2asO}^r^vy_=ie~rr-munKYxt7(_8)?{iHTm zHy{3)e#m*sP4y7>CmgMZtJ7xk`1~6d@8J};&cmIL_~)qt{^8*S57p8Nr#E2CKOcU{Q+~oK{*TT3ef*_yv@13q9^&rZhH$wZ;`guTif47qSD^d`myD4 z>+-L-f5?T5@$fDsRr;5&u8(5P@rz&odQ>O(iB0mWE&dbz_TNu^jDJ1GzTQ8^v+ti@ zFGTGUBlDXt`R@W$E-{*q{^?W9r*v=CQM<&*;^yTy4!?PRy%4pF+?^YU`Ta3i=3{AH>iYb! z(b`@wM(qMyxqKM}pmQJ?YeXGg1U@j>!L2Lr|{bQqf%^+rgjnaBp%Y&|8NO17k8&#hSnv9_0>^!ArIW2 z=v`hAT-3Mczx!1>N1k3UMC}qI`!&AYuE(Dj71S^2UT}mL-{rm2kDG_PgW%L7Nnhmj ze7t(te*6Vo{!IEW8RGd@+(!2zSIE`)b^CGoHT+8YFB#(bYq-(9jA?m&z5TcZoy!GT z-yf6keJriZIKXDCtDBgAyt^31i<||&d$@YEDD(BQ)c%6=_0+*-oPe2n`~H{=++%57 z$fbLGH=kZEL+dib`mfJdcQL=dxir1MB9#2p#YKEDcYbr9DSCgryBNibX#3lP&#|}5 z5WBirXS?T~NF4=&K6+RexW8^6^4|rhT*kA#VZ$C@E<@`g%H~!W;r%i75ssyGiDCT` z*Pjw;`}BGtY8SEXG8O#&F$v+vQM$yKvXspGdA&bS-9?`5OU&+((q%;HhtD75=Hcs`OVPW;;68lzyZQdttDAWdLKj&1M?#n2t4B(g zu`Rb?+Wprzm!fwe>+kCR;qJ>;cEcYoMePDx`IXkCuzk1pR}U}VU5w(zkgktEFGA_U z=-W&)@sE*6w^u&?Yx=qfgy-K|#nk85NBjE1k?8OG_$x+yNsqvD2bWpihq#&d&#&*s zFLAcp_j{Uu!2*2K!CyGs^L^FdQ@@l0^_lL4nBdOG!}IH3bjH5vFU9+ul`3| zjO6w0?{PQ${&EyQ-~0u`{QT+Dg@<{e=+U#raxsnQ!dlQ>W`N$s{lg{bTxLKIpYI-% z9A3V^Ak~Y6JMzcB?$1XRZgl)Nf2;s|32J9f@94DQNB7YQ8N;9M;^E=TyGMia_-5JJ zyLq+NiA_E})=4}yulcdR4#rQ#pnQAHP1Gn&Vsje#*mN{O-g3 z=_M+*W-p)r&)xRNss7J-|9@TGKm7FffBZw*uIUb`?XZ*`minK&e;oK=$J+k5dq7#Iz$WJ7U=p>y8TSsL+l|*-?=l72Q#l z9SQD8ct=uqByC4xJ8HC}R(8~EN6I_Wwj;G28ScnfRM8d-+ygA&+~Xwny&XxcZ5s`H53saNpN) zyyUF?W3qi+!&l1tTUFe@w_i_QqaSkzf$dx7vgbqE$C3oE3;^l1<=n>_ypJ{HX&>_x z);%Lik?{JL8&^Eb4STr?JFdLrx=*5QUzGh{reu0$O7zEIzjk4VX0-2t9Ppn8t2>sx zo8KP4td!&5Dzo=3@ze4?k5}N^VdXOIowc;rMe{2y_MPoNDMa#Od@r^( zMK-{Tt*bxSu6=qL5$=d`srHFlc-Fu0v8&gwRD5N2IheNZc5awo?6~ocTiJ2T&*Vsf z+2{uw{w#mC2ltA(eXU#mlO45G3Ut44%m;qVncwh`Y%0bax8c0r z8}6GOz>Xjf$E&K`YbWNp<)7qG*~5U}Y1f065H7C>xbkfW`&9N+zh0{72TvvF zk)zos1D;0lc+U86Z`&e64zc~wVE_K@)2DFXle%vLh4(ctKhW|HYIq7eQrwZ!DpaXHojBCx5@G^~w40QpW7RWcFzc%&!cZ=?B)kwS7!d zcD&bz1Gr;&MKWw({;yzih6BQZ^@lg}Yv%D@k@s}&Uy<`qI{T~lBph#C?9UEzlllGlH+xH>mzdVNRM`l|+WVXF#ywl!Y-aF*vUuiqh zo!G9yuHm1f1Nprj3L5ONeKQ$+`Na;Kz53;gFIfNFQfY_EJKW1B3Om$%-FK{XuQ1)~ zN8M-Rs_oeJDe3zp7bi#UQy>cL+o3<6EIXvSZ)N4X5BD!V(;u_=#xf?|A@kFcK0Q#{ z4y*03!FLameg9xSz`Is*5!S*13 zzoO3%$*yf7zh*myo#HM}6yXjjU-<aVko@!l-wDL8QW9VJ;<44f7JJF?%Psw$Oxbg!zqZ`gcOS{`zu>)xe_zYJ z+?f0K+O?ZZ@$Crd6^H?B$K8 zFMp(zsO-}{_%(@}U42jS`I6u3t}Qz@-0>^g#l9A)8tgT1pXeLy>^s@=yo*MAmgea@ zZGYYXwLdla^TqO#mD)a9f2_wIdgTQ@Ejz6{)t%w~1N&kgW_yNPcD9F&vPygJcuX})}1A6Ef#jyVn9S;_sfwlm#k1+YWF9RlqTc!yAS2z7@b zJA}4F&>e#95MhUiJ4AY%8rB`6>=4@yF^6sYmjc?}&!4;g(^v4=>SSo>E|Md5N{Li0$ zi@W=)+nb;M{*#z!K_-uGy-K0c$Fv}tYc)k(3nI{685^lDh_S3qW+}7QB0ueZ^0i_- z-2Wfj9~J$7#_gy0>F*DBpJVsa)yGfQS26$lhWPyH@A&`jUUpq-Z{DlIjNx27tdWJa zfjrhUv$>!Y6mNzogZt`5S)nYgGiLeePzStx_=37%)HSNus8VcBuBJxA)V0>yf&+$@ zW>SVnmj+E%nXMk|AWG?7d-u^6LX6Q=8t@8m@zSjlsx1R;&`hDbE*@&FdJ{0AgB{es zQ3eZvRF`gbEvqyjyaU35GRLIB#Y!l0FUB#}ENgUI1EwDAKy)_l#Sv?f#sHPzIkX8&4KSs#?Sn(J zTAX7YvB@i9bnH=-V=~k7S!?yRw5qQ)4ZNs#wC;@>MSzwDC3-_?RqXI4N9#UeVC_{+ zb-HWeh5=n|GIDQ1-jzqMow2LaL=*~*UT_@VWH1`kS0L39VzYN7;-Phl&N7Lu%{H|l zsC%Xc>MW~D zC6pGe_X<>&6={W$ON>$6OGIN_YG-skCU9BBY{;0y8&MY+P*v!*lj}&|Cx^ z`xy+kZ{2!01!H)LVWMF%Q*>HR zx3A(f>*y0os0y2+d2l~#)=;Z;T%zowRj3}N;xacGQ3emAK1aiXC>4jxoE<{7ySq>E zv(EJ#7;VIK>)NfCS_eB#X&nmE%KHQQq$MI%##F7@HDd?umD@RN7Gk)%MIBONb*rU; zaunwRhJEy?efEMtEf^tsUW;v-xaoOprcmo9aIYF0=9v(v_1#Ub1^0vCy88l>6sHI3z@o|<67oDhGqzs!(-k8N35Lc_()vQGyIJj$ty2?Ti>MdH! z)oy}%M%U4KiVS6HSb6I5HYf11QFU@fgtkJdjAoHKbuU836`PE?kj|Mk>jFX>7R1A_ z#^d7WI zTQX8%tO(U*^--!*oYD1)rDOS|pgHQQou@UIRThPj7LATwHPl+~jZyQc2Pr`x;oi^a zI`77{nn_+(piIj=uqc2ctIw+3Cn~C$_cmt}brO*V&{6Fi8D3_H!mK^DNNlSu(SU+h zkcQ{}>#VKV9PZ($CfI0!6s~Hx#yKLT7BcA!(`8mr#}t?jy-t&!ib5R?tZ5yXx-No& zhHz1g5IN`i@L`oz6g!%z4h;{firATKax2A`Gz;i+d7WBlLNL`lZX9^dtieqz=31rC zN>yuVJgJz~QDYJD5~(yLRuMF2u+By}rOsKnons1H*y^(Z!zcwh^8~`_Sn6bAGA%=U zZ-%m{wa~RD&q2YFa&4Z&;fffe>1r$1@ZP7FzTCKTn!+>LT_l#(WqmDEn!kE2#plUOKJmJ(t2v3u~*^%J8$Sk7(0+>lLCdq7THB~&jnc_Cqwejq9^6(LRtqo2xkgMGO$!8wj_TEY^w!l7 z(F;rII4d>jTB+7^4p(i`5Cc#~-iZoDnn2+Y2d@PSRjLBfYnx%qM_K}9HfyFs>p2RN z+Q5#a*u8ailUPHVbi__lW;9oBWz=vC5o`-l6&yJoH*=hGxLR3lIZdE8YiEuQrQy&} zav9nPg@{ox1|yX=xHjj|pf%^H=Nzsnvw4(>3m3OWLC#}F6^#jMhOQo592C|46({xtAwTkOlJcJt(K-4&g z!>g@M15!zWUb+LME0?=Li&bakf_-yrOq_jHoolL9soJNLo^@a6!d9dKa}8deW}KGc zK3l3}T&4(}jb&Kytm!Jl6;uXv zSSu~?N;bm#IhLj`p0iLHi=-9O#W2PioQ~t>Gyt*GBE8m8%G3c1XWe{wK|0$x4vkbt z0IGLGFQ%o|aGk3QyW3J;PT|dX@Kkp$rAKj;rW0hc*;#6#O_nj|s?la`=H7D6R;N!8?JyOSd~inR4f^)$dljE z5D?or_B9*TyeA0e=;$C7WEga;t<8>W_SG8HDYXlAvpJ&lXf@Avko2=OQl7%GsB7g? zT8y$%Xp&|ifh--AL22%$Lb_J+sblvNS=A}W;@Pii6LIwp!3HHiPtG?tFMHt#~?G#I!iq4p2-uou<*zy;nZRgT$lzG{^3x33GTLmT zBg3rNLnN@YZa4;(bZD~jY&abjMzPfj`Qa#GmkB&xs?s6pu}NoA+UsFPbxL(S6p6|)K=1bbwZ?TAot z18*`rH|x}fu2pDZccZ3xosvr0FCF^k?P2ZGaAlmBawvy+CL^USBeAiX`M^jWJCk>h-b`zNuK)m=frhP* zR>F#PuUhleM0cq(Z{>6JY{IE%0~-$*tBt`UY8y;VqO~>6)d4402l1&5t2V`ob(k04 zG|mI3O2=A#flTS%nYlC`4P1>|gW1CjnsRDBKqKP_CQwT2rB|M38R+Z@gBS~V3~Mv0 zI(zBEFuhJFWsCdvQ7A*9sgqDNa$PG`|6ykZz%|cGy6sba(k`@8Fq8GlEELTb7n)w2 zSYpzoz@fIr@I;H8(KXJV7?a_(85A2{&^UwQQ@JkbD;k5PX($;Cj%Dd~Zq4$L@>wyu z^kQ*=wK`0YHpM!6)Sj3T$L1S&gNlgrO6jAE7R?1iYc1~Q%z9CJx~9(Uiih+CjFt*! zC!$t{8b#?48QYMit|K)B-GVu>3ZJE6*&xoV!@Um*aB9H3P#ZUwxmqnCtuZF{B*QDD z#8%rB@Y3b*)oPo#9f29L4t6k#q$8vgG*uFb%9VT3nXnS+1M*F}z?;m4(b5gxVVDQu z@*`keY28ms?%hCsW0c18bw_=M9E0jalq*0x%E-Fk- zW!UICqich1iCkE#rPC6~td`|{PBH3h3EE*O9Zm_P29i7x8E-PAD6|p^gb?IjJ&$G; zw{&6(hmK_~HHsgB)l0~r6l!D{hULU1(2P@npfl*2x3K}p*=k1=czWU)A44*@N#ALt>C?O*5q!X=jxxDn0QD&P$DF&l`Vwz?!WPHZOzlu!05|S|CwR z17SMXXv>vhs40%+L_T{0PZ8*pBelhqeir_$W?Lp+nT^>ctB=4i#z;t@ETAUME&b{ai~V zp5(eCkbLiS}Tn@D?MG0V{-3ckuWt|GXbSk4r`rd zg@q*g2c@*4p)J+1)l#d}0Fw=v857%}Mc_*l;1Q`<51fZPpi{A+HS3&S)Yk868 z71cq-kC3KRMntRE$zqP0f&SV0t2|EF0tSCeO*#IDBU0 zJrbluR?=*mJqA%}8weJLSnAz?UeYa4Vi|2`0`+3 z9%y8_bYm51F`#FpD(LVzfSG_CiI!Jp5k?t#F*H@x#XJ(Z;?ujunmC5`j6zMHF`Ek< zq1lBb%4eySUa+_Bj_DS45j9>^oAu=ra1v-wg)4Eqi!j|R3;eL!(kImPA4{zQjT^N| zIvrxJiH)UTb6%F(mL~Xo)>vuh>FSOX51#`y+!Xx`O4%AwhbNqt$-S>Iz{H^IQf617 zj7!>(P{CNn^@wvISi7rE!1TDF^rf6=rO~_iT2Kc^(Cjz{EH&>HyckQcV*ALMJtKSt+Xla4EW|xwl?4*yyM^5>G~^ijAfVZbT1Jy)bx2!X4HP>klyo|c zHW4gR*GMC>>QoM93W39_V_(u{<%y!+2a=_X5X(D$bS15&&rTs089`JBFaqO2vkD;` z7IwW-X|kdhhtWr;8r2xPF|5&eBvO-CN3S4|7+Icq&Li#b(&Zdy`mze?yX6s*C@|`R z3#qfEiBJ+Zh_L!xY59**4Kf8J;|D9#K+ZAiBd@1XmRJV)4Ow7NVrjHQXsRM@wxYx> zR?|pbvt#9uymMuo1ukEk%galv-O@h7yd-sqc7(jDhALvFtrS<+Iay+Ll14>qr^ELn zr}xFYyU^hD(WLU980Ns`t&Xx?&p1|Y`)U?zlYZ+MN2)}_ij7crCm}smXz?KOdV`;OA)FEij$gnteoH2bu zTdg6@NPFg-U>@?SLrX!lQ8+4&XswM3M$$5tC+;hg5fZmSJ$;MLH4$eM`Iy}afwE<6 zOiBK(h5Dp9TJW^BL@Q5d*1FpgweE@Zue{+@ZIF~BwD^j!FmV&9YITKJVvB8Q|Blm%H60VHB_m6 zEWmn%`aP5^-FsIL?n3E9oW2eHh~8+{o8a5@}fq4g11(X>gceV%h{JNZn^e@msn zWTG-wvC`CHEt+#CY$Lo8){crPi#r2T%Xm*a!gkSG186F@mVw3e@&cZ1{YhZzDL-PQ_@e0%V|M#2w^wJ!c$ynP#twa%_~MKrlZcVNzcSChF0aU z{iyut<;mm$T8js%1K|dC?V~rDsoRVJ(nn8A$s<-3kOVyl91({Kn7Fiq&*jj883IU0 zW-j#fN)FI20I^~_t2D_0w3gLru^qNu3QEfq5VgY7M(@R_L`h$Yq}~@{=_TzWqoi6T zV<_G-Cn_-}bPl9;7|6=lX*#v~*t8yAr9>B35k#|@=zQqxjwU^IA;MZ|be1FhbVOt| z6oD5`nHpYtokECFIAIG>YR2BmggMicjY<%u($w^^9A@CEQrgryVKqvBN7#%CR_j~> z-iq3SYTOrkqD?AcJgM?BTZ1FgEvqtD&oqj(>r?BIgctZ|b9Kz&GS#X}u`mfw?Zi}i zM#}{cdwV@Ia|4rMm{DenDBODH7h6;p&zLNxb}gAE0W^zchA_I-489x|{)vESoVJiD zAQXnuVbbs|f`UEsqthKVGpb*p0BP4&(=Fn<4xjOf!d?0xZq&* zodZsFS;%clP4tQq&9XwZkhTzAQ?O}um^>5NMHRe4-K5xZO$m8~=Ry5Vg8B#{OX11VOi6G6yv4OrBKE2FM5$x4)I zHp9H8GbNE|et6#+IxO}nNCSy`ZN%oS6>BY5GR6u?OAN870)ThV%*U~LO(59Yinl6@+37uX_z$T&Uuu|75)AR_(s7)OXqhQN8o>)Xrqj)&> zn6vdNz@>NVE8|^tmc@M(F`7P(@ZW2u+a`K~HYB62s2gF zCEkY=Ic&;j>{v2((K;}SZAn9`7Apm*=Ve)Og_IIA<`@IKS0gHrA(nB(1*}jh!7*La z=SsPY0a!A@)*zAJrL7FCaN;yb1_tmbRtRMcmc!Z$w~RrQiUqx7MS@TWkwuxftX@6S zxMRT@G+|Zg+krKSAuUUI9Ny$A6;^3|b#6&gW3tWC$Mk9$Rmp5R&fG=H>Ld|mAV`yR z)p{HjkS$@6m}p!ktJ;jM3e4zr0E>?-2oWQI6ZZufVig6-xOJTs^_*xs>Y61}tS17E zTBRT-IJ$9-Ix``))Y{d#rG+uQSxs-nnwk4UaQK7_ogCFs6ACL^s5Od?GDcnlY4sBo zsQ}U(8;RD0QgmurVWrH&QffhuL=QI|vlg3{nJa@~5YZqsUX<_VxG=;$p&kcXAm78T2?nF_XMA1Kl*+nN(s2}3N4%n+-Q*XRgt37d7~F?{ei zZ1-nP9_LX8W_Bg^f*3kF110BXX0sb_dCp>KKTu0REG1gl4Pu>@#iA{NqBA3ttz@{Q zb8S#YwCPr6TQiGRSgK3fa6nMk=9;Er$T=>DjP*EVER@)1Pzuq$Rz|iaOo*v{ErdR7 z5_RQOAj`{WSi$r@9^s=FWMK4~f(=0#ITN<4uPT_CDIOX0POR^!mT7ps3%bEFMm(%_ zCXSJEp{yc+z^IwxXq7y;Fu_au9d%OEJdf$v z?Mt*Q#MT#Lb9n;f2t*9h=EaR92 zscR^YNX-CK+IXv(epv@3GDzg`5{&^f6O(N*jtqTpZ(e)LyoAh)$g&^0FcO};G!aOv zw-krb6Q6l_1}zIDq-IwLt(OtHYH4*2u9Ig_Yybp@%sEcK$(U`4dFGyQ`n?YuwOkVC zvuI{&{>s7(I9sE&tn+A_)2+%_kg%m?i6xe_Gg@y6-Z}!^!p=PxV~7S9U85w@jY{pa zjg`O)qPj9q$`D93^GY(vvRt#K)8XrD)mAoakB+gWdQC__ZBHEabXwIJdeaUWa8JC; z5@skhOY5v75Za=Yxr(jVto7BGnoeyxd!~n~d#M2{FR?kn`-B-;g8++`IxXfo61X=U z0_mkpz^$h>3~YVF9VfmB8>mUE3|sxV7+JE$6F*wJI~|r^C^}UGOTbiIfeiwt&&ldx zldzR01JkmNbaBkttvA+8ua|*`!wp%SVJr~Mx=luiS=Yx#>Kt0pY6EPEnef)FrQX@7 zmDVQKEYDKfF~RHvIrO~ZVbwe)Ybua)v^8qxY?so85LBJwOLR)lq6||?F*~fiB)F2r zh}n^btd#YQ0b}$mNTrZ9^A>w+3B2o;!jD>@R9Q+##5sYh*SS!+s0|9D#VJqMz?jsb z@T9i5wumtxdg5iZ092c$P^m{m%M~n5O=4`7Ye-KI8*cceEUy5qc?PToPRnd6#q^Pu z#=6F+N2o`uW<9b#iNIu%H?7ReN&t;a=q{W!v$9SCdJ&VF#(ZXApj+X?9mLAwW*E!~ zWQtT9C)$E69MwvvQJ@$OsBF^~mRz?!V{)d($PqJui6wz>qu`pOWjP614HM2v5IqC* z1r|W2Q?{BhZLYI+;W1aLKZirX2qkEGWlDXAj2mOtT7sF@?&?DUwe+4{N>97ep%v-T zy9m!C3i26xUA-ryrVU}5OKprqJ3=i9|B+|~IeJ>yN}0~m){2d~Mr!!;Lh3*2H4Y^%d| zRt)PbF}y=bIdAibo1%(p!Y!aWIpWx^ov6uFSwm+!IG4<3tx7Xf+QNNg8P1w+NjoAs zTx-?7u&&nFN2++UCc0y$TZWpJCc-eaQmG4@gw`y5R*^Jw^N&b(!j-0NmW0zps6k;f z;}qK}37mo~mC&<-S05RrS%kpGb@NIeR>?}K#k0uhz^p@|Tcw21G3T^m&_i2i!(JI5ro>^PMXh3WEFt*$W+7UbrFBL#wY7#GgUJ>a zNyR#GZzBu8!AMW&VjTbxQN<|{!L{I!X+|amduF?s9x;PrZTO_ltW>7oy6WdbMmC0zZrnj+r#>G0T zRY-rI^&?JlZEBQ7H!#?z$E=X`Jz-g&o^GraUQNd+=(7$^HF-6ul1U_b1i&nFN~Qp0 zdIfZhI*0%gWk0J|?Io?Ek;rZ9GSoyH;tb2nX2>xi@2ovA7Uap7Hl}G$zxpg0IF8D= zw*32h;YnnP(e>uYnQz~xEXhCy4C*~?Djd;icJ4>uzhaut+AF5o zxNOR**4(o+9gegBodrjlDmAe;1X*`^QSNvLEJw(q%n7ipAMBf2S26>&naj+?N8mZl z0ElL!jD^l4z2unO-3P;A^?g{3L{fF`C6f(h%W2Fqq@yI38nX(UNuEEL6rFu5;<$Q> zE;=GIz&yw5t{G#>8#9GmnOta;Eb%|l>CD9UOsKUX#Ndn=I9ehZ#475ni=q#b$SR+G z9dVM|niw)=akZIcq0)k6uAI4FEi%I~Y8F@S$P4SJTd^^~N=W?}KOcAMg?zQtre}I* zvxEa=J)*2KBmgT_txh~TB|b1qQbQWr)s6tQ5%s|>BkfgY;y-I$nM~ce@rqF_s}yGL zq*_&=PYViRa$~BRxIEc4f{+N|H^vEq@pBL7c$FSv<71&c;37p z5k#y#(bXkUf`x=^WZ)B4p!TQ~nTXk7WvC=E$sh>S8N80EGO!=!B5z%wNJ7=>noc;` zI+KV(=Eyr~YQ#$tg`JnC3vFZM?5RZ5E4xEA}6!~ zkhQjDF_zTKgrwAKe>$S>OKF2Zv)*P#ak|wpX0&GMPMwiunk{RNOxKb%D_mA)t5|J3 z@Q4|Vth=0vYLYc1otH-zc`gmJAe&)8W?W!m;9xdth+Gq&IR;=kB3}@^qWD}hB#G3l z^qUFz4W^T!2yrI5QdW58L=F;-48vy0zh*~dxMU)kIxcsWC2dPa^vtd3qe9}XWVRt& z!TL5P=#mm-18U6*<3|*9mIWeD4|aEk=XFZgL6dkL+)9LB~(Y(l?N(| zCMUk!)vKFXWQ>{sv3uK@!qqIfJ z0O2t1S-L3eoy&?N{6%3nR#txq$wFnBpjJm=6GPHgwi5UvP^mzlgG+5=v@FBK)e{MG zSlAUVZ9y+JGH+&N=^gY@W@K%J@C~BbNHg*{5VPc0Rt%q6p2GZ?Ts2vdiBNMuFPIRg zF-Ihqr;`f}sP=?7Caje*z%-%TgrK_Gh$9RTE;0=`!-pDf7ACE9uPtGCln5)B>21s^ z1Fd)C$P`yfw-+~r!zY=y{0ZzmOXeeL$KKbdJSUnCURl3-rBO1GN9ODUMF*9vs-yJ? zt%4@{s0FpmJes|BipI2+$@5YTSF2gStYKS;XHWbMr>9ynpRoH8DV1501`5tBo?A!F zTr8IuE%~s!%nV?f`^*gZHDg&cNL*Uh52Pb9;3aDYVOCUcGk0T-V);9o)yYG$Y!PIo zgCY6XOvdbJrLWbfrn+{78LN||Q%@*)Zrq4)#*QuPkYzQS1mpp88BV=Q>P;(H8a&mpH>@cu`IIUC2h;iMPFb6Bp zdt%vY2KK3BF_)aW^dl_&^uY>b5tcyc25I`Ia|hB;f>dEh95w3#Bj+D+AemVntEFSI z9ig_^jFx)HjD$g8CfKX_Y_jIqAWkGs)SC^3#*!67s;{!F^}OSbP`qX+hGw0KPSaXm zkXhHaP+e+}1y5?$3T<1-S)GdujNqEU`?3x%QI^q6uqjtGXd+gia+<*&Ied#+ajWd8>3rcWMOih4N7gjS$|70rHUF-U@s^?J zOO7Zt0icTtgmXsfx8jMBm5=M}S?ZC{eR9?Tj#aZR_(bOAEnSBh+Bw48f>{WQ$`;B? z<;}xkE=;+Tu`XRTvUY}ZA2n-gQERQGT*QuXOx|qGnhC44$@w>1M6#kYrm?Avb5>*x zq1Bpa0(O>M2pP^Xx-#hzMFM!FO*yBzP-`+WSqxnhfl}&LeX{hjsY4_4{HP@CAyJ$? zV(1aF$On7vT#{327Gr5Lv(!fxl9;hlgJ^8Bg`okd%Ua%OEOkpL)nP8Gk$*EF^B9pc zKmm@e~J_7x(r7>Nl4%To*Bs2I{4o= zPIV9Q5G}OVy1KC&nh%&kKdQRBstSHTqHX>>GpMq}e6b)U?F8CrCcP zA_X}6#YD{aBEpa*C$d;UN%OV)7A-&^96Tki3$V)oB6-Y)bnzT*ssW*h9vGn<3;0FQ z(RpxVXTi!R4rqbtBxM0ig)FG-18B24(s;Q-8K>*sYhxnNp%~-5R0t=CW|JAA!rlw` zuNF{Eu!X8f%xo=C>D5Cv3o22e!5mXfNr&iks2-tNOFrppN=NtgKuhMfalQZO}} zmJIbI(OC^5LS!T}Q0ju|782trV$zpP@f|R~1#fcGgt-sokfeqbn>AX@2wg`F1sel* zFnlZ4A?FU+*Ae`9(O?K)fJG9Ug9!!Bnn1bPqB;9$s)-b(MpH2hZ6E^)a2OT?0-u_p ztP>VQ0(I@K7syeB>VuEo02B}?HP^HUfEnnH(ybu~PzB%JQ2K}#%oFW#YYL5mPNA^p zRvaUY29_ISYb9HOu!Co%vTJo9hDVp%fc{S{{K?K?-_uAyUq4 zp(;bUcnCe2AQnW4CF(-9lGFuRq2PY%P`N@d(RX&#SeKZc_c=*!QBp=)UgqbRRKSnvboB+ia#|!sO@>TJwfEwxI0_>}>2YHxsaFCKjIB1>8psVYZEY&D z!Yf!sYN?@9h0g)eo#=vfpsocDU;*t7=oezj5KU~kF|r{^4{a`F<6wLep5Uq!=wf7v50Gt{a zI}tZPGIT>ekxSZyY=ZRxE(ajaheFK)60yYSHBq~S`4Lul5&{Fp1|lM905&mrs2%mz z80-Y_1Q?w{T@WM!hK{vGn76{~-jdHXhVENwUf?NAy7y49HWyvBAjKE*beOKy1%xHe zRAZ~PIk{%QCX|X6SEVJeB!e3OA`=GCh~6RLBt2T-UrY?-7X&DJ%v6hqJ4n}3@Wg@m zueFrPHIm>AN7A}Sc8!KFEFmQp8Yhz`&tnS^jm%661*WKif~k4yt3jkF=wv-m>keuD z266B#B;d_uUz0NnvLHo}3@FiYa4g`E>fQ>JHah(7;7YKivGYEG>KU%c-V4-~TE|0O zzzpns*1h`bkpNds(a;Q|hy$e;maz@a!G^9t+GTA)vhEhd4;t~X6A_|}m`xL+ z;9!BTh|ARoC`>o5iARhjY5?C%GL1WfgyHc!KtvRbRJPgz9OyI6PzT|jp;u0%91KDFeU+49lKbQg4Yoi6f`&!l(0~)Ete__ zx@iJuPpvge212_yn<~{1qLI>(IUS%PWt?FumIOgSF%5FN9>#A0=VJloYKK;k^rQv2 zd@CVl2Z&(O&GZN^tU%qyLNWLfxfTZQHq|A8ItNs_BeyW0a|Bfuyf_& zy&h;`i2H(u1y;;2NIeNnlJ^0hA7J2Ev!(!)u^Y-A*=G^wkaz@iuVXL0APE0j?O*5ziXI_TIQeKMcRTDY_MXgkmQ$vo2#2Rxp z1~kB6IC#8*1m8LqWh3#*G;se|gg3hmXn7$ZOLOTJdNhROS@GTZlu~yK98xYp%%@^{ z)B)qo)!I^H3BU*--X5GcflQ6vRgkGbyc!fp>|^u`CcoMFRI=lky<x4v;nqw%I z!G=%TF*F*uWu&}9> z*C1C4Qk3xVgVG%?1#3nEM}uFEe(2) z(UL_Pp&{KDkhw(Pv=9`~$=2ADOC=zMNJ>kf1pqaS>9{wt0cx$>#A~wPk@ul2fHos% z3oO}i{YuMG+lXlo*i?v|xQ+}?vW8u06p~}p@oF1y5z$+~-(N#S&VwL1y-0POAWfEW zz1<9@G;4+j4CK{JF*Nc7R-cj_EuaJB){IX&_849Dh=KGLJx~zFfD)0JFozFNiq6y= zB2R%mXzz**3nst7u3;hTu=I0*2}3PxxPj<&#zZw(1WzSaFqtQ-VSj^XD09(*45@4( z)a_kN@V8*ul#$RFuqH5IA0ZuJo4A8DBUR>B-JmkgkS$#R&i2(Bpfn<$ICLZ|;VL0O z>AGQf`Lm4yk+#$z+#;HMEyjX*d%<{sNi$(eB^XO|FU@6&g-te&3o<^v4d5+_MF5-> zo&1QAgc!{NX9%POY9R~#0;o*4O$s&QRS2N@+jdx-)RtMb{XFFsAT472+Q}zXIP@%UJV(?uHln9~L=Ctk| zUgc;@ML#tLIZGhM?mTuH(0Lb4OLE^?5Mea|BV+3UR7g4ns3Zg34OQ8wf$h?*AdwQN zR>+rdiQtx8;7S-dnFu9oWaLW;@I`^i8K5o$zke^_KJOUl5o{C^5Dz$zYCS$}DUG`} zI+n}@BfRg%M+7~Bx3Fpx$CeXV67p%0h|+(V?l#htr4p$@aqYk(~@?SG3S;5nzUq) zq5_6spy`+Jkt5j*I5m?j7fnrjTM_dn1OvV6gLSQHYAsY7Ow5iT*2%q;vLKEIf}zR@ zy$F=xwfa(Z)xom$VnZnqn#Alonox50n1I1=Qe$;>33I4vjjXO6+!@V+QXQn1l6%N5 zgLysxaOub)+)=u7Jr7E)*t@~J{Bcv!k&lpBYY8UX=nx$1#v7}v&bsTsptUE5B%Oq$ z`0Pw32=AEg>f_^qE#5Y=xj1m7H-`Rs2B^LE6o3!~PK>G(JqUJPks(e5j4#I21(;LB z=@5HhM7>K(wG&9KB!lwYCy3O6kw9#wUM%L>Q1cS5+4j7EhNxF>OM&E?Z6N6aC3fmX zI@o7xvO|`}B565;MMX2TE}=PI$j4grf~;k5N|D#b0i%ReqaaZdK+ZlnH&R+$1rnQ$ z73Udx6^OAEu&_Qp=oc>t%y4LcndaO~?*OZK10e(<1PN;{P(>;xS3sVVYt>qhET9Fb zY%sb+*TIFwK&nO!6j}{6Rp;P|2gS2M&L!*IQtPl&&WdDiw1n^+qCKr+B9Z{i*MMAm zBS_~8rIQdRLHMFrFL-&o2?R}_WUS}1fHr@^mBCxu8gX$Ati>i}ZIMEN8C}TWoEX7KWz~ckgy+`h5 zNu|O;>vHgc#CFrjv%o6@+DsoAIO$pz44IHTPsv7x^dCS55E?2Jt8qC49tZ>%RhL@} zg>3c+&?2XK084dPu!I6PcS_AeuC#L!#L769E)n`qPB>#-oLXcTLAd8b$1D%Z@-EVX z6%HYvQI~8Q2j8oJR68|B8g9^CKuQ2-a|wfQiE8Sc0RQUNb6PNMK^`}vhXyNa@!ERM zgL@;^=30x;kZIk8R0_llS%U*TH5awB*+0I73LV5rt|EmO{GF{sZnY)g?5y*Y!6awN zz}3q-F@_l6U0%t!&Yn+@WeRZmbO^LQ^RnkxYI+=6Y*c?jhdNrnhGGGsMn8=3*> z09daIhm;`sf1MycwT5H1#6BjH%;L`-2F?f)SQ330( z4IIJd3dY6)Li-3-Do(NHDgZzN)*@4%;q1P3G(DiX*Q0%+90YXJaPj6K6bLOG|? z0=Fhsl`^ma77^0H0)`PZAb~;}QHh9~rRrKkvWWw3t%sa}6kKozP!cQ2#R{57pBuYS zdTDt`(Y97YKqhKw(Zlfzvj6C-3n>5~W%A>;NCV>`xd;Y!YQ^3R6oKAcjG3m#yuPaUi3?bLTBt=^1odL*sF7o>Zjgk;O7F>otwGx$LBqcQK?deUJV_C`Z_z`R&UcUn zYpjqR@_fOf?mfWNSfC)+l`9LB6S30D-7KIhsSTOnHMi=(Qr2^Y(2}WQq%@WxfE_A0 zK8=%6+BhR*afT1k{GED?10a7oNP2fmq0b-*du_Z z#9%CxM71_dFL;po0o>&lBrt(6u~VTA5jaXECI_~b9LWsnypgX|k)0ifJ}p?B4MbzX zc<&d0(5W>*3A--@{`S%xXcsaxuN*{jDwaMWq%tN1HfQ+sokQP?!tQZ%?UDbTz{{44 zAE>sP9PoRo%q@@SUtvUe) z#wCGDvLOmyn}%*Dh^#{aI-qqAV%Y2n`DG2vxC`QF1m+3Ex_ruHtsuRJ2Rswn^T2`V zY@;tgGWC%H7Ht9M1-yiH2@VHB&=nXe=z$NZqFikA&^d!P7s5wkV@#0hn=6_^~;L+!q|Sg`J`#)R;ABO5Wv>xg7| zf)CXqYpHq4l>qWgpf@my!Ljbh2c%;IU{N$t?O_2f6L@pTznADdmSNV_f?zU5Dv)yO zk_v-wt5J(cnu!q!7XmhLT^GE`n0#acqk7WfQ)=L&NLayENP4iXf|OYxj02X^(RQdP zgcP&st}S?zLx<$0CDSvQcRg7by+lO#n_&a^4d$j0vIR+g)@-1`1b`@L;TAB+^=kTv zVZtvLf=dGRK|um>3SqF~R&bhTXUL=>a12Kd0e!jzBMyPohJ015@B%VtLGBMIx9AKC ze-n`906YuWX$qhO9bRGz$SGTrS5X8>J{9pO%;#dYAp{RKn_A0*Q>|tO1t6 z8$zj@_V^kNeicN{Ds-(QknJXWkQiu34q(`nr8Eo|F7`CmA0<&IFo!h1K)1U<)~|qw zcz6?Pt03E~C84{7R6S6YgboudQP(|~M3y>IC0a8}L<)V+5d1Cn*phj?U-cw9$~P_6a$P#MQW9lUtC`s&f}j5sK=$CPuh5I^=pe zD&>Lu3sqyiu3GLnVx=W+iMK@y zK@sKy;Jtb`#&ylQVL~s4Olz&Q5a8r-5PNQ-9r)mv zs8~$o%GJgi3C`fg4PJP19gLsIumP_*xSAye__QKCSmW6(;2F0S*a~E0X}DYj5`dD3 zbtfBggMIJ947%9R6rH8Kd zU@wqp#u@OUb@Fb2=n*(=k_D8p-5{y702Bg#2r#k8f^1-5l>&I>z=q~Ea0wML38T9m zx$K#Ah;R}kc?hu)@33sw1gz8o(wjl}Q$o(IRe=C(2IDP6RzRwQ)X^4N*V049T)dTl zKtV7@z!b1RWita?N&+zyOe4FmNnD5ERx(Blces{(;Yb?cO^00G2*pM!T3_89UR>TN*+o8o)5_P!682X&yVCB|v_I@F z%HjCmA?;qb!}@tt>%;!+=Hjw`y6soLxM~ea6O%ZNFN-Q|n#pZP&J?)luS? zU%IIHmHN_oC9l+%9L@OFAt*h*y)t8aPoZ>Qs1PTQ8rdruHF8kG zV^>r%4z{FZ+>K==X8aH(qbiC@+&GJrOf^^~qhxKApkysH-K((DQw>__aZhZN9`~fD z$0s@{J=J8Do@&xckF%{&dfbb3N{^bXS9;XsNa<0N4a(5ia=c#~l^HkVM453j&MGsi za9WvBg)_>GDx6bhx*2=CE2qpT$FMTfT?J)ET{M}GvQg+IYs@N+#?#8jQqoo`v zJ6gyFWyf=~UfEHDjmnN1Tu^qp8?WrB!IN^+-9+Wa^D<7kQL?d9ON&u%)F7hVs6lw{ zIHHvscjdKmaNJOT15jAu(hg;AxD z3Zo{DQ}1F{VKgVxe4QbxFlq>4elLs)qiUn)bF2!}>t|F5<4~=_cpZYMIF&*wj=K%4 z;&iv7;&hX&;qtzrR9=1lDS3Hc3I5)qITJf+pnnm$sZVV}&?akC_B(maR za3s=fpuJ)}ne3?~u{djbX>s)Q);h(*2#JY`hZPcw8pkzQQ9SIBSfhB@AF)>PWPs2V zlLew<+i9nG*doz(+N9C`lT|{i53{7v6DD&cTJdC$MCLoemZ^WuTkv%3WD1<(VVXqj z(K>j=!$@gt8dge+nNHLgKBlYT*>dCP>DM%Fc^raka$yXAo)ix==6U?jun5DPF`9MQ zGxkyOFlZcj8ZB{a!?JM*irqAVlHy_0IJkLCosW*9*iB7?acx`=UZ%-l#ksr9&8E?i zlevpwY%%EX!|oY$zsc~$IPVk1!_2W5#lyTYp3MBqDIS(?7`kzBcqGHZF`n}MNI>uWzj2+|63)2}^@i2Fct}_3^5I(Lz z2gSqEv5ty|iDUHjVcYz4hkl-*7*;$?9b=X-Y#qZ64P(dND<0O4jZqw@Gv=$tn?39v zWAZQzACK9?s2T6UFnx^oW!OH(`!b9l{!XLgX~Dju!HPG$uNKHP{XLzp@vbbvr0zCXV`~f{uooXVgA@*#xv@0 zQOPiW>`BS6dhA)ruzKu8$*_8i1|C+9(X_+5g=rcvckM74bQV@3Q@=WHnfeB!GsyI= zI3+UmLOu6JGk?#IKFsF?Gk=Q`ncfkvWSB}r^V<@RJsNxL_;u|6n9t!xj>WxyWwesX zqDE3O&ED|RP1CnHPZ?40u&8d@;O0{1`T=}$XI!&h2=4UiN zBAJJj*$hu#Q^C_7@w2U;2hZs%&cn|1HDA1*N2l>M-}d}9+l#rZsgSvr`Q+mhoxY~p z%>0T^|IF<*9cbqRr}E8Q)_mkt{`A+*mot@Ur`qgPu$|7HOPtDZ^YK$rcD~f9Hai_T z73Jnun7hkVB23*F2N@k7zoh=#`rgyd%OVr-j<`S#{kG^%rO9>cZ~6m z(E-Q!hpsb*KSukH;Sb$(jD8r_=CYiUF${*FWDI`jhGWQ^7g5pA{~xyl`Wn3-~dr!rL=fb-W%v z_HsPnG3>diwP0Lqc=bxHFVmsz59e>v_I0Z-4*T~D%8PAne>35YYBj#D#+KUlWp^?BWUH6kHwg};)!Vk;r`K(@Z`*pYeZ4B_I^~PY zi^E0RuP(Ob@@8yKm-*)HUad;n)xAP-7x0m#a=7@Wt@6#`aJAj5Rod3o?xMU|y~V|? z_BYqK)>UrbUTy1Ye@NS!c6If~H|en7Twfn+-=B;Nyu2uFyKk$_bt-S#&*g;1=5%v- zbG2K2c5&TSFWNWXj9SjxZujl#x4WyuRk^x+vijMxC*^9pKdiP_wf(v8|IDjjtaj}$ zHy6A1bd8PA`+oiL>63Dq_WRYnhxhjhdbpr`PFQe1AOe!RMl{j+;;N zP48`YcP~D>cDUJXA8f>DI{f+S{^{yF$GvTbRMR0n|3De|^oz^(@9Ay3E$O&Leen3V z7jN6)+v_{WAGdt?`26jmeb%&fk|@1FYZ{-$@Q@Be-G!KZhf4sRYlyQ%4> z%2vNvrN5?&J1u!~y}NpQv2Xj6T}u_C*!{vz|Cx69A)ou|m%m)yy^@pt_2tFk>9a5Y z<3FCgdiL>2Iz0V3fBeI@&VNFy-0Utt+$g)YzrMm-d2E*64&}|g^G-i-TH5W>w`cbo z^jOr%ot;lVc=r3AFdcN#cUNzp-Z|^PuF3z|#zYr+f8TFfs%^JFdEE|A*X3$^Xxqcj zan$-_9Cx#w#)SH#^?<{h-PK=L+xFMh%iZp3_jEn%;_)Vq_H%!Hjw^KX)zxlwv%5T5 z&yDczj`gfpf87oX`k*^~Z&$kCh32-r*YMxdd+uGt{;+H5?bC-AW-jt6sXI2M>{>ds z-?dbKKhFC2=^b10?#a7oLXa8;WKDcvzv3>oA-+lIr;|%ZQZMwcU|C_&0 zzS>`HKl)MUf6$=&&iv0B_tX6E$M~QtuD9uJTR&f||1D$cay`#no{gE(8t>}uN^G^J z6F#A7>z!#E_DpXmUa~PS+t$?ezkirNjjOzo2FAJ>icF? z)3Ni63ZF$uW$0@#s1Ct)wW-}zO68o z()Od0aX`UoFcJU4`VSZQ-ah>2zyD0^AHM(My#ML_|54um+gDqw(b?C}*Y}(-(-`u* zk0Vzc>T z`t|u{^SMf!O;YEZ&H3qObNJHh)xYvuUTF zZqDP`R6Gv4bLu$f)6Mziqr3mG+5F+*p7YK5^%<&sq5g7)tHp)k_^-~?r<={EQ*jTj z`;*P)lWE&17w7GF?7y);&Hw(Z?f+Lll=VM7J>9^bjn5~W z&p&~k|DWnF=bMeZINfaipoby9wW{Bosb6n4zrJI#j`sC0XQy8b8$Y%_uy`-u+si*~ z&bMb{_v!1i&G~0{_TN8e>^_{`n%~o_v(5SM?wI4-DJLAQJa>lP?InT}?KB@8Z z-xoiW4_@l{b=!)!dv8bH+kbDb2Q|HU`AWA)R z?7jCW`TWj|U6WYeDOkE zoo~K=asGqM*8aiz???6j$anldP_q7M{QogNlmB7$_Z8fYDPOkLyA?c}t0^!wxh>bH zPu?FloIJmsy|Bk)A2^QMH*I^^ua5!2DInKVY17#+X1CGRF}`*5VE^*@2t{sRPp;0R zqx!+-yUynA&D#uT=g}v+nzHBH>L13^?ncp`-@BWSpTot3XwHAXbD<^BTzDdj)*eGXKRD*eabxC$VOK>3fq0aC5``nUfD|9!rH@VmbOTwsy_ z@E>1a|9|q||NLoPUC00JALIU~zyIT>pMQS;`2WrAjDLQ-ou9Ac{{6$3PjNr)u0B1y zzrO1E@8`I$KhK{Z?tj{y(uM%v*i7Emti7$7zO9+PsTslBn&I1;(aFu`?Z-E@xq65@ z@7M9B#(w|hX1tlg@6mt1z56xpe!lwn>Gtm7@$37O={)}W%kBNcTe*GQ-o@M7USG#} zxVpW0D}@hn6L zzW>GVVt$N|w|8IOOylA1>gK~+Tc5M^`OVzc|NgD_*d|8LlmdFDFn%KP_Lb1{#EAZU z7a!u^pWb?@KOVt1Ha>@c?JVB2vm}_keZL5P?pGhKZXVvO4!u=g5S+y+1m_Ekr1ADm z%hs2;I0(+#zMIb<`y0hQ;dxttXDuK8{CoJXcd_2u{OzkoXUGYnpX2WCjq;i3tWlpK zpoq@eEPA_KzKMT7{5-GjKi%HH&BBOryWNQQ=QO>J4?fgn-qpA3m(?1_C{9^K&g=t`0Yy33|kEi>`Z6DX=m<{=SGq1+gyT`tM37>~1_DzGk@OhZ!zG;$v z!c!iPhw;lP&)?pCoc`b^G#R%yH!%*HHQ%H7{KIJ*`|)=C`tIuH zA@1^2pTtC4(>L{ZGW%_;ASleTrct8PEvjZ?3PyHl^C zdF3B&Ztowi#{IkTi{ISDY0G!>5H}CoZ>Kc#@k^Y<3nytvFR%S0F2dKE-uQ1<9}fHN zUTc2;aC_$;PEafT{yy#=PJRA;+JNJvW?yc`KYzKs{q_E2#qoFz_m`{d`Oi;xw>I8n%_~!nk zhu=SWhfZmA`_ZpXP`Zy%v|m2IPI~qY6UYnlw5RE`$4?l`)y@5~hr2jM4n98rhB-eqOv(QFW89tI^7rT`wYj?a z@Xz!^&QorxhqyoCXgyq=Hj~Ha->`TOr?_<!soNBA{xP0?|NMF( zYL^(9-+ak`7oc*9(R}nzpJG0}y!$o2T$J8j+<(4)ICrXPxW9W2H+}c(WochxMe}~U zy}ADK_06T}y<2y;AKzVag}-)j$@#y#-J({0{pU|E-oquvy?IFPKBvX`^8E#=USgEj z8?RnJzg~#iB}NuEpFeItEGMO(uWv3z?-GN%iQnSx z@#jS-U1CgIT;%>y@qT)Dg!}zXWaBr#{_N-P$sXDlq)#mj8#y|3q&%h0;avaRb>z+Yb!npO>gI58;bf}M0kccfz5jCa;D5ow zrYH91(qzB?;L`Ljp_KfI=w*)jjDJ5{0*Pq5yZsb*4`0%|bAMsl7k5Q`*TG*n-1B{1 z-%vl7)>jwQWgJ@N2@kiPzhOOUy^JM}WOE-|dHjHQU<zBCx zlt|mB*9%d*h;5gt;O~z~2tSU}CB~GcWZuv7J+SlG!UP8un5&xyeVpGPZ!bslGFsbK zc;@-_LewrXvfpm6=Jw+fbS@&g#xL>FpI$CQ%WuA1lH5fgGS{~^@%{q9ghxV&NVp88 zi%jk=@@!vXc8`=UBT7Gf{unn8U*BAc-X#Y2;j`b(_rG4<%!?4Zz{)=ox&&W6Qo4+7 zxdqeizrMK?y$e}?SN9KhU$(Lv{%|R37ud?Lv@V71yS=}9c=7IH6fcH!ef)V5N*6}o zW}1nAj6}M<^6_8O*F_*a|K2L5KEFQN*B6dNf7i!fG2%;l1fDy%%-&pRy$JU1?&{`#a}YhfyEqc%Pd!|W;_y#b4}N|1KjLB} zuWx^kyW#hjqxkveFBsX+#&+g6=W{^e*lnE4k50%K{&W`)4`1Fr8kEO3%g)}- ztF=yS^6{}w;;DJfk8N+qug5oeOrSpg`KOHSf5l1Z<;iXDPVm`1*Z95p^=f^2clGV~ z#=q`QZGJ+Zw@0Q9JXIr{pYN{UG`f#|_v^g<{U(R^q9*cNnx8t{Q|i6lecUd)cb^{r zl-9efVtN9B4bA>8s}r44GU6_azr1^hyN_4LLi3)=F+BMA_36|c-|F{M9{%EYAMQ^t zQL#09`TT$Gwm(kwf6n{=>+1gDr@#N>AJTSBcSvoArR=cO|J?oKzy~|l_U8}L+78Wj z1iT}V9f9r$VMjlI}+PbqaC%fqh>o&-jTK)sqM&cN5(rc*^%jv0d@?$W2id@+cDyfk#~%B z$Jlm^wqwE_6YrSnj;ZaKVaLon=DK5UJ1)56!aFXqk-21dWa`(p7PaMrpoce2NUtsDKGxuUtRYYPn5VGr z8BvOa*T3Aj;#qFk%T?HMwvbN&_M_edhFB5qZN-}#lm@D?YD)m*Fy>E%1miKwQ0^bfRmuc^;rM)hiUum)LZ2w6ik{9E9v9&3( z0bXof{lRwa)60l(N0dvoPt?M*{)LZSy?&+QE3?bNw0*a8!~9~$jd$G2j$3{vM+(eF zKiKeR`LjK^SIq5e-SVI8sHIY%`-NjZ@MF&WhKFQRF%I&~<5|}~w58Qbj*_DnXAN z%|03MG>XS_#)o^`78!Dg?T-fg_ivv*h5Me=eG@3WuX*`_mUmFYQ`nK>j+9}V5z18a>Yi8fRYT1$ItGu?S_0Xo*b2mMQa7eiB)jFZQvYxNrS5S5Y z^_4FkZ<^PR(6f&G+6c{lpx!-;(q}#S`%SG+&WD#WX8$F#Ph((yWzbANu->ihW0JDt zy*?bk9m6Y`oPW~UU%e;cc;jN9ZvG>ke7}LM zJEr|CxNp;B-}OPq-jqKuO1{@l|72wRNJ-#*+--Z;Uw)tkzGfH|%Y{GGke(idN4o*{ zs?*O8;EpQosPc|#+0iThfc;K_ACKjm3Fzx%dG?~bDqFV3hc5rG3UqmXaGwm=Cxm&g z$G7ZQ>nrT^Y}9Or{FzF6F+v*{+?KR___U`iDAt(Pz+llVP zb`5q7{~R62@9j{~V2ACS$>7T`cG&FIFJFAY`sbEPJ5=7`UOrLSq2}wpW2JkA>0UqT zJ{wnU$F@&N-zT{^IclE*QDEN={qbbkA=P~=E8l&%fAN|An8i1iG3gGOpO*CLfzozZ zZHEoMdywq=2lD~mwX$pV^_^#Uu~jeEmGN<8Y%gf)E5ptaedBo9hF$lK=*7Bl**BnU zCHuZ;FUfsRO82$Ur{Tl5BmHLW_C8deru20;;Kks+WAME@@|9{nNPm7<+IJ1M2l@LI zeSS!GZ43D|+bQf6cX^@+cS!llFL+SC;|O@Mll-{k&nwK|&;EI=FNRU%am*zrZ9A;6 z!-_ksw8P3zE0x2Q9oC$iJ`EjqD3~j_L*X4t*`XwV%j2{}cPQJUCEM+=(GDB$u$3LQ zWJUR2q`W4wa)jS5ecg9r_O;ySpZO!QBj0{e;rrwMzvEJWoh|MAkoRuN^U(ISD39aa z`u(Q0y>ec^;eYr}AbypS_{tZLt@gFpONL)=>Gx#Ho+JIW<+i^2NPhnX?>+qcTJGh> z+`reZ-DHYyM@X;8@^6G6y>^K9*{`j9Cjr0RGsmY%&mY1y5_R;!dJ@(KmFX(C6Y2B&r4EG<{7xOUNGu*PXJ#3U+BJU8(o+f`@ zl&?(nyouR%?`-7NiGEA-<>UIe3XpTmY4FZU?w7Tl={75X9RltUXotW%gt9}ZI|SJw zv>k%(5NwACJ4DyS(Dr`*-1VQng2z@*qx#d=xOX44?OlT> z-h7pqyw<AM)-$pD|K5>-PSqzyITZ{`6bi z-Cy0_{Pg#q#6$}+d35Vl3XMLd1<_oqDe77ff$qxKNPR(!WoIcrKgCaff4KV`yPvK;e!9Mj`QJCR=TCpf|9AJY>r#93UKM5x=i*_FEUXRW zv8I{L1*M>PGejBOS1-y6Woex;%TI?o;N`;?)CHriQN>1;VsmmeH5#U_wbm9KFtjw2 zGCaC8XtK&|^F5tFNV1eXVKWMZKeSZ`3FPv@|Hu8%nEUhc`J|_Xz`QuWG8( zT?;o1=xURZdlT}mJbLYnU7aSPP-ygm~)1wVkuzqqb(!SfefF*+=ObQjuvPI=3dp2Ed#g5zM@#QP%}7JzN@|v)6;>BIwx1 z96D%n@l}i@Xs~yzYXzc!3rE%7QWoR@P-3lB${Af(tP^_c*25_n!%GYk4U3tg({j3f z6{lH8pHM@#MAJ8W)5vek!YR#@0J7}-m&SA3BW!56+%HEf{LIj)ns*Ps!o>yq6$?TJLlwL|JW39GGqDkeh^Ng;IB@}$J zI7KMuUF!=#qm44EuPC+iSUl^XQa~554V*2^}(%r zn4yrj)xFN3A)`VqMT&}#vt+pFMC~GF*ktm?EZ%^)TGg&*E&9O0T`Sa87J5)`(ORx{ z6Vx-hj?PnLC{x4AQlR zH3RQBMWGa!RtuU>lAzQ@R*Y1l&$+q8yrYiPcE+^SxOk#!_(}yB1d*cmpjFzE zkqTo)s4lCIQk~+Au2(D_%O?fRQCICet+}kSD2%jdbnL33)_QM@nnyiI3Hk{4en!`M zH?Gx8^0ESDTIPX80Tfw%R^>iXQO&%!Ih&}Hh%|tXYUjxCGD8$*?Wsj#TWyI36tsdg zJojH`ZN=tr4@Wh@Mhm2HRl_yT5h=BhNoSZYvw}LNz;x(!n)Fl@>S$n1>%i1?5ezhh zi(-VxIoF2|tE{5f(L{A#8i5j4a*D+jM^9Zz6=?O+X-)6B6lPjjTeVh(pJjbSo7P*e5OooyFzuD9 zk5Rptr{17tEL}nqs#w(8MjdOEPQDp+Z=dzxw#u+tcrng3V#;V*AV73fukNF_u7-$S zSW3rPsY%yLwVrdhYLkW-fHLwmR8Erv(!T40%)@Z4@Il6 z%(akAFfLWQ)S3Pn8f{=jB<2BY)@}tuK+n3bEBQ>rxl2G%>Wvf{^d@W(g+ke_;~<&@ z)r?w|6=@wzTgA&chl~4+71-A-Q)UDN$=aMijG#yK2b zZFL%uN(%JS9Uxt~+znc+Ix83Kn`2|*?5pZrQ>{wXKArTe`#Kl4A`O^p@bWa{v<&yz zQYGUuMVQQSkdSbwGHe)A%&BEmRpn?b!-8i`R~fFLGN8j+ zX@OU=5#GYFX2|p0n2`b+M$j!>MJLkTINqy>QrY1suVuRKllX$xua}{Emiz z*v_%9*{J3{K`=*02dN;#pkr-qc3iWs)}T(QU8tMQ5v50~dA5V3pQVxV6plq*E0@w@ zl$9DkFBTmkg-8k&2_QpUqhmFgI#94HKs}@DUPm-94SI$jw15^eC@@N}S9WTxRv>bw zHK7KLE>@xerush45h+?y$!}^3!JQz(8dO$tad+N4v#~e=#2ivdO+TT_a3vh2oh4F8 z+q4NpAES+7#UBr zZZu1zHCuD%!)s~9)6pWP#kqEXV#4V(jgIcU@;M$P9^I!ob}uClHUmja)+k+j0IK&+ zQl&0$!%7;LMc8LXMB6BMFr?%(P#laZ%-Lsm2JBTU5V)f;dfG_}SYYCSrQ7Pv<3 z5xj}Z1AdX{(aY+k^kH-9EVX$kq-U=~Z)I><(Tl8f*-)2dUI$9rP#H}AY4_9p)rT8@ z_h4sBK9l19#)r6^F7Lak}*V=S7sVyaNAl0Ht=h}0Kdb#e<=JpLER15S74pMT!Y&hd*jPbhLH9DG@gT4@W*bF@V(lbo zYm)n{wniZ`_gECO@K1*?U+>-&kY`h>+{UOu=_*NOr^l$1TTVmG()ks$3L*r1WR&fQ zP;dipGCMcx)P}BAXkmAwrg@!Gu0N%L^$7pdX*T1@L=&%5LtAE@_&v2f9t zzPip;vpA*swO#Ym-DeKt0D{QBseAMctXad-P^n1AGMl&I-B__s-0v@o3;`+#1XtX3&&V^8p$eM=*g>S}(owJj+05PZ-2lz++gO zQPtT~oML*NP|6nf?W0hJLQ^N9Xym$9s{X^y3V>^#m2}&u`lMZGO`<~9E3;5EUtDN< zabk%{lLCj@8p9JUaz@uU^Lm)WYcnV|yr6Lg#iw#z(pNMFOVdy?7#z#e?cAE>A?34T zbm_(70&8`cAZ?0u^r$^CBaY2C@CFqT=ate&7cH6#hSpl#&zbe2^mI*~+Z7M#3m7dG z%uYnD3^j_`8`K zNQtesDd45c;j7g)aXSJt%-0GrRV~vXr6ampZ$7CtA`oiH>rhK~tZo{v>tF{>5>d4Z z^+cZZQoyZCR1E9RiED{u_ys6d0n%Y-kYMB znU6WTkqup~1~0bKGLjft`#9LaD3XqlPS8|IBq~?#MQ6fFqz}k9=>l&u7e-4rc!yyg zgv*bBaiw)XDUow9xekF|qgIh&3#0aEZTMnKhc8PX=mn73(AC*S(8R}wz{Y= zHI-qb>x`}qx+QX9t(HzpAhTMQ_c_I=uO(=Qp>#MUkQzwxL}a|lkfP8^C=f!Bd-Xh; zRov2vDI7YMxzs3r1XeF0gQ-%IWf+zdmq0U0X_yL`PBvv}ILq(>tMp}Qz!T`iag>7A z7Agt0*-OcgXQ>9A@?a&8?fOogaks(b0tM?b8fu~zqPfKu4KmcYTXYAi-*hMam6_S(B{AW`O7 zNVqFF%(e&)-?q|Vmcn`dyG=8t7-?sfDk?qk3C>H6XU`jddcc~k5H>G^@UVgg8CoDw zpT5d;uF;k&!%$Nk%ZYsU1fcMewfWF8rl)EaQkx%!Ga|A{O!ZO*kSF9px9hB=x80VC zgien%1*nD&TzzmxGNCW*{jeS3tq*MzF!52GphAbJ)76U?avUnuAX?{1GrUf$lKQ!p zNIc8I4vHGPS`9ZE=~k+M&7s6B)JC5fj6*1unRPA_RdfNg!nC5#!(227)8q?kt&cTY zT|S_&jL};i1Z7!Z=jAmIJS9&Ug0L-WTs9^7kR7pPu?14ciaJCp^xlcKZLVgP4*h_& zX^$GDt0MK*8cu+9n2S;i5;L(S(XiE4peG4pL|QA2Ix9V0k7IK0V39C2TQdQrR1RyM zWrc+#`Uj=7qMCn>phe(I6W|f4SPz_sJD^h2m0^8A-^7|B)ZS$b zo}yGMq*1$oT!5%EYO|u9pjhH84|7pCV9}L`i}WT)EyV+yHO;`LFYHqqVOK%$Wovnn z<`vaJ#gCAtR7OUlTB8gK$=CwFTvx+}sI8H)n^cTaR!z;2aA4wAt1KJi@Fvg6)Hr-* zm1pDNS0SX1Q!q$B#4C!OY z>>g-jxpZR{X)&N@q$=p}Ie?jf9Ep}!W)Vgic`-Cq)x|s#x#H8i#hN&V_KZSJpD~*Y z9HH5TB+6&0m0qy7?vCjebrCgQRGanX6L1n}PlYRSyo)g1EDQXw+R`V~^dC#D0*xEB zNje>3u8EDMU~^uU+Lk8xeAZZL=jrN>6AzyQHQW^a3`*G=QHLj-mdU-ZFu=s1>r!S{ zp^Qt~kWj%`#`TDEAXs~Pp#an4g3_0AqLoJP;%h-296__=7_ij5SMXwNeWjVshm~K? zG>eSdX)BWMAIlG5s4kMRj8n7IS!Jc;L@br1u{>t!kl4<{OVp=I*U%*{?lMY7i37_h ziOMBJhfK;)SfG=Jj$xW<7$9lO9NuKc7Q!>46Z(L**o;=~6%qlh%(^fg+GX|LsJ7^< zO5@tsrUf6?DoV@rm4wq0tWG-W3iD~1ezAHr%Ltvt#3>T00aIiaM} zX|#!8k-A12kyWR1FjEK|Rvr72HY-mQ^*)d+WrSGX@uMqgEq!(hvB(IbI)D)v51Lg7 z;jpmll}eNJ_&SU}I@PGg*o|S0#v_rMygGUXfyBu2%yS-Tf0r)jIMbI^NZ&1wkVJt| z7hFi4Elq@yxIu)~=Ss_elxmPEAQ?YcnFex>Ss!^ljk3ft$ZyC3gAz-lCB4+idb1TJ zZn2t1>Y5!Zhvc0r<1BFb+FV{|?Rv(sa@$v{&|2e`T-Jf%2+2krq#Li9p@~^+qD!B+ zECC{Oct}y`<|<(zD2XLl8eGf3B1iZQ#9>TonZ-n7^#Ha^;22ArO{5M%b4G^6vEz*C z6WVGGX-3*J=LGYRR~=dkqK(2)aYSovR4|g3u{?2KnT(LQ4eIGzbgqdwo5;uPP6(7O zV`ED4cP-Q>&C!CVttDD{LbKN0mZ)`4q<`fNr)qO5j0Ov6xwV66c5mD|&9jT#8 z?PCGfBh>GqWa;j!D?xpw&`8K`CO(K|cHZdA2!PY!5DTr3z>20#TJ7_kW82ARV*Xny z1tt@fv5J+Z7HiR*GhrLyjj(o9Oj+C+m|Dhr+7Y&k)*3)lxwQ-|rk5wGPzLR>aVdqp zE)5B7`6TKnI5W7|QuRH;ew>niQd~|8nnMV?IToJcN`vaC3u<05QZXHMhD~}Vb}_Un zhwVq@M=wt%571gXNF4|_uxlT^$xPj543Iv0T1pWuLEwluRKUcg9egf_4$Kfh zIx=&ir&n@-b^(YL+gYVa4xqKHPK)iZ?NU%$rhupwo;G?fMkPx6QY7`h2um+%A10Uv zOU6*VWlmILOz0d)?J$tlvG#Oo^|5I^yh@2Kt|EwLGtv3b*&R)K>OzFI(&#Kl`00qq zYA6CPoH8}M^g4wQqj16&qSTDNl?ijEDI1j_N~NjkV>!&gRi(74b;4?t{*JI26|B~| z1iTfs1=YAO^hBFf!gx~UWwr)Kq+3>HuAXTWY1gOLBMC3?(dO!y!)2;fmttWOp4y42 z^o*7Z9`^QnX66Pa!!V=F7E!qM%rCa6E}k)2Ozm1SO#)~Z%M4+3s~LPbEc_Dz(Ku}( zQ$Q#TrNgA*TLcAr=0~SHYGzcwKmpROt)^SVbsawA6NS6Gr;8GHP zmR`qj)=CUDOnnp{p759>9O5C%&1Y#NE&8<@Z^(Win>a^lGz4`{avjAl$z)jC7NZ0Y9VbQx~5>$>M(gGvWqHsg}OKxa#tQ)=**K@vw;Y?&jC2|4US>1jq>$TB${3oEk))*O(q zsERUE*~i5onDc)xA-X7h8R0p* z(?_IfvqZe>>HydvQ%6UlpR6T3zH8}$le9KWI9dm&Q^TglItOgWD@zSTnc>STwa5|# z)mx+9Ss^kreo#V{H&>UAO2UyhxRu%IFw+}nx=11oAO-RH*kQnL(R+u4%ehMkaK6DFK^=s>4cMt4z})9HTaMIE;cV<9K2bJ&oew z*kjJts{ohYt*?xC)mawzQN(EaIKqFgnQoit3EGg1x}thuH|OrFOU6pw3n*(;(lNvG z{g!wiQsl5HpRr@f*hTBWD7GaHty-)Uq@I^$#T8OY%$Q>g@Lr9mK!#Yx5f`vRr3A-x zO`j{}E(T!91Y3hdewVf~u)>McAQ>3IqgWx7HCPU7FWfQ)Q7RVnk`)O;Aw(8s;<9@6 zOyiCPYtV#MrEdq;B!;vs;cDbh55eIRGIVlOM@=ZKY@yaDI?5P%4W!ji zRHOn(b8IA96H3vkWrdY84@;>9JrX_Kbj(_8T4t^chCxJw9JTqtu}pEAB?7RCqt7A8 z+B%lA;LaWsXCpN0fW!qWt#npHkv^=nEsbWj%>AV>56Ds^Y60Ta=m?iXtr@dii+WaN zDO#gaO0v<$@|86&N~Vf8nLhLM%px_Bm}$Eo;cph{j-3VvJ4-2^=<_ivC%m;3w=AeZ za|Nv$%FPo%RnXB}h9D0suPrK;RWlWA%|1}1SGF}Lt`de=7MUSdBd^gB+!8kH$Yc26 zaRgAZH+LRoU}jfhFNmR|Gf;AFW;VO=mgg*%_5-y9#8RS#-5}OkSuEPzfM-S~Tgh-q z=h~o*Xw$9Cwq_QsuvC|{;eep7%{5KMkaJuP8S8P#SSYd2pcJBgt&D6;0omk&dEz|IN7j%PVjCfe< zOdKQSLRm!sfl)KX(JFax%L`_8UYZ(U%Mursi>+yJ)|T4b;SSW%VS<Dw`dJnjWwv~mzA}5Jv=j*=U{z?{=2+D@DpSUNy+wo{0iPik zZ`@FA#H6(SK)8evTL*1X1_>vMr{s?3-P#SjI64 zQrA!(k(vRfwDDFm{jv^7WRS?=B^m=}CMMfr92xrH-n{mfc?p>pk!3%0VI(|xX(EtT zZz&F=CqDD=3|baQNX@PgS}!AX)za!5Tqn<<*Z>F)nRA?elQG*8^UOWr^m`vRYPlrN zXVJ{m{FQ|naJEKkS?AF9ndd^rjs$;GTGw zCCpH2meyHEAhbm(a}`^!S?jAWHJ#dY_Dl~|_fi8^USe~C_X#ty1_2f=bz01GByevy z1ky{HfLl*%7})xTJ5GENHc*pR8MgX!F|uThCw{bccRDP;P;{yWmVl|a0viNOpOe+Y zCSfa02Bu{j>Ef8PTW_qHUM~X=ha0ju!&o4ib(@S3v#yVg)H$@G)dtuSGvTdUOTDvE zE3HkeS)Qe|V}jWUa_D)*!>V~q)>I(pXlvBW*)F9GA*edVm*|w9MH!})Vs==2NpK~L z5wjx=St;uq1IFlCkV+wI<}LQt5_s1wg&(y*sj`%gh;ss0uXCYtQ5zIQi&LJifibB= z;Yn?AZ4qNY^u)_*0jM@hp;C{CmMd7An#9;D*N~nbHr((_SzZBJ^9)!GoR-;Cis>UQ zjdhJtk5G?R&3a^g5`oDiZ(5m`l>i!<&|NrdW@ViO^dcrTjrq*LK)1q&JBXFV%`lh~ z$P}qIPP7GCII5LSqd+knP}!y}EV*ud#^hBS%Mmkxi6wz>qu`pOWjP614HM2v5IqC* z1r|W2Q?{BhZLYI+;W1aLKZirX2qkEGWlDXAj2mOtT7sF@?&?DUwe+4{N>97ep%v-T zy9m!C3i26xUA-ryrVU}5OKprqJ3=i9|B+|~IeJ>yN}0~m){2d~Mr!!;LVHq#b+U|Suw zvtn3hiQyee%6Xed+!R$*6K(<3$q~nP?L|*YK2pV-HPIb2-7?g)G!cfWl}cUMB(!Gfvx=mdn}0;Q6RtFEvm~4*LJbO= z8K>A*N#GP@sf3;ty!yx}%_0OguA5i-uu4`+EuKY2Gb>HHZj};3$DGrOK@V-64STI5 z&b(C9m!5&G$*El*o`C@}X3a#Jn-YhG7PX4iv5c$>Cb$+Sa5e(Bgd`o20B-TJj)-Gr zj#}D*tUfAC@+j=BCpN__ZNGF5HELTz6ldB6A#qHK7UWZo@T1JcoX8rED@Mx#q&QX$ zA4|Yix_i+=S|IxZS}}`7mWXPZf`0f$b4W)`=bBxkQW%IqU=MS%pcXMjJmF4G0T zRY-rI^&?JlZEBQ7H!#?z$E=X`Jz-g&o^GraUQNd+=(7$^HF-6ul1U_b1i&nFN~Qp0 zdIfZhI*0%gWk0J|?Io?Ek;rZ9GSoyH;tb2nX2>xi@2ovA7Uap7Hl}G$zxpg0IF8D= zw*32h;YnnP(e>uYnQz~xEXhCy4C*~?Djd;icJ4>uzhaut+AF5o zxNOR**4(o+9gegBodrjlDmAe;1X*`^QSNvLEJw(q%n7ipAMBf2S26>&naj+?N8mZl z0ElL!jD^l4z2unO-3P;A^?g{3L{fF`C6f(h%W2Fqq@yI38nX(UNuEEL6rFu5;<$Q> zE;=GIz&yw5t{G#>8#9GmnOta;Eb%|lWpcNaOsKUX#Ndn=I9ehZ#475ni=q#b$SR+G z9dVM|niw)=akZIcq0)k6uAI4FEi%I~Y8F@S$P4SJTd^^~N=W?}KOcAMg?zQtre}I* zvxEa=J)*2KBmgT_txh~TB|b1qQbQWr)s6tQ5%s|>BkfgY;y-I$nM~ce@rqF_s}yGL zq*_&=PYViRa$~BRxIEc4f{+N|H^vEq@pBL7c$FSv<71&c;37p z5k#y#(bXkUf`x=^WZ)B4p!TQ~nTXk7WvC=E$sh>S8N80EGO!=!B5z%wNJ7=>noc;` zI+KV(=Eyr~YQ#$tg`JnC3vFZM?5RZ5E4xEA}6!~ zkhQjDF_zTKgrwAKe>$S>OKF2Zv)*P#ak|wpX0&GMPMwiunk{RNOxKb%D_mA)t5|J3 z@Q4|Vth=0vYLYc1otH-zc`gmJAe&)8W?W!m;9xdth+Gq&IR;=kB3}@^qWD}hB#G3l z^qUFz4W^T!2yrI5QdW58L=F;-48vy0zh*~dxMU)kIxcsWC2dPa^vtd3qe9}XWVRt& z!TL5P=#mm-18U6*<3|*9mIWeD4|aEk=XFZgL6dkL+)9LB~(Y(l?N(| zCMUk!)vKFXWQ>{sv3uK@!qqIfJ z0O2t1S-L3eoy&?N{6%3nR#txq$wFnBpjJm=6GPHgwi5UvP^mzlgG+5=v@FBK)e{MG zSlAUVZ9y+JGH+&N=^gY@W@K%J@C~BbNHg*{5VPc0Rt%q6p2GZ?Ts2vdiBNMuFPIRg zF-Ihqr;`f}sP=?7Caje*z%-%TgrK_Gh$9RTE;0=`!-pDf7ACE9uPtGCln5)B>21s^ z1Fd)C$P`yfw-+~r!zY=y{0ZzmOXeeL$KKbdJSUnCURl3-rBO1GN9ODUMF*9vs-yJ? zt%4@{s0FpmJes|BipI2+$@5YTSF2gStYKS;XHWbMr>9ynpRoH8DU~xApy15nxpmac z#d3+!k`KGf%mAjj&&+^dGnPez#HD5ZKsq7=Ub1EoW<~Wjb2sKFmcOG}ojfGV7C}}z z7?OX@WXz6M`dW=@s%uA>u{udQ^@Nh=#*GMP?AWpnSyr=2Kprrc;nb_7-cb0+H=l;Fgw71qSeE-+^cbFc!v zCzh>dV4q4BbIGYoKf=;aAFMzYVF`q8kfwh+cOVTVNEL>}QL`>Ea{dtql9}bPS~@1% z5o(LgXsL(HNEifWg1ws0CTorj;zZ&^z1dJ`ELkz6`YOv>&pYl2#cPIQXx5qNG_BqV#^zirEUqOI?P2i@^1!Y9wTxF zD8R9m9BVBZbIIZ;?w}b3OSF~N+<{uOa`V=Xa7bktP)ne?Qxw5ofEz>woSJ`vAgwhj zxsVgPHBLUVhVB1r?^}E1IF2p#nZKgZ`$aNxhY|VCA-uRf6ipMBEK9z+T34WoBe%JkIG1e3R~$Xj9uWmytpF0F4x3 z?AJD7y_evItR<7f4odgXM(D{Q34~*y%xyvLG7^yjRzs!+PA<0ySHy@6SB^vaMKs9= zU}G1Jolla~0y{|81!*ee0A(Kmn>7%|%MHvp!;H~769EpzS|4-+ae_8%3&T}7Mg{)W z0;magU=>M)okLc73!u#cOBA5v&>eF&F?kbPfNR!K$fnsk;66n%+5#*KloZGS-7Nt{ z${?c*36@dYoUkdjnh?WKv>{@S$pKu5djPW1f?m{mY3O=7kW0CiEIGb#!?^@)nhRj0 zt+BP6#5M%i;WP@iBTQgHm^XI=>i}TSOJH4L>Fux_8_=TxNmal&dTx%exgWNBNj!Gl znfphwrvY@Sn*4AUI57!kn=lHX4`uEJ^^A@Q*enzQ_zAirU&-jwc}dKOYY9n>6m2WE zXG*m!6GRjQtrN+fCOe_chuo5fq*K8;f3iVIUrB;`?V=J3I@f> zfqV4~HyTiG5UrJ6LxvqJE43%UNdW>mICxVLA>puJxnEsZKo8~Ak*F2mDAfo-&psw9 zg&kOBsMG+WCmXc`P-0D{l53>ff~ZhnKMk;4!I>Bad+KazDn5jgb?Hgxg0R2=gj-*U~d4wka7WOVlSN$4M|40xe$$mJ$g$ykWUfb zgF&Q`<{TQJa6+a9u~R%k^{zu}#}0&W7YEp}Of~41=$EM@u@t*PEL}4V$-{5ZUiYu; z01D9AaD z3jj;JZPqpCO7`6XO(<8RebYSyB^lTNAepd8jTi$IPI@GV{1=-dg#`|ZkqWgMU=A{^ zR(x?}{I^!?WE#mZh9hV_AiBoD7M2kb3yzbCljpt-h(Tl~#R^r_0KwFQ3(dk)6is#k zS?eBQ{uX}lqDd!RgN4;05`+~(hJ+z4&z`)S0LkyaR6EO3;YM2SoA~! zDI-?X1TQ#H;2ZpMEg=|;p`Fb!m;?<97@R4U zuu^Hg)TS47(+td>)>_d88QRsm+^EHvtgZu*(-ACE)?23PNW%%JZ3o?Mfbv^_`B(wD zI=~gAM>ZOH`A)}FJW>R+>2@SwVMQ7)RZ20`#H}*&ZgX4WsPo7w*BN{n0d#fl_01tT`e9K_I^0%h(HZM+rr1?-6-Wk@z2N zuRbT_2P31ogG~ZKr1!Uh9{|FJLN2~qG6~-r&i2u{7evYcg}4oGEhc?TY`zWH2!R&l z-GU7WSWdV%tf%3>2Xhbj&frco#c)m1(dgd18pITU9Q~ z*^)bAJalTQ6l(zk41|OGE6A{|V^b!9SGEKD$HBchOhn6TLS|{Hqk)fx5In2H@FC|s z`~riN&mi+@SRM_e@s{RXZK+1&2*BSSeXx;iOT#ySsers15J((S3JVs$#fMyr=Tw4c zP%@j0K$BKdtd4<(PsTGi8n_pPyaHL)cm}C;Ww#_DvQP@0MjEljYMMiiXilw0&j!(g z$u$Ol3J4)g@>xJiOVNRi3HL8skecZ{V!1}~lx!TGeFvVqueRErD|T?EBCDkO4$Mt2 z@Z~mIyNCdqjn)y(*V$t7Y}MPu2u>bgPAED?lPQCqCiOB(OUWZLf%QNJ-TkX;pmi2x zL+VPf0+9&-XO4iDn`30RRnS2i}cb1Y0Y2 z9Sk|($cI=Lq&6dF3n1zUMoPW~_&`Qa0a*~% z0uqs#u!fIdiZ0YWJWr7WVDGAn3l_h~UBgD!W9#Q56Q)||a0}Auf`w{yaGvVafMlMX zf&Ptw!OTSqBBY7~QFrhu!`^~zQ$avu#Gb$ceS}PeZsGydjNF)e^8#gDKwG*XIXg6G zk)@IF#la)t2vUN8(htk9@)wsPJZ-syxJ4TZty%}p^xf{vQ z-PZ%oXMqa2UsV*~_>eOI359`_uvjFZ^%@49r43%&g5AMz)w==OfL@t0vMI-cHfZ2m ziYbO+G?)m%*5-{F16JkaYC}J@7BNcz#vUveE#SPXp(U~Jtl?p`5i?^S5l~1bN3bL# zyBn;s$so7O^ol@AWVM36glht}fUSog$`Rtj>yEaj>-ZAU7cJ7 z%ZG~&Xm5Z^EZG3Qkg(Y-F1tYp=PM*gMv}5?&}GXoae>3yfOrFWP6&<#3}SOuJJXQA zp3ylS8BYakZXE%WmMub5fDnvq`XzYe2sT5Wn$3=@p>Bd}@OcxQfx!sBuOw0wj2Ap*GV@bnJq5u~raGV)dPDtYri&z+g9Nsrj}9In?$} z&a?sSjP3xb4$wyC=GDzxxNT6MzQ61LVVDr-4iW_AC z4AE%8)e6cr*8$Q6NbEeS9zdUM*$FL;L(p;oii%-yU4nDGQb?_u1yReul%im)M~)Ig zjiOFEBgr{r?`zIA%C@q?wk|?HEW_2^K^Mn&2dC zrGgcy+R~8noPBT31w;WY$jSzyOY#F)Sd2{7WRQi{V$02YSmFWktU>2eOzF7~=qc~C zF5GDe;5kTp`oKaYBQf6~368;n>bDA!24=;hu;bSUFt|6<+I_ zI5>^0p5hR~?*`dW8=NI%%K}rv0EQJ2Aan-s@zx z2zbUU$i3FqQEKD~I6g4l2gGjHTpJ9uzQhnoyJ0&8*09O|HZvqfo^-1Vrc6+t=j;-L z`VUD4AR4Nan)Rh1JrEgO)O_hZR&pi4L5rAXNh~#S!4?YG+&T9Ey3)Z}!&k7jFu)`t5Gn!g#=NLxQ0M*W&5r!Mh&;TWXvAIUUTcVZ+ zXQY1(7dS6iwjhoh-b0I>wGPGwE`q(0TKBytaLDxGW3ClshHQX=p1V)RyAtl-Ld5~# zB;OFi3;fPLK)2d6^6Z=sRDdMs$imdiCNriPt3$*#Jk}*fL4Z!TUUD~$4HqvIs(|qe z6(A?JBbqaUwxbO18*p(PNYN~SFBe1#YBo7*_DGv%YRSRLRC-6wy@8pvq zkYLX}y54;NQC`*A5+RQaQBB3gZUH&~)T;`*EM%sq0?Y3Lh7H3b1LsB~@FsR-X|ju0 zJT^csH*H<_q3KkcM%0DiA%SxXh;oq@#dwVplF6YnfqKOb({n1asrww5F0B1?GsR`IHy*cMgk<#nus$toA(E9 z3;>JO?x_Z6tB&le2K+2gH*E9ZAl23k3yKgH41$^q+v1TO+h|GDa_yD?iJ%etK9HXp zGYpVmsK@|Uh=5T8t_2dfQW^ys63jV+7ML}$tJIPk;NT$@6fn%75djps6V(L2S#G{} z1e0fY?9i*S+>V&75#EnOG@3pUsxd&KzyMLh&0Q)7dISXXYW!JLSlRvC5y zTuJMQ1aGA`50tV|8i$l=ch=#R)+;!qd((JHv?dTqhBI8tlCg>Mxh8Au7YeGFGL78NFf1w9&Y7Us}^ zQWQ96U;*}brvy<@C0>#;aG!}^WVL=i)^^R1+5h?+{y$%o9g#yki50adQ ztxt@(%7Va^0-L_~=zB@Czh7Mk#D8btvXvSntF2{^{5|B0VZ4d~d$^GSHVH_+5u7RD z2GrUwNFNT}`qn&Kt-H&BQmqCdvy8n`j|pT{0Wc!TSWA_X?g@ht5QW4`z)0Ibuq=|0 z5(iT#GBGgVgUy-DXr6}4JgAynQ9ptDtS5tT=eodukV$8U-1F=ylW(>(f{VW)H=uQ@ zpn2<~Wh87PNz6Oy#+sI`wu2YYlGYKiwi<*qFs>O;k{w>~)(v<&0c0I3vIF`E0ER7r z5MS1TjJv>(MnIl`uPfw2&S`}Au%u^#dmecprnnR;GMR>ifF)Ov^8#GLwj>V+M9>X6 zRNw;_s-jX|58yciHy7MT+NGAm7!rDw3_13Nas~^>f@sZ1t;d7_MkG#JO+JMVi#GC| zIw($PXxEUFV@GTwjGij?y&wyY_cyZDHV2asEKjhZIz%n?K&26qJTu@8Y-V7rdkPWZ z*hsLbhNz9WATJa7=AeJC$p>u1oNpD*WJ**)|G0wJC^f0g_(~TW~NTK@_lX3lQW+vqOBCu*=2hvj+R1MgVb+QBZLkFinfM zWU~+)!;nMBK3$R{4uaHzgRQ;|wAU?rxAn6f2t z6;&h1r@+lkUWIG~U*&r6zyI5RIU`_{dXj%~STT_W1NGvrakfed? zAZC#MM8L~{-8obP+FtnXqHVQXta2C&Sz2HeY!;+3-L`-{;uagZkrEQ>Ox6_y#L0&e zy|D(A)gdEBk+@kOUG@tCT1^?+P@)3QUS_yklSizVcN)M6IRT-`OB!h?Orw@oKM=+@%Y8c_?x$BICdG^IthiuAXu@mDQ}m#!46tY#tocjEg2n-DRbnstXaK;mvGM|3Ab>3a z!3gxF)kIiRjYh_4)FwLTO2hUpQ*zB3XtNq4K=m-2gawKm{vgT8FF6@#pjfc5NK`3U zCJW#)ZA!o%)DIZAod*3wOr@Fyn=9%tN7OR3j@aBcm)TiExjP$c16z)6E^+~dc}Ix9 z)}+bw005XpBoo#SVB?Nqk&StU2E4m8x1#s1I^0<$QV$> zq++?5$~7T%2DnR!tsjO>$AVs4vc31(V}y~%gY3C$ zA3*#>gbi@bfz_;YgiR~Kf+gQ>0nWH<$gMy$mVwDdg91=zVv{Qw*i1c{F+hxo*dsWW zG|Yr>bAZ{47g3cUzhz_w(qcjYY8#U4#_)WCRXTcufPzTcw5Fp62YkSeYYCim4;n@; zU)k7}yUP(f=;j)A@NIMkp;Rej5I65-f0bAU91tnu0;Y#yjG!0jWaSB1(FO%CN%U}> zc3m_eV~0ghX+=^9@F9T2q8CI1BUdQ`R}N@s!5}Z8!6#wOa1zU2$ixIAF@lHS8wnoU zc05c|WX=lUg74 zC$G0J+q2WL``s3mu8$rb9rgt$x2I#b{zT6C` zeoc(Z$Zt?q&PV0sHz|+v#>@YW2`b>1ql)sIRQg7Jtw}2;IWUS*feuEomIJF8WosLx z3~i%gD+fHE(2A$hjpC^~RxI@xJ;`T-VyO@hON|_qmKr%K&2lLzEjK$-THeO7(pC<% z(oz*ArM)~wN>4R7rKMzJl}5=%)AX*Im6>WV%E&vhRYu;)OrKAisLWK8Q)a5kC?iih ztBkyh^U6p~E+`{4c~VAda#2~5GZ*jclCttLUMnjvZIqX{3PySPa3Lr!RRvaF zstQ{9sVaMMkGnYV(}DIz1u4*9bjgrZn7U+8Vd|1``rJA=6-1ukRSZC0ro|u$JQmiLkhWn(|bW|+5 zM*E;xl#TX&9*st^XdA;?@uY4nDW3Js)M<2L#iDR@qFF%)#b#33Q%Tz4scF#S?rGF| z#iE3?O^QVeX@?p`2B#H^9@5S#7X720Q#>gkG{vNW=%Ve6S1h_n8#kRYX#Ytoq18n# z8T5on9ciO@(nng)Z-O&Z|C-O>>$pi3c*UZcw00NTAt)9lWpGNgl+kv2&|vzQq~Td} zEbnzsUOflNNi^cP66sIkEEe}+a7b;f8`(PtczVo_)ud73TpYNFXVM#X-bK}oUb zG>(3rQ|G&rR_v#y!MrB&U@%PzE6v?)ZZ?C4oYY;4a>k;+i{7*7ev{%$X}+cvi<)C? z6^nXfe3|*kD;7;BicW;XClL+D_|Br@7=2W9TQE{;z+>`Nroj;=5g9#LG#$&lEFT9S zU348|l!>xqjJ!BK;S`IyV|11I2vfL7V4`BtbZnAhQE`mEF1jsDZy4qUie<&3>KLm8 z(RB5cS7cvWfa*j}?#9;giy${y31*qV+hi(xUY^Xr)E#F&bF39HVJPyTxf4 zFn8@ZDRkDXw4VCa#hIyZFgk;t#)?;3PrcC0z0uCU^QVvVGtth!T4_Cvk)X7wN=x%- zi5EQ@SDYMO^na}9@FEw*T@D$e^rTS}DLt*;FzBY`Tbh@QC|ESApHBF>l=;1;*XMbx z&caL;%y-N!8t2NVOVeX|dTjni^C!~tlrpQ~>1Qf*vXH`bqP&GyTlMn|XGU zpZT@tpIKkbWle?5wagD+e9`G=s?E+reEQGaUek?kzHutw&SlMaPUTPkx>=m5L^svu zrh?t{^jzXphM(`BigL54Q*Ca#b1KTutuS|&sYIwcnFkpiLFPed#_1HALncD>0Ga=! zxn%(Gr7lNX%LK@1Oql@DJ7oT2bU>N^&~;?`W3<0af9R$%`(av}%koOgG#I1OGWnq! z%9J;6qEeXuf6?vHS?p9jj$|YfDx2!pO3Mt$7(O!dF_F@4dS|1wn|i33ML_qLnGaKj zOn8g|Clg)7fmDUjGgoyX4`1|hd|;XO{M1@dE-rrajat9VhrT~Nevwa~_xAB&f4QOD zp0@tOQ9C;9*XpV@=_nqV^-mwX|N900&T{=OKkpCQc7K=~;M@JrTnB>qtXDZ&%kZf3mBSq3bQzzv#KX>-s0#{aedEd3`wSPWNxS{PC{7 ze$`Lk`uOH`+wR_W@!6~Vyua<@fA$})l=}T{+g9}GLEWA153AE%>wm51Kb{?Sf92J0 zSLgk2ueay@!!<4(PZ!o7UED3EwUfL@IUgQ=JnL$8*nPD6?f+SQ_|FHc)oQhE$Ey!X zT`%_NJfF7Rt1rKN_VGs_ex&5a!*2fFzUuo!esy-dI_-a7eVh;d!;g**yJvs??9Yeu z?dkK22Xg)Hc(p$3r)_)sd_6x52_F1(Dc)VL`{7}yR)_w>;i{NNM@N^h^5Gg+*YYNF zvHgd`RP4LHl#Ib zdb!=dqc`K~RdMkDyJWdu@U3&#rMRv4M3Vk$_w81#CY$_x?OA)fZ0B<^SLK_^mpv#8 zx7L5o>i6rvU*iwmeSMl=_4V;;{U4>DpZ|DvzB}yd?&ZT*Q&-)~65!2-Y_+B%KBDPt z>-&1XJv+=-K6`z5zT2KYU(L_1My`k5`L^#@V|TtfLHVmc%@rI?Mda6q7rS#j{mJ&M zuRiYIf4|D7?Z(a1y)U=5pYBE2%~`H5`v2A!l3;~`^Rru2&b`W85$oFS=FRQ<8`q|- zC$5g|OS$^B40gF^{b05FMlR07eSN%|l*Rh!^6+ZGM-T5RTJG7tLJ7BS`gXsTJAQhw zTKyzdoxLtExBC~5cc)|f{7r?q*1nfYVF;Rz5f4o^#2>ZZj`9K_3`?eA#Pfud?7(C>&yS| z*T-Ma!6kFIIqcWpD49xd?HjdzH7#rQ>*Muiv)Me7zo(l|pFY}b9{*l_w%L59o@^d} zqW-ek`~^qYGi+(YW%&SDVdOIQqX=j^5mN*AsVLy?FM&)u)@yr|R{| zX7l<)J>F~{KiX`*dU%3cKbx*?Pd1zFiF&%(JX6o`kDPt7**uw!62fqjK7_1Hh)`GM&CR=++D`*WV6}bUB;g` zn?Fy@cTvVa?k?lLZz|1m@l9Xc^Dd8HJib=QdK;JPuE;TzR(H zY}DURaQoBE<_WI9IFU;@{M}T=#hvp2d{gAC`KOytA5XGe49)LOaQ6EXdFat&%vEpX z*leCWyQ#jOPS@Ya{%o3dWS+VC7Us$HhzKZG-spwPyK&<^pGEBQ*#Pwo)y>~}Xs`|N7NybdowJqiDpjZ zdqT7??i6hn;qND#r|D$zAlRO~Z4|ut-7h@~uD2%!`7GMw|3Wk5X;IMU@AvqRcL;fY z@-MdRGYE;b0mOZAa!uYZZZ-1f50}dO`DXK@NcqLTDdp#z&F7HqKd*`Q$6KO(`Y-pt z@9yeL#U*+%NZ+`P&^_$gyOjgsC{Osh+70d4G z$?1!X#Ewg|?tXF(uWCNaW&3h_fQ5H^T3^1F)A?n2{c5jPHJ`V=LUCKZ$`(t!4+|pYo3{ce$z6?6$f2|I7PtcskYUs&81W;O4u0 z_KMF>tu7o@Z?0bVT&dNk_$rr|FHGx~mv8vt)at6!{HN78-@SU9<@ds6wVD!+`syuC z{bM-DjwL?i^!eo5zxbbc%dWZP-%;e%Z*rqdY5L=9?E9DYYV*9ZEIYG(KE@eTDLmHZ2i c-k;sn{{HX%-}}G!e~bVAA0tKW5CC!k058^ZU;qFB diff --git a/berryprotocol-proto-0.1.0.tgz b/berryprotocol-proto-0.1.0.tgz deleted file mode 100644 index c681186529639f78aee5bbb2fbceafeed67d4788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25880 zcmV)JK)b&miwFP!00002|J=P@bDYPnF1CKkE?wU1x!jd(*^6{I0i1+jA{^9-45BL4^ z)%Co(S-1bV+KL9Q; zNdWkdudn|f`R{-Hw63n>|L~7-|I1R1@2$=6zkKYs*Jrl= zBd)K1ySe@2=B;AS@9zA|&sR6&`tyvp61lp0xPGeu-3HJUS|e#>d;cFK?#taCdd{;jOLDS^E5DZtH*l)_ZIdqi0G1JyRGz5qbMc=y_s9 zf4++k@$XM>z0@C%;2RsC!@qVG@7Y-r%-+6V1V8ty4_7x2Z&ruiDlZ7m;uM1O1xC_% z`=({p=H{RC$!4X-jCalpZwvfUtM24e0hKD5qX`$*8N!o z9^#mjc3=d@H~w&a+x`0fh4OrS+b1*U7;9%=mq$1FBl^3iM(@4f-aU-ln}@r!_V39d>nYFQ-hG_@;3qVB5}dcEOnh8l#UZu%n+BWKaDPIB6bSw>em!YF9(m;5Ic;z6 z(jqva-KX2z>v#7L{&0U{qf;2uZ{~HJw0_;M{bs~`cVbum;k1qYcsqW3cXjg+cX_H$ zVxq0-oBBJM{kB#ouEf^nWWL=TfhW%@Zhn9F>%+sRcW-Nc7Y}z|-aT>2$?Z<<%|Bh8 z@bnAbIAt9_KU`g(B*boiyNZ)G%1@K5e?-5(9lym%+q&IVx1aCEsaM3^saMgw@((w+ z_YYU&{@wW1Z*JnW<-2)^n}_YUQ=0ksHBRD%lQg84*ZvU~;cHEA{P(L5hrNogHNStj zz4H$zsFi+yA9oL@KL0)~)NxX?FE`_tUvF=JyFXcRJYK{7_3C=2K{ew36vg=Z^Zmm~ z{oLN%-=3zs-`qd=K~39icSuZ}Q|FhoGF-{xRBq|NMF(YL^(9-+ak` z7oc*9(R}nzpJG0}y!$P_T$J8j+<(4)ICrXPxW9W2H+}c(WochxMe}~Uy}ADK_06T} zy<2y;AKzVag}-)j$@#y#-J({0{nt+}-oquvy?IFPKBvX`^8E#=USgEj8?RnJzg~#i zB}NuEpFeItEGMO(uWv3z?-GN%iQnVy@#jS-U1CgI zT;%>y@qT)Dg!}zXWaD?g{_N-P$sXDlqy!iBzj){!^o*QJTBtDD2Yg_Eg12h1)__x{VxgZ~W+o1WO4OOyTn zgGTaL@O3eM9|RT3=mI zmvL-e)TQ+lUVDF30?^UaE~1{qL;Ct3E^Kf?%oO&ebi=3X1R}b5dzk$o2 zN&hWFJpYQ@=w9Rsxf;K1KQ6z9UrGNhLp*;CH@cTGEw8V)AD5tWxghKNW75%&rF9tx z*o<{`6Z6k^7o&KQv*33RSC1BDzFwBv-*CR3I=GAzFcX8{ACn(^EUgQ9=GQluruTP*lApS`h!5t@Z|*Zi@6UG^qj(W*e|zvb_I4R!S2ycy_uLby zqd?F{59ml#tPx_Lj(_rT6$3lkhvV6JW+^l^TFzP%jH%V=#|S)AwB3sJko z$bP@Qn%j>{(7A}{8o$Oze|otLEx-A4Npcr~$Xwsv#QO^X6CMdABH=QWE;6~h$g_Qk z**#Laj41u^`D5HXe0_5%dY2g7htGaD-~V=XGcQ8u0xSPW=n{PONa-@R-EZ^ukDDCci<-!9X@2T(PpS8I_i?-I-hF!fLtpQ*is=ai zHZ=RYtWI=F$%wlw{_^f2?mk`}3(b2f$ME3ex2IEce5*fBdH9RpeYiipM8($Z<@5j7 zZu`?&|J%I(->>c;e){Ks{-@NPw4LG(8FpCO4vYR@yZ>zP*Ut`ouw#S2en=Uu zG0~2x?3iT7q&sHVG4qaDcFelt0y{2c$3=ErY{wOMTzSW}?zq~HrS4d4#|?Mfc*hDm zR@$+a9jokEZU161^S&=|&wBG~Byt|~3MnT1L96|p*F7H+zSy(2?ZK;kQj*FQO$pE&ge_x;ITFF9-P zm}pNgd2XI4ztXC_b^@PHUaLRm4no?u%x&L?`&g3rl>uOVt;2n+QTDBId)mi5g|+Qt zDEq;e+qyl;jg8XRRoHQr9oKylZTq6_|1u@hD^sd}4)(bVp#wA8`#=u(`@stCSoUqc zz|)tM5A0aVp)P;4h;r&8itJeSE#me?+y5ouz81N%g?3!{m_~7&LOa^Wr`s3pfJ}a*QeN`w zD+euC?CYw$Dzo=3@ze5t9WQ@7tX!tOvu^OZXnv)|zO(%og~(ov@8#Ck$8G$&b^3$t z+NYNhl^s#t5$zMT@T`B8$F5$#Qp+o|%fYmLw{t7`#g3coxV0U({LGFNnENPx-SB7m zvpu*^%*npiE&th$G?fC}FC6oMA9Ln6JY<`Sagb-WfhQ9_YfH(oTW`7z=Lh%k-W#2F z1i4?Ys&cQLnCF&%kwa|{1Aebv*CQtS4dM2RfNS4&uvcZb?^N_drxNkl(d?4}^5UGy zG1G({LvjlI*TqN;iS{$}(&ZlpiSkdk_B$wSE79tnJA3l>u2hFrBZW{*|@a zcf;?w)yedLHBO1M z>!TifQ~tmx`CdEyi;?l8+q3MOfbm{0%#YOm*9;@dg+J7=K0U~f$8xV*=j#JyM>QMB zj%wS{EB=7}PJ#ntc`<<}j@dt!CojtDvIVy>9&qnGE70xv!F@7dpAhDK(n8ygRbOGJ zXQL(u_LW`Qw`bs)=l`@pA3dmFy{7c!Ep0z?y5YBy_h{?i{=A)10{z8hY_GV9zq7=? zx_)1{eK&XSK3^v7JAJm-!Nk@qFTdEK(yL#-`~vs1tUFZM;XXb=7JD(`|iX2i_i7XS$ty|bH2*cl0H39VTVFHZ2bL$^!C$~LmFIM>b**}l<#W0FJj=ACvEA6oI4r|$Atvjsp zxKcIeWjmCd8$PWZ?@&sv;0{H0D7m6JEqj_4?yzl(mTb4fR(IHBhpp|fB`ezZi}{+! z$`O8h7+0(M(z7J{d;mw(UcijK~xzx|It@}Qdy_@npw0$kw<9N4zziCaco!1xq zzs+plKpv;N?~AR~zAyGZEibn8FJ#)jBmMlqw!ZsFe*XpUJ^XuGw!Pe#`}f+ln@sU7 z=hs(c`8PtPzIKRY->BMm67XB;%P*GZrTpY)`T4|l&n%~}4a)ZN#^aYiR!VH2?jf&9 z-0bRmick0XJ{KjXUTr(u!&~_{$_}yZ`EJjuJaO9B zoz1rUrla=yOzWP}ZI9dIGH^~Zw@P-_whaT=A>iZ0fOiOGhmaGM9YWh7=nlblh_FM< zQPB>OcZg+&SRZGHx{3ca9_PBE0m>m#wVTIIUr-l}x<(ZnRf^5Y)zoO1y4G4-aKO;gOv>=+(xAyI zv(^c>h%uT<16~0xUbe8*Q zWt9emcR*NB=9o0NSP4b$#W=>AWsPoYz|?~sh|b2nIASffY(Q_5D@}wjj5>$wa%U#$ ztGCugP}xSIj&sInN6cW2C~NQ_3)d2Aq|2Jm7@!h7hc;oU0j4yzeQ;=2i*u|aHhD#i zjy;NUOlDd>YpuSPR`s=}ffx0T*1b`q2+-1?L~kgqiXGnMXx%3ati7tKPIoQbFrceV zM($0>yYlF@Gj?^Fh(e*!3y#B^3`T?c3ZyzhZ1#>sJhV>HSthZy*`^jmmDcMRz$1nM z4PtJ>XBWzv8Zc$`3JPYWMbviA zf{)soNn?$+lxH8MYe+?=h3MRx6dM3@azrrml15z@xb$#oc+OrAnv0-gA9LuS$;DSO zlAyufv91+}0xld?drMi613-zjRw-w6U9nE+ty>SLU<@xYOf)QJicZVv_Enr_9eqLx zRbf*!5AJ8p8fvwUOO$=I3e}@jT;?Vt%HUzt=V(|ErQ&dzvqPwMclRlN*14Voqm7tu zUAy&C>tLrTtwTXtd4E8kv_z!Jn5s3qX6&H7ayy63LJU{8s6$GuZnZQ}j^bRvu#XIxBT=BqZE(R*H@ohGwS)=_#Xt&FwWB8euIyUsJZHkMHE$>J2DoOi7+ z0F5@vsJ^1q&SUYcgGvEiz&3D}*5|;v&NS2aL-d6WI zgNBR>wG=5TKF*Tiq7$`?lwp&}8?$%=;%Zg9nziTy2Y0PdS6S#my+v!e+D%Z;=sG%2 zk)cctD^FeC<^*0gs!pzm&{imw(JWG@?nTJBVv{i!(mAtcT|j8Vf_NC#Sk?@@;}nHb zU|KC`K1qtAEXN99u39lti9YA%67!BaQrj8RQsd%@s^KdYU=T!#-h)@YT?B=*N7>jX@LOIQN6m4-ntqhdSNLYXQd`x zE7f|=;i^pJ5ixX6DSw0wZ8L27NK2s1X3cbHJx4)O8`zN)ySJ`x z5^G44j@U`cjONO%j2ez1f^8wHf+MHnW{z_XS1YS6rwP<%?aa}kG#naAE<+ok5HTvo zV5HIp*XA4=wB{W3oWnI`HjgrK;o{aP$a&1DqA@|u(A9&BgTh*f6@8KRwwh@WoyFlG zEC3>>?^Ykt(?Pvg?ZFz@YhEFUej#yeLOV3gZjSHa77CaQK!ZO!FGQqf1 z?NVp@XK1v66_J<+tXaDi3;{jszOLjm4d*TaMX5JZXwaLmMHC8Uw~m8o5>zv4RaT^R zFl`kt=NvBXGge?Rr_?(v+nC$*orh@uEERGjMFmQXG@ig%M@WU z$3;4a)nF?!tXEBSxba!au&6KN)ylA8OfjdHQB{?ru?!2IHC<)6g35pnYo!HV$wqiT z$I|r0a~3LNk+ed(7{*wG({bFK1|XJNq}Mu1nL1$MteX!nNM}38p^@qcK=p3u#kABK zu5)!^cU#KKDZCjEp6bq}^eB$fbb?GaJ4-FJ$uj0#HQKC=Tq=~B2Gt^~GOV#zmFZQZ zPLdRLXsBgP>w3;!o7BaU+773dT|&li0`|gT!xeA@t5OM{iX}r8dGb3N0%AMIzGkDE z_XNQl9UY{C41)Pdl75y(%2PNNb*)@Vi&0i;{JdCn zgcKqvR3v~5agC1EVCq1@t^oCnu6rHPyfo+;e$WD1$e_R|!Cu*^wOWD5nbw3FG`d)c z2AJymI7g&tNhQCjDFkqEaDTbuKeA)gcB8%ghLm zX@y?E#{`L4O8VNQQS*70kJM)wM#{iYP@wjbdJ9v)zzEhh3p$E zSA067Qvrn4%c#sIP#x=ZpB=dMMXUp%OD(;pXBrEEE){U5IH&8TG-G5u(Ynzrk=AU@ zoe!_26;DTtm=@>S0g4Hy(=T=GeWIJlG5*F3>inyRw-au0Hz@WMgLJgtn3_vHCoEiEkx2(4B{d^Fe5F-jUR zutIuCEBJ8avrs8E*J8p6tqEroV2%#4=FlE$Hr50Hr~rd$tWqL;*y2hp9cK4eA8!2N z^Ias*cr_s4Sl%;2IH)zR428Qx#uBR3R!2jhIL4G1rPN}jrq?;}h)8XfG3FLRW*Kd^ z(UD>(0ZS~na6OZt3Sc{ZF53!~U-h5T?JwaWw^HdfGB(7g<4JP2%!*+!9}SUU;Y zn&dvKtx<@~Jr>0*d<55f_oje6n^H}Nt3l~aN`0`$sFPbxL(S4Z7_$l@1bbv4@`z}8 z18*`rH|x}fu2pDZccZ4Maga)ycpduY5M%AqaAhc+awvy+CWFZ>gVnK``rIh`PM8CDW4U_ zOh+FVSgXSXX;ZADN9_r#acsWfTd0UQuarKzXwh6SwASK&&a4-uGjQtMv>-@#$!MvA zcOq(Ks8N)>J8NfY>N--1(kef7gL7(R#kh{=G7b*OEWXwi7} z;ZeDCShXWLw~iI2LR2r+z4Yj#A6C#vhs40%+L_T|Bba=_y+>9CaR5c5!%@5lVh-?y5y_5mui3-u}Ix88Fu%#lQ z(<4m*s-Xi{ADqEn=nH#4Y)5$OL)!#Q2pK2t(jn?}_2PvbhYB@_)_KwluM?}Jey$}F z@^jesRAX1G;YK4pZxygPl$eFu=riM$2&FQ!&PAe%E`U~;R`hw8iw5Bwm4aI9V~tjq z4=5~S^i~H!Sr*uNdCdb)$rFYkY>OI~O-VjvM=V)vfz+|04v`AIccN{Zt67?od1Gwa zqXy}!NWHa&6JQA_XnA|&9B$Ch8Ow28n!&+xq zVIc{SLMg3iXiIf$wbUv#z+}U&#>6&g5%|)?z(gw61LxrmsMPfKSRc?gv1SOhcNv4H zDAfvS)Gi09t04HYwY*64 zit3=^M@UmDBLjA=QO3<=Y_V~!>0v?C*2vgRDn==*re;VuFrmFwmW^?Eljme=96l4A z5Q*a=D`_^(9)qZ~4JQmkEcI?cFXUFU+N>|1fRjLbDqIP5UWDmpS>T7&mOi1Ti(P6JXxykx z(&-R$O>8U$oAa{Nwlwkiv&Kq0Pgi%Gc=#Ns;il+k+|JgBIy@1_OzwS!0VYgemomEw zW$4z1gbKzou1A~$!P;GQ0;b0Wr7z_KbdBD{*Md4Yf@a4tV5xbp;KkVbN;91gE5DwZ zC>hw)RwUg&mLI@ST_j@}r)Hl$IGj=_MpsopjU{=F>7mW%X*7K}?H@QL4x2lxms~5NZJ_hxdR&>+BY? zX5+D(Q`^x1?->Lw*fxY3VlKGHj`s$zM^kFKP(^w}xIB7>~z07hUuXjUPF z!@{mtDos}O;xPK?RHGVWH-gW{&5=NXJd5B2+yL34x-mt7f`fhoIBv6jJ z;6mzbX(E(_RwArES6cp~RD;Zt$q>uROqp}c`pD~PlqHrp2tyValyD<05t^zd;aUZ4{1*BU)>tf|0ZgcZ&PUe2s**P*2~Yb4^g*L_TJBLZEC( zEmM-eYoR`Ajut#^Ez!yonzin>M6G)!LsZ_Nyf#S65n6mjSeVd~RJFQ7$DBeUK459; z(^ZfbSOGzq;1u4^4&^g}8TB#)1w#q0Og-}@~1AMLN0Ov6xwV66c5mD|&9jT#8 z?PCGfBh>GqWa;j!D{+sd&`4Bs=7xx60^{h*2!PY!5DTr3z>20#TJ7_kW82ARrbV<= z3QQ&{V-+h+E!LtrXChm|8)5CJn6kJtFtv>Lv?FX6tu=tAa%&lTO)pPWp~N*{<5CKH zT^bVF@=4TDaAy3qrRsZx{WvB4q_~_GG=~s&b1Xc?l?K&O7u39Bq+&Yi44d@KePd`< z4%?5)k6xb4ub{PfkU9`SNP-I76>pTtyJgW+pH|XLmH|sS6R-N~5zJ;in@a ztDy+IaLUy1((4pLjKYcRh*C55Rwm4urfgJ#D3zwBkL54}SC!JH)(NXo`a8mARIpm- z67W{k7F6TD&=ZhT3FAqXm)RN|k&#-Jxq4=rq+Op{k0b)aN1Ll-4wtD`U5bTCcxor6 z(x=uCJnZfDOkNI5hG9mTEuwJinSyOmT|8s5nA){uCJE3imPyp;Rx|i=SokMMq;c9p zrhrfwN{30qw+IUMOd(Hq)TGg(KmpROt)^SVbsawA6NS6HG$U;ek zUV0tFSt~KrF!fP*cp`|7aEON_%3+o^(xP9h@s|7mWE1BojfSAks0m;R574y+CFYZ5 zX#}9^tvr1iV=BrZe*d zlW|&Yux6ho8T6kiXhy<*2Iy=lb4m@~l5FA#i!Ia0F;SUaC_T-H3t1+oV__xqWz7MJ z9IGfZm3>?cf_cA`c6j?OYa#G7D7Ew@RlJfHm1YagmZSof5tl83WfO<5GDH`JFC#o> zclwAlZI+04T^#@$WOnUHfS9$+An00p;3TaL6S3C;>eR5QvChFG^2%xqQD*q^#HeJI zhU%?R@2n76JYZ0wxi?prj!MFjH@KDA=`hn9XGTpT4IlME10 zM44tY%xgMR60GNk_pPDBVxNLEkhs@IY~EV2)^a6dB)~_cAQn{s@a~zsT8pe1bXfSe zwtCd8Ng&Hd=|Y8iUy@12spp!ei)CcatCte6NvJxk)V0bqJ;E_+Q-{MS*fNeM7SYov z9*#ZcY`qF_>D~IucvqceaUVsDrjH~1_nH~WiJqVh?5QiN2X=GrzPe>%b_s)fmWSgarxxv6ZQ(T=hy_2$lOC&lC zq)EDJJq`=VmdH^|z%r9nZN^pwX7oCM#Yfi6h!Mbv`+^LyiUMWay3UGvPP83$&5~K@ z6M;spQjilr-nd4cnX_AJ?dsgp!kFHyrnh3vOphWsd_sm!j_Rn17M3m48bwDLBd>w9 z`iY8E0BMemL~BARI<+i9Q|4hQwV+1=tecKmi%rYqp20APXpo~eA2^mNPP4LlY2xT} z2(q@0BxMx~TwqmAV&%Yu~5rf)KR=INP5YJyeMc0a=3EYcl24GwmeQal0rV^&TCa4BwC zbA;v!S~ZlLCxEJ;qqht}9#&pkR4l7zw%nS1ph&N5YffAx46!USL##$#qa(N_ve=Qw z@WJD--JfNPoJSd$38>f$V(91$l$@K%-)_96f{Ug7KrJ!Dlz?hCh;>$?k2W{pnUTp> zGF;NRHYg+7bSty1nRPuZ)g^5>AgF6|O;a)C9G64JdK@wqO6)Tzg=k+ZBU=+D#MHhP zLLWAXy7DTJ6?inPV0s^q@KFmgFnUeFhM-C!9b z9@aV&$4I$QRuMp8)XW04N*>(uf?1uHrUuxu3W()mYZ{!jr8alC19fzm;3fTzI;m-% z$8_xWC0Z6@>kCU;Y8@mhh|p~2m3wCAox>PhwPjvixcW-PZRcPJjSk*WxQ^tM0MT8## zpP__wb3?TelhXDB;Sxq{9kfLmB%COok~^MvZ?{C%6zZ+WVg5o$!103Vn4a!wMJ3T= z8OJ0@T|;?9Y6h6n##_w{)jA-NK_Z8jXbhN{yKRecWaxu?^V(acZe;36Rz}fG+y^PRRORIBmojikL10XnLT6X$P#%xQ>Gd+jX?|s;) z-H`fo(ah=vD{EKaY>n2k&ZBKkw<=>n!j_gLmRQoxXuTzP>j-oUJNI0SAsSqCjgm+= zDz(oxRst`G>dI6yLm<^my~!ZUa?P?=hp(?yTiLKZI>wd_HzEDBJ#p02X;o+FO*>@3 zJ@GC}n4#3HKD3TNXp2&&bGBZy99my$I<@KSnL(@WrADSFNS_nDPneNq8n9@o(_)?@ zfqTOtkY36J+@uRi7(_#6AqEj`n1Wd&h*dSo~ zoU9%;30rA0FfH3i7ss64dSlHB1Tt_Pk#hlMED+7oRz`?f`p8D=99q$818j+z@Yb!R z-r1;?)+W}hU{l&L!R!P%^t|F>)jTF^Dv)!uHEO1{m(qq1RGs2WbV|><6;nzvJFLAV zxRS+)*^!27kg_7yz7?2k6NHqSxQI5If1L!xlp;N4GN;gDNonH znAD;0q_()Wh%q2~;$^h}RGXzxsYgW16)a6nVr-RbNKX$NZuq6FKmo0J2CN27%Y-w< z^pTdvy2hwSs7I@2$+kX;z+{p)t<1|x0FBIfFPvq?vXlgR5tGbSip;=3x59@zh?Vu< zFqjj_6sa~&v;|pPtCdcpKrtLp*`_Tlxo&;Ng4wwf_*uCsRGF;}WTheN>#C1`qON_~fn8)KHEf|=It>O%pw^qyTxPrK5g z73tBt2+t#G78-h8y(grm4Plx~ZHz=aLM;jZk!S@udRo{@na^|>toD>?gK`j3;WRO(V#8EH5YIT++q)G ztHX9y4C^d0yhBMjZ}W(oqKaz5EucC%;@Ga8sL51WW@tJ%mrVGrN;9+m!hK|=(wc5b zJ0dz zj#b0Q60nu-UbK)F$i9G9%wmyMv|48AAHLBX(os`+j8)ySi*DKtWK~c~z;qU>twnJV z1g8HdwZ2X>FV=QMfz}m7fU~hjs(U@*jRPNpGnRFLRvB!-ki`~eAzGN#hek8CwT2#p z$rct##X50sBWvTqNKfcu9RLwg#VHZNwcwCxMkWP&X1kakF@s`l_@vIPRHpVSvYeWX z6gM2#WbI_ zS4_2W*_2hSxo7o09BBbM3yw5ZYGQ8)vNZLg-0==rj*vx}6JS|l**CSWWCm(8mzjx= zz;l`b5Y0##3!O)L$uYUR4~E0)`>+^^r0U#DCL79@)0mZ7M@cL-W}!NhJby4LI{Q}V za`hBlbVOu;d5+axGscuRW(v77xzH$C1$(BgF?ix6N!UlM4X5ZWHReQi9yV};vNT`x zO{vqd=FBPwy%T0pK~L8za+iz_5}<)-*V-gKd<%~74MtJylLoY*VVrC0TASMz9-z^) zhF+H6k=_%`pH&(sV=Q(BK|VtH#VXwk6kbB4Giw86LahxU24}>;Oj#EZtEjUsiatmp z3!(O767SoZ7&2vXwV9Q((t>2JoVi~uGQ%-y)}QXk3+t#`JvP8fNc|W;A9w17e6`f3 zXL@I|$^~S}rYyuH04r6kPCPm#J}|3xLmJxEjsUe0^}#J8?Nw&tKWkl?Ox?Nhicu^J zIcDypT2-H!lb1IXrb89u2p>S_tovA1T7oWCEZ`Uo`%D-A%97Efq9jxoGRs`F24f_6 z-n<_XM65m0)g@7ag@kNm;1gD$_NWw@h}mFes3bATAPCeMypE|dupj0kZ(X2BLe=V; zPB_^*lZZm*$UA9j#7h!|otLHybI+o>y{tNqxNtNa_*^q2 ziPS8HoC)|1rjwxvaVEM_7QyC34ib$F!)8^)W=CYWWFnb5E_anBZA(V<%&q97LgKAt zwjoQtU(=71=m38V7Zu2a)JZqwhB3&tDEl{)UT$3^v$Ut32 zX^WHr!eQLAx>J^fmla3&i^4FAh!hCPT5g%3R!3nIL(*2ZzY-tY)$KKb-iaKaIcx8$2l}5=#9+|Tb6dhEu z@Q~Icv0SeBn zFI-2>Tr8IuE%~s!%nV?f`^*gZHDg&cNL*T$SfnE|;3dl{VHTZlGk0T-V);9o)yYG$ zvJ+&bgCSYjXUvXP`dW=@s%uA>u{udQ^@Nh=#*GMP?AWqYTUN74Kprrc;aMvu^`@G4 zk9Jo$!qVsF6FfElv`z~_qcM$i)-B@-YgS6mx_d>^ZCk9RNtKHBmUVvk9Q4R44=wK- z$n;N<%n(7xYB&>?nwjdOPpb{JSQc6Fk~U_c?)?bNhl5bBnKN0}padsYt*|C$c7Zut zn1dDQJ+W*x1N&66m`hGw`Vp3X`d|gJ2umPzgEalqxdUk^L8>q$j+&*Dk@N3dkj$(g z*3vQAj!;`{MoT?pM#3O46YSM|Hd%9Q5GN8R>dl5iW66pk)z@QXr#6nL+0ed#+aVvhQ>3rcWMOih4N7gjS$|6}2H~;jJ z@s^?JOO7Zt0icTtgmXsfxB8Ni#i8r$Sq+oWeR7scj#aaC`b6gCEnSBh+Bw48f}9!L zWeeq{^5)?%7pC0FSeLFESv$kIk6Iy98(M2A7qMd;lQ&zlX2L3Ma{gHxkt}+RX>2Ov zoE2F^Xtm~XjAIa+s-vfUor>$cqvuS21A z<0+LzR|lzh zj$q2s2)}UB8w>dGC~)%eEwn&YF4BZB6|RBy?*N-s;l@iD(M_*WC4CP;&L#YfT_QR&%&Sqwy4u0R~~9D;P-NS7^4vzpr=vq}}_Qv{<; zz_LJ2mP??!d7wy1M3f=G(g_tj4#i4v_%K8vIVW;n16+uT1+vnFQIt!}7<$5T?L&&8 z#rVPur#+-;h(Ov_Ql%n2DQk6s(a5R-H-QOm-c%&C13-q4mPCT4w?K0&!5{~)*#^c@ zLe?CI`>Kj*fycUN`S46OyaHV+c~i9lPK<}z#?}aQ$hP)^okutiY!>c-i3&z2leiSI z&=j8$ojrmYxl=i+5)`jNc%x+jM~;%99kU1!^9qjf++))hRI(LeeiLSLksNy;Fh+^& zf-hQ0p_=L1OOX61sDq(f(FQ(u@V@rI$MXtH_=H#_p`%kSL0RK?EILVw)~l>M_ab|h zu?sB#194CoCItYW96>(hCRhSxuBIk1cDQVv^;RJ$!0}K_krn~Wi0(*LD-Mn>XRB#s zC|(13qC6~3LE})lOJu1eLolNO#I2b>g8qOFEC6&?~A=aq-WbprHI z@CAWd7KTy*7xZA9=P{B7@eYs4f(uJIp#hYbyi8nYF7gDgP+&h*5P`v%Xe$|BNG2bR zwK0fTya*9)ffXRYz|`?pMXp222=AHVI%jgmv~Rd1Av*?+UDIl#K(jnf9`zK8>u0DA-Y1s@`KB}*&> zZ%8g1eHpxQa7NEQSZ=(7^`LSt5aw(%pm1#96MUzr+GKQr)OH0R>e^Khh{+@|EHN&9 zL0~CPh1j|VURxY~hV*)PX9rL)qd+X0O95(v4MjU&Nm2{R71hAq1rG0^Akjr;XFygV zC@T5zL0niP60G&mwbmLP9DqXsVkhhdaE31MCo(}Q7nRf2LFIsm^G4z`0YoeiMva#y zV1I-Yo^Xy3#s(lFQ4rWffa*59mO?-$fF?l6;PM0`5n|{_YM6O5wC*L?m_2Z9Q?UY? z!XRsP31@R5vlMXg1%n^9Yk2}-iBVbUtaS{gD4+?2B!$VM1OQ0`8vr~U3ZW6Tg5^q7 zuMz*EyyJF)fuj1zbFxqe$(#~;91;IHr_@y=0m^VVty_54Na(@>Tw*~3(`kzyI)F%c zW^$JxiZURWiq$qNSc;qs+9GP*z|CL54ju&;ULk5N2csr$uo84CWULK9!-gud)&v5oQqido?<%;lQPym;g#%nxNrJK!UTYP&AqJ3MIK~24 zSriNfE=`mgIP_+M{h)Aaa>9eR61!;*D>#7iGwgENBNV18Q-p<$#Y+Ufsh|o~0tmyy zEr3N7h*Uc31RO61=QisFrN%`8=+TB=R%)OD)Fdn0;CR#l0aQtV*R`ez$`G!c5kXa@ zs&zG!2pKUjDj=@fSD{sKR(eQKz~J;y!o*`PF=a7fmL_UVpLh?XC(O~Fe0Ntho8YHwD3HS*D_##$M@YduR zAec%>OA)NVfCJ4oG`(C_uEJ1MQdTh(_;?7PeT+&01{eqj4;K)iTgRcSIbNv(>>myD zW|aag}{F z8DJ{l_XY$KS?}$H&2Ka|q-e-TYY42>GQiO!NAHp*5C(8*2s9Q{B3xd9EGrFx_dAiE z5)c`=w}n?9!;qdwjDJ-5j8RZGi$ra=hQ8*_9 z4`A@|CDxd|H}Fg#Q4vA+@a`IDoe|NHB5`PexU>Lgc7W1V@Rb5vCv^OPbcaeotLDH_ zK(04IwH%AijcG`Nt(~L>3aWyT083wp%79*1k>Wb10!mD;xrQ5|;<8QvbMdxF!9fzw zb@nxwkQ`iyL@EKW0Dy*36>a0%fzXzUu##)w$Xk~tgf_!x3n4i7(M|GkV;WDNMF4-*}?`=i?@h^PzsQUL>zl~2Qux*i-G0Ikp=8s(r&`$7qM$N z$Qm5|j3bVv7BXCcmpfvk>NJd}!e=0v2Q49goh6W$@d+MMQG?6e8Xur?sDrK??tGCq zB%>CxD=}nam2QH;T7q~3aZYfK1q@==N@$r8zaB6+HJ64*?74*lOj=NIQ2|0QqUopL zk;B;xacU}PN|G08b%xEG!x(5yZK!Km@={#ZPWfm!_)Mv$lqT5G05Fs(U=#roJZGD- z%+hJnR%n+JxHz%<_R6JLEjD1#n`EC&o`M{zO5s}O3ha!c0jUnqOA)J!CIWfhA>h(* z19L~J#?;s#wS27#`|^iHMTI{?Bq@bcQF{a9SXEYOnPrq!Is&XcH*nGkaEgycMIJ=L z(v~MM(j=?FA(RX-(hGqiJ|d_+*WeH#ia0TzjgSps*Cf&Sn-JrRHFZMFDeQExJrJzk zsf1iPK&?as`qvCjtKnV=kXjT2yqYPLEhu+r%QkS;)ChnhqM`fLum z(b8x*Ek~fJNCF)wXxS6DJ|{WBYZ;hQ+)8B-qXbtYC%gyDTa0&wEi=?f<huh)Z>_30CXm$!dY9o~Yr%uPawJWf)7iiW5`` z6&O~W146fgOAhw%Bz-VeI;Rq%tU?8vE6~EVC?$2Zg~c;+LhQ9rn)}QR2aXR^_ZGgJ zDWnVqt%=S$E_79eTN2R905;QlLY#C?6P8S{!iS(efgKS+1|S+r+-GHCM0g+~xOg_P z6qi6t1_Ld8nptm>;AyKyI#~rk37~9FuHh~594ZBbe^m|AuZOoS@Z*N{P~l`P ztkjlb!`|?@m{L4AWJ)zIqy)Z4lE6R@#dv9Sv=1MlTm^8F$#CHXerKs*q%8q)cG_4T zfh4E7f~uEfAS^RVSchY{OH-7B0G-Yyh9Wabil(v50>;lKfSjlTZ%zl=j#!P!z{Sxe zJBX2(CU^=8k|78(2%9FJy@rt~mV%gj2{ntRA|y`)D<|{`oI59ZPRYtR#c{(~@cwEN z8qwmmC?cU5c^b5=Qw?=79!Jqgywew!-k|9fO8|@c;gD9G)X&b9y1`9vrxJin}ttV!0V#n zA%SxXh;oik^6{$CdKqjX4(b(EWeFak9<%O{DcDtbef1~ zbQU0EJOTArJMutt1!7|YpuGnw6$PJT76^buSQDp!!{)<|8x_D}sTiKDR!KNANdSHp zs2eI9(6kCAs{%y`H4K6jBB^K)9Xo}(5J1j~0}?^N_q`%M)deUZ!B7zZuHXQp23!jS zaCu)NBqW$~DxaX%#HmuW*Z>U+X+r_S3hLlMAqwZo!)_L`DFx0Z261cE#fV732`vDV zSPI5xz&zSm$hcHfiH)tdlAj;1-|IuYPlX)U)vYmnLrC!t>eAp_AQ zoFot5H*Y~pXDh&hB~Hi&e!f6aw-&+FIH17Sl`;u1C*q_PtC|2;k_$Y+b1c~arL4vb zq9v7u5~+}A9N{hl<5Njd5RXYAn*`lsE;Y*u$5>s#Xzzh%5F-zOj*QgFaa>J^294h;CM(r7@)O8&sC$& zYyL_Z-r2rU_yWaQfmauZ_jW=MIxhvGgw-Yv{Pt80U>71duM9|XGLAmZh150#I!5U9 zjltOSg3QC>+QR=k0GBN$+oIZXFo@qnycp(dQ(#wJ1HdK$$p^OF2yQ?j%!Ke^Ta?M! zkP@Qk04UWY;WA4&D;4KKMr8pb;-ykNaW9I;WCTPZrzv2hxx!f%K}epgjNB0?V8B}y z0+%%#UUi_#lMD&vb5NfZFX8T-CfE-G7eOQTJQyCh$tq?J6Msf*KrTFi=B?Bm5U`CP zF{62rO6H)1sx*O?G*ySaRpkf+qZ9xoSzravMS`~zK-MlHI-pbwVAyCm{L2cEaVOZ( zIFKh`>#`wotp(hBsD)>$>=NQYWYpd!L^9Rp0_Jr>%nNV{^OQIoaAjx2P=PYNQ5D6c ziv`aaxVd0H658irYi+JqUUE$)@({qnF~M8Y@m!pT10w<_!N2TnfkqqgP6ZSvyb7HW zlcTE3)z;z@&b?VF=N^8^N~mC^hqF9~4pqZzsaPH}N04U#ynzY?jCI4UgF7|?ERy6r zS2rOp6Y=IoM4!B|IEHDH6O75+^8_lVDncUQZ53WToMya-!-W7ExXcq~GBzKP15rIl zVM8duqX;;`W>9*N&H^s8h%k0IN_$nnt6z3XR|x ziX4vU(!E+Yi{s`q3G6KS1Ie0lBo(1SM384fPT4L_tQ#Qq~A_+M8 zWZ0vypYvHe=PcNay`_|5foBc?BqE%%TCfae2oF`2htFuxtH5%WiOc8_*{-4mh=DZR zAQ(18kqVXz<7;T=j}&<2Kn^L^P9SFktzQBVanmN`k^#1vQ^0U>AzMUMats)!Ij^!h z6}aXVt`eoFDI|r-LgCtWa>84H@gR;^%94|yKC2c0_# z#S)ksfk^~XS{60t=Jl356z?wRsJ-;bX1Ie$3Aj7!t+oJ33fSAH2|7DCD8p)yG$xhh zTH2bduiQoj5T3$QQ4$J&nX}a3Rf{!xoV0|QqHU3agA@jV8D8^BpwY=dS1U1NGVo+X zEd{}34&VUTZKMLecqQC~1Bfi5TInOahT(o5iU0%#F#U%iMy za6?hre}?C{%IuQWwh&x>y@6Y;yp$dr*tXkHJewAQ!Q*@H}y= zh${e>2^lTUpr%5>tp(^GoR3LPI9%}pbwr9)2#3Rc)`7H=JQS^5%3#Y8Sv!iLFfVZN z7lI2eivxg} z=cWSj6CO6eH3wF+2o5?e4-Ho9y9qesIwQ6M-dGYU7Xb=D5je?^xP;Esa9JyeG2wdz z!;*lS5M~ZAd(kAS62!OEKtNjba6rwq#kvtJpJ0`CM#7=MaUpXS&VU2n;>0xtPP$kD zC6`GgRSrc5hZA(xnHTVF6at}CjJ0yg#DtK@(y2Q)M*5too*lTfni=F1+rbRJ4#I1j-# zVhxV%k|S1X0_aTx{7EjxQnCO6Yy{#hNLB!<1J}{wN|mCzjJ0&)Q zo*g}&^(u^i9zEWyq4V0jT3mj%h-WWLdbP`8v$|TRvRBe(yI!R2?yqfFzbM<;v1haG z=JaZDo2_=sA041rzwWHADW3)6bUA5`yrX=B{(Kp&eAf;Tcc!etWZq0638&w+C-Mg)+W{aPbgxtm*kl2 zB^f5$)7moG+M+#^tt7*lY$X}VR4d64Q`CO!+G_+;tuaP3)f!_QQ>_SNm}*5B%Tz1E zc&2(|+^$ugsg{pYOtrEUG2O~ig6US4lD$jGGu?_3oaxpYqnK`Q%1EZ$8#2Un>o>!h zZY3DObSuFU)2#%{nQ0|h$xJK33T9e=DbGyrC)eM!u*|d)gl49dAk;W;gkh$&${J=` z$2rbSFG?}fi_*;YqU@N)y4?@oe+XlkZ5f)~kaU9CRvpKgZPjtqyIWYtY^#s;%(nWF zX10%%ad29}Y|EI-aZV^^`@_U+s}}dnwQ7-IuJr(M=33tpG1rO|lDXb;(MK04=GyBd zIo8t)=2{7UoPEkN*NRqVe8w@?dW0-4p%=gwx=6h=u^L+wp=6fR*^R1Cq zGT$1wz6^U!DFe%22B_3#{LY{Pi z!iiCzVVsYmY!rP8MfR!U`jsZa+WUl5YeGhH#i&aehhHt7lZ?8Yad@J=Oou1BEE9}G z7iLJ;WeqWE!bVums7V`P{5TyUFZ+s0kvWA*@^3+A-=92(O}xAijHd(lb)M*ImCP z@&3D5!dq8;R3W#%V4$qNWazOahLP^$YrKNq(OnjJMol&e;dUi*MomgdTxw!ULYlOD zno*ZmvQJvsQg07^zpj#<_ICWwS4&j_!z2{dwoQIlxoR9`RAv?kif z6C=~tP^4Gwt{+#`F}26K)?bZb)TJ9HQGCX(Eo$&rQY=#%L36*0fwL9&5eQCx`7-B#huD z>ZmQut#i=nP1q4;S(A2zndkZwj*;u-`rR+Z88wkd3i7wrKnX@o#u3JP6K<}z(2ZLZ zg%VrY*d{b#N039lzZmQbTG`4n^8Jai)|lB%@KM`6w34y+XrhlW51Q;F%$Fwo2=k>$ zKf;EgNk7tti6;F>TPB+HBkit#c_y0tBQw_5V1v?1HG+vI2gxWVnj9n}nP_s53`%IF z8kEpVHI|7c{>V5c+Q28{nP}pVEOtDt3=HBX{s{ZICjQ7uCYsbE4CyBI$Z95<)FW${ zXi|=>Wui$p*Y^SA&~{y*lTb{EKCX6G`q&`rm=L`po(a)Mp&3V`9lyt}cjGh8j^CPz zCMwBuCYq>Jd^cOh5ly&b+OKi^W3$#o=q|hKDPx%E64gs4`u5E$Ci?!(_ll!4n?N;Y zdbFczj}^x+`IMXc6;OgHMVlht7kHnGCsT$G-L1fub$)h{(8QuC)8uY zp1&IN8dLWC`~P~ZPR~*I(sa*Q_ov4kdmd&?-?P$VReNcA92NcA_!dTaI=(25_t;+& zezjr6X?IQF8U`4KMq38kdvEhWTnl;9OtkfoaE@r}q1Q~b<&d~%qAiCQQ*AXQ?6BKv zi1FJNL#%gWUP#_bBqrJti1FE0!0~)VoR1fF6GGsK(#pp{q^*p^aa!pW&`h+Ikho={ zt%SrS6S`++m}mC=Ed^G@MJjHzFcgEfBBaI-$!@u9}fTdpTofy z@rRPONBz$5!EjKomI+#|gB2St*zk%Cuf*Z-^P^!HhD99?UWwt!lPAN~GMBnomV7wi z%JAx>r9eG$*`(pgFy{QCY`=K3{PTKsS=QU1o|a8oFD|#M^#L+JJh{&I_w6xMX$Do+ zuvqqtJ{W#~arFK7JI&f~+%6xzSueIBo)0)G&FQV)H3yyaO0ZVS;mM=7 zhr{td+k>lTuf+4=Nw37Cw}*$jm%Az3-UUxf4Oi#ed*1KeBokio>s`%$v3;}LGn=t{ zd+~KRzbePW>*4LL1Mba!_3SzywC*+1?pn6ExLmEbUvIu4u>7ClqHK`;P42fI-xbqp`0V+~ts8Z<9u9E#6$b6g!QwqJ~}VU7u%Q5Z$`rIGmgrzzPbGN=I3~K zY~aCaoKj?NJVW{fGDx<$IR(Wrp9bQj{RlX?=@1G3I ztMl{2{Z4suT{#rahQ;t?;3vak`1j$}*y@vE@vr~dJMPu9#q;6!PoCV2yTiMZ?VwkI zp>Axz1BW*?d3P4%-;C0CU7}Q8t_Kq70kT*RT{WLtLCMwu`bE7Rz*g)h>tgcy+O1 zLkjD>VaRR)i%Uq`#p^P}tL=8R+^``m^RQl|m%~NLi!f}iE>YPbmY-J3JZ!dMnZr5{ zyC&~S-yF3Ho-a~aZptvf4C!V0H*v(<<#4rqxmpjOEiTLOw7h=ZN;xg-^-sgD6CMqJ zc>E}>mYeO+dO2RzA2#39@Z|2GI#`##T`kt-V0M#k29e(%euIjI%gf!X+n0tnkN)w^ z-Y4|o%uf4Z|g_x|V)ywe}I^EtWa!BrEpcc0s?y7)a9^JRAm#itFTH@Bzs!C${ww*C2bHNF&x@6`onX&XI5*o;zh*W<^-fB(4^ zaWqcyw|_mnTbq56a?fgX_tMS!_YYRL-kvule!WVs%J!S}`7tJaDx1wwS-w6x{qU== zzWe^$Kh6L0_59C&{{GvqzyIc|&(M*xH=E7zqqMqs{ATkwy$st~@7dLQ z@nW$&9%e7M+spgXkLj*9Wj%jUmfPcD_WA1Xi}UmFSRe7>;C~UF44*BQS3eFvI`h3z zhr|5x^1OUo;-`!4V=e8GG{eECfBMVkpRwV5@v00Tm-K3NIGnv)uP(}ClIDox-|%&) zVZ9h1nKA4y?rsNetvN?;Lc9LpKH}uj})zn#y&ZK+N^nV;#?e(}Tk{KNjMCI4i8R(p20Z`_yo`U!v9t8piMYw`HR!}d~u4WUY@b<=JW6Fsloam)a~o}{OfxPT8;(%?G(Kb=JSM5bOIAJ69>_Y6Lne{*^E%U#qGw(dTgZ%(&o zy@CamX!qZo&gXAV`vZ&9`KQ~n>o@k%Ub0ra>uJaPXYy<>L2DKge0hD}j`eT<^=9?z z+>90^eQ)voE$zR*@;U1t%YR{%d`JE(tO@Vs|Nm3@|HH2({ZFQS=JWZy|N40T`Nt3r ze`4zCeEzBlit{tJ`fxtqJcS(W>%=?K^OO16b`;fL%;)9g%lX;gPj7@smnk>v!IzNI zpUmf<^lR-`lRafVFZ)ZzPIP~CGM|6;lx@!DpPt=aE%4yjkhA$0%hNpx*%IC4zPc8G zdsSYMuBH2R+E z-Fdfr^}MzI>!-V)yO+01ozN4@)4iVm4g>Jvj=8(b_-=lt&-NCzJI{T2{qnCnqpkY- z?9OK9B+Sn;JDYzp-{t$^N4>L<{Ih$vIqf;zUZ38(HEP#d3$M%l`@K7&eyydv^Yl#@ zw_1g^#P6olf9!tka=59)u5aqzbZEPjvsT;9)A{`BDbklay@Lcld~~;nPw;Z~=j9J) zPnkNKFV5P~{|@~;-)&qz#wHVw{Qc?PM($?Bv{%%AVSDwraS*&Xo6ldgl9nIs^)^49 z&w0!3{A{%{qR!e^2hup^b;*0qV_F{l`Y1 zJ5P=lpoz~S(e9DvWp#;B@MQP!!^WduU8(i{^ZxVx^ZxT+{PTYRbX<*c0C)ia+v}r9 diff --git a/berryprotocol-socket-0.1.0.tgz b/berryprotocol-socket-0.1.0.tgz deleted file mode 100644 index 5a16181d9aab9f40b07b10fd494bc6a87427cba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38281 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

Lz#&uA*>H@oZ&GSUIS-Z518AG-k_(`^~SS?Rj zMPJCmD`h3UE1~3$g{L=}PIC?gX|}2)Hn5quOHJPdcobD?Y3T`mQPGYGj7Pg`$}1JoA#XL97x$?Z>y9nF6ZidkN?8 zCB^S-74d+XAj0_=f@63Xg-54x~cf;-v&@PJ*tv z+ssd_cDya651zhZqtLw2UOTeYyG`nj6jDIhT{an|G(q^i9zmSAb;$13BI5R04B%1) z;-)1_+jtK}pg_lN#A;&H6anM?AVDns+X9uyKlg@Y!LJmP5M-j>8ZwC;WEi06aAVsy zh%WTz4KDN=Vhd2fTy+5<*jF+F8^S))zQjXHj$`SK@;3_dh*n@#95qRzyFABCjZJlf z2#akHk)$cR<7KG*6P{G>RSR`!9_=~+yaCO7957VD;1~j5ch)3 zE*!EQ+#0j$UUQs9kZMBs6Bb8-dY;RAg!L+HYIY7rY`=Yx;!(k>So z{_NOk7zc-Ka~N%x`;m1;72$0OJ^=32PzT~swNMOqiniChIbe|wOO*M^7dk=UcbBU= zAnsmB%XAL>lf42X(S(ri-B6j{LP{X2n#V$?>RS64nGKCj1eLkFbEqubHB0LJl|2{C z4}v<15;}y`4cD1-+y`)g=(f;guRq_d&sl}wEO1f8i4T|qb6X&Ws}-O)7t?cVl17bu z+49?i z7hCNTB|8s3KfrPOTx|W?(&T!g>sV~fviFdh@u?g2AUzuOCu!?w)SpiIZU1K6sD@C48A>_RlON80@2H0(yP*I%ptYqzho(!{TFb1xhQL@d8zXbiIB%crFotW*D~e9jtgxvmbP-JFF_|3|`DDRx zrR~e^BJiW_PcW15VVV{oKMOF(vOGO(V?r+14kqNPkiCcPmLcpD_~xnph%&4%=v3)W zki+FCloBrZew3d;>ag(3X_^gezK5iwyvJpAtVYoOl>aMg|p$H zUJ#&ZTlzI-C0(#7W?2&1)<3PEj`H(yK84hG@V^NvI{UwIe>P1A_;Z%A+_SB-;h;eh zkJIAl6qlMQ7dN)}{PnjL^86|T3cN@M!~TNH+v2FeK3B8j<8<;gsFz-6#c=d0?GLWS z>q*)#Qaz)iZ1A=})J6BlX(n`@Oswd?_A<*!H5yEVCY6xPV&uOsr`_qegfgv9pKBAx deDz!B@Bi-q?*H!p?*Hok{sljjbz1;L0su6n5q$sv diff --git a/berryprotocol-store-0.1.0.tgz b/berryprotocol-store-0.1.0.tgz deleted file mode 100644 index dccfcf9daba9d89b650431048790862d838db43b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25749 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 Y=l$pX=l$pX=U4vx4_U(ZjsS)M0KCgH3IG5A diff --git a/berryprotocol-wa-message-0.1.0.tgz b/berryprotocol-wa-message-0.1.0.tgz deleted file mode 100644 index e9d025ea1cb5da400e03902626a5b1d3b64b751c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34699 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 diff --git a/berrysdk-auth-0.1.0.tgz b/berrysdk-auth-0.1.0.tgz deleted file mode 100644 index 3cfa21b592bcd8e55b9467d00adcddc871b57ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1745 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 diff --git a/berrysdk-core-0.1.0.tgz b/berrysdk-core-0.1.0.tgz deleted file mode 100644 index 1bacffaa9f857ab6b3d5973b52ab9e93f2a24b3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7261 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 diff --git a/berrysdk-events-0.1.0.tgz b/berrysdk-events-0.1.0.tgz deleted file mode 100644 index 4fcf6aab88249c390e1ee8eadb2cbf4702d4445b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3406 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 diff --git a/berrysdk-messages-0.1.0.tgz b/berrysdk-messages-0.1.0.tgz deleted file mode 100644 index 26eede496297241a0bbbfcee1077da79291aa790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 zcmV;K24?vmiwFP!00002|Ls}ZZreBz^|QZ%(7vRBR+jBt00muiq`0n;q-m3;*|z8d zEipC|OH@TVo3zNkFG%X{OB2L(QNVn#D01e^Avqk%oEZBzctlzO<)THSfZSQvys_G1 z+xFhh4w~0)+jghZ-ban@?w;Ll@9o(;s39x+9n`QJYbaALaMG~t6%5k0ZInO%kV31;p`_`&cmJpy{)S3pAY4N#J5m&`Y!>?qgyi!Cs)3 z|DdfOO@t7lfm6cTdSR+o!O|xU2^Tnw9TbuO&>xCuQ;QaJlBs3aj3fRAKkP(w8 zpwY-km8H4n!;6C^xl^n)B|jlpkPqZeoDk0ONK<1b668*lsackl)88^=uc6qd=;Tf; zL?48BL~8IM2`FBSPo+xPfRbNm0j2?EPqTof%Hu5@GJhJ9NIcC*kZL{Njyn~CMZ9Ka zs9P5sN(IVx(x!!$jw!E?W8$AJ1VkNt>69IhCl4J8fHN&0~?ketmL%-MZLTDo{3+Hfc+()?bLT zY2uR;9LF>oU7Q`i%uXFE#BpO&)?4EA{7;|OHD^&{t>=H+wmUQD|894GbN;WR$X#qi zI3$LHj8{XFB=@b9M3>w2N~%*kjQZ9Tf(#?-QwMpXX1Zn-`@QHTTlEif_v9gvCnXfa@;cX z_u3g_!f=fIog2;BC9?0Kj`=o&ubj zJ@AgrPXM1}?X&3v__7wvtq}ksYgZ+WOMpvR`?pjp&6-dE0_dBU(C;2*AiXywj1+$!hME;cR$+XC ze$@MA7~fogZ;!$t&=>PDmW1It=>*dQZzR$<_*_^87$>wzYld*VXuL9zI)Pu=h zhncx_r92^*cX0S*)C+(M?L$Z4-AR!C;WMYm&!@(+w* zK%YtK5UP))+tVtFYJpZAw-mg4JeA_en4xk65ULp(xpT*6W41XX~{!g5*)kFVE7*3Uhz76Ca?DZ z?VA$?V0btcBi}f{#!?BZErWxHhQJ6PLX;r z)l$0NMZIW@BcBBM-7eROS>)pw59x#odCf~Be==3gcru)Z+(bT30&Yq;8VQofMA$9K z(|YQvH=+JmClnE%#wrmtB=;-|5EnQKa1x-)F%}%+IJ3?zMKHY(M#XKgYSwqkXxW8w z6K%JedFH#Ec{Nd*y?lr7CkzKBN;6^g_gub~RW(sLRcs=eqRe$m`AQRI3B97Xn&C6i ziJX% diff --git a/berrysdk-proto-0.1.0.tgz b/berrysdk-proto-0.1.0.tgz deleted file mode 100644 index 274f4f724d2c4186e39872566851e851f517f386..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2180 zcmV-~2z&P*iwFP!00002|Ls{>Z{s);&a;07q1gvJ(8zKeJJZ%?yD8=9Op?vjfj1cR zcGD7VE0IYJNySMT{_hJOI;^-4U@}=WUj9s$f~lLqVNt)a65{*XvZYN56&&$ zc-i5)Zhw0lteSUSx7**^0UO<3-|ckzeRmsdxSh_9>w*n;;}u561!5bn`vQw}mC@$& zCmHR{%?8*6?`Aa05)9M_RWlLhA&XNHQv&wM6p;`|V1_wI6AU;eQA{QvL@64@Ni1T_ zK}^CVQ`0CJWixJr5V45cQd~>~W+)W#JqDvp2uipO5QzYb!zq~IC`N#1X-b&@Bm787 z1h_yXLM#HqDH0r}X|A0+%D^NJG2s}%6opg#>z3oHX_Sd6W#A-EG1$ZR_ezV88G8ih zj0zgkqyaYDjd-S%rE+eRjlr1F8L;x#TW)zdWD_6`=F$k1rb>nZzniCNND0BAXwT8F zir4ZQ_(8FS3F5raxz8A706z#!A`bN1mj(a;gp_c>vQSXgG%IWwk{mosaY^usc`=Q- zL(mL^U0^L~u{3DWSTvMuFlK0mufi#wA+QTRH~1qF=t1%+le?DJ$OAh>`{W)cG{wpU zE|`p`48@b=?MTrxl>So_YyG@8^Wia-OO+%iq4X|G$S@MPS)x^JlwStg!H#~jmk`P?IY7NE(~Y(qVO~qjq7re2MaBs5 zv+)=+M{dF9l8I(rMn=mS$0X*{W~-I&2l+q33N%tes;d|55iGAx`$IE4^T)CrZv`VA z-QrNx`2;;v^Gzeyt|^s6?Vo{J=(4{SHC4tZ&t>GH(N?UCO(i}CrFZe$x8Td-IkX6s z0p}a#?b|#gC`oA8bXzr(ON$rfUPB_Bf+m*dwN*1;Oc|X6g6GT0qxt!opizQ>pe86X z%MTcSK$pV3HBICfNgc z_^tn`zuf{bO%puCqvKe#d)*zU+Xv0#_a9DAY>>ov7#!m8j!+HU^>IL%myPf?o2WO99ZvYU5b&J3lm zR{vAe|CvwcmQ%9vs{LQ5BYVDD|JU2zTK9jiG31H1WEWu#fc0)9vj>mv+PamIr_H*@ zjK`Eny6bctSI<_uLrGcgugu|?GnA&70mNuVDs9{lkIJ?y!m>JNysEGQkOR~<7 zmQy@d1v~9kq7_Crn$JMD+$t)!Do9qEjgpv8bwVx`qEMz_$*%yRRWL+2#U#QcjB&-l zm5u8FSpVH}x~}Uw9k=_Y>$;uoH^#cWw>-upFn&S!lM6;MPZ5 zl@dw&Xj?Pg+Hh-NL3jb}GYHS@V+fCJ1R=6dAw0FY4`~7G6f4kRT=l}n6{=a>>><^)*#vwdC zl&Ai^KHe8H6R4A~(rca*lHdnwMVQwL1+AsgBNzyiv(F&J-USSv{4$$pp0Y4p$aH-K z;gOzGPbvvv2ywM`Ko^jV5OuKSQf7v6`HbklnYQr<^~3-U#USQS;a(hS1a3c zG`uSq-1|#0**CkSw6|RO3iE0~t=PHL0rd9r$2@>JI+UIue#QMaa;JXZG4(#<1_r&L zQr2pGZG$qoepFnfWW5BQ>X1Sm=FP*%RqG zg{*OxE>>0{Rpj$?^n3mUtB1G)0h0j2iBdxjDz0{Y2wf#D3Gx;%IJdJy2(v?J zO6RbC_)CM7Gm37jwrx$jRAVW3-rv#;edYV#YySS%?YqzFe`jlZUH@NW{Ix4ib*no@ zAufKFQ_HF17Vlu|IG@IaqdWt8~k=+q|6As`0E+|IM48!E^t5t0k!Y zFaYv5PCEY1UC1)0xfA(8UJ1%s{wB!t@^iwFP!00002|Lr~fciTpe{W*UHquaNSZdF-I>?V=c^^%mFxJl|bZkqbK z-7ZazCE66Jkdz%K@&A4gnD60`lJnKvUG!dJiG#sl01O5LfaD^K&ci9$jFYn3OtP4~ z?wyt2eB4jJ-~VB2%duVW_qVpN?e6vu{lVaeANpI)H~qoj9{&C2Gklh16&Bz0`yXMF z{eIsOfB%csWc@mh-afL}3w^T|k#)6)D1~N-l_VvaG5+E4xmZ#ZHk# zGiOfXBy`Hb3(52EOyE&%;K41x{nn{Rxcurn=M|pHks;=|a87F0wXBmmA=Oiritn0-2 zWtQe){1hhqluoDXoRTVx7xOSp-jMw)%I8To6=L9=`R55}OBtVUUWVT@ zo$HKlMR`_MPC3h$X*?z;%jvFhX*B9BN}_DFWo^C!=rAOAU?_%9y*`O^FI z>E!6hdpL1+c6OZ3K;Vl3(@$ldJtvDaj7Z_^IPRb4n~4FNzqG6`o*O%8w>(I1*w)r=KSX$6vFx2TZHMQB%4;VYv<&uBIS?&8DWQOff#|D zB!g8Kk^Izok!002x+Y2EIOiUd~C8M9;#cNU~{=#{}>oil<>U>z$@~Ubut)pZz}mbH1b3i!h7x zxx3+f>pT#R8@(z&ssNFz3{+92=eS8x=RhF3eb4=*82eQiKhqS!jl-~aAx{`+6?cYoXL zfmwAWoNcjC%~OFIhLf}8JE1zNiWxf9pnFyRB)=p@5SGN<=+O<6ly0XW;D%IAL0&DB zg2Ww-N`+E$OX;zm&soQj=yWZ`^<-CR7)l~2f@M~aFb?u% zR_S<@22F!GI<>uqH4Vk4$lE; z*|Ytl18&j;4vnqVWw*K?|)E{kk{zLMrl}<^cX<>b7rz~Jm8en zG@UHjmo%SF3EOK6!VIogRb;-Xz|HF$O|ak?_&m&(VH%`)3A^HHn3inoD)Z=E?B3An z89iapYjA4W%hQ;nf!`x0Vd2t%ktbzEVjXiqs^SWb4Jn?63ugyS!_#o#GLt(mr_U7_ zJTW*siqW2uYUsG<Up@1n7!RCGS-CRQbn>sic^AuaRx*sEQ>~whK9E zOwv`9#v~;bF^D})m*vb$p>uQ3C?#RxvR>CrY$U4`2jAc@Re9kuRf0oNsqTn4 z6l-*Lbd3}3CrfA(3Mj5qO_bgEh232|ueooTmF?h}<@*wKyW?DM7=+h;39HOgI5-LnNLR0h*fbh;C_8_2^`-Q6wQCD`Qemi-E3hkDjx??bw^84g z1h-5=W%IQ`^J>dL#Tb@XS;VbQO_<=tnb*V+ng-Z>OZ1HaQa5T19-#%&h7`dX4e1T$ zFF^G%ogMA!i>yl0=Om1;TxE{UB==5}EKJiY*KIO+wc(5-9!__oE~8j@_ilmiy|d$V zC?h&GlcF<7x0quRz0qn+Zk7Th625tf;O-8|n9rUv7MKH2!YpzdN zour_|Ri_kQhDk+HC|u|W;Epno0xM9}$4T=k%>GmHO(BA^gpYS)hCnctZ82_@chT1* z;Be`S^tM1(U#dlZ=}5_Sn2VE?PL@}E<&(JA*=Rl=7NlIJ6_|57S+J7Z! zBA6Q|F;d6YStw%51&K(qsGQThaH<)NH9PqN!aPZyHOv7>pcM4Z$yG0j8_b#9%+U|g zx^x*2tOGDIDTG~yEOxs>l&W26XRV1}38|``l!$4w%Ix-*B`J2TjQI%4!w7eF)`;=C zD#50kaJo#>r#!UM8vRxo)-~n?bNvYpSyGGP63Dn_e^pn@i0HZ}e(>{qA8;{RWO z-rXb<;c~LSaP4Dc{=e2dC53}ig7nT8plDcF{o5$kB^{%yBNW;!UM?a2= zX!Li^z}_)NlU)v-e!czLVD5_3sv*uQ$<#x0oxi38uIt*=D*4(vU_2Tpg|0v(E0+aU zw~Uj*t?jsPp@;~IUdr%-1O_Lgb-C@HJFxEf-Frw%p`i}Qml zO)_$j1$0R@qJ;H+aG6am2xi$D5L%KfjPJIlI)W+TUgVH15|QVyiv~ANd$hw6du>_L z^#$AztdPMImJWiUcSSA4?rz&ChEz=xq?#X@D-%+M-I`qV^33g^7WS6tb9B0n+rXlW zJc;GPH@6dWcx?b_+2ttoTfNJ84R}N*AiZxUB06=xJM7&3?c- zvoO@FeJ*VM*Uw!ao9f$U&aaIw>Vrfx0yjfECq{B{^`O^lyBOkDhUKCp1;pXpx8nYW zF4kE&*A31FB*t7`gF!v7{8V&qw{@aC0W#%HrSKvi(X7(9C89Ql+7F9sNNuhJ3n41; zlt3{VvW1pIVs&3ZMJTnR|EsiqL;X~s&g2f51VcpaSsS9#www9yqQ+;p7L)P%X(#WJHogF z?nF$|eg9Ob(_lktyI#58s8_IQzHwOk;>#=2lW}|)SFKD*2b@?YPE)iXR zLqQ2Tx{tH`GUJhblxcVoCMiU8S|kBIj|j<>l6DO%wAm}!?e3=#XB|s>QM=taZK$@p znYE~koeAKBlnKiB)m;LAH)xOPI_q8OPfSRNTP4(cDCpIVn?*vP>|J$J_@(tIgg91@ zcjs}w?<2gs_ONqmP1gz z06cuH#H_UAxCm-JRbX~^ok4$8FCDH&z<%6Ok=u)j8w-amDY6}BU?y`|b_{OMu~R-~ z0K2=+UA!sO`L+Rny_Elk8NwR|HCAKyPn(XWqWSW!} zu>`c*N4hO(*KYiA?}!HFsmiiKw3_BvIo*{SYq>>ebZb@GN>j3rBna)^Av@I;rzs}Q{8tK{ z@b+$Qfh}6L-rX{vTPgqZB7=jaQ{@hmELTOG`Ox{>Tg`}H|7R65_+90-yT$5SU>2dZ zLMY~~`JoeTOA(qDdaVs*ea3}G9X!wA?fq;1L<1#wxw2;NnZiS zYjg9zoHAb)5qTOe7D+aJ@%+gSe-sxSS3c$QpBC)-U+i!1tjx1-KIikl`hz=n?$n+`=p#|KtS2W}zm4Alo8vHOTYl{>7q3;_DQL9b7*Dvt+)7FPWBJ$RzAQx#!W z;(hmF94;zSppT(Hgp0Zr9s0N~K+*QZE(*(@_yxf7py(CPg9LGK6IxX>Z?&wM&MgJ47)57=b{gV9F& zUa;-+X>!65d>`o$zb(x(znlA>m-|fs4}3n!27rOzec^d8nwl4Wci;2&m1YIqDDZ+e z{>bwtV})A}J@27Hw3G-kAFnZH^!FYF-B&)a9N011_m=*`SKtmk?~s0jYe3IydozqV z+V?K}%HGb&IYOod3Jg=Y!1Eq6e#thR4ktMAaeTEe%8+B-R(ndG1$1IM;Tqy8BEC=& zONq2%pJUHWwMl9Nb}IraJBa5I_;w!=JQ!Pn1ggUfRbkHxb?kY^IE!F3^}UA!vBtcK zSWJ~ql|oz`?R!r((r`wqdLcYq9qoH$)6Uu&yai~q?~)vE=Pmt@G2gjA+Y_218xFG$KEUd z%dVg6)LHQFoyg zKVI7cq+2bH2MiE>6t;g%GGB4~rT;uZU-!!Qyes_ihFe1TvF&&7_?~wMf86!aXMF{G z;X}S1SdJwJK-(+7eh?wrL4<9X6K`_iceeu1+X`^VpnD#8-Z}nAgKi#pUXDK&fllUq z9~?RO@xbq1`kr?QltBv)s_gJ^{&>JHv-ucXgWR21HFtC%Jp|HcYs*wR2*7AP>vf!LtTHng-#Qn0F97iO_!hp7Tw2FDCop_k%8l17igc{!v#|1VV`^rTn zt(lDkxpJ0)=Pd(e=D?kaVq7#rel^)95n292$^;jKN2Zn0b`rJ@Of!SFO|!f|;6jW{ z>j6t?Vji7r$7rdryx$vNxyZM(eWkM$vN1~o&S*Vip^3X=Mdk*6Y4h9h%cFH2|7=ej zyM8nAv;A9)05aLG4Pl#y*!eZ9s%tRrUSpG_0KE-OnvbYFP-&$!4K<#g)!-%OMcsevDt!y5Q`tSYd`=3>t( zoBFtQr`PY)cw_Um4+5WX*>x)}BVM^lD^r0b~1)Q?#ZpLb1oM3?WpFN_W})Z=e1i-FJ4T%M;+e_0Wl@>q-<|Hrpw{ssbUQC)XJ{G0|C3B4I zS_8SE>RdgFz_9Qzek{I?bwYx*rzTZP9)W;YW5w1PsBLJ3%P@K@Rv$=#C>yyZsaMj= zx;O3~d%+wR9D3UoT(V z8q|X{HceYx)i|;n-#By5#-?Y)F_frY+v>^McFNHYoY18RjH4^0{p98ZlLBqJ@U6~< z>WIp#N=zA@(y_I#3U%mB?)f%8QC|}1fp0%6cDLQ*Q8R$;kaEX6_JVYe$8?V{&&av7 zryyyzGV1Brw)gB~SePDQ45@Qo{h|!iZhg#G)7=WV{&C(XnL&SwQuDPE|WtqI8m&L!8Uz~ zF=aQPrDw;-yReUk>;4cdz(-}gL5|J#DyP!-WtNuXd?B24W&y_5qg34>oGR2x+$`*+ zP3%GKXfIXRHsd;x6G7zEz+U7|7|654*r#~8?qyXVrne@grUP|m{mDQLCY@f zX!O;?OpPQ&k5w@L(6f07(&4=M;I8_#(mV_qlBU| zsz&Q%F>YQaQsX4e62k#^e9`Y7D~ECkqiH3&H4oUK1OY`VgU;vmSf}lgIFDV*150Z6 zH;ifn)ADSN|9YiiDIH^97aP_!Ck%G_W%!s3k>*!#*Yaw%Zx(UZv%(-?x<|zl@)lXJd zY4u?=Mz>Jcr<|D@QIKZiPz&1CB0t6)Whma3HfU_HWvC1r2qAN+3nIAw)vj7d&Nvq1H`SEoK2{4$gJ_GQ z;OP}0&jPFAH{;j{o7Il1i4WN`$$B96(TYYp+|C-4&?_Q&FkMA}){nwY4M>^F1z|m`hP6 zZGfdLu7%&9nKiI7f`ICzS&OkyX(h1V#M7t177Rs;OE5n`erR{$(vL8T&0-K)o9BXAx5ppAFgXzcxDWQ-P~R!XvJAV zf@Z-D1T8t#E@%K}ZUzedna)gZ;+i>VY!?q|POOxWda{?JK(CZ}N4Zp;T&hkp_l?09 z&vW9`0tfB0$rBrH(Ew+9YXOV9okKSYVFwvXm5KAnEdJ1F32Fd-^s7Pe{ zfw9M^;eAP(V~GGe=^ZXOD4qd zI#9$QCugyFcYWn>{Sb`Gr94HL%iZv#q^rx+ySY;aWG8 zg(8c+6{3_Lu(3x@6-4hTJ*MPFy{#_2*-aMFno~iZ-Sy2{axPai{dE%xTks(CSY zCpa~3{5NZTjd{s*&w=OtV9aZ<_d)a0JuuthwpcYQUZj3vP3t$_9Mlj6rn5>vY*yly zG_6TeA%$mzgvG2E?C7c9osaAJ6}1{`h^@sBdqrJ5!&Gx5_sz0-D-Jl9Jus{q!Sz4z z%?YlhX>jCdP_rcGZhc6{;JG^ih+jdq;o!5W$C0Xve>zcRj#O9 z8|sT00_+3wNXE)cGsrF z%T#5)!C;f5ma)k=GTKWCMTOVi4KfGE>n0A4SL6)*5P)=AxC7~?)_MwYckA)$ zQ-G4#;7nPceYVPeom|zh0dt?&Y|7|RzvI>@bXZlnetbjI`2kuor`21!1*KR+Otji& zXQYSKXlCN`GSqC`7LGg?X?bg9MpY~Ekmg3UlWW|ke~2|{w#D9l-!;AU$ySpx9edtX zFLMLG+Nk7hHh{+cD#v06qNN{iRBFZ3EmT9a%IB$-Y6LO#V;NgKd)VSH{8pElZ}l*Y zoU_49BaCC;(V#vM%bUjX6aibQQ63X`!QR(r5Uu_E&(HY$=dC+~t=jW{26wi~V3NChKKdVR)MpXh&{8vGrB=D*T`obwr zQ|)ocqg(Wu&Q1boPQ!>eNBI0}Mjv~QvhtDx`at**fAsy76uUz<^$~mhK>htkyF-V* z`py7hFB&qM<*Qb9_3@x#cUWWM=+^ZuoU$%JXUCzO`Ul0)b(YyVyx{LgG3%H_X;=^^ zO2e|GcDZ zz1)ChXr2}MJSmCMsPMYppkJ}QMWbQ51*wXwAYXz~Jq;HPQ1f#7TmcN=vE~h+CCMuO zk^~BZFP12lQI!`ilgd!n-7d&usIM*d?tzk2pg%55vaU}XLwwPb7zbbU)S!DCLx(Z; zAJFGV+DX1|+odng7K&_#FXXGntnFz&g;!G98%vVK{LK?p&Ih8e(<50mG?s;eMA$Y3 z6MLF{E5e$sT!B-uQ8v7ZY#v(d*$U+F_K7QIEN$3NXw%Rzs4K97^|WD2ld>ABwzUn< z@&sNKa6|w+XfKOjh6x2dSdh%HdFBiI^k(giWu_UmzL3i_LgxE)^!EA- pU|>UHJIvebQQKQiKKcXazka@czJ9)bzJ6AI{s)a2iMs%{003a);u9Jqz6V6a)Sh@D>*nC-Oq-1wOF-5%L}Ef*B?R4KX0tcRhay92BB~H}$B8 z3GjSpI_J%3I+)Lh4jdG@L}%g_6Y_sM9v65-!Q7Y8O`Y^h(Oy5F=*oRb3TiS zqv#5}jRG1t!E_xwtE_u7K3Nk{G(ZG{vnZGWZGb7o(R1=;>QTI@HP-PZCv&EV5YRhn zdldI*5Ml6b9RL8_L4$ugflp{OcW4lmLPSSk2ZT}JU_uP+pBtv#?Vgd>-v)hXwr$Yb1&5tJu-~_O{T^UuJSCVAFYpN{rF`P1Q_lr``+Xn0?Y0hJ z_XO4HEnA z0DQ@oN$eWQBpEs-H!7sEH6{LB&RQs%`=xK0CMj4QNSiN`st*3_bq)^z)G5h+1q>RO5@Ul0_>MiYT68pGsR7B20}g&L)?*(#T5e znnn_jphe-7P^!_B%OTkax*=*ZIYw$mBjgjd&kTG;H>I^y@+h8>GT8YK$cD>V5P_25 z!t@2f8Hh=o#uD5VVYbINnJUP{w)4j!Ciwh=0LB$w3A{L` zp9wBL!AhVNqooL}gZN26g;w%(@Z;c0I2GU}pBU}~HFeZ)hr8rxXcfqdd94C_(x#Fv zJL;!DB3hv{QGtq_$#*;$EdVHgU|jOpRsg61QFX+PSuu;xCC`WV!|7d~ zaO6aFW-KHAoyWotJP0utEPA53UawUC1xPTD9DIPn(DR4K-S$p$f^N)E_*}p_~vo>@@=$&j}nY9pK^+ z`!4n!4=VynFXMCUbI}#gg2FqHI?(=Gs~NSbQRS@Huh-X}%HO1f#rMAqohx0xZpr^! zwOT&^Z*0HZe#-w3lK*9X-_&`g)9RX`GS>RS4nX!VbpVN^)u#IT`6`=s-w zg!O&WwVBu!5v{I42w{VlJ$SI!fY5rQcOdNOM-U$A2M`|ULleTGsap_Qte;wfz=l>^ z_e=;qlhwzjehlF;tNx`U2ob9d^mh=xW3~4>h7hybSxWa_@Sm6vPE!7M&D6h`Y&;v< zXhDmbLKsG%+Ys8~L$;;0#?XYeZ|W@wTY3*dui0q9{jn_s=CrKVXu*G5XF@dI*n_Yq zm~w$6dtQrm+=FnBb8fWY#2ni~jYZ=*<$_U1=S^XmrGsL^7PW4XZXd#ZQHzZU?VNyL zo4Ny`a~B0;ZxvWfZT$qoljSUAEp~H(#n#=Wi1CqQF*8G33|z{BlS^C3(H2BuQ@j5A zPT%U%slJF%77wZUGFHNN}UY>+R787u6CRMv5mVhHB zb#AIG@5Y_WKCD_F6nR=~WlZL4W-~coEJfbiFqssWd5s$gT7M=6vkt`+J$S&FTf3|m zN+UK-n9JlE!15z&i%i7|lD|x(a?Lz}*4R>5aBBV`jgqGKMh{w%mDTmFqHAVN^tggG zQ(54oH#7QR5*j6x;C=jHsx1**QD~Xa1Rdc>z<^Y&XIXAQ8R1mbF z71@e{ne|&Jn8BX3nN(=lgmBnY*cbJY*7SF8gU&vLGd}UCDJ;vGEU;`&4guBH*vf{^ z8^MH6wUmhzB(dhqlzTCTp+B0!#+;eNkld&w8#L>ysi-ZH9GKAhpzQB*C}G|2^GIin zw?bVy(=(yS9Y+14h$I)LyC_m%&cz6x@_s;F_rYs-99 zyPK~hj8k8I_%2_ijJU5V-yK(6vy89kUE)eCpPP^AtBahk{6~x{*(wL|ry$mU`HRF| z=0Ps;x(eNc9VWxZd`@7X5F33_~?U$pUI+p?eVl)2>m z?*ZTcY*b$s&;M#0PyhdT`v1qT@c)mP>>Ge{I_k0e3%&SmtPa?9%Pw|;$kjo7Q7-w( zFEk}TTD}v^JbxHpM$tiBfzAY6#}gOc%A|iiaj`Q+5nlQiln5g?@TXV69n@2GjHI&o z?4{p!Fk}hjincV)9Dus2LDqo*DkqM ztBjWuExZFO<>gl#>x$Dpep)oVaN$wm5ck!y-d@Njf1^!u5qFj9Dnu4?C|+HXJd#ML v=drbrQ|4NUWP+SYU4ddc@W#6hD}OumRG!LHc`8rkG0Oh|Vi~qM06qW!5IZ26 diff --git a/berrysdk-wa-message-0.1.0.tgz b/berrysdk-wa-message-0.1.0.tgz deleted file mode 100644 index be7e3fd08e685bd6bf4ac2051b1fc84e31e84159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5907 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: EventName, listener: (payload: BerryEventMap[EventName]) => void): this; - once(event: EventName, listener: (payload: BerryEventMap[EventName]) => void): this; - off(event: EventName, listener: (payload: BerryEventMap[EventName]) => void): this; - emit(event: EventName, payload: BerryEventMap[EventName]): boolean; -} -//# sourceMappingURL=index.d.ts.map diff --git a/packages/events/src/index.d.ts.map b/packages/events/src/index.d.ts.map deleted file mode 100644 index fa2bb08..0000000 --- a/packages/events/src/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/events/src/index.js b/packages/events/src/index.js deleted file mode 100644 index 5e55292..0000000 --- a/packages/events/src/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @module modulo - * @description Enhanced message sending capabilities including albums, cards, - * interactive buttons, and rich media support beyond standard WhatsApp messages. - * @license Apache-2.0 - * @author Lipe Devv and Berry Protocol - */ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BerryEventBus = void 0; -const node_events_1 = require("node:events"); -class BerryEventBus { - emitter = new node_events_1.EventEmitter(); - on(event, listener) { - this.emitter.on(event, listener); - return this; - } - once(event, listener) { - this.emitter.once(event, listener); - return this; - } - off(event, listener) { - this.emitter.off(event, listener); - return this; - } - emit(event, payload) { - return this.emitter.emit(event, payload); - } -} -exports.BerryEventBus = BerryEventBus; -//# sourceMappingURL=index.js.map diff --git a/packages/events/src/index.js.map b/packages/events/src/index.js.map deleted file mode 100644 index ce922bd..0000000 --- a/packages/events/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAkN3C,MAAa,aAAa;IACP,OAAO,GAAG,IAAI,0BAAY,EAAE,CAAC;IAE9C,EAAE,CACA,KAAgB,EAChB,QAAqD;QAErD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAgB,EAChB,QAAqD;QAErD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CACD,KAAgB,EAChB,QAAqD;QAErD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAgB,EAChB,OAAiC;QAEjC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF;AAjCD,sCAiCC"} \ No newline at end of file From ef1a3ae2ea8cc7ab53fa7bf8b00838c8987c4294 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 06:59:50 -0300 Subject: [PATCH 03/23] chore: refresh lockfile and document berrysdk structure --- docs/monorepo-structure.md | 62 + package-lock.json | 18472 ++++--------------------------- packages/protocol/package.json | 2 +- 3 files changed, 2460 insertions(+), 16076 deletions(-) create mode 100644 docs/monorepo-structure.md diff --git a/docs/monorepo-structure.md b/docs/monorepo-structure.md new file mode 100644 index 0000000..8eea990 --- /dev/null +++ b/docs/monorepo-structure.md @@ -0,0 +1,62 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +# `berrysdk` Structure + +This repository can stay focused on the WhatsApp SDK layer while the broader `berrysdk` account grows into other products. + +## Recommended split + +Use `berrysdk` as the umbrella account and npm scope: + +- GitHub account: `berrysdk` +- npm scope: `@berrysdk/*` + +Keep this repository focused on the WhatsApp stack: + +- repository: `berry-protocol` +- packages: + - `@berrysdk/core` + - `@berrysdk/proto` + - `@berrysdk/wa-message` + - `@berrysdk/socket` + - `@berrysdk/auth` + - `@berrysdk/events` + - `@berrysdk/messages` + - `@berrysdk/media` + - `@berrysdk/store` + - `@berrysdk/gateway` + - `@berrysdk/cli` + +## Future repositories + +As new products appear, split them by product line rather than by technical layer. + +Examples: + +- `berry-ai` +- `berry-storage` +- `berry-ui` +- `berry-automation` +- `berry-cloud` + +Each repository can still publish under the same scope: + +- `@berrysdk/ai` +- `@berrysdk/storage` +- `@berrysdk/ui` +- `@berrysdk/automation` + +## Naming rule + +Use this pattern: + +- account/scope: `berrysdk` +- product/repository: `berry-protocol` +- package: `@berrysdk/` + +That gives you one public identity while keeping each product isolated and easier to maintain. diff --git a/package-lock.json b/package-lock.json index 031357d..2331b7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "berryprotocol", + "name": "berrysdk", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "berryprotocol", + "name": "berrysdk", "version": "0.1.0", "hasInstallScript": true, "license": "Apache-2.0", @@ -27,15068 +27,1539 @@ "typescript": "^5.8.3" } }, - "_reference_baileys2": { - "name": "baileys", - "version": "7.0.0-rc10", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@cacheable/node-cache": "^1.4.0", - "@hapi/boom": "^9.1.3", - "async-mutex": "^0.5.0", - "libsignal": "git+https://github.com/whiskeysockets/libsignal-node", - "lru-cache": "^11.1.0", - "music-metadata": "^11.12.3", - "p-queue": "^9.0.0", - "pino": "^9.6", - "protobufjs": "^7.5.6", - "whatsapp-rust-bridge": "0.5.4", - "ws": "^8.13.0" - }, - "devDependencies": { - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.31.0", - "@types/jest": "^30.0.0", - "@types/node": "^20.9.0", - "@types/ws": "^8.0.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "@whiskeysockets/eslint-config": "^1.0.0", - "conventional-changelog": "^7.1.1", - "conventional-changelog-angular": "^8.0.0", - "esbuild-register": "^3.6.0", - "eslint": "^9", - "eslint-config-prettier": "^10.1.2", - "eslint-plugin-prettier": "^5.4.0", - "jest": "^30.0.5", - "jimp": "^1.6.1", - "jiti": "^2.4.2", - "json": "^11.0.0", - "link-preview-js": "^3.0.0", - "lru-cache": "^11.1.0", - "open": "^8.4.2", - "pino-pretty": "^13.1.1", - "prettier": "^3.5.3", - "protobufjs-cli": "^1.1.3", - "release-it": "^20.0.1", - "ts-jest": "^29.4.0", - "tsc-esm-fix": "^3.1.2", - "tsx": "^4.20.3", - "typedoc": "^0.27.9", - "typedoc-plugin-markdown": "4.4.2", - "typescript": "^5.8.2" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "audio-decode": "^2.1.3", - "jimp": "^1.6.1", - "link-preview-js": "^3.0.0", - "sharp": "*" - }, - "peerDependenciesMeta": { - "audio-decode": { - "optional": true - }, - "jimp": { - "optional": true - }, - "link-preview-js": { - "optional": true - } - } + "node_modules/@berrysdk/auth": { + "resolved": "packages/auth", + "link": true }, - "_reference_baileys2/node_modules/@types/node": { - "version": "20.19.40", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.40.tgz", - "integrity": "sha512-xxx6M2IpSTnnKcR0cMvIiohkiCx20/oRPtWGbenFygKCGl3zqUzdNjQ/1V4solq1LU+dgv0nQzeGOuqkqZGg0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } + "node_modules/@berrysdk/cli": { + "resolved": "packages/cli", + "link": true }, - "_vendor_whatsapp_proto": { - "name": "@raphaelvserafim/whatsapp-proto", - "version": "2.0.1", - "extraneous": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.3", - "acorn-walk": "^8.3.2", - "protobufjs": "^7.5.4", - "request": "^2.88.2", - "request-promise-native": "^1.0.9" - }, - "devDependencies": { - "protobufjs-cli": "^1.1.3" - } + "node_modules/@berrysdk/core": { + "resolved": "packages/core", + "link": true }, - "_vendor_wppconnect_wa_proto": { - "name": "@wppconnect/wa-proto", - "version": "2.3000.1039300149", - "license": "Apache-2.0", - "dependencies": { - "long": "^5.3.2", - "protobufjs": "^7.4.0" - }, - "devDependencies": { - "acorn": "^8.16.0", - "acorn-walk": "^8.3.5", - "conventional-changelog-cli": "^4.1.0", - "protobufjs-cli": "^1.1.3", - "release-it": "^17.11.0", - "request": "^2.88.2", - "request-promise-core": "^1.1.4", - "request-promise-native": "^1.0.9" - } + "node_modules/@berrysdk/events": { + "resolved": "packages/events", + "link": true }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "dev": true, + "node_modules/@berrysdk/gateway": { + "resolved": "packages/gateway", + "link": true + }, + "node_modules/@berrysdk/media": { + "resolved": "packages/media", + "link": true + }, + "node_modules/@berrysdk/messages": { + "resolved": "packages/messages", + "link": true + }, + "node_modules/@berrysdk/proto": { + "resolved": "packages/protocol", + "link": true + }, + "node_modules/@berrysdk/socket": { + "resolved": "packages/socket", + "link": true + }, + "node_modules/@berrysdk/store": { + "resolved": "packages/store", + "link": true + }, + "node_modules/@berrysdk/wa-message": { + "resolved": "packages/wa-message", + "link": true + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", "license": "MIT", - "engines": { - "node": ">= 18" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", - "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", - "dev": true, + "node_modules/@cacheable/memory": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", + "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", "license": "MIT", "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.1.0", - "@octokit/request": "^8.4.1", - "@octokit/request-error": "^5.1.1", - "@octokit/types": "^13.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" + "@cacheable/utils": "^2.4.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/endpoint": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", - "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", - "dev": true, + "node_modules/@cacheable/node-cache": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", + "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", "license": "MIT", "dependencies": { - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" + "cacheable": "^2.3.1", + "hookified": "^1.14.0", + "keyv": "^5.5.5" }, "engines": { - "node": ">= 18" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/graphql": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", - "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", - "dev": true, + "node_modules/@cacheable/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", "license": "MIT", "dependencies": { - "@octokit/request": "^8.4.1", - "@octokit/types": "^13.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" + "hashery": "^1.5.1", + "keyv": "^5.6.0" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, - "license": "MIT" - }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/plugin-paginate-rest": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", - "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", - "dev": true, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@octokit/types": "^13.5.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" + "tslib": "^2.4.0" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/plugin-request-log": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", - "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", - "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@octokit/types": "^13.5.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/request": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", - "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^9.0.6", - "@octokit/request-error": "^5.1.1", - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 18" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/request-error": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", - "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@octokit/types": "^13.1.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 18" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/rest": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", - "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@octokit/core": "^5.0.2", - "@octokit/plugin-paginate-rest": "11.3.1", - "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "13.2.2" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 18" - } - }, - "_vendor_wppconnect_wa_proto/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 14" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true, - "license": "Apache-2.0" - }, - "_vendor_wppconnect_wa_proto/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 14" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "_vendor_wppconnect_wa_proto/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "_vendor_wppconnect_wa_proto/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/execa": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.0.tgz", - "integrity": "sha512-CTNS0BcKBcoOsawKBlpcKNmK4Kjuyz5jVLhf+PUsHGMqiKMVTa4cN3U7r7bRY8KTpfOGpXMo27fdy0dYVg2pqA==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/get-uri": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", - "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 14" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/git-url-parse": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "git-up": "^7.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 14" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 14" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=16.17.0" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "_vendor_wppconnect_wa_proto/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "_vendor_wppconnect_wa_proto/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "_vendor_wppconnect_wa_proto/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "_vendor_wppconnect_wa_proto/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "_vendor_wppconnect_wa_proto/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "license": "BSD-3-Clause", "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@hapi/hoek": "9.x.x" } }, - "_vendor_wppconnect_wa_proto/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" }, - "_vendor_wppconnect_wa_proto/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dev": true, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, + "peer": true, "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "_vendor_wppconnect_wa_proto/node_modules/ora": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.1.1.tgz", - "integrity": "sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" - }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/os-name": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-5.1.0.tgz", - "integrity": "sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "macos-release": "^3.1.0", - "windows-release": "^5.0.1" - }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "_vendor_wppconnect_wa_proto/node_modules/pac-proxy-agent": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", - "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" + "url": "https://opencollective.com/libvips" }, - "engines": { - "node": ">= 14" + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "dev": true, - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-path": "^7.0.0" + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/proxy-agent": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", - "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.6", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.1.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/release-it": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-17.11.0.tgz", - "integrity": "sha512-qQGgfMbUZ3/vpXUPmngsgjFObOLjlkwtiozHUYen9fo9AEGciXjG1ZpGr+FNmuBT8R7TOSY+x/s84wOCRKJjbA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/webpro" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/webpro" - } + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" ], - "license": "MIT", - "dependencies": { - "@iarna/toml": "2.2.5", - "@octokit/rest": "20.1.1", - "async-retry": "1.3.3", - "chalk": "5.4.1", - "ci-info": "^4.1.0", - "cosmiconfig": "9.0.0", - "execa": "8.0.0", - "git-url-parse": "14.0.0", - "globby": "14.0.2", - "inquirer": "9.3.2", - "issue-parser": "7.0.1", - "lodash": "4.17.21", - "mime-types": "2.1.35", - "new-github-release-url": "2.0.0", - "open": "10.1.0", - "ora": "8.1.1", - "os-name": "5.1.0", - "proxy-agent": "6.5.0", - "semver": "7.6.3", - "shelljs": "0.8.5", - "update-notifier": "7.3.1", - "url-join": "5.0.0", - "wildcard-match": "5.1.4", - "yargs-parser": "21.1.1" - }, - "bin": { - "release-it": "bin/release-it.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || ^22.0.0" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true, - "license": "ISC" - }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-5.1.1.tgz", - "integrity": "sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=10" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=10" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=10.17.0" - } - }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=8" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "peer": true, "dependencies": { - "mimic-fn": "^2.1.0" + "@emnapi/runtime": "^1.7.0" }, "engines": { - "node": ">=6" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">=8" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "_vendor_wppconnect_wa_proto/node_modules/windows-release/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">=6" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "_vendor_wppconnect_wa_proto/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "dev": true, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "hashery": "^1.4.0", + "hookified": "^1.15.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", - "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", + "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "debug": "^4.4.3", + "token-types": "^6.1.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "node_modules/@types/better-sqlite3": { + "version": "7.6.13", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", + "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" + "@types/node": "*" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^3.0.2" + "@types/node": "*" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" - }, - "engines": { - "node": ">=6.9.0" - } + "license": "MIT" }, - "node_modules/@babel/parser": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", - "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", - "dev": true, + "node_modules/@types/node": { + "version": "22.19.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", + "integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" + "undici-types": "~6.21.0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@types/qrcode-terminal": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", + "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "license": "MIT" }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "license": "MIT" }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "license": "MIT" }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/http-errors": "*", + "@types/node": "*" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", + "node_modules/@wppconnect/wa-proto": { + "version": "2.3000.1030818676", + "resolved": "https://registry.npmjs.org/@wppconnect/wa-proto/-/wa-proto-2.3000.1030818676.tgz", + "integrity": "sha512-HiSaUvkJ2sdbZZXLV7mL1EYnnNlACqclFbD8iyG+G3n9uNFPM/j4S4pQW7dEw4k/V1TxUc5gbfucDfpDwHj9Og==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "long": "^5.3.2", + "protobufjs": "^7.4.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", - "dev": true, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 0.6" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "tslib": "^2.4.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.0.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", - "dev": true, + "node_modules/baileys": { + "version": "7.0.0-rc10", + "resolved": "https://registry.npmjs.org/baileys/-/baileys-7.0.0-rc10.tgz", + "integrity": "sha512-B1ShVyha4iZP7aNyz4QsXFceExzkvLFgISQGaDGHQaYFxIdNqoen+xKmlo1iWEsaexvQORAvUK44VicRi1T94g==", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", + "lru-cache": "^11.1.0", + "music-metadata": "^11.12.3", + "p-queue": "^9.0.0", + "pino": "^9.6", + "protobufjs": "^7.5.6", + "whatsapp-rust-bridge": "0.5.3", + "ws": "^8.13.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "audio-decode": "^2.1.3", + "jimp": "^1.6.1", + "link-preview-js": "^3.0.0", + "sharp": "*" }, - "engines": { - "node": ">=6.9.0" + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + } } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@berryprotocol/auth": { - "resolved": "packages/auth", - "link": true - }, - "node_modules/@berryprotocol/cli": { - "resolved": "packages/cli", - "link": true - }, - "node_modules/@berryprotocol/core": { - "resolved": "packages/core", - "link": true - }, - "node_modules/@berryprotocol/events": { - "resolved": "packages/events", - "link": true - }, - "node_modules/@berryprotocol/gateway": { - "resolved": "packages/gateway", - "link": true - }, - "node_modules/@berryprotocol/media": { - "resolved": "packages/media", - "link": true - }, - "node_modules/@berryprotocol/messages": { - "resolved": "packages/messages", - "link": true - }, - "node_modules/@berryprotocol/proto": { - "resolved": "packages/protocol", - "link": true - }, - "node_modules/@berryprotocol/socket": { - "resolved": "packages/socket", - "link": true - }, - "node_modules/@berryprotocol/store": { - "resolved": "packages/store", - "link": true - }, - "node_modules/@berryprotocol/wa-message": { - "resolved": "packages/wa-message", - "link": true - }, - "node_modules/@borewit/text-codec": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", - "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@cacheable/memory": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", - "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", - "license": "MIT", - "dependencies": { - "@cacheable/utils": "^2.4.0", - "@keyv/bigmap": "^1.3.1", - "hookified": "^1.15.1", - "keyv": "^5.6.0" - } - }, - "node_modules/@cacheable/node-cache": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", - "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", - "license": "MIT", - "dependencies": { - "cacheable": "^2.3.1", - "hookified": "^1.14.0", - "keyv": "^5.5.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@cacheable/utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", - "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", - "license": "MIT", - "dependencies": { - "hashery": "^1.5.1", - "keyv": "^5.6.0" - } - }, - "node_modules/@conventional-changelog/git-client": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.7.0.tgz", - "integrity": "sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@simple-libs/child-process-utils": "^1.0.0", - "@simple-libs/stream-utils": "^1.2.0", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.4.0" - }, - "peerDependenciesMeta": { - "conventional-commits-filter": { - "optional": true - }, - "conventional-commits-parser": { - "optional": true - } - } - }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", - "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.5" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", - "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.14.0", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.5", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", - "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@gerrit0/mini-shiki": { - "version": "1.27.2", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.27.2.tgz", - "integrity": "sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/engine-oniguruma": "^1.27.2", - "@shikijs/types": "^1.27.2", - "@shikijs/vscode-textmate": "^10.0.1" - } - }, - "node_modules/@hapi/boom": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", - "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "9.x.x" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@humanfs/core": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", - "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/types": "^0.15.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", - "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.2", - "@humanfs/types": "^0.15.0", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/types": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", - "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@hutson/parse-repository-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-5.0.0.tgz", - "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true, - "license": "ISC" - }, - "node_modules/@img/colour": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", - "cpu": [ - "riscv64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", - "cpu": [ - "riscv64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/runtime": "^1.7.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@inquirer/ansi": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.5.tgz", - "integrity": "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.5.tgz", - "integrity": "sha512-Jmf9tgBHIEK5SAOB7swYfStqmtkZb00xOTpSQmkoGEpdxOTpJi9RS0A8bkfDPHTTItZRJrRdZrEMu25wyj0VfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.10", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/confirm": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.13.tgz", - "integrity": "sha512-wkGPC7yJ5WJk1DJ5SX7fzk+gfj4BM8cf5dDDi71B/551xHrdsZVRJOC0WyikXd0pEsb/9cLniuE4atbsMqmFkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.10", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "11.1.10", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.10.tgz", - "integrity": "sha512-a4Q5BXHQAHa9eO202sTaFCHFYVB3x5fauDuThEAdZ9gfn76pSxiKU7wWcEH0N1O0XmQvNfQNU6QXpiRxmYQx+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5", - "cli-width": "^4.1.0", - "fast-wrap-ansi": "^0.2.0", - "mute-stream": "^3.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@inquirer/editor": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.2.tgz", - "integrity": "sha512-Y3Nor7S/DhIPo+8Ym/dSY4efwKI4BsflKDwXh0jNeXJsSF3dteS/3Yf+z4wkibVZDvYMyCgknSTQlNahfunGHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.10", - "@inquirer/external-editor": "^3.0.0", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.14.tgz", - "integrity": "sha512-qyY9zcIX2eKYwaAUiQo9zORd61Lc3sXeM72fVbeHkYnDkqfr8/armcRbmVAIrExeJhI2puk+uomeKtWrpUVUmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.10", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.0.tgz", - "integrity": "sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.2" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.5.tgz", - "integrity": "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - } - }, - "node_modules/@inquirer/input": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.13.tgz", - "integrity": "sha512-0l0jCHlJnXIV8CTxwQC0C+5Ziq8WP22edWgmciW2xYvoeoSck4v5FvCS1ctKdqLLR0dUo93uAHgWHywgBSoRyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.10", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.13.tgz", - "integrity": "sha512-WHmkYnnJAou5gx7RgcvAfUggnHNM1zWfoh0dFPl3dxVssuqt+dK5rIbaOYQXNyOegvFnopbKupjnhw2O8gANNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.10", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.13.tgz", - "integrity": "sha512-XDGu64ROHZjOOXLAANvJN7iIxWKhOSCG5VakrZ5kaScVR+snVJCFglD/hL3/677awtWcu4pXoWa280CDIYcBeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.10", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.2.tgz", - "integrity": "sha512-XJmn/wY4AX56l1BRU+ZjDrFtg9+2uBEi4JvJQj82kwJDQKiPgSn4CEsbfGGygS4Gw6rkL4W18oATjfVfaqub2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^5.1.4", - "@inquirer/confirm": "^6.0.12", - "@inquirer/editor": "^5.1.1", - "@inquirer/expand": "^5.0.13", - "@inquirer/input": "^5.0.12", - "@inquirer/number": "^4.0.12", - "@inquirer/password": "^5.0.12", - "@inquirer/rawlist": "^5.2.8", - "@inquirer/search": "^4.1.8", - "@inquirer/select": "^5.1.4" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.9.tgz", - "integrity": "sha512-a1ErXEfgjfPYpyQ89dp+7n2IISjH9oQg3ygvF5adz8B7aHn4n2PjEgu1wpVTp69K3bj3lVLxP0qJ2b1clk1Whw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.10", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.9.tgz", - "integrity": "sha512-ZlbM28Q9lmLkFPNAIv+ZuY530n5Km8U1WW48oYEvDhe9yc2uL3m3t+JSdRUkQlk5fuIuskgiIVjcb7czFzQpuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^11.1.10", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.5.tgz", - "integrity": "sha512-6SRg6kHfK/sjLXOsuqNebuir+sjwrf/iWuRUnXgB2slzEewppI1WfzeS16XxDcOQmXBruMmmB9Cgrz7wsAxqMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.10", - "@inquirer/figures": "^2.0.5", - "@inquirer/type": "^4.0.5" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.5.tgz", - "integrity": "sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.4.1.tgz", - "integrity": "sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.4.1", - "jest-util": "30.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/core": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.4.2.tgz", - "integrity": "sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.4.1", - "@jest/pattern": "30.4.0", - "@jest/reporters": "30.4.1", - "@jest/test-result": "30.4.1", - "@jest/transform": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.4.1", - "jest-config": "30.4.2", - "jest-haste-map": "30.4.1", - "jest-message-util": "30.4.1", - "jest-regex-util": "30.4.0", - "jest-resolve": "30.4.1", - "jest-resolve-dependencies": "30.4.2", - "jest-runner": "30.4.2", - "jest-runtime": "30.4.2", - "jest-snapshot": "30.4.1", - "jest-util": "30.4.1", - "jest-validate": "30.4.1", - "jest-watcher": "30.4.1", - "pretty-format": "30.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/diff-sequences": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", - "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", - "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "jest-mock": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.4.1.tgz", - "integrity": "sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "30.4.1", - "jest-snapshot": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", - "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", - "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.4.1", - "@sinonjs/fake-timers": "^15.4.0", - "@types/node": "*", - "jest-message-util": "30.4.1", - "jest-mock": "30.4.1", - "jest-util": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.4.1.tgz", - "integrity": "sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.4.1", - "@jest/expect": "30.4.1", - "@jest/types": "30.4.1", - "jest-mock": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/pattern": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", - "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.4.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.4.1.tgz", - "integrity": "sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.4.1", - "@jest/test-result": "30.4.1", - "@jest/transform": "30.4.1", - "@jest/types": "30.4.1", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.5.0", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.4.1", - "jest-util": "30.4.1", - "jest-worker": "30.4.1", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/schemas": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", - "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/snapshot-utils": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.4.1.tgz", - "integrity": "sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.4.1", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.4.1.tgz", - "integrity": "sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.4.1", - "@jest/types": "30.4.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.4.1.tgz", - "integrity": "sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "30.4.1", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.4.1.tgz", - "integrity": "sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.4.1", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.4.1", - "jest-regex-util": "30.4.0", - "jest-util": "30.4.1", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/types": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", - "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.4.0", - "@jest/schemas": "30.4.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jimp/core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-1.6.1.tgz", - "integrity": "sha512-+BoKC5G6hkrSy501zcJ2EpfnllP+avPevcBfRcZe/CW+EwEfY6X1EZ8QWyT7NpDIvEEJb1fdJnMMfUnFkxmw9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/file-ops": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "await-to-js": "^3.0.0", - "exif-parser": "^0.1.12", - "file-type": "^21.3.3", - "mime": "3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/diff": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/diff/-/diff-1.6.1.tgz", - "integrity": "sha512-YkKDPdHjLgo1Api3+Bhc0GLAygldlpt97NfOKoNg1U6IUNXA6X2MgosCjPfSBiSvJvrrz1fsIR+/4cfYXBI/HQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/plugin-resize": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "pixelmatch": "^5.3.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/file-ops": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/file-ops/-/file-ops-1.6.1.tgz", - "integrity": "sha512-T+gX6osHjprbDRad0/B71Evyre7ZdVY1z/gFGEG9Z8KOtZPKboWvPeP2UjbZYWQLy9UKCPQX1FNAnDiOPkJL7w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/js-bmp": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/js-bmp/-/js-bmp-1.6.1.tgz", - "integrity": "sha512-xzWzNT4/u5zGrTT3Tme9sGU7YzIKxi13+BCQwLqACbt5DXf9SAfdzRkopZQnmDko+6In5nqaT89Gjs43/WdnYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "bmp-ts": "^1.0.9" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/js-gif": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/js-gif/-/js-gif-1.6.1.tgz", - "integrity": "sha512-YjY2W26rQa05XhanYhRZ7dingCiNN+T2Ymb1JiigIbABY0B28wHE3v3Cf1/HZPWGu0hOg36ylaKgV5KxF2M58w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "gifwrap": "^0.10.1", - "omggif": "^1.0.10" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/js-jpeg": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/js-jpeg/-/js-jpeg-1.6.1.tgz", - "integrity": "sha512-HT9H3yOmlOFzYmdI15IYdfy6ggQhSRIaHeA+OTJSEORXBqEo97sUZu/DsgHIcX5NJ7TkJBTgZ9BZXsV6UbsyMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "jpeg-js": "^0.4.4" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/js-png": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/js-png/-/js-png-1.6.1.tgz", - "integrity": "sha512-SZ/KVhI5UjcSzzlXsXdIi/LhJ7UShf2NkMOtVrbZQcGzsqNtynAelrOXeoTxcanfVqmNhAoVHg8yR2cYoqrYjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "pngjs": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/js-tiff": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/js-tiff/-/js-tiff-1.6.1.tgz", - "integrity": "sha512-jDG/eJquID1M4MBlKMmDRBmz2TpXMv7TUyu2nIRUxhlUc2ogC82T+VQUkca9GJH1BBJ9dx5sSE5dGkWNjIbZxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "utif2": "^4.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-blit": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-1.6.1.tgz", - "integrity": "sha512-MwnI7C7K81uWddY9FLw1fCOIy6SsPIUftUz36Spt7jisCn8/40DhQMlSxpxTNelnZb/2SnloFimQfRZAmHLOqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-blur": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-1.6.1.tgz", - "integrity": "sha512-lIo7Tzp5jQu30EFFSK/phXANK3citKVEjepDjQ6ljHoIFtuMRrnybnmI2Md24ulvWlDaz+hh3n6qrMb8ydwhZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/utils": "1.6.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-circle": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-1.6.1.tgz", - "integrity": "sha512-kK1PavY6cKHNNKce37vdV4Tmpc1/zDKngGoeOV3j+EMatoHFZUinV3s6F9aWryPs3A0xhCLZgdJ6Zeea1d5LCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-color": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-1.6.1.tgz", - "integrity": "sha512-LtUN1vAP+LRlZAtTNVhDRSiXx+26Kbz3zJaG6a5k59gQ95jgT5mknnF8lxkHcqJthM4MEk3/tPxkdJpEybyF/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "tinycolor2": "^1.6.0", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-contain": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-1.6.1.tgz", - "integrity": "sha512-m0qhrfA8jkTqretGv4w+T/ADFR4GwBpE0sCOC2uJ0dzr44/ddOMsIdrpi89kabqYiPYIrxkgdCVCLm3zn1Vkkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/plugin-blit": "1.6.1", - "@jimp/plugin-resize": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-cover": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-1.6.1.tgz", - "integrity": "sha512-hZytnsth0zoll6cPf434BrT+p/v569Wr5tyO6Dp0dH1IDPhzhB5F38sZGMLDo7bzQiN9JFVB3fxkcJ/WYCJ3Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/plugin-crop": "1.6.1", - "@jimp/plugin-resize": "1.6.1", - "@jimp/types": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-crop": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-1.6.1.tgz", - "integrity": "sha512-EerRSLlclXyKDnYc/H9w/1amZW7b7v3OGi/VlerPd2M/pAu5X8TkyYWtfqYCXnNp1Ixtd8oCo9zGfY9zoXT4rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-displace": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-1.6.1.tgz", - "integrity": "sha512-K07QVl7xQwIfD6KfxRV/c3E9e7ZBXxUXdWuvoTWcKHL2qV48MOF5Nqbz/aJW4ThnQARIsxvYlZjPFiqkCjlU+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-dither": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-1.6.1.tgz", - "integrity": "sha512-+2V+GCV2WycMoX1/z977TkZ8Zq/4MVSKElHYatgUqtwXMi2fDK2gKYU2g9V39IqFvTJsTIsK0+58VFz/ROBVew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-fisheye": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-1.6.1.tgz", - "integrity": "sha512-XtS5ZyoZ0vxZxJ6gkqI63SivhtI58vX95foMPM+cyzYkRsJXMOYCr8DScxF5bp4Xr003NjYm/P+7+08tibwzHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-flip": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-1.6.1.tgz", - "integrity": "sha512-ws38W/sGj7LobNRayQ83garxiktOyWxM5vO/y4a/2cy9v65SLEUzVkrj+oeAaUSSObdz4HcCEla7XtGlnAGAaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-hash": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-hash/-/plugin-hash-1.6.1.tgz", - "integrity": "sha512-sZt6ZcMX6i8vFWb4GYnw0pR/o9++ef0dTVcboTB5B/g7nrxCODIB4wfEkJ/YqZM5wUvol77K1qeS0/rVO6z21A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/js-bmp": "1.6.1", - "@jimp/js-jpeg": "1.6.1", - "@jimp/js-png": "1.6.1", - "@jimp/js-tiff": "1.6.1", - "@jimp/plugin-color": "1.6.1", - "@jimp/plugin-resize": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "any-base": "^1.1.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-mask": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-1.6.1.tgz", - "integrity": "sha512-SIG0/FcmEj3tkwFxc7fAGLO8o4uNzMpSOdQOhbCgxefQKq5wOVMk9BQx/sdMPBwtMLr9WLq0GzLA/rk6t2v20A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-print": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-1.6.1.tgz", - "integrity": "sha512-BYVz/X3Xzv8XYilVeDy11NOp0h7BTDjlOtu0BekIFHP1yHVd24AXNzbOy52XlzYZWQ0Dl36HOHEpl/nSNrzc6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/js-jpeg": "1.6.1", - "@jimp/js-png": "1.6.1", - "@jimp/plugin-blit": "1.6.1", - "@jimp/types": "1.6.1", - "parse-bmfont-ascii": "^1.0.6", - "parse-bmfont-binary": "^1.0.6", - "parse-bmfont-xml": "^1.1.6", - "simple-xml-to-json": "^1.2.2", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-quantize": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-quantize/-/plugin-quantize-1.6.1.tgz", - "integrity": "sha512-J2En9PLURfP+vwYDtuZ9T8yBW6BWYZBScydAjRiPBmJfEhTcNQqiiQODrZf7EqbbX/Sy5H6dAeRiqkgoV9N6Ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "image-q": "^4.0.0", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-resize": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-1.6.1.tgz", - "integrity": "sha512-CLkrtJoIz2HdWnpYiN6p8KYcPc00rCH/SUu6o+lfZL05Q4uhecJlnvXuj9x+U6mDn3ldPmJj6aZqMHuUJzdVqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-rotate": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-1.6.1.tgz", - "integrity": "sha512-nOjVjbbj705B02ksysKnh0POAwEBXZtJ9zQ5qC+X7Tavl3JNn+P3BzQovbBxLPSbUSld6XID9z5ijin4PtOAUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/plugin-crop": "1.6.1", - "@jimp/plugin-resize": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/plugin-threshold": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-1.6.1.tgz", - "integrity": "sha512-JOKv9F8s6tnVLf4sB/2fF0F339EFnHvgEdFYugO6VhowKLsap0pEZmLyE/DlRnYtIj2RddHZVxVMp/eKJ04l2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/plugin-color": "1.6.1", - "@jimp/plugin-hash": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/types": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-1.6.1.tgz", - "integrity": "sha512-leI7YbveTNi565m910XgIOwXyuu074H5qazAD1357HImJSv2hqxnWXpwxQbadGWZ7goZRYBDZy5lpqud0p7q5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jimp/utils": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-1.6.1.tgz", - "integrity": "sha512-veFPRd93FCnS7AgmCkPgARVGoDRrJ9cm1ujuNyA+UfQ5VKbED2002sm5XfFLFwTsKC8j04heTrwe+tU1dluXOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "tinycolor2": "^1.6.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsdoc/salty": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.12.tgz", - "integrity": "sha512-TuB0x50EoAvEX/UEWITd8Mkn3WhiTjSvbTMCLj0BhsQEl5iUzjXdA0bETEVpTk+5TGTLR6QktI9H4hLviVeaAQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lodash": "^4.18.1" - }, - "engines": { - "node": ">=v12.0.0" - } - }, - "node_modules/@keyv/bigmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", - "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", - "license": "MIT", - "dependencies": { - "hashery": "^1.4.0", - "hookified": "^1.15.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "keyv": "^5.6.0" - } - }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "license": "MIT" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", - "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/core": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", - "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^6.0.0", - "@octokit/graphql": "^9.0.3", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "before-after-hook": "^4.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/endpoint": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", - "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/graphql": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", - "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "27.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", - "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", - "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", - "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", - "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/request": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", - "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^11.0.3", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "fast-content-type-parse": "^3.0.0", - "json-with-bigint": "^3.5.3", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/request-error": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", - "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/rest": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.1.tgz", - "integrity": "sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/core": "^7.0.6", - "@octokit/plugin-paginate-rest": "^14.0.0", - "@octokit/plugin-request-log": "^6.0.0", - "@octokit/plugin-rest-endpoint-methods": "^17.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/types": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", - "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^27.0.0" - } - }, - "node_modules/@phun-ky/typeof": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@phun-ky/typeof/-/typeof-2.0.3.tgz", - "integrity": "sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.9.0 || >=22.0.0", - "npm": ">=10.8.2" - }, - "funding": { - "url": "https://github.com/phun-ky/typeof?sponsor=1" - } - }, - "node_modules/@pinojs/redact": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", - "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", - "license": "MIT" - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", - "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", - "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", - "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", - "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", - "license": "BSD-3-Clause" - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", - "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "1.29.2", - "@shikijs/vscode-textmate": "^10.0.1" - } - }, - "node_modules/@shikijs/types": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz", - "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.1", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@simple-libs/child-process-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz", - "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@simple-libs/stream-utils": "^1.2.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://ko-fi.com/dangreen" - } - }, - "node_modules/@simple-libs/hosted-git-info": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@simple-libs/hosted-git-info/-/hosted-git-info-1.0.2.tgz", - "integrity": "sha512-aAmGQdMH+ZinytKuA2832u0ATeOFNYNk4meBEXtB5xaPotUgggYNhq5tYU/v17wEbmTW5P9iHNqNrFyrhnqBAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://ko-fi.com/dangreen" - } - }, - "node_modules/@simple-libs/stream-utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz", - "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://ko-fi.com/dangreen" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.49", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", - "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", - "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@tokenizer/inflate": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", - "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "token-types": "^6.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "license": "MIT" - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@topoconfig/extends": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/@topoconfig/extends/-/extends-0.16.5.tgz", - "integrity": "sha512-JuBgOuFAK28D3+SsRKw6wVmACKHdxhBvVlAcf2ReRXYw5ftW8pTuTkv5T91xTiRtHcUWMC9XNQksUlQAc/yZ7A==", - "dev": true, - "license": "MIT", - "bin": { - "xtends": "target/esm/cli.mjs" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", - "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/better-sqlite3": { - "version": "7.6.13", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", - "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.18.tgz", - "integrity": "sha512-9v00a+dn2yWVsYDEunWC4g/TcRKVq3r8N5FuZp7u0SGrPvdN9c2yXI9bBuf5Fl0hNCb+QTIePTn5pJs2pwBOQQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/parse-path": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", - "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qrcode-terminal": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", - "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.2.tgz", - "integrity": "sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/type-utils": "8.59.2", - "@typescript-eslint/utils": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.59.2", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.2.tgz", - "integrity": "sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.2.tgz", - "integrity": "sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.59.2", - "@typescript-eslint/types": "^8.59.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.2.tgz", - "integrity": "sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.2.tgz", - "integrity": "sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.2.tgz", - "integrity": "sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/utils": "8.59.2", - "debug": "^4.4.3", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz", - "integrity": "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.2.tgz", - "integrity": "sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.59.2", - "@typescript-eslint/tsconfig-utils": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.2.tgz", - "integrity": "sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.2.tgz", - "integrity": "sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.59.2", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", - "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@whiskeysockets/eslint-config": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@whiskeysockets/eslint-config/-/eslint-config-1.0.0.tgz", - "integrity": "sha512-NbcIFEbcOPtB7XpNGJv8FcwX66ZbHcobykdIUfE0EpUKlYkLCOxiqD2K0/HjAhzwTCmpYM3SjynE5D6FdAfOWA==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^8.37.0", - "@typescript-eslint/parser": "^8.37.0", - "eslint-plugin-simple-import-sort": "^12.1.1" - }, - "peerDependencies": { - "eslint": "^9.31.0", - "typescript": ">=4" - } - }, - "node_modules/@wppconnect/wa-proto": { - "resolved": "_vendor_wppconnect_wa_proto", - "link": true - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", - "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-8.0.0.tgz", - "integrity": "sha512-QT8i0hCz6C/KQ+KTAbSNwCHDGdmUJl2tp2ZpNlGSWCfhUNVbYG2WLE3MdZGBAgXPV4GAvjGMxo+C1hroyxmZEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "license": "MIT" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/async-mutex": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", - "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/atomically": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", - "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "stubborn-fs": "^2.0.0", - "when-exit": "^2.1.4" - } - }, - "node_modules/await-to-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/await-to-js/-/await-to-js-3.0.0.tgz", - "integrity": "sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.4.1.tgz", - "integrity": "sha512-fATAbM8piYxkiXQp3RBXmZHxZVNJZAVXXfyeyCN2Tida3+qJ8ea9UxhiJ2y4fLO90ZImKt6k9FlcH2+rLkJGhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "30.4.1", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.4.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", - "dev": true, - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.4.0.tgz", - "integrity": "sha512-9EdtWM/sSfXLOGLwSn+GS6pIXyBnL07/8gyJlwFXjWy4DxMOyItqyUT29d4lQiS380EZwYlX7/At4PgBS+m2aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/babel__core": "^7.20.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/babel-preset-jest": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.4.0.tgz", - "integrity": "sha512-lBY4jxsNmCnSiu7kquw8ZC9F4+XLMOKypT3RnNHPvU2Kpd4W0xaPuLr5ZkRyOsvLYAY4yaW1ZwTW4xB7NIiZzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "30.4.0", - "babel-preset-current-node-syntax": "^1.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1" - } - }, - "node_modules/baileys": { - "resolved": "_reference_baileys2", - "link": true - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.29.tgz", - "integrity": "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/basic-ftp": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", - "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/before-after-hook": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", - "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/better-sqlite3": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", - "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/bmp-ts": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bmp-ts/-/bmp-ts-1.0.9.tgz", - "integrity": "sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/c12": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.3.tgz", - "integrity": "sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^5.0.0", - "confbox": "^0.2.2", - "defu": "^6.1.4", - "dotenv": "^17.2.3", - "exsolve": "^1.0.8", - "giget": "^2.0.0", - "jiti": "^2.6.1", - "ohash": "^2.0.11", - "pathe": "^2.0.3", - "perfect-debounce": "^2.0.0", - "pkg-types": "^2.3.0", - "rc9": "^2.1.2" - }, - "peerDependencies": { - "magicast": "*" - }, - "peerDependenciesMeta": { - "magicast": { - "optional": true - } - } - }, - "node_modules/cacheable": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", - "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", - "license": "MIT", - "dependencies": { - "@cacheable/memory": "^2.0.8", - "@cacheable/utils": "^2.4.1", - "hookified": "^1.15.0", - "keyv": "^5.6.0", - "qified": "^0.10.1" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001792", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz", - "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.11.tgz", - "integrity": "sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==", - "dev": true, - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, - "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "consola": "^3.2.3" - } - }, - "node_modules/cjs-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", - "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", - "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", - "license": "MIT", - "engines": { - "node": ">=20" - } - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/confbox": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", - "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", - "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "atomically": "^2.0.3", - "dot-prop": "^9.0.0", - "graceful-fs": "^4.2.11", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/configstore/node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^4.18.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/configstore/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-7.2.0.tgz", - "integrity": "sha512-BEdgG+vPl53EVlTTk9sZ96aagFp0AQ5pw/ggiQMy2SClLbTo1r0l+8dSg79gkLOO5DS1Lswuhp5fWn6RwE+ivg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@conventional-changelog/git-client": "^2.6.0", - "@simple-libs/hosted-git-info": "^1.0.2", - "@types/normalize-package-data": "^2.4.4", - "conventional-changelog-preset-loader": "^5.0.0", - "conventional-changelog-writer": "^8.3.0", - "conventional-commits-parser": "^6.3.0", - "fd-package-json": "^2.0.0", - "meow": "^13.0.0", - "normalize-package-data": "^7.0.0" - }, - "bin": { - "conventional-changelog": "dist/cli/index.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.1.tgz", - "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-changelog-atom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-4.0.0.tgz", - "integrity": "sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-cli": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-4.1.0.tgz", - "integrity": "sha512-MscvILWZ6nWOoC+p/3Nn3D2cVLkjeQjyZPUr0bQ+vUORE/SPrkClJh8BOoMNpS4yk+zFJ5LlgXACxH6XGQoRXA==", - "deprecated": "This package is no longer maintained. Please use the conventional-changelog package instead.", - "dev": true, - "license": "MIT", - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog": "^5.1.0", - "meow": "^12.0.1", - "tempfile": "^5.0.0" - }, - "bin": { - "conventional-changelog": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-5.1.0.tgz", - "integrity": "sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "conventional-changelog-angular": "^7.0.0", - "conventional-changelog-atom": "^4.0.0", - "conventional-changelog-codemirror": "^4.0.0", - "conventional-changelog-conventionalcommits": "^7.0.2", - "conventional-changelog-core": "^7.0.0", - "conventional-changelog-ember": "^4.0.0", - "conventional-changelog-eslint": "^5.0.0", - "conventional-changelog-express": "^4.0.0", - "conventional-changelog-jquery": "^5.0.0", - "conventional-changelog-jshint": "^4.0.0", - "conventional-changelog-preset-loader": "^4.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-preset-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-4.1.0.tgz", - "integrity": "sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-cli/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-codemirror": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-4.0.0.tgz", - "integrity": "sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-7.0.0.tgz", - "integrity": "sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@hutson/parse-repository-url": "^5.0.0", - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^7.0.0", - "conventional-commits-parser": "^5.0.0", - "git-raw-commits": "^4.0.0", - "git-semver-tags": "^7.0.0", - "hosted-git-info": "^7.0.0", - "normalize-package-data": "^6.0.0", - "read-pkg": "^8.0.0", - "read-pkg-up": "^10.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz", - "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "conventional-commits-filter": "^4.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "meow": "^12.0.1", - "semver": "^7.5.2", - "split2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core/node_modules/conventional-commits-filter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz", - "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/conventional-changelog-core/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-core/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/conventional-changelog-ember": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-4.0.0.tgz", - "integrity": "sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-eslint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-5.0.0.tgz", - "integrity": "sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-express": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-4.0.0.tgz", - "integrity": "sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-jquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-5.0.0.tgz", - "integrity": "sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-jshint": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-4.0.0.tgz", - "integrity": "sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-5.0.0.tgz", - "integrity": "sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.4.0.tgz", - "integrity": "sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@simple-libs/stream-utils": "^1.2.0", - "conventional-commits-filter": "^5.0.0", - "handlebars": "^4.7.7", - "meow": "^13.0.0", - "semver": "^7.5.2" - }, - "bin": { - "conventional-changelog-writer": "dist/cli/index.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-commits-filter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", - "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/conventional-commits-parser": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.4.0.tgz", - "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@simple-libs/stream-utils": "^1.2.0", - "meow": "^13.0.0" - }, - "bin": { - "conventional-commits-parser": "dist/cli/index.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/curve25519-js": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", - "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", - "license": "MIT" - }, - "node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-7.0.0.tgz", - "integrity": "sha512-CuRUx0TXGSbbWdEci3VK/XOZGP3n0P4pIKpsqpVtBqaIIuj3GKK8H45oAqA4Rg8FHipc+CzRdUzmD4YQXxv66Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", - "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/defu": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", - "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/degenerator": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-6.0.0.tgz", - "integrity": "sha512-j5MdXdefrecJeSqTpUrgZd4fBsD2IxZx0JlJD+n1Q7+aTf7/HcyXSfHsicPW6ekPurX159v1ZYla6OJgSPh2Dw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "quickjs-wasi": "^0.0.1" - } - }, - "node_modules/degenerator/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/depseek": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/depseek/-/depseek-0.4.6.tgz", - "integrity": "sha512-bWgCO97Q18pAlNdmYef1XMWUFCzZ3zoPzh67mIlrrPF2iVzqUT0/1ZsynfCMpWjBxcwY8JjjFHk9FNqgptFrlg==", - "dev": true, - "license": "MIT" - }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", - "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.353", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.353.tgz", - "integrity": "sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" - } - }, - "node_modules/esbuild-register": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", - "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "peerDependencies": { - "esbuild": ">=0.12 <1" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", - "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.2", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "9.39.4", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.5", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", - "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.12" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", - "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-4.5.1.tgz", - "integrity": "sha512-EaNCGm+8XEIU7YNcc+THptWAO5NfKBHHARxt+wxZljj9bTr/+arRoOm9/MpGt4n6xn9fLnPFRSoLD0WFYGFUxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/bgub/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "license": "MIT" - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==", - "dev": true - }, - "node_modules/exit-x": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.4.1.tgz", - "integrity": "sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.4.1", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.4.1", - "jest-message-util": "30.4.1", - "jest-mock": "30.4.1", - "jest-util": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/exsolve": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", - "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", - "dev": true, - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/fast-content-type-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", - "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/fast-copy": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.3.tgz", - "integrity": "sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-string-truncated-width": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", - "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-string-width": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", - "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-string-truncated-width": "^3.0.2" - } - }, - "node_modules/fast-wrap-ansi": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz", - "integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-string-width": "^3.0.2" - } - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-2.0.0.tgz", - "integrity": "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "walk-up-path": "^4.0.0" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/file-type": { - "version": "21.3.4", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", - "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", - "license": "MIT", - "dependencies": { - "@tokenizer/inflate": "^0.4.1", - "strtok3": "^10.3.4", - "token-types": "^6.1.1", - "uint8array-extras": "^1.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flat-cache/node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-tsconfig": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", - "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/get-uri": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-7.0.0.tgz", - "integrity": "sha512-ZsC7KQxm1Hra8yO0RvMZ4lGJT7vnBtSNpEHKq39MPN7vjuvCiu1aQ8rkXUaIXG1y/TSDez97Gmv04ibnYqCp/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "7.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/gifwrap": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", - "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "image-q": "^4.0.0", - "omggif": "^1.0.10" - } - }, - "node_modules/giget": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", - "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.6", - "nypm": "^0.6.0", - "pathe": "^2.0.3" - }, - "bin": { - "giget": "dist/cli.mjs" - } - }, - "node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", - "dev": true, - "license": "MIT", - "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/git-raw-commits/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-7.0.1.tgz", - "integrity": "sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==", - "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", - "dev": true, - "license": "MIT", - "dependencies": { - "meow": "^12.0.1", - "semver": "^7.5.2" - }, - "bin": { - "git-semver-tags": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-up": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", - "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^9.2.0" - } - }, - "node_modules/git-url-parse": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", - "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", - "dev": true, - "license": "MIT", - "dependencies": { - "git-up": "^8.1.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-directory/node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/handlebars": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", - "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hashery": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", - "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", - "license": "MIT", - "dependencies": { - "hookified": "^1.15.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/help-me": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", - "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/hookified": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", - "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", - "license": "MIT" - }, - "node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/http-proxy-agent": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-8.0.0.tgz", - "integrity": "sha512-7pose0uGgrCJeH2Qh4JcNhWZp3u/oNrWjNYDK4ydOLxOpTw8V8ogHFAmkz0VWq96JBFj4umVJpvmQi287rSYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "8.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-8.0.0.tgz", - "integrity": "sha512-YYeW+iCnAS3xhvj2dvVoWgsbca3RfQy/IlaNHHOtDmU0jMqPI9euIq3Y9BJETdxk16h9NHHCKqp/KB9nIMStCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "8.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-q": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", - "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "16.9.1" - } - }, - "node_modules/image-q/node_modules/@types/node": { - "version": "16.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", - "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.2.tgz", - "integrity": "sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.3", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip-address": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", - "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-core-module": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-in-ci": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", - "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", - "dev": true, - "license": "MIT", - "bin": { - "is-in-ci": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-in-ssh": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", - "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-installed-globally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", - "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-directory": "^4.0.1", - "is-path-inside": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", - "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/is-ssh": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", - "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/issue-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", - "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": "^18.17 || >=20.6.1" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.4.2.tgz", - "integrity": "sha512-Yi1jqNC/Oq0N4hBgNH/YvBpP1P57QqundgytzYqy3yqAa7NZPNjSoi4SGbRAXDMdBzNE6xBCi5U7RgfrvMEUVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "30.4.2", - "@jest/types": "30.4.1", - "import-local": "^3.2.0", - "jest-cli": "30.4.2" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.4.1.tgz", - "integrity": "sha512-IuctmYrxi21iOSOaIXpJWalHyPAsVv0GeBHKDn8C1CA4W5htHn7INL+wdnL4Bo0+olEndvAFkmb++tIQJG+vvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.4.1", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.4.2.tgz", - "integrity": "sha512-rvHH7VlY6LgbJXJTQ87GW62g1FntOtbhh0zT+v04kC+pgL6aBKyYINXxWukCpj3dcIBMw5/XUbtDS9dU9JTXeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.4.1", - "@jest/expect": "30.4.1", - "@jest/test-result": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.4.1", - "jest-matcher-utils": "30.4.1", - "jest-message-util": "30.4.1", - "jest-runtime": "30.4.2", - "jest-snapshot": "30.4.1", - "jest-util": "30.4.1", - "p-limit": "^3.1.0", - "pretty-format": "30.4.1", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-cli": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.4.2.tgz", - "integrity": "sha512-jfA2ocvVHMXS2QijrJ0d31ektP+d/W0T5RpcTX2Pq+3sVqHlsXVCM2+FmwpL+bdY8OfHpIg9xMxLF17Zg0U49Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "30.4.2", - "@jest/test-result": "30.4.1", - "@jest/types": "30.4.1", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.4.2", - "jest-util": "30.4.1", - "jest-validate": "30.4.1", - "yargs": "^17.7.2" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.4.2.tgz", - "integrity": "sha512-rNHAShJQqQwFNoL0hbf3BphSBOWnpOUAKvidLS/AjNVLPfoj5mSf4jQMfW3cYOs6hXeZC7nF7mDHaBnbxELOzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.1.0", - "@jest/pattern": "30.4.0", - "@jest/test-sequencer": "30.4.1", - "@jest/types": "30.4.1", - "babel-jest": "30.4.1", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.5.0", - "graceful-fs": "^4.2.11", - "jest-circus": "30.4.2", - "jest-docblock": "30.4.0", - "jest-environment-node": "30.4.1", - "jest-regex-util": "30.4.0", - "jest-resolve": "30.4.1", - "jest-runner": "30.4.2", - "jest-util": "30.4.1", - "jest-validate": "30.4.1", - "parse-json": "^5.2.0", - "pretty-format": "30.4.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-diff": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", - "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.4.0", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.4.0.tgz", - "integrity": "sha512-ZPMabUZCx5MpbZ2eBYSvZ0J8fvo3dR9oM+eeUpb3aKNQFuS2tu3Duw1TNlMoP8k3WQgKGJuhcMFvwcVuq6T7oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-each": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.4.1.tgz", - "integrity": "sha512-/8MJbH6fuj48TstjrMf+u/pd06Qezz5xOXvZA6442heNOWr8bdeoGZX2d9fCn028CoMgYmroH9//zky5GfyYmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.4.1", - "chalk": "^4.1.2", - "jest-util": "30.4.1", - "pretty-format": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.4.1.tgz", - "integrity": "sha512-4FZYVOk85hz2AyT6BbarKy9u37g6DbrDyCdFhsnDdXqyrueYQvB+0zO4f/kqLCRD0BsPRXPMNJeQwihKZV8naw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.4.1", - "@jest/fake-timers": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "jest-mock": "30.4.1", - "jest-util": "30.4.1", - "jest-validate": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.4.1.tgz", - "integrity": "sha512-rFrcONd8jeFsyw+Z9CrScJgglRf2+NFmNam8dKu7n+SoHqNYT47mn0DdEcVUZJpvh7Iz6/si7f7yUH7GJHVgnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.4.0", - "jest-util": "30.4.1", - "jest-worker": "30.4.1", - "picomatch": "^4.0.3", - "walker": "^1.0.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.3" - } - }, - "node_modules/jest-leak-detector": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.4.1.tgz", - "integrity": "sha512-IpmyiioeHxiWDhesHnUFmOxcTzwCwKpgACgWajtAP+nYQXiY7DakTxB6Bx9JFiRMljr0AX1PvnQdaU1KFoz6NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "pretty-format": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.4.1.tgz", - "integrity": "sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.4.1", - "pretty-format": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", - "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.4.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-util": "30.4.1", - "picomatch": "^4.0.3", - "pretty-format": "30.4.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", - "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "jest-util": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", - "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.4.1.tgz", - "integrity": "sha512-Zry8Yq/yJcNAZ7dJ5F2heic8AheXvbFZ7XI5V+h28nrYZ7Qoyy4dItq8OodjnYD270mvX+ZudmrNV9cysqhW5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.4.1", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.4.1", - "jest-validate": "30.4.1", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.4.2.tgz", - "integrity": "sha512-gDiVh1I+GxYzz9oXlyw+1wv6VOYX1WYxMOfjsA3iGKePV2oxmbHhwxfkALxNxYy1ciw6APWwkW2zZONwP97aEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "30.4.0", - "jest-snapshot": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runner": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.4.2.tgz", - "integrity": "sha512-2dw0PslVYXxffXGpLo+Ejad+KcI1Qkjn7f4X4619gf21oCUmL+SPfjqIa/losUem3yEOvfNZe/F1HWUcNpODcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.4.1", - "@jest/environment": "30.4.1", - "@jest/test-result": "30.4.1", - "@jest/transform": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.4.0", - "jest-environment-node": "30.4.1", - "jest-haste-map": "30.4.1", - "jest-leak-detector": "30.4.1", - "jest-message-util": "30.4.1", - "jest-resolve": "30.4.1", - "jest-runtime": "30.4.2", - "jest-util": "30.4.1", - "jest-watcher": "30.4.1", - "jest-worker": "30.4.1", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "30.4.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.4.2.tgz", - "integrity": "sha512-3/5e8iPz2k/VLqlr8DgTftYyLUv8Su3FkCAO2/Od81UsUTpSxOrS6O5x5KkoQwyUjmpYyDJKeyAvg2T2nvpNkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.4.1", - "@jest/fake-timers": "30.4.1", - "@jest/globals": "30.4.1", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.4.1", - "@jest/transform": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.5.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.4.1", - "jest-message-util": "30.4.1", - "jest-mock": "30.4.1", - "jest-regex-util": "30.4.0", - "jest-resolve": "30.4.1", - "jest-snapshot": "30.4.1", - "jest-util": "30.4.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runtime/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-snapshot": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.4.1.tgz", - "integrity": "sha512-tEOkkfOMppUyeiHwjZswOQ3lcnoTnws/q5FnGIaeIh/jmoU0ZlgMYRR8sTlTj+nNGCoJ0RDq6SfxGxCsyMTPmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.4.1", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.4.1", - "@jest/transform": "30.4.1", - "@jest/types": "30.4.1", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.4.1", - "graceful-fs": "^4.2.11", - "jest-diff": "30.4.1", - "jest-matcher-utils": "30.4.1", - "jest-message-util": "30.4.1", - "jest-util": "30.4.1", - "pretty-format": "30.4.1", - "semver": "^7.7.2", - "synckit": "^0.11.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", - "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-validate": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.4.1.tgz", - "integrity": "sha512-PDWi4SOwLnwqNDfHZjOcsEFyZ4fc/2W2gVL3DEoyqnB6jCQMLRtfBong8s6omIw3lI0HWOus12xfnFmQtjW3fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.4.1", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.4.1.tgz", - "integrity": "sha512-/l9UonmvCwjHH7d2h3iAwIloLc1H0S8mJZ/LNK3i86hqwPAz8otUJjP9MfYtz9Tt77Su5FD2xGjZn8d31IZHlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "30.4.1", - "@jest/types": "30.4.1", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.4.1", - "string-length": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.4.1.tgz", - "integrity": "sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.4.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jimp": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-1.6.1.tgz", - "integrity": "sha512-hNQh6rZtWfSVWSNVmvq87N5BPJsNH7k7I7qyrXf9DOma9xATQk3fsyHazCQe51nCjdkoWdTmh0vD7bjVSLoxxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/diff": "1.6.1", - "@jimp/js-bmp": "1.6.1", - "@jimp/js-gif": "1.6.1", - "@jimp/js-jpeg": "1.6.1", - "@jimp/js-png": "1.6.1", - "@jimp/js-tiff": "1.6.1", - "@jimp/plugin-blit": "1.6.1", - "@jimp/plugin-blur": "1.6.1", - "@jimp/plugin-circle": "1.6.1", - "@jimp/plugin-color": "1.6.1", - "@jimp/plugin-contain": "1.6.1", - "@jimp/plugin-cover": "1.6.1", - "@jimp/plugin-crop": "1.6.1", - "@jimp/plugin-displace": "1.6.1", - "@jimp/plugin-dither": "1.6.1", - "@jimp/plugin-fisheye": "1.6.1", - "@jimp/plugin-flip": "1.6.1", - "@jimp/plugin-hash": "1.6.1", - "@jimp/plugin-mask": "1.6.1", - "@jimp/plugin-print": "1.6.1", - "@jimp/plugin-quantize": "1.6.1", - "@jimp/plugin-resize": "1.6.1", - "@jimp/plugin-rotate": "1.6.1", - "@jimp/plugin-threshold": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jiti": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", - "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/jpeg-js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", - "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsdoc": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.5.tgz", - "integrity": "sha512-P4C6MWP9yIlMiK8nwoZvxN84vb6MsnXcHuy7XzVOvQoCizWX5JFCBsWIIWKXBltpoRZXddUOVQmCTOZt9yDj9g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^14.1.1", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^8.6.7", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdoc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/json/-/json-11.0.0.tgz", - "integrity": "sha512-N/ITv3Yw9Za8cGxuQqSqrq6RHnlaHWZkAFavcfpH/R52522c26EbihMxnY7A1chxfXJ4d+cEFIsyTgfi9GihrA==", - "dev": true, - "bin": { - "json": "lib/json.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC" - }, - "node_modules/json-with-bigint": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.8.tgz", - "integrity": "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/ky": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", - "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "package-json": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libsignal": { - "name": "@whiskeysockets/libsignal-node", - "version": "2.0.1", - "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67", - "license": "GPL-3.0", - "dependencies": { - "curve25519-js": "^0.0.4", - "protobufjs": "6.8.8" - } - }, - "node_modules/libsignal/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "license": "MIT" - }, - "node_modules/libsignal/node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "license": "Apache-2.0" - }, - "node_modules/libsignal/node_modules/protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/link-preview-js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/link-preview-js/-/link-preview-js-3.2.0.tgz", - "integrity": "sha512-FvrLltjOPGbTzt+RugbzM7g8XuUNLPO2U/INSLczrYdAA32E7nZVUrVL1gr61DGOArGJA2QkPGMEvNMLLsXREA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cheerio": "1.0.0-rc.11", - "url": "0.11.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/lru-cache": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", - "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/macos-release": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", - "integrity": "sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true, - "license": "Unlicense", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/music-metadata": { - "version": "11.12.3", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.12.3.tgz", - "integrity": "sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - }, - { - "type": "buymeacoffee", - "url": "https://buymeacoffee.com/borewit" - } - ], - "license": "MIT", - "dependencies": { - "@borewit/text-codec": "^0.2.2", - "@tokenizer/token": "^0.3.0", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "file-type": "^21.3.1", - "media-typer": "^1.1.0", - "strtok3": "^10.3.4", - "token-types": "^6.1.2", - "uint8array-extras": "^1.5.0", - "win-guid": "^0.2.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/mute-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", - "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT" - }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/netmask": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", - "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/new-github-release-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz", - "integrity": "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^2.5.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/new-github-release-url/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-abi": { - "version": "3.92.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", - "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", - "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.1.tgz", - "integrity": "sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^8.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nypm": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.6.tgz", - "integrity": "sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "citty": "^0.2.2", - "pathe": "^2.0.3", - "tinyexec": "^1.1.1" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/nypm/node_modules/citty": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz", - "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==", - "dev": true, - "license": "MIT" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", - "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.6.2", - "cli-cursor": "^5.0.0", - "cli-spinners": "^3.2.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.1.0", - "log-symbols": "^7.0.1", - "stdin-discarder": "^0.3.1", - "string-width": "^8.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/os-name": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-7.0.0.tgz", - "integrity": "sha512-/HfRU/lPPr4T2VigM+cvM3cU77es+XF4OEAa4aE5zpdvrxHGD2NmH0AFIWpMNAb+CsZL45rlcIO49Re0ZcRseg==", - "dev": true, - "license": "MIT", - "dependencies": { - "macos-release": "^3.4.0", - "windows-release": "^7.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", - "integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.4", - "p-timeout": "^7.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", - "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pac-proxy-agent": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-8.0.0.tgz", - "integrity": "sha512-HyCoVbyQ/nbVlQ/R6wBu0YXhbG2oAnEK5BQ3xMyj1OffQmU5NoOnpLzgPlKHaobUzz5NK0+AZHby4TdydAEBUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "8.0.0", - "debug": "^4.3.4", - "get-uri": "7.0.0", - "http-proxy-agent": "8.0.0", - "https-proxy-agent": "8.0.0", - "pac-resolver": "8.0.0", - "quickjs-wasi": "^0.0.1", - "socks-proxy-agent": "9.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-8.0.0.tgz", - "integrity": "sha512-SVNzOxVq2zuTew3WAt7U8UghwzJzuWYuJryd3y8FxyLTZdjVoCzY8kLP39PpEqQCDvlMWdQXwViu0sYT3eiU2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "degenerator": "6.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "quickjs-wasi": "^0.0.1" - } - }, - "node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", - "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.5.0" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-path": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", - "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", - "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-path": "^7.0.0", - "parse-path": "^7.0.0" - }, - "engines": { - "node": ">=14.13.0" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/perfect-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", - "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pino": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", - "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", - "license": "MIT", - "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", - "license": "MIT", - "dependencies": { - "split2": "^4.0.0" - } - }, - "node_modules/pino-pretty": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz", - "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.7", - "dateformat": "^4.6.3", - "fast-copy": "^4.0.0", - "fast-safe-stringify": "^2.1.1", - "help-me": "^5.0.0", - "joycon": "^3.1.1", - "minimist": "^1.2.6", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^3.0.0", - "pump": "^3.0.0", - "secure-json-parse": "^4.0.0", - "sonic-boom": "^4.0.1", - "strip-json-comments": "^5.0.2" - }, - "bin": { - "pino-pretty": "bin.js" - } - }, - "node_modules/pino-pretty/node_modules/pino-abstract-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", - "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "split2": "^4.0.0" - } - }, - "node_modules/pino-pretty/node_modules/strip-json-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", - "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pino-std-serializers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", - "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", - "license": "MIT" - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pixelmatch": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", - "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "pngjs": "^6.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pixelmatch/node_modules/pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", - "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.2.4", - "exsolve": "^1.0.8", - "pathe": "^2.0.3" - } - }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.19.0" - } - }, - "node_modules/powershell-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.0.tgz", - "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", - "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", - "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.4.1", - "ansi-styles": "^5.2.0", - "react-is-18": "npm:react-is@^18.3.1", - "react-is-19": "npm:react-is@^19.2.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-warning": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", - "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" - }, - "node_modules/protobufjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.7.tgz", - "integrity": "sha512-NGnrxS/nLKUo5nkbVQxlC71sB4hdfImdYIbFeSCidxtwATx0AHRPcANSLd0q5Bb2BkoSWo2iisQhGg5/r+ihbA==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.5", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.1", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs-cli": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.2.2.tgz", - "integrity": "sha512-gc27fy6Om+92g4UxqOs9ECTc3Xy7zXsnBSFR0dCSEvIRG8cn3eU8x+CcN8ouBB3EjIBVnEOeQb0iVKC4lnBoKA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^4.0.0", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": ">=7.5.6 <8" - } - }, - "node_modules/protobufjs-cli/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/protobufjs-cli/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/protobufjs-cli/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/protobufjs-cli/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/protocols": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", - "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-7.0.0.tgz", - "integrity": "sha512-okTgt79rHTvMHkr/Ney5rZpgCHh3g1g3tI5uhkgN5b7OeI3n0Q/ui1uv9OdrnZNJM9WIZJqZPh/UJs+YtO/TMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "8.0.0", - "debug": "^4.3.4", - "http-proxy-agent": "8.0.0", - "https-proxy-agent": "8.0.0", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "8.0.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "9.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", - "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qified": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", - "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", - "license": "MIT", - "dependencies": { - "hookified": "^2.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/qified/node_modules/hookified": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", - "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", - "license": "MIT" - }, - "node_modules/qrcode-terminal": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "license": "MIT" - }, - "node_modules/quickjs-wasi": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-0.0.1.tgz", - "integrity": "sha512-fBWNLTBkxkLAhe1AzF1hyXEvuA+N+vV1WMP2D6iiMUblvmOt8Pp5t8zUcgvz7aYA1ldUdxDlgUse15dmcKjkNg==", - "dev": true, - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc9": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", - "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defu": "^6.1.4", - "destr": "^2.0.3" - } - }, - "node_modules/react-is-18": { - "name": "react-is", - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-is-19": { - "name": "react-is", - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.6.tgz", - "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==", - "dev": true, - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", - "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^6.0.0", - "parse-json": "^7.0.0", - "type-fest": "^4.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", - "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^8.1.0", - "type-fest": "^4.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg/node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", - "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/parse-json/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", - "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^3.0.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-20.0.1.tgz", - "integrity": "sha512-3ob1P1aV+3+ZOoR7qgobfYyMlQbpitzOK09iKTtQ145vFi4rWxlRTgHwtVl8kokCvqiF/cJPxRlfcmZmF5aDJA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/webpro" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/webpro" - } - ], - "license": "MIT", - "dependencies": { - "@inquirer/prompts": "8.4.2", - "@octokit/rest": "22.0.1", - "@phun-ky/typeof": "2.0.3", - "async-retry": "1.3.3", - "c12": "3.3.3", - "ci-info": "^4.4.0", - "defu": "^6.1.7", - "eta": "4.5.1", - "git-url-parse": "16.1.0", - "issue-parser": "7.0.1", - "lodash.merge": "4.6.2", - "mime-types": "3.0.2", - "new-github-release-url": "2.0.0", - "open": "11.0.0", - "ora": "9.3.0", - "os-name": "7.0.0", - "proxy-agent": "7.0.0", - "semver": "7.7.4", - "tinyglobby": "0.2.15", - "undici": "7.24.5", - "url-join": "5.0.0", - "wildcard-match": "5.1.4", - "yargs-parser": "22.0.0" - }, - "bin": { - "release-it": "bin/release-it.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24.0.0" - } - }, - "node_modules/release-it/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/open": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", - "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.4.0", - "define-lazy-prop": "^3.0.0", - "is-in-ssh": "^1.0.0", - "is-inside-container": "^1.0.0", - "powershell-utils": "^0.1.0", - "wsl-utils": "^0.3.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/powershell-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", - "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/release-it/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "license": "ISC", - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "license": "ISC", - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/request/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", - "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", - "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "glob": "^13.0.3", - "package-json-from-dist": "^1.0.1" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", - "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, - "node_modules/secure-json-parse": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz", - "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.2", - "semver": "^7.7.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" } }, - "node_modules/shelljs/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } }, - "node_modules/shelljs/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/shelljs/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "balanced-match": "^4.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "node_modules/cacheable": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", + "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.1", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -15097,1993 +1568,1844 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/simple-xml-to-json": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/simple-xml-to-json/-/simple-xml-to-json-1.2.7.tgz", - "integrity": "sha512-mz9VXphOxQWX3eQ/uXCtm6upltoN0DLx8Zb5T4TFC4FHB7S9FDPGre8CfLWqPWQQH/GrQYd2AXhhVM5LDpYx6Q==", - "dev": true, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { - "node": ">=20.12.2" + "node": ">= 0.6" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=6.6.0" } }, - "node_modules/socks": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", - "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", - "dev": true, + "node_modules/curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "ip-address": "^10.1.1", - "smart-buffer": "^4.2.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/socks-proxy-agent": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-9.0.0.tgz", - "integrity": "sha512-fFlbMlfsXhK02ZB8aZY7Hwxh/IHBV9b1Oq9bvBk6tkFWXvdAxUgA0wbw/NYR5liU3Y5+KI6U4FH3kYJt9QYv0w==", - "dev": true, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "license": "MIT", "dependencies": { - "agent-base": "8.0.0", - "debug": "^4.3.4", - "socks": "^2.8.3" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">= 14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sonic-boom": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", - "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", - "dev": true, - "license": "CC0-1.0" + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "license": "ISC", + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { - "node": ">= 10.x" + "node": ">= 0.8" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" + "once": "^1.4.0" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/stdin-discarder": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", - "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" } }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=0.10.0" - } + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/string-width": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", - "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", - "dev": true, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">=20" + "node": ">= 18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "node": ">= 18.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/strip-final-newline": { + "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strtok3": { - "version": "10.3.5", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", - "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/stubborn-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", - "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "stubborn-utils": "^1.0.1" + "node": ">= 0.8" } }, - "node_modules/stubborn-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", - "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", - "dev": true, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "license": "MIT" }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/synckit" - } - }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" + "node": ">= 0.4" } }, - "node_modules/tempfile": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-5.0.0.tgz", - "integrity": "sha512-bX655WZI/F7EoTDw9JvQURqAXiPHi8o8+yFxPF2lWYyz1aHnmMRuXWqL6YB6GmeO0o4DIYWHLgGNi/X64T+X4Q==", + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", "dev": true, "license": "MIT", "dependencies": { - "temp-dir": "^3.0.0" - }, - "engines": { - "node": ">=14.18" + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/test-exclude/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "license": "MIT" }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dev": true, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/thread-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", - "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", "license": "MIT", "dependencies": { - "real-require": "^0.2.0" + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.2.tgz", - "integrity": "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" } }, - "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", - "dev": true, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "dev": true, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=14.14" + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "BSD-3-Clause" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">= 0.10" } }, - "node_modules/token-types": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", - "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", "license": "MIT", "dependencies": { - "@borewit/text-codec": "^0.2.1", - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "@keyv/serialize": "^1.1.1" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/libsignal": { + "version": "6.0.0", + "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#bcea72df9ec34d9d9140ab30619cf479c7c144c7", + "license": "GPL-3.0", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, + "curve25519-js": "^0.0.4", + "protobufjs": "^7.5.5" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=0.8" + "node": "20 || >=22" } }, - "node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", - "dev": true, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" + "node": ">= 0.4" } }, - "node_modules/ts-jest": { - "version": "29.4.9", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.9.tgz", - "integrity": "sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==", - "dev": true, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.9", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.7.4", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0 || ^30.0.0", - "@jest/types": "^29.0.0 || ^30.0.0", - "babel-jest": "^29.0.0 || ^30.0.0", - "jest": "^29.0.0 || ^30.0.0", - "jest-util": "^29.0.0 || ^30.0.0", - "typescript": ">=4.3 <7" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/tsc-esm-fix": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/tsc-esm-fix/-/tsc-esm-fix-3.1.2.tgz", - "integrity": "sha512-1/OpZssMcEp2ae6DyZV+yvDviofuCdDf7dEWEaBvm/ac8vtS04lFyl0LVs8LQE56vjKHytgzVjPIL9udM4QuNg==", - "dev": true, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", - "dependencies": { - "@topoconfig/extends": "^0.16.2", - "depseek": "^0.4.1", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "json5": "^2.2.3", - "type-flag": "^3.0.0" - }, - "bin": { - "tsc-esm-fix": "target/esm/cli.mjs" - }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.6" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "dev": true, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" + "mime-db": "^1.54.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=18" }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "prelude-ls": "^1.2.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">= 0.8.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/type-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/type-flag/-/type-flag-3.0.0.tgz", - "integrity": "sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/type-flag?sponsor=1" - } + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/music-metadata": { + "version": "11.12.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.12.3.tgz", + "integrity": "sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], "license": "MIT", "dependencies": { + "@borewit/text-codec": "^0.2.2", + "@tokenizer/token": "^0.3.0", "content-type": "^1.0.5", + "debug": "^4.4.3", + "file-type": "^21.3.1", "media-typer": "^1.1.0", - "mime-types": "^3.0.0" + "strtok3": "^10.3.4", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0", + "win-guid": "^0.2.1" }, + "engines": { + "node": ">=18" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/typedoc": { - "version": "0.27.9", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.9.tgz", - "integrity": "sha512-/z585740YHURLl9DN2jCWe6OW7zKYm6VoQ93H0sxZ1cwHQEQrUn5BJrEnkWhfzUdyO+BLGjnKUZ9iz9hKloFDw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", "dependencies": { - "@gerrit0/mini-shiki": "^1.24.0", - "lunr": "^2.3.9", - "markdown-it": "^14.1.0", - "minimatch": "^9.0.5", - "yaml": "^2.6.1" - }, - "bin": { - "typedoc": "bin/typedoc" + "semver": "^7.3.5" }, "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x" + "node": ">=10" } }, - "node_modules/typedoc-plugin-markdown": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.4.2.tgz", - "integrity": "sha512-kJVkU2Wd+AXQpyL6DlYXXRrfNrHrEIUgiABWH8Z+2Lz5Sq6an4dQ/hfvP75bbokjNDUskOdFlEEm/0fSVyC7eg==", - "dev": true, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 0.4" }, - "peerDependencies": { - "typedoc": "0.27.x" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedoc/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.2" + "ee-first": "1.1.1" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.8" } }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "uglifyjs": "bin/uglifyjs" + "node_modules/p-queue": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", + "integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/uint8array-extras": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", - "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/underscore": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", - "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "license": "MIT" + "license": "BlueOak-1.0.0" }, - "node_modules/undici": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.5.tgz", - "integrity": "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==", - "dev": true, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { - "node": ">=20.18.1" + "node": ">= 0.8" } }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, "engines": { - "node": ">=18" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/universal-user-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", - "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", - "dev": true, - "license": "ISC" + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "split2": "^4.0.0" } }, - "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", - "dev": true, - "hasInstallScript": true, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", "license": "MIT", "dependencies": { - "napi-postinstall": "^0.3.0" + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" + "bin": { + "prebuild-install": "bin.js" }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + "engines": { + "node": ">=10" } }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "github", + "url": "https://github.com/sponsors/fastify" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "opencollective", + "url": "https://opencollective.com/fastify" } ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } + "license": "MIT" }, - "node_modules/update-notifier": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", - "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/protobufjs": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.8.tgz", + "integrity": "sha512-dvpCIeLPbXZS/Ete7yLaO7RenOdken2NHKykBXbsaGxZT0UTltcarBciw+A78SRQs9iMAAVpsYA+l8b1hTePIA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { - "boxen": "^8.0.1", - "chalk": "^5.3.0", - "configstore": "^7.0.0", - "is-in-ci": "^1.0.0", - "is-installed-globally": "^1.0.0", - "is-npm": "^6.0.0", - "latest-version": "^9.0.0", - "pupa": "^3.1.0", - "semver": "^7.6.3", - "xdg-basedir": "^5.1.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.1", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "node": ">=12.0.0" } }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "punycode": "^2.1.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "license": "MIT", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "dev": true, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=20" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true, + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", "license": "MIT" }, - "node_modules/utif2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", - "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==", - "dev": true, - "license": "MIT", + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", "dependencies": { - "pako": "^1.0.11" + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "license": "MIT" }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "dev": true, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", - "bin": { - "uuid": "bin/uuid" + "engines": { + "node": ">= 0.6" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=10.12.0" + "node": ">= 0.10" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "engines": [ - "node >=0.6.0" - ], "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/walk-up-path": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", - "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", + "dependencies": { + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, "engines": { "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", "dependencies": { - "makeerror": "1.0.12" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" + "engines": { + "node": ">=10" } }, - "node_modules/whatsapp-rust-bridge": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.4.tgz", - "integrity": "sha512-yYO1qSs0Fe7tGtnxOFHomocUD6IZtoAgmA4oDFyGIRZ67D3QZk3w7swA6XXFXNQngiyrg2k7tul6IrM3eUFh7A==", - "license": "MIT" - }, - "node_modules/when-exit": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", - "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", - "dev": true, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, "bin": { - "node-which": "bin/node-which" + "semver": "bin/semver.js" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "dev": true, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "string-width": "^7.0.0" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">=18" + "node": ">= 18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, "engines": { - "node": ">=12" + "node": ">= 18" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, - "node_modules/widest-line/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" }, "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" } }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard-match": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.4.tgz", - "integrity": "sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==", - "dev": true, - "license": "ISC" - }, - "node_modules/win-guid": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", - "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", - "license": "MIT" - }, - "node_modules/windows-release": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-7.1.1.tgz", - "integrity": "sha512-0GBwC9WmR8Bm3WYiz3FC391054BsFHZ2gzBVdYj9uj5eIVYzbn/YPYCYW9SWdh9vwnLuzpn1UGwJKiMG4F236w==", - "dev": true, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { - "powershell-utils": "^0.2.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" }, "engines": { - "node": ">=20" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "atomic-sleep": "^1.0.0" } }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "license": "ISC", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 10.x" } }, - "node_modules/ws": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", - "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/wsl-utils": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", - "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", - "dev": true, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { - "is-wsl": "^3.1.0", - "powershell-utils": "^0.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "safe-buffer": "~5.2.0" } }, - "node_modules/wsl-utils/node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", - "dev": true, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/wsl-utils/node_modules/powershell-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", - "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", - "dev": true, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, "engines": { - "node": ">=20" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "dev": true, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "license": "MIT", "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=6" } }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", "license": "MIT", - "engines": { - "node": ">=4.0" + "dependencies": { + "real-require": "^0.2.0" } }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.6" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", - "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" }, "engines": { - "node": ">= 14.6" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/eemeli" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" } }, - "node_modules/yargs-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, - "license": "ISC", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "node": "*" } }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=12" + "node": ">=14.17" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yoctocolors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", - "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", - "dev": true, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", - "dev": true, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, + "node_modules/whatsapp-rust-bridge": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.3.tgz", + "integrity": "sha512-Xb3GAgtWQQJ30oI4a4pjM4+YUeli9CMLTwTIewUrb+AJMFElIkiT5uo+j1Zhc+amiV0Jj+LfX76c/EEZirJbGA==", + "license": "MIT" + }, + "node_modules/win-guid": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", + "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "packages/auth": { - "name": "@berryprotocol/auth", + "name": "@berrysdk/auth", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/events": "0.1.0", - "@berryprotocol/store": "0.1.0" + "@berrysdk/events": "0.1.0", + "@berrysdk/store": "0.1.0" } }, "packages/cli": { - "name": "@berryprotocol/cli", + "name": "@berrysdk/cli", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/core": "0.1.0", + "@berrysdk/core": "0.1.0", "commander": "^14.0.0", "pino": "^9.6.0" } }, "packages/core": { - "name": "@berryprotocol/core", + "name": "@berrysdk/core", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/auth": "0.1.0", - "@berryprotocol/events": "0.1.0", - "@berryprotocol/media": "0.1.0", - "@berryprotocol/messages": "0.1.0", - "@berryprotocol/socket": "0.1.0", - "@berryprotocol/store": "0.1.0", + "@berrysdk/auth": "0.1.0", + "@berrysdk/events": "0.1.0", + "@berrysdk/media": "0.1.0", + "@berrysdk/messages": "0.1.0", + "@berrysdk/socket": "0.1.0", + "@berrysdk/store": "0.1.0", "pino": "^9.6.0" } }, "packages/events": { - "name": "@berryprotocol/events", + "name": "@berrysdk/events", "version": "0.1.0", "license": "Apache-2.0" }, "packages/gateway": { - "name": "@berryprotocol/gateway", + "name": "@berrysdk/gateway", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/core": "0.1.0", + "@berrysdk/core": "0.1.0", "express": "^5.1.0", "pino": "^9.6.0" } }, "packages/media": { - "name": "@berryprotocol/media", + "name": "@berrysdk/media", "version": "0.1.0", "license": "Apache-2.0" }, "packages/messages": { - "name": "@berryprotocol/messages", + "name": "@berrysdk/messages", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/events": "0.1.0" + "@berrysdk/events": "0.1.0" } }, "packages/protocol": { - "name": "@berryprotocol/proto", + "name": "@berrysdk/proto", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@wppconnect/wa-proto": "^2.3000.1039300149", + "@wppconnect/wa-proto": "^2.3000.1030818676", "protobufjs": "^7.4.0" } }, "packages/socket": { - "name": "@berryprotocol/socket", + "name": "@berrysdk/socket", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/events": "0.1.0", - "@berryprotocol/proto": "0.1.0", - "@berryprotocol/wa-message": "0.1.0", + "@berrysdk/events": "0.1.0", + "@berrysdk/proto": "0.1.0", + "@berrysdk/wa-message": "0.1.0", "baileys": "7.0.0-rc10", "pino": "^9.6.0", "ws": "^8.18.1" } }, "packages/store": { - "name": "@berryprotocol/store", + "name": "@berrysdk/store", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/events": "0.1.0", + "@berrysdk/events": "0.1.0", "better-sqlite3": "^11.10.0" } }, "packages/wa-message": { - "name": "@berryprotocol/wa-message", + "name": "@berrysdk/wa-message", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berryprotocol/events": "0.1.0", - "@berryprotocol/proto": "0.1.0", + "@berrysdk/events": "0.1.0", + "@berrysdk/proto": "0.1.0", "baileys": "7.0.0-rc10" } } diff --git a/packages/protocol/package.json b/packages/protocol/package.json index 12508de..fba611b 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -20,7 +20,7 @@ "access": "public" }, "dependencies": { - "@wppconnect/wa-proto": "^2.3000.1039300149", + "@wppconnect/wa-proto": "^2.3000.1030818676", "protobufjs": "^7.4.0" } } From f94df01c7b88550fc4a964f11c5fc7bd9c621808 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 11:57:53 -0300 Subject: [PATCH 04/23] feat: add berry otp package and fumadocs docs --- Documentacao/app/docs/berryotp/flows/page.tsx | 34 + Documentacao/app/docs/berryotp/page.tsx | 34 + .../app/docs/berryotp/quick-start/page.tsx | 47 + .../app/docs/berryotp/security/page.tsx | 31 + .../app/docs/berryprotocol/ai-label/page.tsx | 35 + .../berryprotocol/getting-started/page.tsx | 36 + .../app/docs/berryprotocol/messaging/page.tsx | 53 + Documentacao/app/docs/berryprotocol/page.tsx | 35 + Documentacao/app/docs/layout.tsx | 12 + Documentacao/app/global.css | 29 + Documentacao/app/layout.tsx | 30 + Documentacao/app/page.tsx | 34 + Documentacao/components/docs-shell.tsx | 34 + Documentacao/lib/docs-tree.ts | 27 + Documentacao/lib/layout.shared.tsx | 54 + Documentacao/next-env.d.ts | 4 + Documentacao/next.config.mjs | 8 + Documentacao/package.json | 25 + Documentacao/tsconfig.json | 23 + README.md | 167 +- docs/publishing.md | 17 +- docs/whatsapp-rendering-notes.md | 45 + examples/npm-consumer/package-lock.json | 1792 +++++++++++++++++ examples/npm-consumer/package.json | 13 + examples/npm-consumer/test-from-npm.mjs | 82 + examples/sdk/test-baileys-ai-label.js | 101 + examples/sdk/test-berry-ai-label.ts | 35 + examples/sdk/test-berry-otp.ts | 49 + package.json | 86 +- packages/auth/package.json | 48 +- packages/berry-otp/README.md | 49 + packages/berry-otp/package.json | 23 + packages/berry-otp/src/index.ts | 628 ++++++ packages/berry-otp/src/store.ts | 62 + packages/berry-otp/src/templates.ts | 67 + packages/berry-otp/src/types.ts | 115 ++ packages/berry-otp/tsconfig.json | 12 + packages/berryotp/README.md | 16 + packages/berryotp/package.json | 26 + packages/berryotp/src/index.ts | 9 + packages/berryotp/tsconfig.json | 18 + packages/berryprotocol/README.md | 25 + packages/berryprotocol/package.json | 26 + packages/berryprotocol/src/index.ts | 14 + packages/berryprotocol/tsconfig.json | 18 + packages/cli/package.json | 50 +- packages/core/package.json | 58 +- packages/core/src/index.ts | 69 +- packages/events/package.json | 40 +- packages/events/src/index.ts | 5 +- packages/gateway/package.json | 50 +- packages/media/package.json | 40 +- packages/messages/package.json | 46 +- packages/protocol/package.json | 48 +- packages/socket/package.json | 60 +- .../scripts/patch-installed-baileys.mjs | 196 ++ packages/socket/src/index.ts | 29 + packages/store/package.json | 48 +- packages/wa-message/package.json | 50 +- packages/wa-message/src/index.ts | 73 +- scripts/patch-baileys-esm.mjs | 195 +- 61 files changed, 4845 insertions(+), 340 deletions(-) create mode 100644 Documentacao/app/docs/berryotp/flows/page.tsx create mode 100644 Documentacao/app/docs/berryotp/page.tsx create mode 100644 Documentacao/app/docs/berryotp/quick-start/page.tsx create mode 100644 Documentacao/app/docs/berryotp/security/page.tsx create mode 100644 Documentacao/app/docs/berryprotocol/ai-label/page.tsx create mode 100644 Documentacao/app/docs/berryprotocol/getting-started/page.tsx create mode 100644 Documentacao/app/docs/berryprotocol/messaging/page.tsx create mode 100644 Documentacao/app/docs/berryprotocol/page.tsx create mode 100644 Documentacao/app/docs/layout.tsx create mode 100644 Documentacao/app/global.css create mode 100644 Documentacao/app/layout.tsx create mode 100644 Documentacao/app/page.tsx create mode 100644 Documentacao/components/docs-shell.tsx create mode 100644 Documentacao/lib/docs-tree.ts create mode 100644 Documentacao/lib/layout.shared.tsx create mode 100644 Documentacao/next-env.d.ts create mode 100644 Documentacao/next.config.mjs create mode 100644 Documentacao/package.json create mode 100644 Documentacao/tsconfig.json create mode 100644 examples/npm-consumer/package-lock.json create mode 100644 examples/npm-consumer/package.json create mode 100644 examples/npm-consumer/test-from-npm.mjs create mode 100644 examples/sdk/test-baileys-ai-label.js create mode 100644 examples/sdk/test-berry-ai-label.ts create mode 100644 examples/sdk/test-berry-otp.ts create mode 100644 packages/berry-otp/README.md create mode 100644 packages/berry-otp/package.json create mode 100644 packages/berry-otp/src/index.ts create mode 100644 packages/berry-otp/src/store.ts create mode 100644 packages/berry-otp/src/templates.ts create mode 100644 packages/berry-otp/src/types.ts create mode 100644 packages/berry-otp/tsconfig.json create mode 100644 packages/berryotp/README.md create mode 100644 packages/berryotp/package.json create mode 100644 packages/berryotp/src/index.ts create mode 100644 packages/berryotp/tsconfig.json create mode 100644 packages/berryprotocol/README.md create mode 100644 packages/berryprotocol/package.json create mode 100644 packages/berryprotocol/src/index.ts create mode 100644 packages/berryprotocol/tsconfig.json create mode 100644 packages/socket/scripts/patch-installed-baileys.mjs diff --git a/Documentacao/app/docs/berryotp/flows/page.tsx b/Documentacao/app/docs/berryotp/flows/page.tsx new file mode 100644 index 0000000..10cb95e --- /dev/null +++ b/Documentacao/app/docs/berryotp/flows/page.tsx @@ -0,0 +1,34 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryOtpFlowsPage() { + return ( + +

Login

+
+        {`const loginOtp = BerryOTP.createLoginFlow(client);
+await loginOtp.sendLoginCode(to, { userId: "abc" });
+await loginOtp.verifyLoginCode(to, code);`}
+      
+

Password reset

+
+        {`const resetOtp = BerryOTP.createPasswordResetFlow(client);
+await resetOtp.sendPasswordResetCode(to, { userId: "abc" });
+await resetOtp.verifyPasswordResetCode(to, code);`}
+      
+

2FA

+
+        {`const twoFAOtp = BerryOTP.create2FAFlow(client);
+await twoFAOtp.send2FACode(to, { userId: "abc" });
+await twoFAOtp.verify2FACode(to, code);`}
+      
+ + ); +} diff --git a/Documentacao/app/docs/berryotp/page.tsx b/Documentacao/app/docs/berryotp/page.tsx new file mode 100644 index 0000000..f67cf5a --- /dev/null +++ b/Documentacao/app/docs/berryotp/page.tsx @@ -0,0 +1,34 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryOtpOverviewPage() { + return ( + +

Introduction

+

+ BerryOTP is the official OTP layer from BerrySDK. It was designed to send pretty, + interactive verification codes through WhatsApp Web without the official API. +

+

Modes

+
    +
  • stable
  • +
  • copy-code
  • +
  • experimental-copy-code
  • +
+

What it solves

+
    +
  • Login verification
  • +
  • Password reset
  • +
  • 2FA confirmation
  • +
  • Deny flow when the user did not request the code
  • +
+
+ ); +} diff --git a/Documentacao/app/docs/berryotp/quick-start/page.tsx b/Documentacao/app/docs/berryotp/quick-start/page.tsx new file mode 100644 index 0000000..cdbace4 --- /dev/null +++ b/Documentacao/app/docs/berryotp/quick-start/page.tsx @@ -0,0 +1,47 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryOtpQuickStartPage() { + return ( + +

Install

+
+        {`npm install berryprotocol berryotp`}
+      
+

Create the flow

+
+        {`import BerryProtocol from "berryprotocol";
+import { BerryOTP } from "berryotp";
+
+const client = new BerryProtocol({
+  sessionId: "otp-session",
+});
+
+const otp = BerryOTP.createLoginFlow(client, {
+  issuer: "BerryProtocol",
+  ttlMs: 2 * 60 * 1000,
+  mode: "copy-code",
+  editOnExpire: true,
+});`}
+      
+

Send code

+
+        {`await client.connectWithQr();
+
+const sent = await otp.sendLoginCode("5511999999999@s.whatsapp.net", {
+  userId: "user-001",
+  metadata: { source: "docs-example" },
+});
+
+console.log(sent);`}
+      
+
+ ); +} diff --git a/Documentacao/app/docs/berryotp/security/page.tsx b/Documentacao/app/docs/berryotp/security/page.tsx new file mode 100644 index 0000000..20f714f --- /dev/null +++ b/Documentacao/app/docs/berryotp/security/page.tsx @@ -0,0 +1,31 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryOtpSecurityPage() { + return ( + +

Storage

+

+ BerryOTP does not store the raw OTP code. It generates a salt and stores only the + SHA-256 hash. +

+

Verification

+

+ Verification uses timing-safe comparison and tracks attempts. When the maximum number + of attempts is reached, the OTP becomes blocked. +

+

Expiration

+

+ When an OTP expires, BerryOTP can edit the original message through + client.editMessage(...) and mark it as no longer valid. +

+
+ ); +} diff --git a/Documentacao/app/docs/berryprotocol/ai-label/page.tsx b/Documentacao/app/docs/berryprotocol/ai-label/page.tsx new file mode 100644 index 0000000..22ccf5e --- /dev/null +++ b/Documentacao/app/docs/berryprotocol/ai-label/page.tsx @@ -0,0 +1,35 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryProtocolAiLabelPage() { + return ( + +

Usage

+
+        {`await client.sendMessage("5511999999999@s.whatsapp.net", {
+  text: "Hello! This message should show the AI label.",
+  ai: true,
+});`}
+      
+

Rules

+
    +
  • Only private chats are allowed.
  • +
  • Groups, newsletters, and status are blocked.
  • +
  • The feature is experimental and depends on WhatsApp Web behavior.
  • +
+

How it works

+

+ BerrySDK patches the installed Baileys package during postinstall. The patch adds + supportPayload to messageContextInfo and injects a + <bot biz_bot="1" /> node in relayMessage. +

+
+ ); +} diff --git a/Documentacao/app/docs/berryprotocol/getting-started/page.tsx b/Documentacao/app/docs/berryprotocol/getting-started/page.tsx new file mode 100644 index 0000000..ce4d148 --- /dev/null +++ b/Documentacao/app/docs/berryprotocol/getting-started/page.tsx @@ -0,0 +1,36 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryProtocolGettingStartedPage() { + return ( + +

Install

+
+        {`npm install berryprotocol`}
+      
+

Create a client

+
+        {`import BerryProtocol from "berryprotocol";
+
+const client = new BerryProtocol({
+  sessionId: "store-001",
+});`}
+      
+

Connect

+
+        {`await client.connectWithQr();
+
+client.on("connection.open", (state) => {
+  console.log("connected", state);
+});`}
+      
+
+ ); +} diff --git a/Documentacao/app/docs/berryprotocol/messaging/page.tsx b/Documentacao/app/docs/berryprotocol/messaging/page.tsx new file mode 100644 index 0000000..f4dd9af --- /dev/null +++ b/Documentacao/app/docs/berryprotocol/messaging/page.tsx @@ -0,0 +1,53 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryProtocolMessagingPage() { + return ( + +

Text

+
+        {`await client.sendText("5511999999999@s.whatsapp.net", "Hello from BerryProtocol");`}
+      
+

List

+

+ BerryProtocol uses the legacy list path with listType: SINGLE_SELECT and + extra business nodes because that was the validated rendering path in real tests. +

+
+        {`await client.sendList("5511999999999@s.whatsapp.net", {
+  title: "Menu",
+  text: "Choose an option",
+  footer: "BerrySDK",
+  buttonText: "Open list",
+  sections: [
+    {
+      title: "Options",
+      rows: [{ id: "one", title: "Option 1" }],
+    },
+  ],
+});`}
+      
+

Native buttons

+
+        {`await client.sendMessage("5511999999999@s.whatsapp.net", {
+  buttonsMessage: {
+    text: "Choose a flow",
+    footer: "BerrySDK",
+    buttons: [
+      { id: "reply:1", title: "Quick reply", kind: "quick_reply" },
+      { id: "copy:1", title: "Copy code", kind: "copy_code", code: "BERRY10" },
+      { id: "url:1", title: "Open site", kind: "cta_url", url: "https://github.com/BerrySDK" },
+    ],
+  },
+});`}
+      
+
+ ); +} diff --git a/Documentacao/app/docs/berryprotocol/page.tsx b/Documentacao/app/docs/berryprotocol/page.tsx new file mode 100644 index 0000000..0f995c1 --- /dev/null +++ b/Documentacao/app/docs/berryprotocol/page.tsx @@ -0,0 +1,35 @@ +import { DocsShell } from "@/components/docs-shell"; + +export default function BerryProtocolOverviewPage() { + return ( + +

Introduction

+

+ BerryProtocol is the main developer-facing SDK from BerrySDK. It wraps the + WhatsApp Web transport with typed events, persistent sessions, list rendering + workarounds, native-flow buttons, and a higher-level API designed for production use. +

+

Why use it

+
    +
  • Connect with QR, link, or pairing code.
  • +
  • Send text, media, reply buttons, copy-code buttons, and lists.
  • +
  • Use the experimental AI label path in private chats.
  • +
  • Build on a modular workspace with Berry-owned wrappers.
  • +
+

Packages

+

+ You can consume the SDK through berryprotocol or directly through + @berrysdk/core. Rich rendering paths are powered by + @berrysdk/socket and @berrysdk/wa-message. +

+
+ ); +} diff --git a/Documentacao/app/docs/layout.tsx b/Documentacao/app/docs/layout.tsx new file mode 100644 index 0000000..71d1cc1 --- /dev/null +++ b/Documentacao/app/docs/layout.tsx @@ -0,0 +1,12 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import type { ReactNode } from "react"; +import { docsTree } from "@/lib/docs-tree"; +import { baseOptions } from "@/lib/layout.shared"; + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} diff --git a/Documentacao/app/global.css b/Documentacao/app/global.css new file mode 100644 index 0000000..9cf663e --- /dev/null +++ b/Documentacao/app/global.css @@ -0,0 +1,29 @@ +@import 'fumadocs-ui/css/purple.css'; +@import 'fumadocs-ui/css/preset.css'; + +:root { + --fd-layout-width: 1440px; + --fd-nav-height: 72px; +} + +html, +body { + min-height: 100%; +} + +body { + background: + radial-gradient(circle at top, rgba(124, 58, 237, 0.24), transparent 35%), + linear-gradient(180deg, rgba(10, 10, 14, 1) 0%, rgba(10, 10, 14, 1) 100%); +} + +.berry-hero { + border: 1px solid rgba(168, 85, 247, 0.2); + background: linear-gradient(135deg, rgba(88, 28, 135, 0.28), rgba(76, 29, 149, 0.12)); + box-shadow: 0 20px 80px rgba(76, 29, 149, 0.22); +} + +.berry-card { + border: 1px solid rgba(168, 85, 247, 0.18); + background: rgba(17, 17, 24, 0.82); +} diff --git a/Documentacao/app/layout.tsx b/Documentacao/app/layout.tsx new file mode 100644 index 0000000..50b7f06 --- /dev/null +++ b/Documentacao/app/layout.tsx @@ -0,0 +1,30 @@ +import "./global.css"; +import type { Metadata } from "next"; +import type { ReactNode } from "react"; +import { RootProvider } from "fumadocs-ui/provider/next"; + +export const metadata: Metadata = { + title: "BerrySDK Documentation", + description: "Official documentation for BerryProtocol and BerryOTP.", +}; + +export default function RootLayout({ children }: { children: ReactNode }) { + return ( + + + + {children} + + + + ); +} diff --git a/Documentacao/app/page.tsx b/Documentacao/app/page.tsx new file mode 100644 index 0000000..68c58be --- /dev/null +++ b/Documentacao/app/page.tsx @@ -0,0 +1,34 @@ +import Link from "next/link"; + +export default function HomePage() { + return ( +
+
+
+ BerrySDK Documentation +
+

+ Use BerryProtocol and BerryOTP with a docs experience inspired by Fumadocs. +

+

+ Learn how to connect to WhatsApp Web, send rich messages, use AI label support, + and build OTP flows with copy-code, quick reply, and expiration logic. +

+
+ + Open BerryProtocol Docs + + + Open BerryOTP Docs + +
+
+
+ ); +} diff --git a/Documentacao/components/docs-shell.tsx b/Documentacao/components/docs-shell.tsx new file mode 100644 index 0000000..05900d9 --- /dev/null +++ b/Documentacao/components/docs-shell.tsx @@ -0,0 +1,34 @@ +import { DocsBody, DocsDescription, DocsPage, DocsTitle } from "fumadocs-ui/layouts/docs/page"; +import type { ReactNode } from "react"; + +export interface TocItem { + title: string; + url: string; + depth?: number; +} + +export function DocsShell({ + title, + description, + toc, + children, +}: { + title: string; + description: string; + toc?: TocItem[]; + children: ReactNode; +}) { + return ( + + {title} + {description} + {children} + + ); +} diff --git a/Documentacao/lib/docs-tree.ts b/Documentacao/lib/docs-tree.ts new file mode 100644 index 0000000..cd84bc8 --- /dev/null +++ b/Documentacao/lib/docs-tree.ts @@ -0,0 +1,27 @@ +export const docsTree = { + name: "BerrySDK Docs", + children: [ + { + type: "folder", + name: "berryprotocol", + icon: "Package2", + children: [ + { type: "page", name: "index", url: "/docs/berryprotocol" }, + { type: "page", name: "getting-started", url: "/docs/berryprotocol/getting-started" }, + { type: "page", name: "messaging", url: "/docs/berryprotocol/messaging" }, + { type: "page", name: "ai-label", url: "/docs/berryprotocol/ai-label" } + ] + }, + { + type: "folder", + name: "berryotp", + icon: "ShieldCheck", + children: [ + { type: "page", name: "index", url: "/docs/berryotp" }, + { type: "page", name: "quick-start", url: "/docs/berryotp/quick-start" }, + { type: "page", name: "flows", url: "/docs/berryotp/flows" }, + { type: "page", name: "security", url: "/docs/berryotp/security" } + ] + } + ] +} as const; diff --git a/Documentacao/lib/layout.shared.tsx b/Documentacao/lib/layout.shared.tsx new file mode 100644 index 0000000..82bef75 --- /dev/null +++ b/Documentacao/lib/layout.shared.tsx @@ -0,0 +1,54 @@ +import { BookOpen, Github, LifeBuoy, Package2, ShieldCheck } from "lucide-react"; + +export function baseOptions() { + return { + nav: { + title: ( +
+ + + + BerrySDK +
+ ), + }, + links: [ + { + text: "BerryProtocol", + url: "/docs/berryprotocol", + icon: , + }, + { + text: "BerryOTP", + url: "/docs/berryotp", + icon: , + }, + { + text: "Support", + url: "https://github.com/BerrySDK/BerryProtocol/issues", + icon: , + }, + ], + githubUrl: "https://github.com/BerrySDK/BerryProtocol", + themeSwitch: { + enabled: true, + }, + searchToggle: { + enabled: true, + }, + sidebar: { + defaultOpenLevel: 1, + banner: ( +
+ BerrySDK docs for WhatsApp workflows, native-flow, AI label, and OTP. +
+ ), + }, + footer: ( +
+ + Built by BerrySDK +
+ ), + }; +} diff --git a/Documentacao/next-env.d.ts b/Documentacao/next-env.d.ts new file mode 100644 index 0000000..195109d --- /dev/null +++ b/Documentacao/next-env.d.ts @@ -0,0 +1,4 @@ +/// +/// + +// This file is automatically generated by Next.js diff --git a/Documentacao/next.config.mjs b/Documentacao/next.config.mjs new file mode 100644 index 0000000..08e7827 --- /dev/null +++ b/Documentacao/next.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + experimental: { + typedRoutes: true, + }, +}; + +export default nextConfig; diff --git a/Documentacao/package.json b/Documentacao/package.json new file mode 100644 index 0000000..478a979 --- /dev/null +++ b/Documentacao/package.json @@ -0,0 +1,25 @@ +{ + "name": "berrysdk-docs", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "fumadocs-ui": "latest", + "lucide-react": "^0.511.0", + "next": "^15.3.2", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@types/node": "^22.15.3", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "typescript": "^5.8.3" + } +} diff --git a/Documentacao/tsconfig.json b/Documentacao/tsconfig.json new file mode 100644 index 0000000..0bd46a3 --- /dev/null +++ b/Documentacao/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["dom", "dom.iterable", "es2022"], + "allowJs": false, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "baseUrl": ".", + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/README.md b/README.md index 0990086..3f54015 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,9 @@ If you do not provide one, BerryProtocol generates one automatically. ```text packages/ auth/ + berry-otp/ + berryotp/ + berryprotocol/ cli/ core/ events/ @@ -66,6 +69,7 @@ packages/ store/ wa-message/ examples/ + npm-consumer/ rest/ sdk/ scripts/ @@ -80,11 +84,63 @@ _reference_baileys2/ Public SDK: - `BerryClient` +- `BerryProtocol` - auth entrypoints - queueing - event bridge - media send helpers +`BerryProtocol` is an official alias for `BerryClient`, so you can use the SDK like: + +```ts +import { BerryProtocol } from "@berrysdk/core"; + +const client = new BerryProtocol({ + sessionId: "store-001", +}); +``` + +### `berryprotocol` + +Facade package for consumers who want the SDK entrypoint without the scope prefix. + +Important: + +- npm package names must be lowercase, so the publishable package name is `berryprotocol` +- inside the package, the class is still `BerryProtocol` + +Usage: + +```ts +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "store-001", +}); +``` + +### `berryotp` + +Facade package for consumers who want BerryOTP without the scope prefix. + +Usage: + +```ts +import { BerryOTP } from "berryotp"; +``` + +### `@berrysdk/berry-otp` + +Official OTP package: + +- login flow helpers +- password reset flow helpers +- 2FA flow helpers +- native-flow copy-code mode +- stable fallback mode +- expiration editing +- deny/cancel handling + ### `@berrysdk/socket` WhatsApp transport adapter: @@ -148,6 +204,45 @@ npm install After install, BerryProtocol runs `postinstall` and patches local Baileys ESM imports for this environment. +## Installing from npm + +To consume the published packages without using this monorepo locally: + +```bash +npm install @berrysdk/core +``` + +Or, if you want the facade entrypoint: + +```bash +npm install berryprotocol +``` + +For OTP via facade package: + +```bash +npm install berryotp +``` + +There is also a standalone consumer example in: + +- [examples/npm-consumer/test-from-npm.mjs](C:/Users/felip/BerryProtocol/examples/npm-consumer/test-from-npm.mjs) +- [examples/npm-consumer/package.json](C:/Users/felip/BerryProtocol/examples/npm-consumer/package.json) + +Run it with: + +```bash +cd examples/npm-consumer +npm install +node test-from-npm.mjs +``` + +Set the destination first: + +```powershell +$env:BERRY_TEST_TO="5511999999999@s.whatsapp.net" +``` + ## Build ```bash @@ -168,12 +263,55 @@ Currently validated rendering paths include: - native-flow `cta_copy` - native-flow `cta_url` +## AI label notes + +Baileys in this workspace now has an experimental patch for AI-labeled private messages. + +Usage: + +```ts +await sock.sendMessage("5511999999999@s.whatsapp.net", { + text: "Ola! Essa mensagem deve aparecer com label de AI.", + ai: true, +}); +``` + +Rules: + +- only private chats are allowed +- group, newsletter, status, and non-user JIDs are blocked +- Baileys injects `messageContextInfo.supportPayload` +- Baileys relays an additional `` node + +Local test files: + +- [examples/sdk/test-baileys-ai-label.js](C:/Users/felip/BerryProtocol/examples/sdk/test-baileys-ai-label.js) +- [examples/sdk/test-berry-ai-label.ts](C:/Users/felip/BerryProtocol/examples/sdk/test-berry-ai-label.ts) + +Current status: + +- validated in local private-chat tests +- experimental +- distributed through the Berry socket package postinstall patch for Baileys + +## BerryOTP notes + +`@berrysdk/berry-otp` works without the official WhatsApp API. It uses the same native-flow and `additionalNodes` strategy validated in real tests against WhatsApp Web `2.3000.x`. + +Important caveats: + +- protocol behavior can change at any time +- `copy-code` is the recommended OTP mode today +- `stable` mode exists as fallback +- `editOnExpire` depends on `client.editMessage(...)` +- successful verification marks the OTP as `used`, so it will not later expire-edit + ## SDK quick start ```ts -import { BerryClient } from "@berrysdk/core"; +import { BerryProtocol } from "@berrysdk/core"; -const client = new BerryClient({ +const client = new BerryProtocol({ sessionId: "store-001", }); @@ -184,6 +322,31 @@ client.on("connection.open", (state) => console.log("open", state)); client.on("message.received", (message) => console.log(message)); ``` +## BerryOTP quick start + +```ts +import { BerryProtocol } from "@berrysdk/core"; +import { BerryOTP } from "@berrysdk/berry-otp"; + +const client = new BerryProtocol({ + sessionId: "otp-session", +}); + +const otp = BerryOTP.createLoginFlow(client, { + issuer: "BerryProtocol", + ttlMs: 2 * 60 * 1000, + mode: "copy-code", + editOnExpire: true, +}); + +await client.connectWithQr(); + +const sent = await otp.sendLoginCode("5511999999999@s.whatsapp.net", { + userId: "test-user", + metadata: { source: "sdk-test" }, +}); +``` + ## SDK authentication examples ### Link mode diff --git a/docs/publishing.md b/docs/publishing.md index 2e48def..01e8f82 100644 --- a/docs/publishing.md +++ b/docs/publishing.md @@ -1,10 +1,3 @@ -/** - * @module modulo - * @description Enhanced message sending capabilities including albums, cards, - * interactive buttons, and rich media support beyond standard WhatsApp messages. - * @license Apache-2.0 - * @author Lipe Devv and Berry Protocol - */ # Publishing Guide This repository is organized so the public Berry Protocol packages can be published without relying on local `file:` dependencies. @@ -19,6 +12,7 @@ This repository is organized so the public Berry Protocol packages can be publis ## Public packages - `@berrysdk/auth` +- `@berrysdk/berry-otp` - `@berrysdk/cli` - `@berrysdk/core` - `@berrysdk/events` @@ -29,6 +23,8 @@ This repository is organized so the public Berry Protocol packages can be publis - `@berrysdk/socket` - `@berrysdk/store` - `@berrysdk/wa-message` +- `berryotp` +- `berryprotocol` ## Before publishing @@ -70,8 +66,11 @@ Suggested order: 7. `@berrysdk/wa-message` 8. `@berrysdk/socket` 9. `@berrysdk/core` -10. `@berrysdk/gateway` -11. `@berrysdk/cli` +10. `@berrysdk/berry-otp` +11. `berryotp` +12. `berryprotocol` +13. `@berrysdk/gateway` +14. `@berrysdk/cli` Example: diff --git a/docs/whatsapp-rendering-notes.md b/docs/whatsapp-rendering-notes.md index 9b54fac..0884666 100644 --- a/docs/whatsapp-rendering-notes.md +++ b/docs/whatsapp-rendering-notes.md @@ -396,3 +396,48 @@ The working rule discovered so far is: - use native-flow `cta_copy` for copy-code buttons - use native-flow `cta_url` for CTA URL buttons - use native-flow only as an explicit advanced path with the correct `additionalNodes` + +## AI label + +Status: working in real private-chat tests + +Berry now supports an experimental AI label path in the patched local Baileys flow. + +Working usage: + +```ts +await sock.sendMessage("5511999999999@s.whatsapp.net", { + text: "Ola! Essa mensagem deve aparecer com label de AI.", + ai: true, +}); +``` + +Rules validated so far: + +- only private chats are allowed +- groups, newsletters, status, and non-user JIDs must be blocked +- the message must receive `messageContextInfo.supportPayload` +- the relay must include: + +```xml + +``` + +Implementation status in this workspace: + +- `ai?: boolean` was added to the accepted message content type in the local patched Baileys install +- `sendMessage(...)` removes `content.ai` before the final payload is generated +- `relayMessage(...)` injects the `bot` additional node +- BerryProtocol forwards `ai: true` on supported `sendMessage(...)` paths + +Local test files: + +- [examples/sdk/test-baileys-ai-label.js](C:/Users/felip/BerryProtocol/examples/sdk/test-baileys-ai-label.js) +- [examples/sdk/test-berry-ai-label.ts](C:/Users/felip/BerryProtocol/examples/sdk/test-berry-ai-label.ts) + +Distribution note: + +- the publish-safe strategy now lives in [packages/socket/scripts/patch-installed-baileys.mjs](C:/Users/felip/BerryProtocol/packages/socket/scripts/patch-installed-baileys.mjs) +- `@berrysdk/socket` runs this patch in `postinstall` +- this makes the AI label patch travel with the published Berry packages that depend on `@berrysdk/socket` +- the feature should still be treated as experimental because WhatsApp can change the required metadata at any time diff --git a/examples/npm-consumer/package-lock.json b/examples/npm-consumer/package-lock.json new file mode 100644 index 0000000..adb41b1 --- /dev/null +++ b/examples/npm-consumer/package-lock.json @@ -0,0 +1,1792 @@ +{ + "name": "berrysdk-npm-consumer-example", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "berrysdk-npm-consumer-example", + "dependencies": { + "@berrysdk/core": "^0.1.0" + } + }, + "node_modules/@berrysdk/auth": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/auth/-/auth-0.1.0.tgz", + "integrity": "sha512-Sn9zQLXqeOvWR2PEvrbqxy+PsLBqCLgW/wco+Jnqe3VoYpCjxsQaDBs/ywnTkU499JgZZLhYrp77ympxWB6i0Q==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.0", + "@berrysdk/store": "0.1.0" + } + }, + "node_modules/@berrysdk/core": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/core/-/core-0.1.0.tgz", + "integrity": "sha512-6uNFIZ+WUiZh1b+FwhWv2IA1pbKsx4+fsW9l+hieNGot44mDuPdgXuLHKCTjVqqNutnYMGyvk7Q3M3sfjCxZsQ==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/auth": "0.1.0", + "@berrysdk/events": "0.1.0", + "@berrysdk/media": "0.1.0", + "@berrysdk/messages": "0.1.0", + "@berrysdk/socket": "0.1.0", + "@berrysdk/store": "0.1.0", + "pino": "^9.6.0" + } + }, + "node_modules/@berrysdk/events": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.0.tgz", + "integrity": "sha512-UOBmat6mHliU5xxD3gw4zOZ/zGyGX41ewG6i70qIaRTNyY1rMmeMcryoLpzeOQH4l5mjEFsSmriBrQKc/bc7hA==", + "license": "Apache-2.0" + }, + "node_modules/@berrysdk/media": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/media/-/media-0.1.0.tgz", + "integrity": "sha512-tLSSRj4QpE26yFywjFVtPCsKaSE07ph7ONzs0omLwXzyRhp0621yUbrsJm2cIiaKM533u25luc5kXsdoDakb5w==", + "license": "Apache-2.0" + }, + "node_modules/@berrysdk/messages": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/messages/-/messages-0.1.0.tgz", + "integrity": "sha512-96HqJ+x7iFQWIwd5UemqryNeELyJ9MJxhwSNRCJh/xOXAEO6nw/Txmek0bZkSZXjtaSbe+93L0BSxFkl+syLsg==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.0" + } + }, + "node_modules/@berrysdk/proto": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/proto/-/proto-0.1.0.tgz", + "integrity": "sha512-Qsje4jm1PU2R3Fjz+sfgZMIiFrtd6cwuRgJ3+jfah09YV9hCectOZBMNDn6o6c7TDlFg+j4XDxVagNCRX+wi7A==", + "license": "Apache-2.0", + "dependencies": { + "@wppconnect/wa-proto": "^2.3000.1030818676", + "protobufjs": "^7.4.0" + } + }, + "node_modules/@berrysdk/socket": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/socket/-/socket-0.1.0.tgz", + "integrity": "sha512-5kRG9Smk1GGxR6fdngW69lyBDkprSflAIL2kqeg40QQ7nc8NNxxOMrTxKWh3j/9VyIDD0wOqKRlTzT2TniVD9A==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.0", + "@berrysdk/proto": "0.1.0", + "@berrysdk/wa-message": "0.1.0", + "baileys": "7.0.0-rc10", + "pino": "^9.6.0", + "ws": "^8.18.1" + } + }, + "node_modules/@berrysdk/store": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/store/-/store-0.1.0.tgz", + "integrity": "sha512-f8kS3SbaEWvTCI33ZqqXfOIpXkZGTwNdBkZcqKsYvviOpn2zxNsx7zoPbZphUaZgpiMel92zfY2+O2g3IX9T+A==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.0", + "better-sqlite3": "^11.10.0" + } + }, + "node_modules/@berrysdk/wa-message": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@berrysdk/wa-message/-/wa-message-0.1.0.tgz", + "integrity": "sha512-5v7V+d+D+oGU+FPS1KmATm6tkbvGcjanZ4fEpuP9pTCC/cteFjFWX7FxdlabsELD042lPiQauy1jdVD+WeyOZQ==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.0", + "@berrysdk/proto": "0.1.0", + "baileys": "7.0.0-rc10" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@cacheable/memory": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", + "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.4.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/node-cache": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", + "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", + "license": "MIT", + "dependencies": { + "cacheable": "^2.3.1", + "hookified": "^1.14.0", + "keyv": "^5.5.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", + "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.7.0.tgz", + "integrity": "sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.21.0" + } + }, + "node_modules/@wppconnect/wa-proto": { + "version": "2.3000.1030818676", + "resolved": "https://registry.npmjs.org/@wppconnect/wa-proto/-/wa-proto-2.3000.1030818676.tgz", + "integrity": "sha512-HiSaUvkJ2sdbZZXLV7mL1EYnnNlACqclFbD8iyG+G3n9uNFPM/j4S4pQW7dEw4k/V1TxUc5gbfucDfpDwHj9Og==", + "license": "Apache-2.0", + "dependencies": { + "long": "^5.3.2", + "protobufjs": "^7.4.0" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/baileys": { + "version": "7.0.0-rc10", + "resolved": "https://registry.npmjs.org/baileys/-/baileys-7.0.0-rc10.tgz", + "integrity": "sha512-B1ShVyha4iZP7aNyz4QsXFceExzkvLFgISQGaDGHQaYFxIdNqoen+xKmlo1iWEsaexvQORAvUK44VicRi1T94g==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", + "lru-cache": "^11.1.0", + "music-metadata": "^11.12.3", + "p-queue": "^9.0.0", + "pino": "^9.6", + "protobufjs": "^7.5.6", + "whatsapp-rust-bridge": "0.5.3", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "audio-decode": "^2.1.3", + "jimp": "^1.6.1", + "link-preview-js": "^3.0.0", + "sharp": "*" + }, + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + } + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/cacheable": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", + "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.1", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "license": "MIT" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/libsignal": { + "version": "6.0.0", + "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#bcea72df9ec34d9d9140ab30619cf479c7c144c7", + "license": "GPL-3.0", + "dependencies": { + "curve25519-js": "^0.0.4", + "protobufjs": "^7.5.5" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/music-metadata": { + "version": "11.12.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.12.3.tgz", + "integrity": "sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.2", + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "file-type": "^21.3.1", + "media-typer": "^1.1.0", + "strtok3": "^10.3.4", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0", + "win-guid": "^0.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-queue": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", + "integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.8.tgz", + "integrity": "sha512-dvpCIeLPbXZS/Ete7yLaO7RenOdken2NHKykBXbsaGxZT0UTltcarBciw+A78SRQs9iMAAVpsYA+l8b1hTePIA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.1", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.21.0.tgz", + "integrity": "sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/whatsapp-rust-bridge": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.3.tgz", + "integrity": "sha512-Xb3GAgtWQQJ30oI4a4pjM4+YUeli9CMLTwTIewUrb+AJMFElIkiT5uo+j1Zhc+amiV0Jj+LfX76c/EEZirJbGA==", + "license": "MIT" + }, + "node_modules/win-guid": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", + "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/examples/npm-consumer/package.json b/examples/npm-consumer/package.json new file mode 100644 index 0000000..31ad65a --- /dev/null +++ b/examples/npm-consumer/package.json @@ -0,0 +1,13 @@ +{ + "name": "berrysdk-npm-consumer-example", + "private": true, + "type": "module", + "description": "Example consumer app that installs Berry SDK packages from npm.", + "scripts": { + "start": "node test-from-npm.mjs" + }, + "dependencies": { + "berryprotocol": "^0.1.3", + "berryotp": "^0.1.3" + } +} diff --git a/examples/npm-consumer/test-from-npm.mjs b/examples/npm-consumer/test-from-npm.mjs new file mode 100644 index 0000000..0e657f5 --- /dev/null +++ b/examples/npm-consumer/test-from-npm.mjs @@ -0,0 +1,82 @@ +import BerryProtocol from "berryprotocol"; +import { BerryOTP } from "berryotp"; + +const recipient = process.env.BERRY_TEST_TO; + +if (!recipient) { + console.error("Set BERRY_TEST_TO before running this example."); + console.error('Example: $env:BERRY_TEST_TO="5511999999999@s.whatsapp.net"'); + process.exit(1); +} + +const client = new BerryProtocol({ + sessionId: "npm-consumer-session", +}); + +client.on("auth.qr", ({ value }) => { + console.log("\nQR payload received:\n"); + console.log(value); +}); + +client.on("connection.open", (state) => { + console.log("CONNECTED:", state); +}); + +client.on("auth.success", (session) => { + console.log("AUTH SUCCESS:", session); +}); + +client.on("message.ack", (ack) => { + console.log("MESSAGE ACK:", ack); +}); + +async function main() { + await client.connectWithQr(); + + const sent = await client.sendText(recipient, "Hello from berryprotocol on npm"); + console.log("TEXT SENT:", sent); + + const listSent = await client.sendList(recipient, { + title: "Menu Berry SDK", + text: "Escolha uma opcao", + footer: "via npm", + buttonText: "Abrir lista", + sections: [ + { + title: "Opcoes", + rows: [ + { + id: "opcao_1", + title: "Opcao 1", + description: "Primeira opcao", + }, + { + id: "opcao_2", + title: "Opcao 2", + description: "Segunda opcao", + }, + ], + }, + ], + }); + + console.log("LIST SENT:", listSent); + + const otp = BerryOTP.createLoginFlow(client, { + issuer: "BerryProtocol", + ttlMs: 2 * 60 * 1000, + mode: "copy-code", + }); + + const otpSent = await otp.sendLoginCode(recipient, { + userId: "npm-consumer-user", + metadata: { source: "npm-consumer" }, + }); + + console.log("OTP SENT:", otpSent); +} + +main().catch((error) => { + console.error("NPM consumer example failed:", error); + process.exitCode = 1; +}); diff --git a/examples/sdk/test-baileys-ai-label.js b/examples/sdk/test-baileys-ai-label.js new file mode 100644 index 0000000..ae61562 --- /dev/null +++ b/examples/sdk/test-baileys-ai-label.js @@ -0,0 +1,101 @@ +import { mkdir } from "node:fs/promises"; +import { join } from "node:path"; +import pino from "pino"; +import qrcode from "qrcode-terminal"; +import makeWASocket, { + fetchLatestBaileysVersion, + makeCacheableSignalKeyStore, + useMultiFileAuthState, +} from "baileys"; + +const sessionId = process.env.BAILEYS_TEST_SESSION_ID ?? "baileys-test-session"; +const recipient = process.env.BAILEYS_TEST_TO ?? process.env.BERRY_TEST_TO; +const authBaseFolder = + process.env.BAILEYS_AUTH_FOLDER ?? join(process.cwd(), ".baileys-sessions"); +const sessionDir = join(authBaseFolder, sessionId); +const logger = pino({ level: "silent" }); + +if (!recipient) { + throw new Error('Set BAILEYS_TEST_TO or BERRY_TEST_TO, for example: $env:BAILEYS_TEST_TO="5511999999999@s.whatsapp.net"'); +} + +async function ensureSessionDir() { + await mkdir(sessionDir, { recursive: true }); +} + +function waitForOpen(sock) { + return new Promise((resolve, reject) => { + sock.ev.on("connection.update", (update) => { + if (update.qr) { + console.log("\nEscaneie este QR Code:"); + qrcode.generate(update.qr, { small: true }); + } + + if (update.connection === "open") { + console.log("CONNECTED"); + resolve(); + } + + if (update.connection === "close") { + reject(update.lastDisconnect?.error ?? new Error("Connection closed")); + } + }); + }); +} + +async function createSocket() { + await ensureSessionDir(); + + const { state, saveCreds } = await useMultiFileAuthState(sessionDir); + const { version } = await fetchLatestBaileysVersion(); + + const sock = makeWASocket({ + version, + logger, + auth: { + creds: state.creds, + keys: makeCacheableSignalKeyStore(state.keys, logger), + }, + printQRInTerminal: false, + syncFullHistory: false, + markOnlineOnConnect: false, + shouldSyncHistoryMessage: () => false, + }); + + sock.ev.on("creds.update", saveCreds); + sock.ev.on("messages.update", (updates) => { + for (const item of updates) { + console.log("ACK UPDATE:", { + id: item.key.id, + remoteJid: item.key.remoteJid, + status: item.update.status, + }); + } + }); + + return sock; +} + +async function main() { + console.log("Sessao do Baileys:", sessionId); + console.log("Destino:", recipient); + + const sock = await createSocket(); + await waitForOpen(sock); + + const result = await sock.sendMessage(recipient, { + text: "Ola! Essa mensagem deve aparecer com label de AI.", + ai: true, + }); + + console.log("AI MESSAGE SENT:", { + id: result?.key?.id, + remoteJid: result?.key?.remoteJid, + message: result?.message, + }); +} + +main().catch((error) => { + console.error("AI label test failed:", error); + process.exitCode = 1; +}); diff --git a/examples/sdk/test-berry-ai-label.ts b/examples/sdk/test-berry-ai-label.ts new file mode 100644 index 0000000..f178502 --- /dev/null +++ b/examples/sdk/test-berry-ai-label.ts @@ -0,0 +1,35 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; + +function waitForOpen(client: BerryProtocol) { + return new Promise((resolve) => { + client.once("connection.open", resolve); + }); +} + +async function main(): Promise { + const to = process.env.BERRY_TEST_TO; + if (!to) { + throw new Error('Set BERRY_TEST_TO, for example: $env:BERRY_TEST_TO="5511999999999@s.whatsapp.net"'); + } + + const client = new BerryProtocol({ + sessionId: "test-session-qr", + }); + + client.on("message.ack", (ack) => { + console.log("MESSAGE ACK:", ack); + }); + + const opened = waitForOpen(client); + await client.connectWithQr(); + await opened; + + const sent = await client.sendMessage(to, { + text: "Ola! Essa mensagem deve aparecer com label de AI.", + ai: true, + }); + + console.log("AI LABEL SENT:", sent); +} + +void main(); diff --git a/examples/sdk/test-berry-otp.ts b/examples/sdk/test-berry-otp.ts new file mode 100644 index 0000000..d241341 --- /dev/null +++ b/examples/sdk/test-berry-otp.ts @@ -0,0 +1,49 @@ +import { BerryClient } from "../../packages/core/src/index.ts"; +import { BerryOTP } from "../../packages/berry-otp/src/index.ts"; + +function waitForOpen(client: BerryClient) { + return new Promise((resolve) => { + client.once("connection.open", resolve); + }); +} + +async function main(): Promise { + const to = process.env.BERRY_TEST_TO; + if (!to) { + throw new Error('Set BERRY_TEST_TO, for example: $env:BERRY_TEST_TO="5511999999999@s.whatsapp.net"'); + } + + const client = new BerryClient({ + sessionId: "test-session-qr", + }); + + const opened = waitForOpen(client); + await client.connectWithQr(); + await opened; + + const otp = BerryOTP.createLoginFlow(client, { + issuer: "BerryProtocol", + ttlMs: 2 * 60 * 1000, + mode: "copy-code", + editOnExpire: true, + }); + + otp.on("sent", console.log); + otp.on("used", console.log); + otp.on("expired", console.log); + otp.on("denied", console.log); + otp.on("warning", console.log); + otp.on("error", console.error); + + const sent = await otp.sendLoginCode(to, { + userId: "test-user", + metadata: { source: "sdk-test" }, + }); + + console.log("OTP enviado:", sent); + + // Para testar verify manualmente, chame: + // const result = await otp.verifyLoginCode(to, sent.code); +} + +void main(); diff --git a/package.json b/package.json index de819fc..5b9c0f7 100644 --- a/package.json +++ b/package.json @@ -1,45 +1,45 @@ { - "name": "berrysdk", - "version": "0.1.0", - "private": true, - "type": "module", - "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "keywords": [ - "whatsapp", - "baileys", - "sdk", - "bot", - "berrysdk", - "whatsapp-web" - ], - "workspaces": [ - "packages/*" - ], - "dependencies": { - "baileys": "7.0.0-rc10", - "qrcode-terminal": "^0.12.0" - }, - "scripts": { - "postinstall": "node scripts/patch-baileys-esm.mjs", - "build": "tsc -b packages/events packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/gateway packages/cli", - "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName 'dist') -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName '.tsbuildinfo') -ErrorAction SilentlyContinue }\"", - "prepare:publish": "npm run clean && npm run build", - "pack:check": "npm pack --workspaces --json", - "dev:gateway": "npm run build && node packages/gateway/dist/index.js", - "dev:cli": "npm run build && node packages/cli/dist/index.js", - "start:gateway": "node packages/gateway/dist/index.js", - "start:cli": "node packages/cli/dist/index.js" - }, - "devDependencies": { - "@types/better-sqlite3": "^7.6.13", - "@types/express": "^5.0.1", - "@types/node": "^22.15.3", - "@types/qrcode-terminal": "^0.12.2", - "@types/ws": "^8.18.1", - "rimraf": "^6.0.1", - "tsx": "^4.19.4", - "typescript": "^5.8.3" - } + "name": "berrysdk", + "version": "0.1.3", + "private": true, + "type": "module", + "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "keywords": [ + "whatsapp", + "baileys", + "sdk", + "bot", + "berrysdk", + "whatsapp-web" + ], + "workspaces": [ + "packages/*" + ], + "dependencies": { + "baileys": "7.0.0-rc10", + "qrcode-terminal": "^0.12.0" + }, + "scripts": { + "postinstall": "node scripts/patch-baileys-esm.mjs", + "build": "tsc -b packages/events packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli", + "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName \u0027dist\u0027) -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName \u0027.tsbuildinfo\u0027) -ErrorAction SilentlyContinue }\"", + "prepare:publish": "npm run clean \u0026\u0026 npm run build", + "pack:check": "npm pack --workspaces --json", + "dev:gateway": "npm run build \u0026\u0026 node packages/gateway/dist/index.js", + "dev:cli": "npm run build \u0026\u0026 node packages/cli/dist/index.js", + "start:gateway": "node packages/gateway/dist/index.js", + "start:cli": "node packages/cli/dist/index.js" + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.13", + "@types/express": "^5.0.1", + "@types/node": "^22.15.3", + "@types/qrcode-terminal": "^0.12.2", + "@types/ws": "^8.18.1", + "rimraf": "^6.0.1", + "tsx": "^4.19.4", + "typescript": "^5.8.3" + } } diff --git a/packages/auth/package.json b/packages/auth/package.json index 83f6752..0053968 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,26 +1,26 @@ { - "name": "@berrysdk/auth", - "version": "0.1.0", - "description": "Session and auth state helpers for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.0", - "@berrysdk/store": "0.1.0" - } + "name": "@berrysdk/auth", + "version": "0.1.1", + "description": "Session and auth state helpers for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.1", + "@berrysdk/store": "0.1.1" + } } diff --git a/packages/berry-otp/README.md b/packages/berry-otp/README.md new file mode 100644 index 0000000..c7b230c --- /dev/null +++ b/packages/berry-otp/README.md @@ -0,0 +1,49 @@ +# @berrysdk/berry-otp + +Official OTP flows for Berry SDK using WhatsApp Web transport, native-flow interactive buttons, and fallback legacy mode. + +## Important notes + +- This package does **not** use the official WhatsApp Business API. +- It relies on WhatsApp Web behavior observed in real tests. +- `copy-code` was validated in real tests on WhatsApp Web `2.3000.x`. +- WhatsApp can change protocol behavior at any time. +- `stable` mode exists as a fallback. +- `editOnExpire` requires `client.editMessage(...)` support in the SDK. +- Once `verify()` succeeds, the OTP becomes `used`, so it will not expire and edit afterward. + +## Modes + +- `stable` +- `copy-code` +- `experimental-copy-code` + +Recommended default: + +- `copy-code` + +## Example + +```ts +import { BerryClient } from "@berrysdk/core"; +import { BerryOTP } from "@berrysdk/berry-otp"; + +const client = new BerryClient({ + sessionId: "otp-session", +}); + +await client.connectWithQr(); + +const otp = BerryOTP.createLoginFlow(client, { + issuer: "BerryProtocol", + ttlMs: 2 * 60 * 1000, + mode: "copy-code", +}); + +const sent = await otp.sendLoginCode("5511999999999@s.whatsapp.net", { + userId: "user-001", + metadata: { source: "example" }, +}); + +console.log(sent); +``` diff --git a/packages/berry-otp/package.json b/packages/berry-otp/package.json new file mode 100644 index 0000000..7992452 --- /dev/null +++ b/packages/berry-otp/package.json @@ -0,0 +1,23 @@ +{ + "name": "@berrysdk/berry-otp", + "version": "0.1.3", + "description": "Official OTP flows for Berry SDK on top of WhatsApp native-flow and fallback buttons.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "README.md" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/berry-otp/src/index.ts b/packages/berry-otp/src/index.ts new file mode 100644 index 0000000..b7f30e9 --- /dev/null +++ b/packages/berry-otp/src/index.ts @@ -0,0 +1,628 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import crypto, { randomUUID } from "node:crypto"; +import { EventEmitter } from "node:events"; +import { renderOTPTemplate } from "./templates.js"; +import { MemoryOTPStore } from "./store.js"; +import type { + BerryOTPEventMap, + BerryOTPOptions, + BerryOTPPublicRecord, + BerryOTPRecord, + BerryOTPSendOptions, + BerryOTPSendResult, + BerryOTPStatus, + BerryOTPStore, + BerryOTPTemplate, + BerryOTPVerifyResult, +} from "./types.js"; + +export interface BerryOTPClient { + on(event: "message.received", listener: (message: BerryOTPIncomingMessage) => void): unknown; + off(event: "message.received", listener: (message: BerryOTPIncomingMessage) => void): unknown; + sendMessage(to: string, content: Record): Promise<{ id: string }>; + sendLegacyButtons( + to: string, + payload: { + text: string; + footer?: string; + buttons: Array<{ id: string; title: string; kind?: "reply" | "quick_reply" | "copy_code" | "cta_url"; code?: string; url?: string }>; + }, + ): Promise<{ id: string }>; + sendText(to: string, text: string): Promise<{ id: string }>; + editMessage(to: string, messageId: string, text: string): Promise<{ id: string }>; +} + +export interface BerryOTPIncomingMessage { + buttonId?: string; + selectedButtonId?: string; + rawButtonParamsJson?: string; +} + +type FlowDefaults = { + template: BerryOTPTemplate; + purpose: string; + issuer: string; + ttlMs: number; +}; + +const DEFAULTS: Required> = { + issuer: "BerryOTP", + codeLength: 6, + ttlMs: 5 * 60 * 1000, + footer: "Este código dura {minutes} minutos.", + editOnExpire: true, + mode: "copy-code", + maxAttempts: 5, + rateLimitMs: 60 * 1000, + autoReplyOnDenied: true, +}; + +const EXPIRED_TEXT = [ + "🔒 Código expirado", + "", + "Este código não é mais válido.", + "Solicite um novo código para continuar.", +].join("\n"); + +const DENIED_REPLY_TEXT = "Entendido. Esse código foi cancelado e não poderá ser usado."; + +export class BerryOTP extends EventEmitter { + private readonly options: Required> & { store: BerryOTPStore }; + private readonly timers = new Map(); + private readonly recipientIndex = new Map>(); + private readonly lastSentByRecipient = new Map(); + private readonly flowDefaults: FlowDefaults; + private readonly boundIncomingListener: (message: BerryOTPIncomingMessage) => void; + private readonly cleaner: NodeJS.Timeout; + + constructor( + private readonly client: BerryOTPClient, + options: BerryOTPOptions = {}, + flowDefaults?: Partial, + ) { + super(); + + if (!client) { + throw new Error("BerryOTP requires a BerryClient instance."); + } + + this.options = { + ...DEFAULTS, + ...options, + store: options.store ?? new MemoryOTPStore(), + }; + this.flowDefaults = { + template: flowDefaults?.template ?? "generic", + purpose: flowDefaults?.purpose ?? "continuar", + issuer: flowDefaults?.issuer ?? this.options.issuer, + ttlMs: flowDefaults?.ttlMs ?? this.options.ttlMs, + }; + this.boundIncomingListener = (message) => { + void this.handleIncomingMessage(message); + }; + + this.client.on("message.received", this.boundIncomingListener); + this.cleaner = setInterval(() => { + void this.cleanup().catch((error) => this.emit("error", error as Error)); + }, 60 * 1000); + this.cleaner.unref?.(); + } + + static createLoginFlow(client: BerryOTPClient, options: BerryOTPOptions = {}): BerryOTP { + return new BerryOTP(client, { + ...options, + issuer: options.issuer ?? "Berry Login", + ttlMs: options.ttlMs ?? 5 * 60 * 1000, + }, { + template: "login", + purpose: "entrar na conta", + issuer: options.issuer ?? "Berry Login", + ttlMs: options.ttlMs ?? 5 * 60 * 1000, + }); + } + + static createPasswordResetFlow(client: BerryOTPClient, options: BerryOTPOptions = {}): BerryOTP { + return new BerryOTP(client, { + ...options, + issuer: options.issuer ?? "Berry Password Reset", + ttlMs: options.ttlMs ?? 10 * 60 * 1000, + }, { + template: "password_reset", + purpose: "redefinir sua senha", + issuer: options.issuer ?? "Berry Password Reset", + ttlMs: options.ttlMs ?? 10 * 60 * 1000, + }); + } + + static create2FAFlow(client: BerryOTPClient, options: BerryOTPOptions = {}): BerryOTP { + return new BerryOTP(client, { + ...options, + issuer: options.issuer ?? "Berry 2FA", + ttlMs: options.ttlMs ?? 3 * 60 * 1000, + }, { + template: "2fa", + purpose: "confirmar sua autenticação em duas etapas", + issuer: options.issuer ?? "Berry 2FA", + ttlMs: options.ttlMs ?? 3 * 60 * 1000, + }); + } + + on( + event: EventName, + listener: (payload: BerryOTPEventMap[EventName]) => void, + ): this { + return super.on(event, listener); + } + + once( + event: EventName, + listener: (payload: BerryOTPEventMap[EventName]) => void, + ): this { + return super.once(event, listener); + } + + async send(to: string, options: BerryOTPSendOptions = {}): Promise { + this.assertRecipient(to); + this.assertRateLimit(to); + + const id = randomUUID(); + const ttlMs = options.ttlMs ?? this.flowDefaults.ttlMs ?? this.options.ttlMs; + const code = options.code ?? this.generateCode(this.options.codeLength); + const expiresAt = Date.now() + ttlMs; + const salt = randomUUID(); + const codeHash = this.hashCode(code, salt); + const template = options.template ?? this.flowDefaults.template; + const issuer = this.flowDefaults.issuer ?? this.options.issuer; + const purpose = options.purpose ?? this.flowDefaults.purpose; + const footer = this.formatFooter(options.footer ?? this.options.footer, ttlMs); + const { text } = renderOTPTemplate({ + issuer, + code, + purpose, + ttlMs, + template, + }); + + const sentMessage = + this.options.mode === "stable" + ? await this.client.sendLegacyButtons(to, { + text, + footer, + buttons: [ + { + id: `berryotp:not_requested:${id}`, + title: "Não pedi nenhum código", + }, + ], + }) + : await this.client.sendMessage(to, { + buttonsMessage: { + text, + footer, + buttons: [ + { + id: `berryotp:copy:${id}`, + title: "Copiar código", + kind: "copy_code", + code, + }, + { + id: `berryotp:not_requested:${id}`, + title: "Não pedi nenhum código", + kind: "quick_reply", + }, + ], + }, + }); + + const record: BerryOTPRecord = { + id, + to, + codeHash, + salt, + messageId: sentMessage.id, + expiresAt, + status: "active", + attempts: 0, + metadata: options.metadata, + createdAt: Date.now(), + }; + + await this.options.store.create(record); + this.addRecipientRecord(to, id); + this.lastSentByRecipient.set(to, Date.now()); + this.scheduleExpiration(record); + + const result: BerryOTPSendResult = { + id, + to, + code, + expiresAt: new Date(expiresAt), + messageId: sentMessage.id, + status: "sent", + }; + + this.emit("sent", { + ...result, + metadata: options.metadata, + }); + + return result; + } + + async verify(to: string, code: string): Promise { + this.assertRecipient(to); + const activeRecords = await this.getRecipientRecords(to); + const latest = activeRecords[0]; + + if (!latest) { + return { valid: false, reason: "not_found" }; + } + + if (latest.status === "used") { + return { valid: false, reason: "already_used", metadata: latest.metadata }; + } + + if (latest.status === "denied") { + return { valid: false, reason: "denied", metadata: latest.metadata }; + } + + if (latest.status === "blocked" || latest.attempts >= this.options.maxAttempts) { + await this.options.store.update(latest.id, { status: "blocked" }); + return { valid: false, reason: "too_many_attempts", metadata: latest.metadata }; + } + + if (Date.now() > latest.expiresAt) { + await this.expireRecord(latest.id, latest); + return { valid: false, reason: "expired", metadata: latest.metadata }; + } + + for (const record of activeRecords.filter((candidate) => candidate.status === "active")) { + if (Date.now() > record.expiresAt) { + await this.expireRecord(record.id, record); + continue; + } + + const candidateHash = this.hashCode(code, record.salt); + if (this.safeCompare(candidateHash, record.codeHash)) { + const usedAt = Date.now(); + await this.options.store.update(record.id, { + status: "used", + usedAt, + }); + this.clearTimer(record.id); + this.emit("used", { + otpId: record.id, + to: record.to, + metadata: record.metadata, + }); + return { + valid: true, + metadata: record.metadata, + }; + } + } + + const attempts = latest.attempts + 1; + const nextStatus: BerryOTPStatus = + attempts >= this.options.maxAttempts ? "blocked" : latest.status; + + await this.options.store.update(latest.id, { + attempts, + status: nextStatus, + }); + + return { + valid: false, + reason: attempts >= this.options.maxAttempts ? "too_many_attempts" : "invalid_code", + metadata: latest.metadata, + }; + } + + async cancel(id: string, reason = "cancelled"): Promise { + const record = await this.options.store.get(id); + if (!record || record.status !== "active") { + return; + } + + await this.options.store.update(id, { + status: "denied", + deniedAt: Date.now(), + }); + this.clearTimer(id); + this.emit("denied", { + otpId: id, + to: record.to, + metadata: record.metadata, + reason, + }); + } + + async get(id: string): Promise { + const record = await this.options.store.get(id); + return record ? this.toPublicRecord(record) : null; + } + + async cleanup(): Promise { + const before = Date.now() - 10 * 60 * 1000; + await this.options.store.cleanup(before); + + for (const [to, ids] of this.recipientIndex.entries()) { + for (const id of [...ids]) { + const record = await this.options.store.get(id); + if (!record) { + ids.delete(id); + this.clearTimer(id); + } + } + + if (ids.size === 0) { + this.recipientIndex.delete(to); + } + } + } + + dispose(): void { + this.client.off("message.received", this.boundIncomingListener); + clearInterval(this.cleaner); + for (const timer of this.timers.values()) { + clearTimeout(timer); + } + this.timers.clear(); + } + + async sendLoginCode( + to: string, + options: Omit & { userId?: string } = {}, + ): Promise { + return this.send(to, { + ...options, + template: "login", + purpose: "entrar na conta", + metadata: { + userId: options.userId, + ...options.metadata, + }, + }); + } + + async verifyLoginCode(to: string, code: string): Promise { + return this.verify(to, code); + } + + async sendPasswordResetCode( + to: string, + options: Omit & { userId?: string } = {}, + ): Promise { + return this.send(to, { + ...options, + template: "password_reset", + purpose: "redefinir sua senha", + metadata: { + userId: options.userId, + ...options.metadata, + }, + }); + } + + async verifyPasswordResetCode(to: string, code: string): Promise { + return this.verify(to, code); + } + + async send2FACode( + to: string, + options: Omit & { userId?: string } = {}, + ): Promise { + return this.send(to, { + ...options, + template: "2fa", + purpose: "confirmar sua autenticação em duas etapas", + metadata: { + userId: options.userId, + ...options.metadata, + }, + }); + } + + async verify2FACode(to: string, code: string): Promise { + return this.verify(to, code); + } + + private async handleIncomingMessage(message: BerryOTPIncomingMessage): Promise { + const buttonId = + message.buttonId ?? + message.selectedButtonId ?? + this.extractButtonIdFromParams(message.rawButtonParamsJson); + + if (!buttonId?.startsWith("berryotp:not_requested:")) { + return; + } + + const otpId = buttonId.replace("berryotp:not_requested:", ""); + const record = await this.options.store.get(otpId); + if (!record || record.status !== "active") { + return; + } + + await this.options.store.update(otpId, { + status: "denied", + deniedAt: Date.now(), + }); + this.clearTimer(otpId); + this.emit("denied", { + otpId, + to: record.to, + metadata: record.metadata, + reason: "not_requested", + }); + + if (this.options.autoReplyOnDenied) { + await this.client.sendText(record.to, DENIED_REPLY_TEXT); + } + } + + private extractButtonIdFromParams(paramsJson?: string): string | undefined { + if (!paramsJson) { + return undefined; + } + + try { + const parsed = JSON.parse(paramsJson) as Record; + const candidate = [parsed.id, parsed.button_id, parsed.selected_id].find( + (value) => typeof value === "string" && value.length > 0, + ); + return candidate as string | undefined; + } catch { + return undefined; + } + } + + private scheduleExpiration(record: BerryOTPRecord): void { + const delay = Math.max(0, record.expiresAt - Date.now()); + const timer = setTimeout(() => { + void this.expireById(record.id).catch((error) => this.emit("error", error as Error)); + }, delay); + timer.unref?.(); + this.timers.set(record.id, timer); + } + + private async expireById(id: string): Promise { + const record = await this.options.store.get(id); + if (!record) { + return; + } + + await this.expireRecord(id, record); + } + + private async expireRecord(id: string, record: BerryOTPRecord): Promise { + if (record.status !== "active" || Date.now() < record.expiresAt) { + return; + } + + await this.options.store.update(id, { + status: "expired", + expiredAt: Date.now(), + }); + this.clearTimer(id); + this.emit("expired", { + otpId: id, + to: record.to, + metadata: record.metadata, + }); + + if (this.options.editOnExpire) { + try { + await this.client.editMessage(record.to, record.messageId, EXPIRED_TEXT); + } catch (error) { + this.emit("warning", { + type: "edit_failed", + otpId: id, + error, + }); + } + } + } + + private async getRecipientRecords(to: string): Promise { + const ids = [...(this.recipientIndex.get(to) ?? new Set())]; + const records = await Promise.all(ids.map((id) => this.options.store.get(id))); + return records + .filter((record): record is BerryOTPRecord => !!record) + .sort((left, right) => right.createdAt - left.createdAt); + } + + private addRecipientRecord(to: string, id: string): void { + const current = this.recipientIndex.get(to) ?? new Set(); + current.add(id); + this.recipientIndex.set(to, current); + } + + private clearTimer(id: string): void { + const timer = this.timers.get(id); + if (timer) { + clearTimeout(timer); + this.timers.delete(id); + } + } + + private toPublicRecord(record: BerryOTPRecord): BerryOTPPublicRecord { + return { + id: record.id, + to: record.to, + messageId: record.messageId, + expiresAt: record.expiresAt, + status: record.status, + attempts: record.attempts, + metadata: record.metadata, + createdAt: record.createdAt, + usedAt: record.usedAt, + expiredAt: record.expiredAt, + deniedAt: record.deniedAt, + }; + } + + private generateCode(length: number): string { + let result = ""; + + for (let index = 0; index < length; index += 1) { + result += crypto.randomInt(0, 10).toString(); + } + + return result; + } + + private hashCode(code: string, salt: string): string { + return crypto.createHash("sha256").update(`${salt}:${code}`).digest("hex"); + } + + private safeCompare(left: string, right: string): boolean { + const leftBuffer = Buffer.from(left); + const rightBuffer = Buffer.from(right); + + if (leftBuffer.length !== rightBuffer.length) { + return false; + } + + return crypto.timingSafeEqual(leftBuffer, rightBuffer); + } + + private formatFooter(template: string, ttlMs: number): string { + const minutes = Math.max(1, Math.ceil(ttlMs / 60_000)); + return template + .replaceAll("{minutes}", String(minutes)) + .replaceAll("{seconds}", String(Math.ceil(ttlMs / 1_000))); + } + + private assertRecipient(to: string): void { + if (!to || typeof to !== "string") { + throw new Error("A valid WhatsApp destination is required."); + } + } + + private assertRateLimit(to: string): void { + const lastSentAt = this.lastSentByRecipient.get(to); + if (!lastSentAt) { + return; + } + + const elapsed = Date.now() - lastSentAt; + if (elapsed >= this.options.rateLimitMs) { + return; + } + + throw new Error( + `Please wait ${Math.ceil((this.options.rateLimitMs - elapsed) / 1000)} seconds before sending another OTP.`, + ); + } +} + +export default BerryOTP; +export { MemoryOTPStore, renderOTPTemplate }; +export type * from "./types.js"; diff --git a/packages/berry-otp/src/store.ts b/packages/berry-otp/src/store.ts new file mode 100644 index 0000000..1f5d89d --- /dev/null +++ b/packages/berry-otp/src/store.ts @@ -0,0 +1,62 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { type BerryOTPRecord, type BerryOTPStore } from "./types.js"; + +export class MemoryOTPStore implements BerryOTPStore { + private readonly records = new Map(); + + async create(record: BerryOTPRecord): Promise { + this.records.set(record.id, { ...record }); + } + + async get(id: string): Promise { + const record = this.records.get(id); + return record ? { ...record } : null; + } + + async findActiveByCode(to: string, codeHash: string): Promise { + for (const record of this.records.values()) { + if (record.to !== to || record.status !== "active") { + continue; + } + + if (record.codeHash === codeHash) { + return { ...record }; + } + } + + return null; + } + + async update(id: string, patch: Partial): Promise { + const current = this.records.get(id); + if (!current) { + return; + } + + this.records.set(id, { + ...current, + ...patch, + }); + } + + async delete(id: string): Promise { + this.records.delete(id); + } + + async cleanup(before: number): Promise { + for (const [id, record] of this.records.entries()) { + const terminalAt = + record.expiredAt ?? record.usedAt ?? record.deniedAt ?? record.createdAt; + + if (record.status !== "active" && terminalAt < before) { + this.records.delete(id); + } + } + } +} diff --git a/packages/berry-otp/src/templates.ts b/packages/berry-otp/src/templates.ts new file mode 100644 index 0000000..9ec0304 --- /dev/null +++ b/packages/berry-otp/src/templates.ts @@ -0,0 +1,67 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +import { type RenderOTPTemplateInput, type RenderOTPTemplateResult } from "./types.js"; + +export const renderOTPTemplate = ({ + issuer, + code, + purpose, + template, +}: RenderOTPTemplateInput): RenderOTPTemplateResult => { + switch (template) { + case "login": + return { + text: [ + "🔐 Código de login", + "", + "Use o código abaixo para entrar na sua conta:", + "", + `*${code}*`, + "", + issuer, + ].join("\n"), + }; + case "password_reset": + return { + text: [ + "🔑 Redefinição de senha", + "", + "Use o código abaixo para redefinir sua senha:", + "", + `*${code}*`, + "", + issuer, + ].join("\n"), + }; + case "2fa": + return { + text: [ + "🛡️ Verificação em duas etapas", + "", + "Use o código abaixo para continuar:", + "", + `*${code}*`, + "", + issuer, + ].join("\n"), + }; + case "generic": + default: + return { + text: [ + "🔐 Código de verificação", + "", + `Use o código abaixo para ${purpose ?? "continuar"}:`, + "", + `*${code}*`, + "", + issuer, + ].join("\n"), + }; + } +}; diff --git a/packages/berry-otp/src/types.ts b/packages/berry-otp/src/types.ts new file mode 100644 index 0000000..2fb5e53 --- /dev/null +++ b/packages/berry-otp/src/types.ts @@ -0,0 +1,115 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +export type BerryOTPMode = "stable" | "copy-code" | "experimental-copy-code"; + +export type BerryOTPTemplate = "login" | "password_reset" | "2fa" | "generic"; + +export type BerryOTPStatus = "active" | "used" | "expired" | "denied" | "blocked"; + +export interface BerryOTPRecord { + id: string; + to: string; + codeHash: string; + salt: string; + messageId: string; + expiresAt: number; + status: BerryOTPStatus; + attempts: number; + metadata?: Record; + createdAt: number; + usedAt?: number; + expiredAt?: number; + deniedAt?: number; +} + +export interface BerryOTPPublicRecord { + id: string; + to: string; + messageId: string; + expiresAt: number; + status: BerryOTPStatus; + attempts: number; + metadata?: Record; + createdAt: number; + usedAt?: number; + expiredAt?: number; + deniedAt?: number; +} + +export interface BerryOTPStore { + create(record: BerryOTPRecord): Promise; + get(id: string): Promise; + findActiveByCode(to: string, codeHash: string): Promise; + update(id: string, patch: Partial): Promise; + delete(id: string): Promise; + cleanup(before: number): Promise; +} + +export type BerryOTPOptions = { + issuer?: string; + codeLength?: number; + ttlMs?: number; + footer?: string; + editOnExpire?: boolean; + mode?: BerryOTPMode; + maxAttempts?: number; + rateLimitMs?: number; + autoReplyOnDenied?: boolean; + store?: BerryOTPStore; +}; + +export interface BerryOTPSendOptions { + purpose?: string; + code?: string; + ttlMs?: number; + footer?: string; + metadata?: Record; + template?: BerryOTPTemplate; +} + +export interface BerryOTPSendResult { + id: string; + to: string; + code: string; + expiresAt: Date; + messageId: string; + status: "sent"; +} + +export interface BerryOTPVerifyResult { + valid: boolean; + reason?: + | "not_found" + | "expired" + | "already_used" + | "invalid_code" + | "too_many_attempts" + | "denied"; + metadata?: Record; +} + +export interface RenderOTPTemplateInput { + issuer: string; + code: string; + purpose?: string; + ttlMs: number; + template: BerryOTPTemplate; +} + +export interface RenderOTPTemplateResult { + text: string; +} + +export interface BerryOTPEventMap { + sent: BerryOTPSendResult & { metadata?: Record }; + used: { otpId: string; to: string; metadata?: Record }; + expired: { otpId: string; to: string; metadata?: Record }; + denied: { otpId: string; to: string; metadata?: Record; reason?: string }; + warning: { type: string; otpId?: string; error?: unknown; details?: string }; + error: Error; +} diff --git a/packages/berry-otp/tsconfig.json b/packages/berry-otp/tsconfig.json new file mode 100644 index 0000000..3dbeef4 --- /dev/null +++ b/packages/berry-otp/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ] +} diff --git a/packages/berryotp/README.md b/packages/berryotp/README.md new file mode 100644 index 0000000..a15c285 --- /dev/null +++ b/packages/berryotp/README.md @@ -0,0 +1,16 @@ +# berryotp + +Facade package for the official BerryOTP library. + +## Install + +```bash +npm install berryotp +``` + +## Usage + +```ts +import BerryProtocol from "berryprotocol"; +import { BerryOTP } from "berryotp"; +``` diff --git a/packages/berryotp/package.json b/packages/berryotp/package.json new file mode 100644 index 0000000..b52870a --- /dev/null +++ b/packages/berryotp/package.json @@ -0,0 +1,26 @@ +{ + "name": "berryotp", + "version": "0.1.3", + "description": "Facade package for BerryOTP so consumers can import it without the @berrysdk scope.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "README.md" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/berry-otp": "0.1.3" + } +} diff --git a/packages/berryotp/src/index.ts b/packages/berryotp/src/index.ts new file mode 100644 index 0000000..1d103a7 --- /dev/null +++ b/packages/berryotp/src/index.ts @@ -0,0 +1,9 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +export { BerryOTP, default } from "@berrysdk/berry-otp"; +export * from "@berrysdk/berry-otp"; diff --git a/packages/berryotp/tsconfig.json b/packages/berryotp/tsconfig.json new file mode 100644 index 0000000..01f106c --- /dev/null +++ b/packages/berryotp/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@berrysdk/berry-otp": [ + "../berry-otp/dist/index.d.ts" + ] + }, + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ] +} diff --git a/packages/berryprotocol/README.md b/packages/berryprotocol/README.md new file mode 100644 index 0000000..288e169 --- /dev/null +++ b/packages/berryprotocol/README.md @@ -0,0 +1,25 @@ +# berryprotocol + +Facade package for the Berry SDK. + +## Install + +```bash +npm install berryprotocol +``` + +## Usage + +```ts +import BerryProtocol from "berryprotocol"; +``` + +For OTP flows, install the official companion package: + +```bash +npm install @berrysdk/berry-otp +``` + +```ts +import { BerryOTP } from "@berrysdk/berry-otp"; +``` diff --git a/packages/berryprotocol/package.json b/packages/berryprotocol/package.json new file mode 100644 index 0000000..69295bc --- /dev/null +++ b/packages/berryprotocol/package.json @@ -0,0 +1,26 @@ +{ + "name": "berryprotocol", + "version": "0.1.3", + "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "README.md" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.3" + } +} diff --git a/packages/berryprotocol/src/index.ts b/packages/berryprotocol/src/index.ts new file mode 100644 index 0000000..2e4887d --- /dev/null +++ b/packages/berryprotocol/src/index.ts @@ -0,0 +1,14 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +export { + BerryClient, + BerryProtocol, + default, +} from "@berrysdk/core"; + +export * from "@berrysdk/core"; diff --git a/packages/berryprotocol/tsconfig.json b/packages/berryprotocol/tsconfig.json new file mode 100644 index 0000000..a8410eb --- /dev/null +++ b/packages/berryprotocol/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@berrysdk/core": [ + "../core/dist/index.d.ts" + ] + }, + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ] +} diff --git a/packages/cli/package.json b/packages/cli/package.json index 6a5d1ca..a1c6d8f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,27 +1,27 @@ { - "name": "@berrysdk/cli", - "version": "0.1.0", - "description": "CLI tooling for Berry Protocol sessions and message testing.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/core": "0.1.0", - "commander": "^14.0.0", - "pino": "^9.6.0" - } + "name": "@berrysdk/cli", + "version": "0.1.1", + "description": "CLI tooling for Berry Protocol sessions and message testing.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.1", + "commander": "^14.0.0", + "pino": "^9.6.0" + } } diff --git a/packages/core/package.json b/packages/core/package.json index a29e3fd..7c05d47 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,31 +1,31 @@ { - "name": "@berrysdk/core", - "version": "0.1.0", - "description": "Public SDK for Berry Protocol WhatsApp integrations.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/auth": "0.1.0", - "@berrysdk/events": "0.1.0", - "@berrysdk/media": "0.1.0", - "@berrysdk/messages": "0.1.0", - "@berrysdk/socket": "0.1.0", - "@berrysdk/store": "0.1.0", - "pino": "^9.6.0" - } + "name": "@berrysdk/core", + "version": "0.1.3", + "description": "Public SDK for Berry Protocol WhatsApp integrations.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/auth": "0.1.1", + "@berrysdk/events": "0.1.1", + "@berrysdk/media": "0.1.1", + "@berrysdk/messages": "0.1.1", + "@berrysdk/socket": "0.1.3", + "@berrysdk/store": "0.1.1", + "pino": "^9.6.0" + } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index ebd2049..4c51ce8 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -48,6 +48,7 @@ export interface BerryClientOptions { type BerryMediaSource = Buffer | { url: string | URL }; export interface BerrySendMessageContent { + ai?: boolean; text?: string; image?: BerryMediaSource; audio?: BerryMediaSource; @@ -144,6 +145,14 @@ export class BerryClient { return this; } + off( + event: EventName, + listener: (payload: BerryEventMap[EventName]) => void, + ): this { + this.bus.off(event, listener); + return this; + } + async connect(auth?: BerryAuthOptions): Promise { await this.sessions.get(this.options.sessionId); await this.socket.connect(auth); @@ -226,6 +235,28 @@ export class BerryClient { return this.sendMessage(to, { list }); } + async sendLegacyButtons(to: string, payload: ButtonsPayload): Promise { + return this.queue.enqueue(async () => { + const message: OutgoingMessage = { + id: randomUUID(), + to, + timestamp: new Date().toISOString(), + ack: "pending", + type: "buttons", + buttons: payload, + }; + + const result = await this.socket.sendLegacyButtonsMessage(to, payload); + const sent = { + ...message, + id: result.key.id ?? message.id, + ack: "sent" as const, + }; + this.bus.emit("message.sent", sent); + return sent; + }); + } + async sendReaction( to: string, emoji: string, @@ -267,6 +298,20 @@ export class BerryClient { }); } + async editMessage(to: string, messageId: string, text: string): Promise { + return this.queue.enqueue(async () => { + const message = createTextMessage(to, text); + const result = await this.socket.editMessage(to, messageId, text); + const sent = { + ...message, + id: result.key.id ?? message.id, + ack: "sent" as const, + }; + this.bus.emit("message.sent", sent); + return sent; + }); + } + async fetchGroups() { return this.socket.fetchGroups(); } @@ -311,7 +356,7 @@ export class BerryClient { const message = createTextMessage(to, text); return { message, - dispatch: () => this.socket.sendBaileysMessage(to, { text }), + dispatch: () => this.socket.sendBaileysMessage(to, { text, ...(content.ai ? { ai: true } : {}) }), }; } @@ -448,7 +493,11 @@ export class BerryClient { ); return { message, - dispatch: () => this.socket.sendBaileysMessage(to, { react: content.react! }), + dispatch: () => + this.socket.sendBaileysMessage(to, { + react: content.react!, + ...(content.ai ? { ai: true } : {}), + }), }; } @@ -461,7 +510,11 @@ export class BerryClient { }; return { message: createLocationMessage(to, location), - dispatch: () => this.socket.sendBaileysMessage(to, { location: content.location! }), + dispatch: () => + this.socket.sendBaileysMessage(to, { + location: content.location!, + ...(content.ai ? { ai: true } : {}), + }), }; } @@ -472,7 +525,11 @@ export class BerryClient { }; return { message: createContactMessage(to, contact), - dispatch: () => this.socket.sendBaileysMessage(to, { contacts: content.contacts! }), + dispatch: () => + this.socket.sendBaileysMessage(to, { + contacts: content.contacts!, + ...(content.ai ? { ai: true } : {}), + }), }; } @@ -568,4 +625,8 @@ export class BerryClient { } } +export class BerryProtocol extends BerryClient {} + +export default BerryProtocol; + export * from "@berrysdk/events"; diff --git a/packages/events/package.json b/packages/events/package.json index 4d3faf7..131495d 100644 --- a/packages/events/package.json +++ b/packages/events/package.json @@ -1,22 +1,22 @@ { - "name": "@berrysdk/events", - "version": "0.1.0", - "description": "Shared event and message contracts for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - } + "name": "@berrysdk/events", + "version": "0.1.1", + "description": "Shared event and message contracts for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + } } diff --git a/packages/events/src/index.ts b/packages/events/src/index.ts index af4be57..d42ba30 100644 --- a/packages/events/src/index.ts +++ b/packages/events/src/index.ts @@ -77,7 +77,7 @@ export interface ContactPayload { export interface ButtonRow { id: string; title: string; - kind?: "reply" | "copy_code" | "cta_url"; + kind?: "reply" | "quick_reply" | "copy_code" | "cta_url"; code?: string; url?: string; nativeFlowName?: string; @@ -156,6 +156,9 @@ export interface BaseMessage { from?: string; timestamp: string; ack: AckStatus; + buttonId?: string; + selectedButtonId?: string; + rawButtonParamsJson?: string; type: | "text" | "image" diff --git a/packages/gateway/package.json b/packages/gateway/package.json index d216ed6..7c385b0 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -1,27 +1,27 @@ { - "name": "@berrysdk/gateway", - "version": "0.1.0", - "description": "HTTP gateway for multi-instance Berry Protocol control.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/core": "0.1.0", - "express": "^5.1.0", - "pino": "^9.6.0" - } + "name": "@berrysdk/gateway", + "version": "0.1.1", + "description": "HTTP gateway for multi-instance Berry Protocol control.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.1", + "express": "^5.1.0", + "pino": "^9.6.0" + } } diff --git a/packages/media/package.json b/packages/media/package.json index 8a2d400..a01c4fb 100644 --- a/packages/media/package.json +++ b/packages/media/package.json @@ -1,22 +1,22 @@ { - "name": "@berrysdk/media", - "version": "0.1.0", - "description": "Media loading and normalization helpers for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - } + "name": "@berrysdk/media", + "version": "0.1.1", + "description": "Media loading and normalization helpers for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + } } diff --git a/packages/messages/package.json b/packages/messages/package.json index c2e5861..85c89cf 100644 --- a/packages/messages/package.json +++ b/packages/messages/package.json @@ -1,25 +1,25 @@ { - "name": "@berrysdk/messages", - "version": "0.1.0", - "description": "Outgoing message factories for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.0" - } + "name": "@berrysdk/messages", + "version": "0.1.1", + "description": "Outgoing message factories for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.1" + } } diff --git a/packages/protocol/package.json b/packages/protocol/package.json index fba611b..a257131 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,26 +1,26 @@ { - "name": "@berrysdk/proto", - "version": "0.1.0", - "description": "Berry Protocol proto wrapper around WhatsApp Web protobuf definitions.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@wppconnect/wa-proto": "^2.3000.1030818676", - "protobufjs": "^7.4.0" - } + "name": "@berrysdk/proto", + "version": "0.1.1", + "description": "Berry Protocol proto wrapper around WhatsApp Web protobuf definitions.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@wppconnect/wa-proto": "^2.3000.1030818676", + "protobufjs": "^7.4.0" + } } diff --git a/packages/socket/package.json b/packages/socket/package.json index fbaf33e..0f1f401 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -1,30 +1,34 @@ { - "name": "@berrysdk/socket", - "version": "0.1.0", - "description": "Baileys-based transport adapter for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.0", - "@berrysdk/proto": "0.1.0", - "@berrysdk/wa-message": "0.1.0", - "baileys": "7.0.0-rc10", - "pino": "^9.6.0", - "ws": "^8.18.1" - } + "name": "@berrysdk/socket", + "version": "0.1.3", + "description": "Baileys-based transport adapter for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "scripts" + ], + "scripts": { + "postinstall": "node ./scripts/patch-installed-baileys.mjs" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.1", + "@berrysdk/proto": "0.1.1", + "@berrysdk/wa-message": "0.1.1", + "baileys": "7.0.0-rc10", + "pino": "^9.6.0", + "ws": "^8.18.1" + } } diff --git a/packages/socket/scripts/patch-installed-baileys.mjs b/packages/socket/scripts/patch-installed-baileys.mjs new file mode 100644 index 0000000..e1f5789 --- /dev/null +++ b/packages/socket/scripts/patch-installed-baileys.mjs @@ -0,0 +1,196 @@ +import { readFile, writeFile } from "node:fs/promises"; +import { dirname, join } from "node:path"; +import { createRequire } from "node:module"; + +const require = createRequire(import.meta.url); + +const BIZ_BOT_SUPPORT_PAYLOAD = "{}"; + +const patchFile = async (filePath, mutator) => { + const source = await readFile(filePath, "utf8"); + const next = mutator(source); + + if (next !== source) { + await writeFile(filePath, next, "utf8"); + return true; + } + + return false; +}; + +const resolveBaileysRoot = () => { + const packageJsonPath = require.resolve("baileys/package.json"); + return dirname(packageJsonPath); +}; + +const patchMessageTypes = async (baileysRoot) => + patchFile(join(baileysRoot, "lib", "Types", "Message.d.ts"), (source) => { + if (source.includes("ai?: boolean;")) { + return source; + } + + const original = `export type AnyMessageContent = AnyRegularMessageContent | { + forward: WAMessage; + force?: boolean; +} | { + /** Delete your message or anyone's message in a group (admin required) */ + delete: WAMessageKey; +} | { + disappearingMessagesInChat: boolean | number; +} | { + limitSharing: boolean; +};`; + + const patched = `export type AnyMessageContent = (AnyRegularMessageContent | { + forward: WAMessage; + force?: boolean; +} | { + /** Delete your message or anyone's message in a group (admin required) */ + delete: WAMessageKey; +} | { + disappearingMessagesInChat: boolean | number; +} | { + limitSharing: boolean; +}) & { + ai?: boolean; +};`; + + return source.replace(original, patched); + }); + +const patchMessageSend = async (baileysRoot) => + patchFile(join(baileysRoot, "lib", "Socket", "messages-send.js"), (source) => { + let next = source; + + if (!next.includes("const BIZ_BOT_SUPPORT_PAYLOAD = '{}'")) { + next = next.replace( + "import { makeNewsletterSocket } from './newsletter.js';", + `import { makeNewsletterSocket } from './newsletter.js';\nconst BIZ_BOT_SUPPORT_PAYLOAD = '${BIZ_BOT_SUPPORT_PAYLOAD}';`, + ); + } + + if (!next.includes("const isAiMsg = typeof messageContent === 'object'")) { + next = next.replace( + ` const fullMsg = await generateWAMessage(jid, content, { + logger, + userJid, + getUrlInfo: text => getUrlInfo(text, { + thumbnailWidth: linkPreviewImageThumbnailWidth, + fetchOpts: { + timeout: 3000, + ...(httpRequestOptions || {}) + }, + logger, + uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined + }), + //TODO: CACHE + getProfilePicUrl: sock.profilePictureUrl, + getCallLink: sock.createCallLink, + upload: waUploadToServer, + mediaCache: config.mediaCache, + options: config.options, + messageId: generateMessageIDV2(sock.user?.id), + ...options + }); + const isEventMsg = 'event' in content && !!content.event; + const isDeleteMsg = 'delete' in content && !!content.delete; + const isEditMsg = 'edit' in content && !!content.edit; + const isPinMsg = 'pin' in content && !!content.pin; + const isPollMessage = 'poll' in content && !!content.poll;`, + ` const messageContent = typeof content === 'object' && content + ? { ...content } + : content; + const isAiMsg = typeof messageContent === 'object' + && !!messageContent + && 'ai' in messageContent + && !!messageContent.ai; + if (isAiMsg) { + delete messageContent.ai; + } + const fullMsg = await generateWAMessage(jid, messageContent, { + logger, + userJid, + getUrlInfo: text => getUrlInfo(text, { + thumbnailWidth: linkPreviewImageThumbnailWidth, + fetchOpts: { + timeout: 3000, + ...(httpRequestOptions || {}) + }, + logger, + uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined + }), + //TODO: CACHE + getProfilePicUrl: sock.profilePictureUrl, + getCallLink: sock.createCallLink, + upload: waUploadToServer, + mediaCache: config.mediaCache, + options: config.options, + messageId: generateMessageIDV2(sock.user?.id), + ...options + }); + const isEventMsg = typeof messageContent === 'object' && !!messageContent && 'event' in messageContent && !!messageContent.event; + const isDeleteMsg = typeof messageContent === 'object' && !!messageContent && 'delete' in messageContent && !!messageContent.delete; + const isEditMsg = typeof messageContent === 'object' && !!messageContent && 'edit' in messageContent && !!messageContent.edit; + const isPinMsg = typeof messageContent === 'object' && !!messageContent && 'pin' in messageContent && !!messageContent.pin; + const isPollMessage = typeof messageContent === 'object' && !!messageContent && 'poll' in messageContent && !!messageContent.poll;`, + ); + } + + next = next.replaceAll( + "if (isJidGroup(content.delete?.remoteJid) && !content.delete?.fromMe)", + "if (isJidGroup(messageContent.delete?.remoteJid) && !messageContent.delete?.fromMe)", + ); + + if (!next.includes("AI labeled messages are only allowed in private chat")) { + next = next.replace( + ` else if (isEventMsg) { + additionalNodes.push({ + tag: 'meta', + attrs: { + event_type: 'creation' + } + }); + }`, + ` else if (isEventMsg) { + additionalNodes.push({ + tag: 'meta', + attrs: { + event_type: 'creation' + } + }); + } + else if (isAiMsg) { + if (!(isPnUser(jid) || isLidUser(jid))) { + throw new Boom('AI labeled messages are only allowed in private chat', { + statusCode: 400 + }); + } + fullMsg.message.messageContextInfo ||= {}; + fullMsg.message.messageContextInfo.supportPayload = BIZ_BOT_SUPPORT_PAYLOAD; + additionalNodes.push({ + tag: 'bot', + attrs: { + biz_bot: '1' + }, + content: undefined + }); + }`, + ); + } + + return next; + }); + +try { + const baileysRoot = resolveBaileysRoot(); + const results = await Promise.all([ + patchMessageTypes(baileysRoot), + patchMessageSend(baileysRoot), + ]); + + if (results.some(Boolean)) { + console.log("Berry SDK patched installed Baileys with AI label support."); + } +} catch (error) { + console.warn("Berry SDK could not patch installed Baileys:", error instanceof Error ? error.message : error); +} diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index 50c9609..27e663f 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -246,6 +246,35 @@ export class BerrySocket { return this.sendMessage(to, content as MessageContent); } + async editMessage(to: string, messageId: string, text: string): Promise { + return this.sendBaileysMessage(to, { + text, + edit: { + remoteJid: to, + fromMe: true, + id: messageId, + }, + }); + } + + async sendLegacyButtonsMessage(to: string, buttons: ButtonsPayload): Promise { + if (!this.sock?.user?.id) { + throw new Error("Socket is not connected."); + } + + const content = buttonsPayloadToLegacyButtonsMessageContent(buttons); + const fullMessage = generateWAMessageFromContent(to, content, { + userJid: this.sock.user.id, + }); + this.logOutgoingMessage("buttons-legacy", fullMessage); + + await this.sock.relayMessage(to, fullMessage.message!, { + messageId: fullMessage.key.id!, + }); + + return fullMessage as WAMessage; + } + async sendInteractiveMessage(to: string, interactive: InteractivePayload): Promise { if (!this.sock?.user?.id) { throw new Error("Socket is not connected."); diff --git a/packages/store/package.json b/packages/store/package.json index c549d84..64c21f4 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -1,26 +1,26 @@ { - "name": "@berrysdk/store", - "version": "0.1.0", - "description": "SQLite-backed persistence for Berry Protocol sessions and metadata.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.0", - "better-sqlite3": "^11.10.0" - } + "name": "@berrysdk/store", + "version": "0.1.1", + "description": "SQLite-backed persistence for Berry Protocol sessions and metadata.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.1", + "better-sqlite3": "^11.10.0" + } } diff --git a/packages/wa-message/package.json b/packages/wa-message/package.json index 63f3049..06cc55f 100644 --- a/packages/wa-message/package.json +++ b/packages/wa-message/package.json @@ -1,27 +1,27 @@ { - "name": "@berrysdk/wa-message", - "version": "0.1.0", - "description": "Rendering-aware WhatsApp message builders for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.0", - "@berrysdk/proto": "0.1.0", - "baileys": "7.0.0-rc10" - } + "name": "@berrysdk/wa-message", + "version": "0.1.1", + "description": "Rendering-aware WhatsApp message builders for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.1", + "@berrysdk/proto": "0.1.1", + "baileys": "7.0.0-rc10" + } } diff --git a/packages/wa-message/src/index.ts b/packages/wa-message/src/index.ts index 827bb41..17b6be0 100644 --- a/packages/wa-message/src/index.ts +++ b/packages/wa-message/src/index.ts @@ -15,6 +15,67 @@ import { } from "@berrysdk/events"; import { proto, type BinaryNode, type WAMessage } from "baileys"; +const parseJsonObject = (value?: string | null): Record | null => { + if (!value) { + return null; + } + + try { + const parsed = JSON.parse(value) as unknown; + return typeof parsed === "object" && parsed !== null ? (parsed as Record) : null; + } catch { + return null; + } +}; + +const extractButtonSelection = ( + message: NonNullable, +): { + buttonId?: string; + selectedButtonId?: string; + rawButtonParamsJson?: string; +} => { + const buttonsResponseId = message.buttonsResponseMessage?.selectedButtonId; + if (buttonsResponseId) { + return { + buttonId: buttonsResponseId, + selectedButtonId: buttonsResponseId, + }; + } + + const templateButtonId = message.templateButtonReplyMessage?.selectedId; + if (templateButtonId) { + return { + buttonId: templateButtonId, + selectedButtonId: templateButtonId, + }; + } + + const listRowId = message.listResponseMessage?.singleSelectReply?.selectedRowId; + if (listRowId) { + return { + buttonId: listRowId, + selectedButtonId: listRowId, + }; + } + + const paramsJson = message.interactiveResponseMessage?.nativeFlowResponseMessage?.paramsJson; + const parsedParams = parseJsonObject(paramsJson); + if (parsedParams) { + const selectedId = [parsedParams.id, parsedParams.button_id, parsedParams.selected_id].find( + (candidate) => typeof candidate === "string" && candidate.length > 0, + ) as string | undefined; + + return { + buttonId: selectedId, + selectedButtonId: selectedId, + rawButtonParamsJson: paramsJson ?? undefined, + }; + } + + return {}; +}; + export const ackFromWebMessageStatus = (status?: number | null): MessageAck["ack"] => { switch (status) { case proto.WebMessageInfo.Status.SERVER_ACK: @@ -329,19 +390,21 @@ export const extractButtonsPayload = ( export const normalizeIncomingMessage = (waMessage: WAMessage): IncomingMessage | null => { const key = waMessage.key; + const message = waMessage.message; + if (!message) { + return null; + } + + const selection = extractButtonSelection(message); const base = { id: key.id ?? randomUUID(), to: key.remoteJid ?? "", from: key.participant ?? key.remoteJid ?? "", timestamp: new Date(Number(waMessage.messageTimestamp ?? Date.now()) * 1000).toISOString(), ack: ackFromWebMessageStatus(waMessage.status), + ...selection, } as const; - const message = waMessage.message; - if (!message) { - return null; - } - if (message.conversation || message.extendedTextMessage?.text) { return { ...base, diff --git a/scripts/patch-baileys-esm.mjs b/scripts/patch-baileys-esm.mjs index e0ca6d2..59bff45 100644 --- a/scripts/patch-baileys-esm.mjs +++ b/scripts/patch-baileys-esm.mjs @@ -1,7 +1,31 @@ import { readFile, writeFile } from "node:fs/promises"; import { resolve } from "node:path"; -const replacements = [ +const replaceAllInFile = async (relativePath, replacements) => { + const filePath = resolve(relativePath); + const source = await readFile(filePath, "utf8"); + let next = source; + + for (const [from, to] of replacements) { + next = next.replaceAll(from, to); + } + + if (next !== source) { + await writeFile(filePath, next, "utf8"); + } +}; + +const patchWithSnippet = async (relativePath, mutator) => { + const filePath = resolve(relativePath); + const source = await readFile(filePath, "utf8"); + const next = mutator(source); + + if (next !== source) { + await writeFile(filePath, next, "utf8"); + } +}; + +const esmImportFixes = [ ["_reference_baileys2/lib/Signal/libsignal.js", "libsignal/src/protobufs", "libsignal/src/protobufs.js"], ["_reference_baileys2/lib/Utils/crypto.js", "libsignal/src/curve", "libsignal/src/curve.js"], ["_reference_baileys2/lib/Signal/Group/group_cipher.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], @@ -11,13 +35,166 @@ const replacements = [ ["_reference_baileys2/lib/Signal/Group/sender-message-key.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], ]; -for (const [relativePath, from, to] of replacements) { - const filePath = resolve(relativePath); - const source = await readFile(filePath, "utf8"); - const next = source.replaceAll(from, to); - if (next !== source) { - await writeFile(filePath, next, "utf8"); - } +for (const [relativePath, from, to] of esmImportFixes) { + await replaceAllInFile(relativePath, [[from, to]]); } -console.log("Patched Baileys ESM imports."); +await patchWithSnippet("node_modules/baileys/lib/Types/Message.d.ts", (source) => { + const original = `export type AnyMessageContent = AnyRegularMessageContent | { + forward: WAMessage; + force?: boolean; +} | { + /** Delete your message or anyone's message in a group (admin required) */ + delete: WAMessageKey; +} | { + disappearingMessagesInChat: boolean | number; +} | { + limitSharing: boolean; +};`; + + const patched = `export type AnyMessageContent = (AnyRegularMessageContent | { + forward: WAMessage; + force?: boolean; +} | { + /** Delete your message or anyone's message in a group (admin required) */ + delete: WAMessageKey; +} | { + disappearingMessagesInChat: boolean | number; +} | { + limitSharing: boolean; +}) & { + ai?: boolean; +};`; + + return source.includes("ai?: boolean;") + ? source + : source.replace(original, patched); +}); + +await patchWithSnippet("node_modules/baileys/lib/Socket/messages-send.js", (source) => { + let next = source; + + if (!next.includes("const BIZ_BOT_SUPPORT_PAYLOAD = '{}'")) { + next = next.replace( + "import { makeNewsletterSocket } from './newsletter.js';", + "import { makeNewsletterSocket } from './newsletter.js';\nconst BIZ_BOT_SUPPORT_PAYLOAD = '{}';", + ); + } + + const originalSendBlock = ` const fullMsg = await generateWAMessage(jid, content, { + logger, + userJid, + getUrlInfo: text => getUrlInfo(text, { + thumbnailWidth: linkPreviewImageThumbnailWidth, + fetchOpts: { + timeout: 3000, + ...(httpRequestOptions || {}) + }, + logger, + uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined + }), + //TODO: CACHE + getProfilePicUrl: sock.profilePictureUrl, + getCallLink: sock.createCallLink, + upload: waUploadToServer, + mediaCache: config.mediaCache, + options: config.options, + messageId: generateMessageIDV2(sock.user?.id), + ...options + }); + const isEventMsg = 'event' in content && !!content.event; + const isDeleteMsg = 'delete' in content && !!content.delete; + const isEditMsg = 'edit' in content && !!content.edit; + const isPinMsg = 'pin' in content && !!content.pin; + const isPollMessage = 'poll' in content && !!content.poll;`; + + const patchedSendBlock = ` const messageContent = typeof content === 'object' && content + ? { ...content } + : content; + const isAiMsg = typeof messageContent === 'object' + && !!messageContent + && 'ai' in messageContent + && !!messageContent.ai; + if (isAiMsg) { + delete messageContent.ai; + } + const fullMsg = await generateWAMessage(jid, messageContent, { + logger, + userJid, + getUrlInfo: text => getUrlInfo(text, { + thumbnailWidth: linkPreviewImageThumbnailWidth, + fetchOpts: { + timeout: 3000, + ...(httpRequestOptions || {}) + }, + logger, + uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined + }), + //TODO: CACHE + getProfilePicUrl: sock.profilePictureUrl, + getCallLink: sock.createCallLink, + upload: waUploadToServer, + mediaCache: config.mediaCache, + options: config.options, + messageId: generateMessageIDV2(sock.user?.id), + ...options + }); + const isEventMsg = typeof messageContent === 'object' && !!messageContent && 'event' in messageContent && !!messageContent.event; + const isDeleteMsg = typeof messageContent === 'object' && !!messageContent && 'delete' in messageContent && !!messageContent.delete; + const isEditMsg = typeof messageContent === 'object' && !!messageContent && 'edit' in messageContent && !!messageContent.edit; + const isPinMsg = typeof messageContent === 'object' && !!messageContent && 'pin' in messageContent && !!messageContent.pin; + const isPollMessage = typeof messageContent === 'object' && !!messageContent && 'poll' in messageContent && !!messageContent.poll;`; + + if (!next.includes("const isAiMsg = typeof messageContent === 'object'")) { + next = next.replace(originalSendBlock, patchedSendBlock); + } + + if (next.includes("if (isJidGroup(content.delete?.remoteJid) && !content.delete?.fromMe)")) { + next = next.replaceAll( + "if (isJidGroup(content.delete?.remoteJid) && !content.delete?.fromMe)", + "if (isJidGroup(messageContent.delete?.remoteJid) && !messageContent.delete?.fromMe)", + ); + } + + const originalEventBlock = ` else if (isEventMsg) { + additionalNodes.push({ + tag: 'meta', + attrs: { + event_type: 'creation' + } + }); + }`; + + const patchedEventBlock = ` else if (isEventMsg) { + additionalNodes.push({ + tag: 'meta', + attrs: { + event_type: 'creation' + } + }); + } + else if (isAiMsg) { + if (!(isPnUser(jid) || isLidUser(jid))) { + throw new Boom('AI labeled messages are only allowed in private chat', { + statusCode: 400 + }); + } + fullMsg.message.messageContextInfo ||= {}; + fullMsg.message.messageContextInfo.supportPayload = BIZ_BOT_SUPPORT_PAYLOAD; + additionalNodes.push({ + tag: 'bot', + attrs: { + biz_bot: '1' + }, + content: undefined + }); + }`; + + if (!next.includes("AI labeled messages are only allowed in private chat")) { + next = next.replace(originalEventBlock, patchedEventBlock); + } + + return next; +}); + +console.log("Patched Baileys ESM imports and AI label support."); From 8a5ec92e2acb655507418273d4ca6f76cfab49db Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 12:05:30 -0300 Subject: [PATCH 05/23] fix: normalize berry otp template text --- packages/berry-otp/src/index.ts | 102 ++++++++++++++++------------ packages/berry-otp/src/templates.ts | 16 ++--- 2 files changed, 68 insertions(+), 50 deletions(-) diff --git a/packages/berry-otp/src/index.ts b/packages/berry-otp/src/index.ts index b7f30e9..a6983d2 100644 --- a/packages/berry-otp/src/index.ts +++ b/packages/berry-otp/src/index.ts @@ -7,13 +7,13 @@ */ import crypto, { randomUUID } from "node:crypto"; import { EventEmitter } from "node:events"; -import { renderOTPTemplate } from "./templates.js"; import { MemoryOTPStore } from "./store.js"; +import { renderOTPTemplate } from "./templates.js"; import type { BerryOTPEventMap, BerryOTPOptions, - BerryOTPPublicRecord, BerryOTPRecord, + BerryOTPPublicRecord, BerryOTPSendOptions, BerryOTPSendResult, BerryOTPStatus, @@ -31,7 +31,13 @@ export interface BerryOTPClient { payload: { text: string; footer?: string; - buttons: Array<{ id: string; title: string; kind?: "reply" | "quick_reply" | "copy_code" | "cta_url"; code?: string; url?: string }>; + buttons: Array<{ + id: string; + title: string; + kind?: "reply" | "quick_reply" | "copy_code" | "cta_url"; + code?: string; + url?: string; + }>; }, ): Promise<{ id: string }>; sendText(to: string, text: string): Promise<{ id: string }>; @@ -55,7 +61,7 @@ const DEFAULTS: Required> = { issuer: "BerryOTP", codeLength: 6, ttlMs: 5 * 60 * 1000, - footer: "Este código dura {minutes} minutos.", + footer: "Este codigo dura {minutes} minutos.", editOnExpire: true, mode: "copy-code", maxAttempts: 5, @@ -64,13 +70,13 @@ const DEFAULTS: Required> = { }; const EXPIRED_TEXT = [ - "🔒 Código expirado", + "Codigo expirado", "", - "Este código não é mais válido.", - "Solicite um novo código para continuar.", + "Este codigo nao e mais valido.", + "Solicite um novo codigo para continuar.", ].join("\n"); -const DENIED_REPLY_TEXT = "Entendido. Esse código foi cancelado e não poderá ser usado."; +const DENIED_REPLY_TEXT = "Entendido. Esse codigo foi cancelado e nao podera ser usado."; export class BerryOTP extends EventEmitter { private readonly options: Required> & { store: BerryOTPStore }; @@ -115,42 +121,54 @@ export class BerryOTP extends EventEmitter { } static createLoginFlow(client: BerryOTPClient, options: BerryOTPOptions = {}): BerryOTP { - return new BerryOTP(client, { - ...options, - issuer: options.issuer ?? "Berry Login", - ttlMs: options.ttlMs ?? 5 * 60 * 1000, - }, { - template: "login", - purpose: "entrar na conta", - issuer: options.issuer ?? "Berry Login", - ttlMs: options.ttlMs ?? 5 * 60 * 1000, - }); + return new BerryOTP( + client, + { + ...options, + issuer: options.issuer ?? "Berry Login", + ttlMs: options.ttlMs ?? 5 * 60 * 1000, + }, + { + template: "login", + purpose: "entrar na conta", + issuer: options.issuer ?? "Berry Login", + ttlMs: options.ttlMs ?? 5 * 60 * 1000, + }, + ); } static createPasswordResetFlow(client: BerryOTPClient, options: BerryOTPOptions = {}): BerryOTP { - return new BerryOTP(client, { - ...options, - issuer: options.issuer ?? "Berry Password Reset", - ttlMs: options.ttlMs ?? 10 * 60 * 1000, - }, { - template: "password_reset", - purpose: "redefinir sua senha", - issuer: options.issuer ?? "Berry Password Reset", - ttlMs: options.ttlMs ?? 10 * 60 * 1000, - }); + return new BerryOTP( + client, + { + ...options, + issuer: options.issuer ?? "Berry Password Reset", + ttlMs: options.ttlMs ?? 10 * 60 * 1000, + }, + { + template: "password_reset", + purpose: "redefinir sua senha", + issuer: options.issuer ?? "Berry Password Reset", + ttlMs: options.ttlMs ?? 10 * 60 * 1000, + }, + ); } static create2FAFlow(client: BerryOTPClient, options: BerryOTPOptions = {}): BerryOTP { - return new BerryOTP(client, { - ...options, - issuer: options.issuer ?? "Berry 2FA", - ttlMs: options.ttlMs ?? 3 * 60 * 1000, - }, { - template: "2fa", - purpose: "confirmar sua autenticação em duas etapas", - issuer: options.issuer ?? "Berry 2FA", - ttlMs: options.ttlMs ?? 3 * 60 * 1000, - }); + return new BerryOTP( + client, + { + ...options, + issuer: options.issuer ?? "Berry 2FA", + ttlMs: options.ttlMs ?? 3 * 60 * 1000, + }, + { + template: "2fa", + purpose: "confirmar sua autenticacao em duas etapas", + issuer: options.issuer ?? "Berry 2FA", + ttlMs: options.ttlMs ?? 3 * 60 * 1000, + }, + ); } on( @@ -197,7 +215,7 @@ export class BerryOTP extends EventEmitter { buttons: [ { id: `berryotp:not_requested:${id}`, - title: "Não pedi nenhum código", + title: "Nao pedi nenhum codigo", }, ], }) @@ -208,13 +226,13 @@ export class BerryOTP extends EventEmitter { buttons: [ { id: `berryotp:copy:${id}`, - title: "Copiar código", + title: "Copiar codigo", kind: "copy_code", code, }, { id: `berryotp:not_requested:${id}`, - title: "Não pedi nenhum código", + title: "Nao pedi nenhum codigo", kind: "quick_reply", }, ], @@ -422,7 +440,7 @@ export class BerryOTP extends EventEmitter { return this.send(to, { ...options, template: "2fa", - purpose: "confirmar sua autenticação em duas etapas", + purpose: "confirmar sua autenticacao em duas etapas", metadata: { userId: options.userId, ...options.metadata, diff --git a/packages/berry-otp/src/templates.ts b/packages/berry-otp/src/templates.ts index 9ec0304..5ebbc39 100644 --- a/packages/berry-otp/src/templates.ts +++ b/packages/berry-otp/src/templates.ts @@ -17,9 +17,9 @@ export const renderOTPTemplate = ({ case "login": return { text: [ - "🔐 Código de login", + "Codigo de login", "", - "Use o código abaixo para entrar na sua conta:", + "Use o codigo abaixo para entrar na sua conta:", "", `*${code}*`, "", @@ -29,9 +29,9 @@ export const renderOTPTemplate = ({ case "password_reset": return { text: [ - "🔑 Redefinição de senha", + "Redefinicao de senha", "", - "Use o código abaixo para redefinir sua senha:", + "Use o codigo abaixo para redefinir sua senha:", "", `*${code}*`, "", @@ -41,9 +41,9 @@ export const renderOTPTemplate = ({ case "2fa": return { text: [ - "🛡️ Verificação em duas etapas", + "Verificacao em duas etapas", "", - "Use o código abaixo para continuar:", + "Use o codigo abaixo para continuar:", "", `*${code}*`, "", @@ -54,9 +54,9 @@ export const renderOTPTemplate = ({ default: return { text: [ - "🔐 Código de verificação", + "Codigo de verificacao", "", - `Use o código abaixo para ${purpose ?? "continuar"}:`, + `Use o codigo abaixo para ${purpose ?? "continuar"}:`, "", `*${code}*`, "", From 00564d8bcd44f8b8214beaae13bbb0fdb46ed8b1 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 12:12:48 -0300 Subject: [PATCH 06/23] fix: align docs app with current fumadocs stack --- Documentacao/app/global.css | 1 + Documentacao/app/layout.tsx | 2 +- Documentacao/package.json | 10 ++++++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Documentacao/app/global.css b/Documentacao/app/global.css index 9cf663e..4f55fb0 100644 --- a/Documentacao/app/global.css +++ b/Documentacao/app/global.css @@ -1,3 +1,4 @@ +@import 'tailwindcss'; @import 'fumadocs-ui/css/purple.css'; @import 'fumadocs-ui/css/preset.css'; diff --git a/Documentacao/app/layout.tsx b/Documentacao/app/layout.tsx index 50b7f06..ea19cf4 100644 --- a/Documentacao/app/layout.tsx +++ b/Documentacao/app/layout.tsx @@ -11,7 +11,7 @@ export const metadata: Metadata = { export default function RootLayout({ children }: { children: ReactNode }) { return ( - + Date: Wed, 13 May 2026 12:21:57 -0300 Subject: [PATCH 07/23] chore: move docs to standalone repository --- .gitignore | 1 + Documentacao/app/docs/berryotp/flows/page.tsx | 34 ------------ Documentacao/app/docs/berryotp/page.tsx | 34 ------------ .../app/docs/berryotp/quick-start/page.tsx | 47 ---------------- .../app/docs/berryotp/security/page.tsx | 31 ----------- .../app/docs/berryprotocol/ai-label/page.tsx | 35 ------------ .../berryprotocol/getting-started/page.tsx | 36 ------------- .../app/docs/berryprotocol/messaging/page.tsx | 53 ------------------ Documentacao/app/docs/berryprotocol/page.tsx | 35 ------------ Documentacao/app/docs/layout.tsx | 12 ----- Documentacao/app/global.css | 30 ----------- Documentacao/app/layout.tsx | 30 ----------- Documentacao/app/page.tsx | 34 ------------ Documentacao/components/docs-shell.tsx | 34 ------------ Documentacao/lib/docs-tree.ts | 27 ---------- Documentacao/lib/layout.shared.tsx | 54 ------------------- Documentacao/next-env.d.ts | 4 -- Documentacao/next.config.mjs | 8 --- Documentacao/package.json | 27 ---------- Documentacao/tsconfig.json | 23 -------- 20 files changed, 1 insertion(+), 588 deletions(-) delete mode 100644 Documentacao/app/docs/berryotp/flows/page.tsx delete mode 100644 Documentacao/app/docs/berryotp/page.tsx delete mode 100644 Documentacao/app/docs/berryotp/quick-start/page.tsx delete mode 100644 Documentacao/app/docs/berryotp/security/page.tsx delete mode 100644 Documentacao/app/docs/berryprotocol/ai-label/page.tsx delete mode 100644 Documentacao/app/docs/berryprotocol/getting-started/page.tsx delete mode 100644 Documentacao/app/docs/berryprotocol/messaging/page.tsx delete mode 100644 Documentacao/app/docs/berryprotocol/page.tsx delete mode 100644 Documentacao/app/docs/layout.tsx delete mode 100644 Documentacao/app/global.css delete mode 100644 Documentacao/app/layout.tsx delete mode 100644 Documentacao/app/page.tsx delete mode 100644 Documentacao/components/docs-shell.tsx delete mode 100644 Documentacao/lib/docs-tree.ts delete mode 100644 Documentacao/lib/layout.shared.tsx delete mode 100644 Documentacao/next-env.d.ts delete mode 100644 Documentacao/next.config.mjs delete mode 100644 Documentacao/package.json delete mode 100644 Documentacao/tsconfig.json diff --git a/.gitignore b/.gitignore index 97abbcc..eb27e6b 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ berrysdk.db _reference_baileys2 _vendor_whatsapp_proto _vendor_wppconnect_wa_proto +Documentacao/ diff --git a/Documentacao/app/docs/berryotp/flows/page.tsx b/Documentacao/app/docs/berryotp/flows/page.tsx deleted file mode 100644 index 10cb95e..0000000 --- a/Documentacao/app/docs/berryotp/flows/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryOtpFlowsPage() { - return ( - -

Login

-
-        {`const loginOtp = BerryOTP.createLoginFlow(client);
-await loginOtp.sendLoginCode(to, { userId: "abc" });
-await loginOtp.verifyLoginCode(to, code);`}
-      
-

Password reset

-
-        {`const resetOtp = BerryOTP.createPasswordResetFlow(client);
-await resetOtp.sendPasswordResetCode(to, { userId: "abc" });
-await resetOtp.verifyPasswordResetCode(to, code);`}
-      
-

2FA

-
-        {`const twoFAOtp = BerryOTP.create2FAFlow(client);
-await twoFAOtp.send2FACode(to, { userId: "abc" });
-await twoFAOtp.verify2FACode(to, code);`}
-      
-
- ); -} diff --git a/Documentacao/app/docs/berryotp/page.tsx b/Documentacao/app/docs/berryotp/page.tsx deleted file mode 100644 index f67cf5a..0000000 --- a/Documentacao/app/docs/berryotp/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryOtpOverviewPage() { - return ( - -

Introduction

-

- BerryOTP is the official OTP layer from BerrySDK. It was designed to send pretty, - interactive verification codes through WhatsApp Web without the official API. -

-

Modes

-
    -
  • stable
  • -
  • copy-code
  • -
  • experimental-copy-code
  • -
-

What it solves

-
    -
  • Login verification
  • -
  • Password reset
  • -
  • 2FA confirmation
  • -
  • Deny flow when the user did not request the code
  • -
-
- ); -} diff --git a/Documentacao/app/docs/berryotp/quick-start/page.tsx b/Documentacao/app/docs/berryotp/quick-start/page.tsx deleted file mode 100644 index cdbace4..0000000 --- a/Documentacao/app/docs/berryotp/quick-start/page.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryOtpQuickStartPage() { - return ( - -

Install

-
-        {`npm install berryprotocol berryotp`}
-      
-

Create the flow

-
-        {`import BerryProtocol from "berryprotocol";
-import { BerryOTP } from "berryotp";
-
-const client = new BerryProtocol({
-  sessionId: "otp-session",
-});
-
-const otp = BerryOTP.createLoginFlow(client, {
-  issuer: "BerryProtocol",
-  ttlMs: 2 * 60 * 1000,
-  mode: "copy-code",
-  editOnExpire: true,
-});`}
-      
-

Send code

-
-        {`await client.connectWithQr();
-
-const sent = await otp.sendLoginCode("5511999999999@s.whatsapp.net", {
-  userId: "user-001",
-  metadata: { source: "docs-example" },
-});
-
-console.log(sent);`}
-      
-
- ); -} diff --git a/Documentacao/app/docs/berryotp/security/page.tsx b/Documentacao/app/docs/berryotp/security/page.tsx deleted file mode 100644 index 20f714f..0000000 --- a/Documentacao/app/docs/berryotp/security/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryOtpSecurityPage() { - return ( - -

Storage

-

- BerryOTP does not store the raw OTP code. It generates a salt and stores only the - SHA-256 hash. -

-

Verification

-

- Verification uses timing-safe comparison and tracks attempts. When the maximum number - of attempts is reached, the OTP becomes blocked. -

-

Expiration

-

- When an OTP expires, BerryOTP can edit the original message through - client.editMessage(...) and mark it as no longer valid. -

-
- ); -} diff --git a/Documentacao/app/docs/berryprotocol/ai-label/page.tsx b/Documentacao/app/docs/berryprotocol/ai-label/page.tsx deleted file mode 100644 index 22ccf5e..0000000 --- a/Documentacao/app/docs/berryprotocol/ai-label/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryProtocolAiLabelPage() { - return ( - -

Usage

-
-        {`await client.sendMessage("5511999999999@s.whatsapp.net", {
-  text: "Hello! This message should show the AI label.",
-  ai: true,
-});`}
-      
-

Rules

-
    -
  • Only private chats are allowed.
  • -
  • Groups, newsletters, and status are blocked.
  • -
  • The feature is experimental and depends on WhatsApp Web behavior.
  • -
-

How it works

-

- BerrySDK patches the installed Baileys package during postinstall. The patch adds - supportPayload to messageContextInfo and injects a - <bot biz_bot="1" /> node in relayMessage. -

-
- ); -} diff --git a/Documentacao/app/docs/berryprotocol/getting-started/page.tsx b/Documentacao/app/docs/berryprotocol/getting-started/page.tsx deleted file mode 100644 index ce4d148..0000000 --- a/Documentacao/app/docs/berryprotocol/getting-started/page.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryProtocolGettingStartedPage() { - return ( - -

Install

-
-        {`npm install berryprotocol`}
-      
-

Create a client

-
-        {`import BerryProtocol from "berryprotocol";
-
-const client = new BerryProtocol({
-  sessionId: "store-001",
-});`}
-      
-

Connect

-
-        {`await client.connectWithQr();
-
-client.on("connection.open", (state) => {
-  console.log("connected", state);
-});`}
-      
-
- ); -} diff --git a/Documentacao/app/docs/berryprotocol/messaging/page.tsx b/Documentacao/app/docs/berryprotocol/messaging/page.tsx deleted file mode 100644 index f4dd9af..0000000 --- a/Documentacao/app/docs/berryprotocol/messaging/page.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryProtocolMessagingPage() { - return ( - -

Text

-
-        {`await client.sendText("5511999999999@s.whatsapp.net", "Hello from BerryProtocol");`}
-      
-

List

-

- BerryProtocol uses the legacy list path with listType: SINGLE_SELECT and - extra business nodes because that was the validated rendering path in real tests. -

-
-        {`await client.sendList("5511999999999@s.whatsapp.net", {
-  title: "Menu",
-  text: "Choose an option",
-  footer: "BerrySDK",
-  buttonText: "Open list",
-  sections: [
-    {
-      title: "Options",
-      rows: [{ id: "one", title: "Option 1" }],
-    },
-  ],
-});`}
-      
-

Native buttons

-
-        {`await client.sendMessage("5511999999999@s.whatsapp.net", {
-  buttonsMessage: {
-    text: "Choose a flow",
-    footer: "BerrySDK",
-    buttons: [
-      { id: "reply:1", title: "Quick reply", kind: "quick_reply" },
-      { id: "copy:1", title: "Copy code", kind: "copy_code", code: "BERRY10" },
-      { id: "url:1", title: "Open site", kind: "cta_url", url: "https://github.com/BerrySDK" },
-    ],
-  },
-});`}
-      
-
- ); -} diff --git a/Documentacao/app/docs/berryprotocol/page.tsx b/Documentacao/app/docs/berryprotocol/page.tsx deleted file mode 100644 index 0f995c1..0000000 --- a/Documentacao/app/docs/berryprotocol/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { DocsShell } from "@/components/docs-shell"; - -export default function BerryProtocolOverviewPage() { - return ( - -

Introduction

-

- BerryProtocol is the main developer-facing SDK from BerrySDK. It wraps the - WhatsApp Web transport with typed events, persistent sessions, list rendering - workarounds, native-flow buttons, and a higher-level API designed for production use. -

-

Why use it

-
    -
  • Connect with QR, link, or pairing code.
  • -
  • Send text, media, reply buttons, copy-code buttons, and lists.
  • -
  • Use the experimental AI label path in private chats.
  • -
  • Build on a modular workspace with Berry-owned wrappers.
  • -
-

Packages

-

- You can consume the SDK through berryprotocol or directly through - @berrysdk/core. Rich rendering paths are powered by - @berrysdk/socket and @berrysdk/wa-message. -

-
- ); -} diff --git a/Documentacao/app/docs/layout.tsx b/Documentacao/app/docs/layout.tsx deleted file mode 100644 index 71d1cc1..0000000 --- a/Documentacao/app/docs/layout.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { DocsLayout } from "fumadocs-ui/layouts/docs"; -import type { ReactNode } from "react"; -import { docsTree } from "@/lib/docs-tree"; -import { baseOptions } from "@/lib/layout.shared"; - -export default function Layout({ children }: { children: ReactNode }) { - return ( - - {children} - - ); -} diff --git a/Documentacao/app/global.css b/Documentacao/app/global.css deleted file mode 100644 index 4f55fb0..0000000 --- a/Documentacao/app/global.css +++ /dev/null @@ -1,30 +0,0 @@ -@import 'tailwindcss'; -@import 'fumadocs-ui/css/purple.css'; -@import 'fumadocs-ui/css/preset.css'; - -:root { - --fd-layout-width: 1440px; - --fd-nav-height: 72px; -} - -html, -body { - min-height: 100%; -} - -body { - background: - radial-gradient(circle at top, rgba(124, 58, 237, 0.24), transparent 35%), - linear-gradient(180deg, rgba(10, 10, 14, 1) 0%, rgba(10, 10, 14, 1) 100%); -} - -.berry-hero { - border: 1px solid rgba(168, 85, 247, 0.2); - background: linear-gradient(135deg, rgba(88, 28, 135, 0.28), rgba(76, 29, 149, 0.12)); - box-shadow: 0 20px 80px rgba(76, 29, 149, 0.22); -} - -.berry-card { - border: 1px solid rgba(168, 85, 247, 0.18); - background: rgba(17, 17, 24, 0.82); -} diff --git a/Documentacao/app/layout.tsx b/Documentacao/app/layout.tsx deleted file mode 100644 index ea19cf4..0000000 --- a/Documentacao/app/layout.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import "./global.css"; -import type { Metadata } from "next"; -import type { ReactNode } from "react"; -import { RootProvider } from "fumadocs-ui/provider/next"; - -export const metadata: Metadata = { - title: "BerrySDK Documentation", - description: "Official documentation for BerryProtocol and BerryOTP.", -}; - -export default function RootLayout({ children }: { children: ReactNode }) { - return ( - - - - {children} - - - - ); -} diff --git a/Documentacao/app/page.tsx b/Documentacao/app/page.tsx deleted file mode 100644 index 68c58be..0000000 --- a/Documentacao/app/page.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import Link from "next/link"; - -export default function HomePage() { - return ( -
-
-
- BerrySDK Documentation -
-

- Use BerryProtocol and BerryOTP with a docs experience inspired by Fumadocs. -

-

- Learn how to connect to WhatsApp Web, send rich messages, use AI label support, - and build OTP flows with copy-code, quick reply, and expiration logic. -

-
- - Open BerryProtocol Docs - - - Open BerryOTP Docs - -
-
-
- ); -} diff --git a/Documentacao/components/docs-shell.tsx b/Documentacao/components/docs-shell.tsx deleted file mode 100644 index 05900d9..0000000 --- a/Documentacao/components/docs-shell.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { DocsBody, DocsDescription, DocsPage, DocsTitle } from "fumadocs-ui/layouts/docs/page"; -import type { ReactNode } from "react"; - -export interface TocItem { - title: string; - url: string; - depth?: number; -} - -export function DocsShell({ - title, - description, - toc, - children, -}: { - title: string; - description: string; - toc?: TocItem[]; - children: ReactNode; -}) { - return ( - - {title} - {description} - {children} - - ); -} diff --git a/Documentacao/lib/docs-tree.ts b/Documentacao/lib/docs-tree.ts deleted file mode 100644 index cd84bc8..0000000 --- a/Documentacao/lib/docs-tree.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const docsTree = { - name: "BerrySDK Docs", - children: [ - { - type: "folder", - name: "berryprotocol", - icon: "Package2", - children: [ - { type: "page", name: "index", url: "/docs/berryprotocol" }, - { type: "page", name: "getting-started", url: "/docs/berryprotocol/getting-started" }, - { type: "page", name: "messaging", url: "/docs/berryprotocol/messaging" }, - { type: "page", name: "ai-label", url: "/docs/berryprotocol/ai-label" } - ] - }, - { - type: "folder", - name: "berryotp", - icon: "ShieldCheck", - children: [ - { type: "page", name: "index", url: "/docs/berryotp" }, - { type: "page", name: "quick-start", url: "/docs/berryotp/quick-start" }, - { type: "page", name: "flows", url: "/docs/berryotp/flows" }, - { type: "page", name: "security", url: "/docs/berryotp/security" } - ] - } - ] -} as const; diff --git a/Documentacao/lib/layout.shared.tsx b/Documentacao/lib/layout.shared.tsx deleted file mode 100644 index 82bef75..0000000 --- a/Documentacao/lib/layout.shared.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { BookOpen, Github, LifeBuoy, Package2, ShieldCheck } from "lucide-react"; - -export function baseOptions() { - return { - nav: { - title: ( -
- - - - BerrySDK -
- ), - }, - links: [ - { - text: "BerryProtocol", - url: "/docs/berryprotocol", - icon: , - }, - { - text: "BerryOTP", - url: "/docs/berryotp", - icon: , - }, - { - text: "Support", - url: "https://github.com/BerrySDK/BerryProtocol/issues", - icon: , - }, - ], - githubUrl: "https://github.com/BerrySDK/BerryProtocol", - themeSwitch: { - enabled: true, - }, - searchToggle: { - enabled: true, - }, - sidebar: { - defaultOpenLevel: 1, - banner: ( -
- BerrySDK docs for WhatsApp workflows, native-flow, AI label, and OTP. -
- ), - }, - footer: ( -
- - Built by BerrySDK -
- ), - }; -} diff --git a/Documentacao/next-env.d.ts b/Documentacao/next-env.d.ts deleted file mode 100644 index 195109d..0000000 --- a/Documentacao/next-env.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -/// - -// This file is automatically generated by Next.js diff --git a/Documentacao/next.config.mjs b/Documentacao/next.config.mjs deleted file mode 100644 index 08e7827..0000000 --- a/Documentacao/next.config.mjs +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - typedRoutes: true, - }, -}; - -export default nextConfig; diff --git a/Documentacao/package.json b/Documentacao/package.json deleted file mode 100644 index e77630e..0000000 --- a/Documentacao/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "berrysdk-docs", - "private": true, - "version": "0.1.0", - "type": "module", - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "fumadocs-core": "^16.8.10", - "fumadocs-ui": "^16.8.10", - "lucide-react": "^0.511.0", - "next": "^16.0.0", - "react": "^19.2.0", - "react-dom": "^19.2.0", - "tailwindcss": "^4.1.16" - }, - "devDependencies": { - "@types/node": "^22.15.3", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "typescript": "^5.8.3" - } -} diff --git a/Documentacao/tsconfig.json b/Documentacao/tsconfig.json deleted file mode 100644 index 0bd46a3..0000000 --- a/Documentacao/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "lib": ["dom", "dom.iterable", "es2022"], - "allowJs": false, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "ESNext", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "baseUrl": ".", - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} From 56120ac6e1c7749fdf4b8315e58c454feae0b8b5 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 12:42:16 -0300 Subject: [PATCH 08/23] fix: expose cjs-compatible package exports --- examples/npm-consumer/package.json | 4 ++-- packages/berry-otp/package.json | 6 ++++-- packages/berryotp/package.json | 8 +++++--- packages/berryprotocol/package.json | 8 +++++--- packages/core/package.json | 6 ++++-- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/examples/npm-consumer/package.json b/examples/npm-consumer/package.json index 31ad65a..348e551 100644 --- a/examples/npm-consumer/package.json +++ b/examples/npm-consumer/package.json @@ -7,7 +7,7 @@ "start": "node test-from-npm.mjs" }, "dependencies": { - "berryprotocol": "^0.1.3", - "berryotp": "^0.1.3" + "berryprotocol": "^0.1.4", + "berryotp": "^0.1.4" } } diff --git a/packages/berry-otp/package.json b/packages/berry-otp/package.json index 7992452..2f7f7c2 100644 --- a/packages/berry-otp/package.json +++ b/packages/berry-otp/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/berry-otp", - "version": "0.1.3", + "version": "0.1.4", "description": "Official OTP flows for Berry SDK on top of WhatsApp native-flow and fallback buttons.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -14,7 +14,9 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.js" + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" } }, "publishConfig": { diff --git a/packages/berryotp/package.json b/packages/berryotp/package.json index b52870a..af50859 100644 --- a/packages/berryotp/package.json +++ b/packages/berryotp/package.json @@ -1,6 +1,6 @@ { "name": "berryotp", - "version": "0.1.3", + "version": "0.1.4", "description": "Facade package for BerryOTP so consumers can import it without the @berrysdk scope.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -14,13 +14,15 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.js" + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" } }, "publishConfig": { "access": "public" }, "dependencies": { - "@berrysdk/berry-otp": "0.1.3" + "@berrysdk/berry-otp": "0.1.4" } } diff --git a/packages/berryprotocol/package.json b/packages/berryprotocol/package.json index 69295bc..2333f8e 100644 --- a/packages/berryprotocol/package.json +++ b/packages/berryprotocol/package.json @@ -1,6 +1,6 @@ { "name": "berryprotocol", - "version": "0.1.3", + "version": "0.1.4", "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -14,13 +14,15 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.js" + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" } }, "publishConfig": { "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.3" + "@berrysdk/core": "0.1.4" } } diff --git a/packages/core/package.json b/packages/core/package.json index 7c05d47..fa211c2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/core", - "version": "0.1.3", + "version": "0.1.4", "description": "Public SDK for Berry Protocol WhatsApp integrations.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -13,7 +13,9 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.js" + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" } }, "publishConfig": { From ce2b83ebc48e38766fbdcc6dcfc6243d58b1b64e Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 13:00:06 -0300 Subject: [PATCH 09/23] feat: add internal transport layer and qr terminal support --- README.md | 4 ++-- examples/npm-consumer/package.json | 4 ++-- package.json | 2 +- packages/berry-otp/package.json | 2 +- packages/berryotp/package.json | 7 +++++-- packages/berryprotocol/package.json | 4 ++-- packages/core/package.json | 5 +++-- packages/core/src/index.ts | 10 +++++++++- packages/socket/package.json | 4 ++-- packages/socket/src/index.ts | 2 +- packages/socket/tsconfig.json | 3 +++ packages/transport/package.json | 27 +++++++++++++++++++++++++++ packages/transport/src/index.ts | 24 ++++++++++++++++++++++++ packages/transport/tsconfig.json | 12 ++++++++++++ packages/wa-message/package.json | 2 +- packages/wa-message/src/index.ts | 2 +- packages/wa-message/tsconfig.json | 3 +++ 17 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 packages/transport/package.json create mode 100644 packages/transport/src/index.ts create mode 100644 packages/transport/tsconfig.json diff --git a/README.md b/README.md index 3f54015..cef7d78 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ BerryProtocol is a modular TypeScript SDK for connecting to the real WhatsApp Web stack. -Internally it uses Baileys as the transport engine, while exposing a BerryProtocol API focused on: +Internally it uses a BerrySDK transport engine, while exposing a BerryProtocol API focused on: - modular architecture - typed events @@ -800,4 +800,4 @@ Use `qr` if you want a renderable terminal QR instead. ## Important note -BerryProtocol is operational through Baileys as the underlying WhatsApp Web implementation. The Berry layer focuses on API shape, modularity, persistence, and operational ergonomics on top of that real transport. +BerryProtocol is operational through the BerrySDK transport layer for WhatsApp Web. The Berry layer focuses on API shape, modularity, persistence, and operational ergonomics on top of that real transport. diff --git a/examples/npm-consumer/package.json b/examples/npm-consumer/package.json index 348e551..756b17e 100644 --- a/examples/npm-consumer/package.json +++ b/examples/npm-consumer/package.json @@ -7,7 +7,7 @@ "start": "node test-from-npm.mjs" }, "dependencies": { - "berryprotocol": "^0.1.4", - "berryotp": "^0.1.4" + "berryprotocol": "^0.1.5", + "berryotp": "^0.1.5" } } diff --git a/package.json b/package.json index 5b9c0f7..0233d54 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "scripts": { "postinstall": "node scripts/patch-baileys-esm.mjs", - "build": "tsc -b packages/events packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli", + "build": "tsc -b packages/events packages/transport packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli", "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName \u0027dist\u0027) -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName \u0027.tsbuildinfo\u0027) -ErrorAction SilentlyContinue }\"", "prepare:publish": "npm run clean \u0026\u0026 npm run build", "pack:check": "npm pack --workspaces --json", diff --git a/packages/berry-otp/package.json b/packages/berry-otp/package.json index 2f7f7c2..d937deb 100644 --- a/packages/berry-otp/package.json +++ b/packages/berry-otp/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/berry-otp", - "version": "0.1.4", + "version": "0.1.5", "description": "Official OTP flows for Berry SDK on top of WhatsApp native-flow and fallback buttons.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", diff --git a/packages/berryotp/package.json b/packages/berryotp/package.json index af50859..6a7bec7 100644 --- a/packages/berryotp/package.json +++ b/packages/berryotp/package.json @@ -1,6 +1,6 @@ { "name": "berryotp", - "version": "0.1.4", + "version": "0.1.5", "description": "Facade package for BerryOTP so consumers can import it without the @berrysdk scope.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,6 +23,9 @@ "access": "public" }, "dependencies": { - "@berrysdk/berry-otp": "0.1.4" + "@berrysdk/berry-otp": "0.1.5" + }, + "peerDependencies": { + "berryprotocol": "^0.1.5" } } diff --git a/packages/berryprotocol/package.json b/packages/berryprotocol/package.json index 2333f8e..73089d8 100644 --- a/packages/berryprotocol/package.json +++ b/packages/berryprotocol/package.json @@ -1,6 +1,6 @@ { "name": "berryprotocol", - "version": "0.1.4", + "version": "0.1.5", "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,6 +23,6 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.4" + "@berrysdk/core": "0.1.5" } } diff --git a/packages/core/package.json b/packages/core/package.json index fa211c2..511a408 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/core", - "version": "0.1.4", + "version": "0.1.5", "description": "Public SDK for Berry Protocol WhatsApp integrations.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -28,6 +28,7 @@ "@berrysdk/messages": "0.1.1", "@berrysdk/socket": "0.1.3", "@berrysdk/store": "0.1.1", - "pino": "^9.6.0" + "pino": "^9.6.0", + "qrcode-terminal": "^0.12.0" } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 4c51ce8..4af4ab7 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -6,10 +6,10 @@ * @author Lipe Devv and Berry Protocol */ import pino, { type Logger } from "pino"; +import qrcode from "qrcode-terminal"; import { randomUUID } from "node:crypto"; import { type URL } from "node:url"; import { SessionManager, SQLiteSessionStore } from "@berrysdk/auth"; -import { type AnyMessageContent } from "baileys"; import { type BerryAuthOptions, BerryEventBus, @@ -43,6 +43,8 @@ export interface BerryClientOptions { logger?: Logger; reconnectMaxAttempts?: number; reconnectDelayMs?: number; + printQrInTerminal?: boolean; + qrSmall?: boolean; } type BerryMediaSource = Buffer | { url: string | URL }; @@ -583,6 +585,12 @@ export class BerryClient { authMethod: "qr", qr: value, }); + + if (this.options.printQrInTerminal !== false) { + qrcode.generate(value, { + small: this.options.qrSmall ?? true, + }); + } }); this.bus.on("auth.pairing_code", async ({ code }) => { diff --git a/packages/socket/package.json b/packages/socket/package.json index 0f1f401..2124ca2 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -1,7 +1,7 @@ { "name": "@berrysdk/socket", "version": "0.1.3", - "description": "Baileys-based transport adapter for Berry Protocol.", + "description": "Internal transport adapter for Berry Protocol.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", @@ -26,8 +26,8 @@ "dependencies": { "@berrysdk/events": "0.1.1", "@berrysdk/proto": "0.1.1", + "@berrysdk/transport": "0.1.0", "@berrysdk/wa-message": "0.1.1", - "baileys": "7.0.0-rc10", "pino": "^9.6.0", "ws": "^8.18.1" } diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index 27e663f..4f60392 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -17,7 +17,7 @@ import makeWASocket, { useMultiFileAuthState, type WAMessage, type WASocket, -} from "baileys"; +} from "@berrysdk/transport"; import pino, { type Logger } from "pino"; import { type BerryAuthOptions, diff --git a/packages/socket/tsconfig.json b/packages/socket/tsconfig.json index c58438f..e122c94 100644 --- a/packages/socket/tsconfig.json +++ b/packages/socket/tsconfig.json @@ -16,6 +16,9 @@ { "path": "../protocol" }, + { + "path": "../transport" + }, { "path": "../wa-message" } diff --git a/packages/transport/package.json b/packages/transport/package.json new file mode 100644 index 0000000..748592d --- /dev/null +++ b/packages/transport/package.json @@ -0,0 +1,27 @@ +{ + "name": "@berrysdk/transport", + "version": "0.1.0", + "description": "Internal WhatsApp Web transport layer for BerrySDK.", + "author": "BerrySDK", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "baileys": "7.0.0-rc10" + } +} diff --git a/packages/transport/src/index.ts b/packages/transport/src/index.ts new file mode 100644 index 0000000..aec9911 --- /dev/null +++ b/packages/transport/src/index.ts @@ -0,0 +1,24 @@ +/** + * @module modulo + * @description Enhanced message sending capabilities including albums, cards, + * interactive buttons, and rich media support beyond standard WhatsApp messages. + * @license Apache-2.0 + * @author Lipe Devv and Berry Protocol + */ +export { + default, + DisconnectReason, + downloadMediaMessage, + fetchLatestBaileysVersion, + generateWAMessageFromContent, + makeCacheableSignalKeyStore, + proto, + useMultiFileAuthState, +} from "baileys"; + +export type { + AnyMessageContent, + BinaryNode, + WAMessage, + WASocket, +} from "baileys"; diff --git a/packages/transport/tsconfig.json b/packages/transport/tsconfig.json new file mode 100644 index 0000000..3dbeef4 --- /dev/null +++ b/packages/transport/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ] +} diff --git a/packages/wa-message/package.json b/packages/wa-message/package.json index 06cc55f..6dd632f 100644 --- a/packages/wa-message/package.json +++ b/packages/wa-message/package.json @@ -22,6 +22,6 @@ "dependencies": { "@berrysdk/events": "0.1.1", "@berrysdk/proto": "0.1.1", - "baileys": "7.0.0-rc10" + "@berrysdk/transport": "0.1.0" } } diff --git a/packages/wa-message/src/index.ts b/packages/wa-message/src/index.ts index 17b6be0..136ba86 100644 --- a/packages/wa-message/src/index.ts +++ b/packages/wa-message/src/index.ts @@ -13,7 +13,7 @@ import { type ListPayload, type MessageAck, } from "@berrysdk/events"; -import { proto, type BinaryNode, type WAMessage } from "baileys"; +import { proto, type BinaryNode, type WAMessage } from "@berrysdk/transport"; const parseJsonObject = (value?: string | null): Record | null => { if (!value) { diff --git a/packages/wa-message/tsconfig.json b/packages/wa-message/tsconfig.json index 7f7ff28..879348c 100644 --- a/packages/wa-message/tsconfig.json +++ b/packages/wa-message/tsconfig.json @@ -13,6 +13,9 @@ { "path": "../events" }, + { + "path": "../transport" + }, { "path": "../protocol" } From 1e4b4f2637d8a6ed77d98adddc56a06eba900090 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 13:22:05 -0300 Subject: [PATCH 10/23] feat: vendor berry transport runtime and drop direct baileys dependency --- README.md | 93 +- examples/npm-consumer/package.json | 4 +- package-lock.json | 6858 +- package.json | 5 +- packages/berry-otp/package.json | 7 +- packages/berryotp/package.json | 6 +- packages/berryprotocol/README.md | 4 +- packages/berryprotocol/package.json | 4 +- packages/cli/package.json | 4 +- packages/core/package.json | 4 +- packages/core/src/index.ts | 17 +- packages/gateway/package.json | 4 +- packages/socket/package.json | 12 +- .../scripts/patch-installed-baileys.mjs | 196 - packages/socket/src/index.ts | 8 +- packages/transport/package.json | 39 +- packages/transport/src/index.ts | 5 +- .../vendor/WAProto/GenerateStatics.sh | 3 + .../transport/vendor/WAProto/WAProto.proto | 5479 + .../transport/vendor/WAProto/fix-imports.js | 85 + packages/transport/vendor/WAProto/index.d.ts | 14017 +++ packages/transport/vendor/WAProto/index.js | 97691 ++++++++++++++++ .../transport/vendor/lib/Defaults/index.d.ts | 75 + .../vendor/lib/Defaults/index.d.ts.map | 1 + .../transport/vendor/lib/Defaults/index.js | 129 + .../vendor/lib/Defaults/index.js.map | 1 + .../lib/Signal/Group/ciphertext-message.d.ts | 10 + .../Signal/Group/ciphertext-message.d.ts.map | 1 + .../lib/Signal/Group/ciphertext-message.js | 12 + .../Signal/Group/ciphertext-message.js.map | 1 + .../Signal/Group/group-session-builder.d.ts | 15 + .../Group/group-session-builder.d.ts.map | 1 + .../lib/Signal/Group/group-session-builder.js | 30 + .../Signal/Group/group-session-builder.js.map | 1 + .../vendor/lib/Signal/Group/group_cipher.d.ts | 17 + .../lib/Signal/Group/group_cipher.d.ts.map | 1 + .../vendor/lib/Signal/Group/group_cipher.js | 82 + .../lib/Signal/Group/group_cipher.js.map | 1 + .../vendor/lib/Signal/Group/index.d.ts | 12 + .../vendor/lib/Signal/Group/index.d.ts.map | 1 + .../vendor/lib/Signal/Group/index.js | 12 + .../vendor/lib/Signal/Group/index.js.map | 1 + .../vendor/lib/Signal/Group/keyhelper.d.ts | 11 + .../lib/Signal/Group/keyhelper.d.ts.map | 1 + .../vendor/lib/Signal/Group/keyhelper.js | 18 + .../vendor/lib/Signal/Group/keyhelper.js.map | 1 + .../lib/Signal/Group/sender-chain-key.d.ts | 14 + .../Signal/Group/sender-chain-key.d.ts.map | 1 + .../lib/Signal/Group/sender-chain-key.js | 26 + .../lib/Signal/Group/sender-chain-key.js.map | 1 + .../sender-key-distribution-message.d.ts | 17 + .../sender-key-distribution-message.d.ts.map | 1 + .../Group/sender-key-distribution-message.js | 63 + .../sender-key-distribution-message.js.map | 1 + .../lib/Signal/Group/sender-key-message.d.ts | 19 + .../Signal/Group/sender-key-message.d.ts.map | 1 + .../lib/Signal/Group/sender-key-message.js | 66 + .../Signal/Group/sender-key-message.js.map | 1 + .../lib/Signal/Group/sender-key-name.d.ts | 18 + .../lib/Signal/Group/sender-key-name.d.ts.map | 1 + .../lib/Signal/Group/sender-key-name.js | 48 + .../lib/Signal/Group/sender-key-name.js.map | 1 + .../lib/Signal/Group/sender-key-record.d.ts | 31 + .../Signal/Group/sender-key-record.d.ts.map | 1 + .../lib/Signal/Group/sender-key-record.js | 41 + .../lib/Signal/Group/sender-key-record.js.map | 1 + .../lib/Signal/Group/sender-key-state.d.ts | 39 + .../Signal/Group/sender-key-state.d.ts.map | 1 + .../lib/Signal/Group/sender-key-state.js | 84 + .../lib/Signal/Group/sender-key-state.js.map | 1 + .../lib/Signal/Group/sender-message-key.d.ts | 12 + .../Signal/Group/sender-message-key.d.ts.map | 1 + .../lib/Signal/Group/sender-message-key.js | 26 + .../Signal/Group/sender-message-key.js.map | 1 + .../vendor/lib/Signal/libsignal.d.ts | 5 + .../vendor/lib/Signal/libsignal.d.ts.map | 1 + .../transport/vendor/lib/Signal/libsignal.js | 431 + .../vendor/lib/Signal/libsignal.js.map | 1 + .../vendor/lib/Signal/lid-mapping.d.ts | 23 + .../vendor/lib/Signal/lid-mapping.d.ts.map | 1 + .../vendor/lib/Signal/lid-mapping.js | 277 + .../vendor/lib/Signal/lid-mapping.js.map | 1 + .../vendor/lib/Socket/Client/index.d.ts | 3 + .../vendor/lib/Socket/Client/index.d.ts.map | 1 + .../vendor/lib/Socket/Client/index.js | 3 + .../vendor/lib/Socket/Client/index.js.map | 1 + .../vendor/lib/Socket/Client/types.d.ts | 16 + .../vendor/lib/Socket/Client/types.d.ts.map | 1 + .../vendor/lib/Socket/Client/types.js | 11 + .../vendor/lib/Socket/Client/types.js.map | 1 + .../vendor/lib/Socket/Client/websocket.d.ts | 13 + .../lib/Socket/Client/websocket.d.ts.map | 1 + .../vendor/lib/Socket/Client/websocket.js | 54 + .../vendor/lib/Socket/Client/websocket.js.map | 1 + .../transport/vendor/lib/Socket/business.d.ts | 217 + .../vendor/lib/Socket/business.d.ts.map | 1 + .../transport/vendor/lib/Socket/business.js | 379 + .../vendor/lib/Socket/business.js.map | 1 + .../transport/vendor/lib/Socket/chats.d.ts | 124 + .../vendor/lib/Socket/chats.d.ts.map | 1 + packages/transport/vendor/lib/Socket/chats.js | 1192 + .../transport/vendor/lib/Socket/chats.js.map | 1 + .../vendor/lib/Socket/communities.d.ts | 273 + .../vendor/lib/Socket/communities.d.ts.map | 1 + .../vendor/lib/Socket/communities.js | 431 + .../vendor/lib/Socket/communities.js.map | 1 + .../transport/vendor/lib/Socket/groups.d.ts | 161 + .../vendor/lib/Socket/groups.d.ts.map | 1 + .../transport/vendor/lib/Socket/groups.js | 347 + .../transport/vendor/lib/Socket/groups.js.map | 1 + .../transport/vendor/lib/Socket/index.d.ts | 260 + .../vendor/lib/Socket/index.d.ts.map | 1 + packages/transport/vendor/lib/Socket/index.js | 12 + .../transport/vendor/lib/Socket/index.js.map | 1 + .../vendor/lib/Socket/messages-recv.d.ts | 203 + .../vendor/lib/Socket/messages-recv.d.ts.map | 1 + .../vendor/lib/Socket/messages-recv.js | 1772 + .../vendor/lib/Socket/messages-recv.js.map | 1 + .../vendor/lib/Socket/messages-send.d.ts | 199 + .../vendor/lib/Socket/messages-send.d.ts.map | 1 + .../vendor/lib/Socket/messages-send.js | 1172 + .../vendor/lib/Socket/messages-send.js.map | 1 + packages/transport/vendor/lib/Socket/mex.d.ts | 3 + .../transport/vendor/lib/Socket/mex.d.ts.map | 1 + packages/transport/vendor/lib/Socket/mex.js | 42 + .../transport/vendor/lib/Socket/mex.js.map | 1 + .../vendor/lib/Socket/newsletter.d.ts | 170 + .../vendor/lib/Socket/newsletter.d.ts.map | 1 + .../transport/vendor/lib/Socket/newsletter.js | 181 + .../vendor/lib/Socket/newsletter.js.map | 1 + .../transport/vendor/lib/Socket/socket.d.ts | 59 + .../vendor/lib/Socket/socket.d.ts.map | 1 + .../transport/vendor/lib/Socket/socket.js | 967 + .../transport/vendor/lib/Socket/socket.js.map | 1 + packages/transport/vendor/lib/Types/Auth.d.ts | 117 + .../transport/vendor/lib/Types/Auth.d.ts.map | 1 + packages/transport/vendor/lib/Types/Auth.js | 2 + .../transport/vendor/lib/Types/Auth.js.map | 1 + .../transport/vendor/lib/Types/Bussines.d.ts | 25 + .../vendor/lib/Types/Bussines.d.ts.map | 1 + .../transport/vendor/lib/Types/Bussines.js | 2 + .../vendor/lib/Types/Bussines.js.map | 1 + packages/transport/vendor/lib/Types/Call.d.ts | 15 + .../transport/vendor/lib/Types/Call.d.ts.map | 1 + packages/transport/vendor/lib/Types/Call.js | 2 + .../transport/vendor/lib/Types/Call.js.map | 1 + packages/transport/vendor/lib/Types/Chat.d.ts | 123 + .../transport/vendor/lib/Types/Chat.d.ts.map | 1 + packages/transport/vendor/lib/Types/Chat.js | 8 + .../transport/vendor/lib/Types/Chat.js.map | 1 + .../transport/vendor/lib/Types/Contact.d.ts | 26 + .../vendor/lib/Types/Contact.d.ts.map | 1 + .../transport/vendor/lib/Types/Contact.js | 2 + .../transport/vendor/lib/Types/Contact.js.map | 1 + .../transport/vendor/lib/Types/Events.d.ts | 256 + .../vendor/lib/Types/Events.d.ts.map | 1 + packages/transport/vendor/lib/Types/Events.js | 2 + .../transport/vendor/lib/Types/Events.js.map | 1 + .../vendor/lib/Types/GroupMetadata.d.ts | 71 + .../vendor/lib/Types/GroupMetadata.d.ts.map | 1 + .../vendor/lib/Types/GroupMetadata.js | 2 + .../vendor/lib/Types/GroupMetadata.js.map | 1 + .../transport/vendor/lib/Types/Label.d.ts | 47 + .../transport/vendor/lib/Types/Label.d.ts.map | 1 + packages/transport/vendor/lib/Types/Label.js | 25 + .../transport/vendor/lib/Types/Label.js.map | 1 + .../vendor/lib/Types/LabelAssociation.d.ts | 30 + .../lib/Types/LabelAssociation.d.ts.map | 1 + .../vendor/lib/Types/LabelAssociation.js | 7 + .../vendor/lib/Types/LabelAssociation.js.map | 1 + .../transport/vendor/lib/Types/Message.d.ts | 322 + .../vendor/lib/Types/Message.d.ts.map | 1 + .../transport/vendor/lib/Types/Message.js | 11 + .../transport/vendor/lib/Types/Message.js.map | 1 + packages/transport/vendor/lib/Types/Mex.d.ts | 141 + .../transport/vendor/lib/Types/Mex.d.ts.map | 1 + packages/transport/vendor/lib/Types/Mex.js | 37 + .../transport/vendor/lib/Types/Mex.js.map | 1 + .../transport/vendor/lib/Types/Product.d.ts | 79 + .../vendor/lib/Types/Product.d.ts.map | 1 + .../transport/vendor/lib/Types/Product.js | 2 + .../transport/vendor/lib/Types/Product.js.map | 1 + .../transport/vendor/lib/Types/Signal.d.ts | 87 + .../vendor/lib/Types/Signal.d.ts.map | 1 + packages/transport/vendor/lib/Types/Signal.js | 2 + .../transport/vendor/lib/Types/Signal.js.map | 1 + .../transport/vendor/lib/Types/Socket.d.ts | 136 + .../vendor/lib/Types/Socket.d.ts.map | 1 + packages/transport/vendor/lib/Types/Socket.js | 3 + .../transport/vendor/lib/Types/Socket.js.map | 1 + .../transport/vendor/lib/Types/State.d.ts | 97 + .../transport/vendor/lib/Types/State.d.ts.map | 1 + packages/transport/vendor/lib/Types/State.js | 56 + .../transport/vendor/lib/Types/State.js.map | 1 + .../transport/vendor/lib/Types/USync.d.ts | 26 + .../transport/vendor/lib/Types/USync.d.ts.map | 1 + packages/transport/vendor/lib/Types/USync.js | 2 + .../transport/vendor/lib/Types/USync.js.map | 1 + .../transport/vendor/lib/Types/index.d.ts | 65 + .../transport/vendor/lib/Types/index.d.ts.map | 1 + packages/transport/vendor/lib/Types/index.js | 26 + .../transport/vendor/lib/Types/index.js.map | 1 + .../vendor/lib/Utils/auth-utils.d.ts | 24 + .../vendor/lib/Utils/auth-utils.d.ts.map | 1 + .../transport/vendor/lib/Utils/auth-utils.js | 302 + .../vendor/lib/Utils/auth-utils.js.map | 1 + .../vendor/lib/Utils/browser-utils.d.ts | 4 + .../vendor/lib/Utils/browser-utils.d.ts.map | 1 + .../vendor/lib/Utils/browser-utils.js | 28 + .../vendor/lib/Utils/browser-utils.js.map | 1 + .../transport/vendor/lib/Utils/business.d.ts | 23 + .../vendor/lib/Utils/business.d.ts.map | 1 + .../transport/vendor/lib/Utils/business.js | 231 + .../vendor/lib/Utils/business.js.map | 1 + .../vendor/lib/Utils/chat-utils.d.ts | 100 + .../vendor/lib/Utils/chat-utils.d.ts.map | 1 + .../transport/vendor/lib/Utils/chat-utils.js | 872 + .../vendor/lib/Utils/chat-utils.js.map | 1 + .../lib/Utils/companion-reg-client-utils.d.ts | 17 + .../Utils/companion-reg-client-utils.d.ts.map | 1 + .../lib/Utils/companion-reg-client-utils.js | 35 + .../Utils/companion-reg-client-utils.js.map | 1 + .../transport/vendor/lib/Utils/crypto.d.ts | 37 + .../vendor/lib/Utils/crypto.d.ts.map | 1 + packages/transport/vendor/lib/Utils/crypto.js | 118 + .../transport/vendor/lib/Utils/crypto.js.map | 1 + .../vendor/lib/Utils/decode-wa-message.d.ts | 66 + .../lib/Utils/decode-wa-message.d.ts.map | 1 + .../vendor/lib/Utils/decode-wa-message.js | 311 + .../vendor/lib/Utils/decode-wa-message.js.map | 1 + .../vendor/lib/Utils/event-buffer.d.ts | 36 + .../vendor/lib/Utils/event-buffer.d.ts.map | 1 + .../vendor/lib/Utils/event-buffer.js | 622 + .../vendor/lib/Utils/event-buffer.js.map | 1 + .../transport/vendor/lib/Utils/generics.d.ts | 91 + .../vendor/lib/Utils/generics.d.ts.map | 1 + .../transport/vendor/lib/Utils/generics.js | 393 + .../vendor/lib/Utils/generics.js.map | 1 + .../transport/vendor/lib/Utils/history.d.ts | 24 + .../vendor/lib/Utils/history.d.ts.map | 1 + .../transport/vendor/lib/Utils/history.js | 134 + .../transport/vendor/lib/Utils/history.js.map | 1 + .../lib/Utils/identity-change-handler.d.ts | 44 + .../Utils/identity-change-handler.d.ts.map | 1 + .../lib/Utils/identity-change-handler.js | 50 + .../lib/Utils/identity-change-handler.js.map | 1 + .../transport/vendor/lib/Utils/index.d.ts | 22 + .../transport/vendor/lib/Utils/index.d.ts.map | 1 + packages/transport/vendor/lib/Utils/index.js | 22 + .../transport/vendor/lib/Utils/index.js.map | 1 + .../vendor/lib/Utils/link-preview.d.ts | 21 + .../vendor/lib/Utils/link-preview.d.ts.map | 1 + .../vendor/lib/Utils/link-preview.js | 85 + .../vendor/lib/Utils/link-preview.js.map | 1 + .../transport/vendor/lib/Utils/logger.d.ts | 12 + .../vendor/lib/Utils/logger.d.ts.map | 1 + packages/transport/vendor/lib/Utils/logger.js | 3 + .../transport/vendor/lib/Utils/logger.js.map | 1 + .../transport/vendor/lib/Utils/lt-hash.d.ts | 8 + .../vendor/lib/Utils/lt-hash.d.ts.map | 1 + .../transport/vendor/lib/Utils/lt-hash.js | 8 + .../transport/vendor/lib/Utils/lt-hash.js.map | 1 + .../vendor/lib/Utils/make-mutex.d.ts | 9 + .../vendor/lib/Utils/make-mutex.d.ts.map | 1 + .../transport/vendor/lib/Utils/make-mutex.js | 33 + .../vendor/lib/Utils/make-mutex.js.map | 1 + .../lib/Utils/message-retry-manager.d.ts | 115 + .../lib/Utils/message-retry-manager.d.ts.map | 1 + .../vendor/lib/Utils/message-retry-manager.js | 265 + .../lib/Utils/message-retry-manager.js.map | 1 + .../vendor/lib/Utils/messages-media.d.ts | 133 + .../vendor/lib/Utils/messages-media.d.ts.map | 1 + .../vendor/lib/Utils/messages-media.js | 786 + .../vendor/lib/Utils/messages-media.js.map | 1 + .../transport/vendor/lib/Utils/messages.d.ts | 91 + .../vendor/lib/Utils/messages.d.ts.map | 1 + .../transport/vendor/lib/Utils/messages.js | 893 + .../vendor/lib/Utils/messages.js.map | 1 + .../vendor/lib/Utils/noise-handler.d.ts | 20 + .../vendor/lib/Utils/noise-handler.d.ts.map | 1 + .../vendor/lib/Utils/noise-handler.js | 201 + .../vendor/lib/Utils/noise-handler.js.map | 1 + .../lib/Utils/offline-node-processor.d.ts | 17 + .../lib/Utils/offline-node-processor.d.ts.map | 1 + .../lib/Utils/offline-node-processor.js | 40 + .../lib/Utils/offline-node-processor.js.map | 1 + .../vendor/lib/Utils/pre-key-manager.d.ts | 28 + .../vendor/lib/Utils/pre-key-manager.d.ts.map | 1 + .../vendor/lib/Utils/pre-key-manager.js | 106 + .../vendor/lib/Utils/pre-key-manager.js.map | 1 + .../vendor/lib/Utils/process-message.d.ts | 60 + .../vendor/lib/Utils/process-message.d.ts.map | 1 + .../vendor/lib/Utils/process-message.js | 597 + .../vendor/lib/Utils/process-message.js.map | 1 + .../vendor/lib/Utils/reporting-utils.d.ts | 11 + .../vendor/lib/Utils/reporting-utils.d.ts.map | 1 + .../vendor/lib/Utils/reporting-utils.js | 258 + .../vendor/lib/Utils/reporting-utils.js.map | 1 + .../transport/vendor/lib/Utils/signal.d.ts | 47 + .../vendor/lib/Utils/signal.d.ts.map | 1 + packages/transport/vendor/lib/Utils/signal.js | 201 + .../transport/vendor/lib/Utils/signal.js.map | 1 + .../vendor/lib/Utils/stanza-ack.d.ts | 11 + .../vendor/lib/Utils/stanza-ack.d.ts.map | 1 + .../transport/vendor/lib/Utils/stanza-ack.js | 38 + .../vendor/lib/Utils/stanza-ack.js.map | 1 + .../vendor/lib/Utils/sync-action-utils.d.ts | 19 + .../lib/Utils/sync-action-utils.d.ts.map | 1 + .../vendor/lib/Utils/sync-action-utils.js | 49 + .../vendor/lib/Utils/sync-action-utils.js.map | 1 + .../vendor/lib/Utils/tc-token-utils.d.ts | 37 + .../vendor/lib/Utils/tc-token-utils.d.ts.map | 1 + .../vendor/lib/Utils/tc-token-utils.js | 163 + .../vendor/lib/Utils/tc-token-utils.js.map | 1 + .../lib/Utils/use-multi-file-auth-state.d.ts | 13 + .../Utils/use-multi-file-auth-state.d.ts.map | 1 + .../lib/Utils/use-multi-file-auth-state.js | 121 + .../Utils/use-multi-file-auth-state.js.map | 1 + .../vendor/lib/Utils/validate-connection.d.ts | 11 + .../lib/Utils/validate-connection.d.ts.map | 1 + .../vendor/lib/Utils/validate-connection.js | 203 + .../lib/Utils/validate-connection.js.map | 1 + .../vendor/lib/WABinary/constants.d.ts | 28 + .../vendor/lib/WABinary/constants.d.ts.map | 1 + .../vendor/lib/WABinary/constants.js | 1301 + .../vendor/lib/WABinary/constants.js.map | 1 + .../transport/vendor/lib/WABinary/decode.d.ts | 7 + .../vendor/lib/WABinary/decode.d.ts.map | 1 + .../transport/vendor/lib/WABinary/decode.js | 262 + .../vendor/lib/WABinary/decode.js.map | 1 + .../transport/vendor/lib/WABinary/encode.d.ts | 3 + .../vendor/lib/WABinary/encode.d.ts.map | 1 + .../transport/vendor/lib/WABinary/encode.js | 220 + .../vendor/lib/WABinary/encode.js.map | 1 + .../vendor/lib/WABinary/generic-utils.d.ts | 15 + .../lib/WABinary/generic-utils.d.ts.map | 1 + .../vendor/lib/WABinary/generic-utils.js | 113 + .../vendor/lib/WABinary/generic-utils.js.map | 1 + .../transport/vendor/lib/WABinary/index.d.ts | 6 + .../vendor/lib/WABinary/index.d.ts.map | 1 + .../transport/vendor/lib/WABinary/index.js | 6 + .../vendor/lib/WABinary/index.js.map | 1 + .../vendor/lib/WABinary/jid-utils.d.ts | 48 + .../vendor/lib/WABinary/jid-utils.d.ts.map | 1 + .../vendor/lib/WABinary/jid-utils.js | 96 + .../vendor/lib/WABinary/jid-utils.js.map | 1 + .../transport/vendor/lib/WABinary/types.d.ts | 19 + .../vendor/lib/WABinary/types.d.ts.map | 1 + .../transport/vendor/lib/WABinary/types.js | 2 + .../vendor/lib/WABinary/types.js.map | 1 + .../transport/vendor/lib/WAM/BinaryInfo.d.ts | 9 + .../vendor/lib/WAM/BinaryInfo.d.ts.map | 1 + .../transport/vendor/lib/WAM/BinaryInfo.js | 10 + .../vendor/lib/WAM/BinaryInfo.js.map | 1 + .../transport/vendor/lib/WAM/constants.d.ts | 40 + .../vendor/lib/WAM/constants.d.ts.map | 1 + .../transport/vendor/lib/WAM/constants.js | 22853 ++++ .../transport/vendor/lib/WAM/constants.js.map | 1 + packages/transport/vendor/lib/WAM/encode.d.ts | 3 + .../transport/vendor/lib/WAM/encode.d.ts.map | 1 + packages/transport/vendor/lib/WAM/encode.js | 150 + .../transport/vendor/lib/WAM/encode.js.map | 1 + packages/transport/vendor/lib/WAM/index.d.ts | 4 + .../transport/vendor/lib/WAM/index.d.ts.map | 1 + packages/transport/vendor/lib/WAM/index.js | 4 + .../transport/vendor/lib/WAM/index.js.map | 1 + .../Protocols/USyncContactProtocol.d.ts | 10 + .../Protocols/USyncContactProtocol.d.ts.map | 1 + .../WAUSync/Protocols/USyncContactProtocol.js | 52 + .../Protocols/USyncContactProtocol.js.map | 1 + .../Protocols/USyncDeviceProtocol.d.ts | 23 + .../Protocols/USyncDeviceProtocol.d.ts.map | 1 + .../WAUSync/Protocols/USyncDeviceProtocol.js | 54 + .../Protocols/USyncDeviceProtocol.js.map | 1 + .../USyncDisappearingModeProtocol.d.ts | 13 + .../USyncDisappearingModeProtocol.d.ts.map | 1 + .../USyncDisappearingModeProtocol.js | 27 + .../USyncDisappearingModeProtocol.js.map | 1 + .../Protocols/USyncStatusProtocol.d.ts | 13 + .../Protocols/USyncStatusProtocol.d.ts.map | 1 + .../WAUSync/Protocols/USyncStatusProtocol.js | 38 + .../Protocols/USyncStatusProtocol.js.map | 1 + .../Protocols/USyncUsernameProtocol.d.ts | 10 + .../Protocols/USyncUsernameProtocol.d.ts.map | 1 + .../Protocols/USyncUsernameProtocol.js | 25 + .../Protocols/USyncUsernameProtocol.js.map | 1 + .../Protocols/UsyncBotProfileProtocol.d.ts | 26 + .../UsyncBotProfileProtocol.d.ts.map | 1 + .../Protocols/UsyncBotProfileProtocol.js | 51 + .../Protocols/UsyncBotProfileProtocol.js.map | 1 + .../WAUSync/Protocols/UsyncLIDProtocol.d.ts | 10 + .../Protocols/UsyncLIDProtocol.d.ts.map | 1 + .../lib/WAUSync/Protocols/UsyncLIDProtocol.js | 29 + .../WAUSync/Protocols/UsyncLIDProtocol.js.map | 1 + .../vendor/lib/WAUSync/Protocols/index.d.ts | 6 + .../lib/WAUSync/Protocols/index.d.ts.map | 1 + .../vendor/lib/WAUSync/Protocols/index.js | 6 + .../vendor/lib/WAUSync/Protocols/index.js.map | 1 + .../vendor/lib/WAUSync/USyncQuery.d.ts | 30 + .../vendor/lib/WAUSync/USyncQuery.d.ts.map | 1 + .../vendor/lib/WAUSync/USyncQuery.js | 98 + .../vendor/lib/WAUSync/USyncQuery.js.map | 1 + .../vendor/lib/WAUSync/USyncUser.d.ts | 17 + .../vendor/lib/WAUSync/USyncUser.d.ts.map | 1 + .../transport/vendor/lib/WAUSync/USyncUser.js | 31 + .../vendor/lib/WAUSync/USyncUser.js.map | 1 + .../transport/vendor/lib/WAUSync/index.d.ts | 4 + .../vendor/lib/WAUSync/index.d.ts.map | 1 + .../transport/vendor/lib/WAUSync/index.js | 4 + .../transport/vendor/lib/WAUSync/index.js.map | 1 + packages/transport/vendor/lib/index.d.ts | 12 + packages/transport/vendor/lib/index.d.ts.map | 1 + packages/transport/vendor/lib/index.js | 11 + packages/transport/vendor/lib/index.js.map | 1 + packages/wa-message/package.json | 4 +- scripts/patch-baileys-esm.mjs | 200 - 416 files changed, 166940 insertions(+), 3904 deletions(-) delete mode 100644 packages/socket/scripts/patch-installed-baileys.mjs create mode 100644 packages/transport/vendor/WAProto/GenerateStatics.sh create mode 100644 packages/transport/vendor/WAProto/WAProto.proto create mode 100644 packages/transport/vendor/WAProto/fix-imports.js create mode 100644 packages/transport/vendor/WAProto/index.d.ts create mode 100644 packages/transport/vendor/WAProto/index.js create mode 100644 packages/transport/vendor/lib/Defaults/index.d.ts create mode 100644 packages/transport/vendor/lib/Defaults/index.d.ts.map create mode 100644 packages/transport/vendor/lib/Defaults/index.js create mode 100644 packages/transport/vendor/lib/Defaults/index.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/ciphertext-message.js create mode 100644 packages/transport/vendor/lib/Signal/Group/ciphertext-message.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/group-session-builder.js create mode 100644 packages/transport/vendor/lib/Signal/Group/group-session-builder.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/group_cipher.js create mode 100644 packages/transport/vendor/lib/Signal/Group/group_cipher.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/index.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/index.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/index.js create mode 100644 packages/transport/vendor/lib/Signal/Group/index.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/keyhelper.js create mode 100644 packages/transport/vendor/lib/Signal/Group/keyhelper.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-chain-key.js create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-chain-key.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-message.js create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-message.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-name.js create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-name.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-record.js create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-record.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-state.js create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-key-state.js.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-message-key.js create mode 100644 packages/transport/vendor/lib/Signal/Group/sender-message-key.js.map create mode 100644 packages/transport/vendor/lib/Signal/libsignal.d.ts create mode 100644 packages/transport/vendor/lib/Signal/libsignal.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/libsignal.js create mode 100644 packages/transport/vendor/lib/Signal/libsignal.js.map create mode 100644 packages/transport/vendor/lib/Signal/lid-mapping.d.ts create mode 100644 packages/transport/vendor/lib/Signal/lid-mapping.d.ts.map create mode 100644 packages/transport/vendor/lib/Signal/lid-mapping.js create mode 100644 packages/transport/vendor/lib/Signal/lid-mapping.js.map create mode 100644 packages/transport/vendor/lib/Socket/Client/index.d.ts create mode 100644 packages/transport/vendor/lib/Socket/Client/index.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/Client/index.js create mode 100644 packages/transport/vendor/lib/Socket/Client/index.js.map create mode 100644 packages/transport/vendor/lib/Socket/Client/types.d.ts create mode 100644 packages/transport/vendor/lib/Socket/Client/types.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/Client/types.js create mode 100644 packages/transport/vendor/lib/Socket/Client/types.js.map create mode 100644 packages/transport/vendor/lib/Socket/Client/websocket.d.ts create mode 100644 packages/transport/vendor/lib/Socket/Client/websocket.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/Client/websocket.js create mode 100644 packages/transport/vendor/lib/Socket/Client/websocket.js.map create mode 100644 packages/transport/vendor/lib/Socket/business.d.ts create mode 100644 packages/transport/vendor/lib/Socket/business.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/business.js create mode 100644 packages/transport/vendor/lib/Socket/business.js.map create mode 100644 packages/transport/vendor/lib/Socket/chats.d.ts create mode 100644 packages/transport/vendor/lib/Socket/chats.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/chats.js create mode 100644 packages/transport/vendor/lib/Socket/chats.js.map create mode 100644 packages/transport/vendor/lib/Socket/communities.d.ts create mode 100644 packages/transport/vendor/lib/Socket/communities.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/communities.js create mode 100644 packages/transport/vendor/lib/Socket/communities.js.map create mode 100644 packages/transport/vendor/lib/Socket/groups.d.ts create mode 100644 packages/transport/vendor/lib/Socket/groups.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/groups.js create mode 100644 packages/transport/vendor/lib/Socket/groups.js.map create mode 100644 packages/transport/vendor/lib/Socket/index.d.ts create mode 100644 packages/transport/vendor/lib/Socket/index.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/index.js create mode 100644 packages/transport/vendor/lib/Socket/index.js.map create mode 100644 packages/transport/vendor/lib/Socket/messages-recv.d.ts create mode 100644 packages/transport/vendor/lib/Socket/messages-recv.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/messages-recv.js create mode 100644 packages/transport/vendor/lib/Socket/messages-recv.js.map create mode 100644 packages/transport/vendor/lib/Socket/messages-send.d.ts create mode 100644 packages/transport/vendor/lib/Socket/messages-send.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/messages-send.js create mode 100644 packages/transport/vendor/lib/Socket/messages-send.js.map create mode 100644 packages/transport/vendor/lib/Socket/mex.d.ts create mode 100644 packages/transport/vendor/lib/Socket/mex.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/mex.js create mode 100644 packages/transport/vendor/lib/Socket/mex.js.map create mode 100644 packages/transport/vendor/lib/Socket/newsletter.d.ts create mode 100644 packages/transport/vendor/lib/Socket/newsletter.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/newsletter.js create mode 100644 packages/transport/vendor/lib/Socket/newsletter.js.map create mode 100644 packages/transport/vendor/lib/Socket/socket.d.ts create mode 100644 packages/transport/vendor/lib/Socket/socket.d.ts.map create mode 100644 packages/transport/vendor/lib/Socket/socket.js create mode 100644 packages/transport/vendor/lib/Socket/socket.js.map create mode 100644 packages/transport/vendor/lib/Types/Auth.d.ts create mode 100644 packages/transport/vendor/lib/Types/Auth.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Auth.js create mode 100644 packages/transport/vendor/lib/Types/Auth.js.map create mode 100644 packages/transport/vendor/lib/Types/Bussines.d.ts create mode 100644 packages/transport/vendor/lib/Types/Bussines.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Bussines.js create mode 100644 packages/transport/vendor/lib/Types/Bussines.js.map create mode 100644 packages/transport/vendor/lib/Types/Call.d.ts create mode 100644 packages/transport/vendor/lib/Types/Call.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Call.js create mode 100644 packages/transport/vendor/lib/Types/Call.js.map create mode 100644 packages/transport/vendor/lib/Types/Chat.d.ts create mode 100644 packages/transport/vendor/lib/Types/Chat.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Chat.js create mode 100644 packages/transport/vendor/lib/Types/Chat.js.map create mode 100644 packages/transport/vendor/lib/Types/Contact.d.ts create mode 100644 packages/transport/vendor/lib/Types/Contact.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Contact.js create mode 100644 packages/transport/vendor/lib/Types/Contact.js.map create mode 100644 packages/transport/vendor/lib/Types/Events.d.ts create mode 100644 packages/transport/vendor/lib/Types/Events.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Events.js create mode 100644 packages/transport/vendor/lib/Types/Events.js.map create mode 100644 packages/transport/vendor/lib/Types/GroupMetadata.d.ts create mode 100644 packages/transport/vendor/lib/Types/GroupMetadata.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/GroupMetadata.js create mode 100644 packages/transport/vendor/lib/Types/GroupMetadata.js.map create mode 100644 packages/transport/vendor/lib/Types/Label.d.ts create mode 100644 packages/transport/vendor/lib/Types/Label.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Label.js create mode 100644 packages/transport/vendor/lib/Types/Label.js.map create mode 100644 packages/transport/vendor/lib/Types/LabelAssociation.d.ts create mode 100644 packages/transport/vendor/lib/Types/LabelAssociation.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/LabelAssociation.js create mode 100644 packages/transport/vendor/lib/Types/LabelAssociation.js.map create mode 100644 packages/transport/vendor/lib/Types/Message.d.ts create mode 100644 packages/transport/vendor/lib/Types/Message.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Message.js create mode 100644 packages/transport/vendor/lib/Types/Message.js.map create mode 100644 packages/transport/vendor/lib/Types/Mex.d.ts create mode 100644 packages/transport/vendor/lib/Types/Mex.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Mex.js create mode 100644 packages/transport/vendor/lib/Types/Mex.js.map create mode 100644 packages/transport/vendor/lib/Types/Product.d.ts create mode 100644 packages/transport/vendor/lib/Types/Product.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Product.js create mode 100644 packages/transport/vendor/lib/Types/Product.js.map create mode 100644 packages/transport/vendor/lib/Types/Signal.d.ts create mode 100644 packages/transport/vendor/lib/Types/Signal.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Signal.js create mode 100644 packages/transport/vendor/lib/Types/Signal.js.map create mode 100644 packages/transport/vendor/lib/Types/Socket.d.ts create mode 100644 packages/transport/vendor/lib/Types/Socket.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/Socket.js create mode 100644 packages/transport/vendor/lib/Types/Socket.js.map create mode 100644 packages/transport/vendor/lib/Types/State.d.ts create mode 100644 packages/transport/vendor/lib/Types/State.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/State.js create mode 100644 packages/transport/vendor/lib/Types/State.js.map create mode 100644 packages/transport/vendor/lib/Types/USync.d.ts create mode 100644 packages/transport/vendor/lib/Types/USync.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/USync.js create mode 100644 packages/transport/vendor/lib/Types/USync.js.map create mode 100644 packages/transport/vendor/lib/Types/index.d.ts create mode 100644 packages/transport/vendor/lib/Types/index.d.ts.map create mode 100644 packages/transport/vendor/lib/Types/index.js create mode 100644 packages/transport/vendor/lib/Types/index.js.map create mode 100644 packages/transport/vendor/lib/Utils/auth-utils.d.ts create mode 100644 packages/transport/vendor/lib/Utils/auth-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/auth-utils.js create mode 100644 packages/transport/vendor/lib/Utils/auth-utils.js.map create mode 100644 packages/transport/vendor/lib/Utils/browser-utils.d.ts create mode 100644 packages/transport/vendor/lib/Utils/browser-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/browser-utils.js create mode 100644 packages/transport/vendor/lib/Utils/browser-utils.js.map create mode 100644 packages/transport/vendor/lib/Utils/business.d.ts create mode 100644 packages/transport/vendor/lib/Utils/business.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/business.js create mode 100644 packages/transport/vendor/lib/Utils/business.js.map create mode 100644 packages/transport/vendor/lib/Utils/chat-utils.d.ts create mode 100644 packages/transport/vendor/lib/Utils/chat-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/chat-utils.js create mode 100644 packages/transport/vendor/lib/Utils/chat-utils.js.map create mode 100644 packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts create mode 100644 packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/companion-reg-client-utils.js create mode 100644 packages/transport/vendor/lib/Utils/companion-reg-client-utils.js.map create mode 100644 packages/transport/vendor/lib/Utils/crypto.d.ts create mode 100644 packages/transport/vendor/lib/Utils/crypto.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/crypto.js create mode 100644 packages/transport/vendor/lib/Utils/crypto.js.map create mode 100644 packages/transport/vendor/lib/Utils/decode-wa-message.d.ts create mode 100644 packages/transport/vendor/lib/Utils/decode-wa-message.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/decode-wa-message.js create mode 100644 packages/transport/vendor/lib/Utils/decode-wa-message.js.map create mode 100644 packages/transport/vendor/lib/Utils/event-buffer.d.ts create mode 100644 packages/transport/vendor/lib/Utils/event-buffer.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/event-buffer.js create mode 100644 packages/transport/vendor/lib/Utils/event-buffer.js.map create mode 100644 packages/transport/vendor/lib/Utils/generics.d.ts create mode 100644 packages/transport/vendor/lib/Utils/generics.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/generics.js create mode 100644 packages/transport/vendor/lib/Utils/generics.js.map create mode 100644 packages/transport/vendor/lib/Utils/history.d.ts create mode 100644 packages/transport/vendor/lib/Utils/history.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/history.js create mode 100644 packages/transport/vendor/lib/Utils/history.js.map create mode 100644 packages/transport/vendor/lib/Utils/identity-change-handler.d.ts create mode 100644 packages/transport/vendor/lib/Utils/identity-change-handler.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/identity-change-handler.js create mode 100644 packages/transport/vendor/lib/Utils/identity-change-handler.js.map create mode 100644 packages/transport/vendor/lib/Utils/index.d.ts create mode 100644 packages/transport/vendor/lib/Utils/index.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/index.js create mode 100644 packages/transport/vendor/lib/Utils/index.js.map create mode 100644 packages/transport/vendor/lib/Utils/link-preview.d.ts create mode 100644 packages/transport/vendor/lib/Utils/link-preview.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/link-preview.js create mode 100644 packages/transport/vendor/lib/Utils/link-preview.js.map create mode 100644 packages/transport/vendor/lib/Utils/logger.d.ts create mode 100644 packages/transport/vendor/lib/Utils/logger.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/logger.js create mode 100644 packages/transport/vendor/lib/Utils/logger.js.map create mode 100644 packages/transport/vendor/lib/Utils/lt-hash.d.ts create mode 100644 packages/transport/vendor/lib/Utils/lt-hash.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/lt-hash.js create mode 100644 packages/transport/vendor/lib/Utils/lt-hash.js.map create mode 100644 packages/transport/vendor/lib/Utils/make-mutex.d.ts create mode 100644 packages/transport/vendor/lib/Utils/make-mutex.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/make-mutex.js create mode 100644 packages/transport/vendor/lib/Utils/make-mutex.js.map create mode 100644 packages/transport/vendor/lib/Utils/message-retry-manager.d.ts create mode 100644 packages/transport/vendor/lib/Utils/message-retry-manager.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/message-retry-manager.js create mode 100644 packages/transport/vendor/lib/Utils/message-retry-manager.js.map create mode 100644 packages/transport/vendor/lib/Utils/messages-media.d.ts create mode 100644 packages/transport/vendor/lib/Utils/messages-media.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/messages-media.js create mode 100644 packages/transport/vendor/lib/Utils/messages-media.js.map create mode 100644 packages/transport/vendor/lib/Utils/messages.d.ts create mode 100644 packages/transport/vendor/lib/Utils/messages.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/messages.js create mode 100644 packages/transport/vendor/lib/Utils/messages.js.map create mode 100644 packages/transport/vendor/lib/Utils/noise-handler.d.ts create mode 100644 packages/transport/vendor/lib/Utils/noise-handler.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/noise-handler.js create mode 100644 packages/transport/vendor/lib/Utils/noise-handler.js.map create mode 100644 packages/transport/vendor/lib/Utils/offline-node-processor.d.ts create mode 100644 packages/transport/vendor/lib/Utils/offline-node-processor.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/offline-node-processor.js create mode 100644 packages/transport/vendor/lib/Utils/offline-node-processor.js.map create mode 100644 packages/transport/vendor/lib/Utils/pre-key-manager.d.ts create mode 100644 packages/transport/vendor/lib/Utils/pre-key-manager.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/pre-key-manager.js create mode 100644 packages/transport/vendor/lib/Utils/pre-key-manager.js.map create mode 100644 packages/transport/vendor/lib/Utils/process-message.d.ts create mode 100644 packages/transport/vendor/lib/Utils/process-message.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/process-message.js create mode 100644 packages/transport/vendor/lib/Utils/process-message.js.map create mode 100644 packages/transport/vendor/lib/Utils/reporting-utils.d.ts create mode 100644 packages/transport/vendor/lib/Utils/reporting-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/reporting-utils.js create mode 100644 packages/transport/vendor/lib/Utils/reporting-utils.js.map create mode 100644 packages/transport/vendor/lib/Utils/signal.d.ts create mode 100644 packages/transport/vendor/lib/Utils/signal.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/signal.js create mode 100644 packages/transport/vendor/lib/Utils/signal.js.map create mode 100644 packages/transport/vendor/lib/Utils/stanza-ack.d.ts create mode 100644 packages/transport/vendor/lib/Utils/stanza-ack.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/stanza-ack.js create mode 100644 packages/transport/vendor/lib/Utils/stanza-ack.js.map create mode 100644 packages/transport/vendor/lib/Utils/sync-action-utils.d.ts create mode 100644 packages/transport/vendor/lib/Utils/sync-action-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/sync-action-utils.js create mode 100644 packages/transport/vendor/lib/Utils/sync-action-utils.js.map create mode 100644 packages/transport/vendor/lib/Utils/tc-token-utils.d.ts create mode 100644 packages/transport/vendor/lib/Utils/tc-token-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/tc-token-utils.js create mode 100644 packages/transport/vendor/lib/Utils/tc-token-utils.js.map create mode 100644 packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts create mode 100644 packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js create mode 100644 packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js.map create mode 100644 packages/transport/vendor/lib/Utils/validate-connection.d.ts create mode 100644 packages/transport/vendor/lib/Utils/validate-connection.d.ts.map create mode 100644 packages/transport/vendor/lib/Utils/validate-connection.js create mode 100644 packages/transport/vendor/lib/Utils/validate-connection.js.map create mode 100644 packages/transport/vendor/lib/WABinary/constants.d.ts create mode 100644 packages/transport/vendor/lib/WABinary/constants.d.ts.map create mode 100644 packages/transport/vendor/lib/WABinary/constants.js create mode 100644 packages/transport/vendor/lib/WABinary/constants.js.map create mode 100644 packages/transport/vendor/lib/WABinary/decode.d.ts create mode 100644 packages/transport/vendor/lib/WABinary/decode.d.ts.map create mode 100644 packages/transport/vendor/lib/WABinary/decode.js create mode 100644 packages/transport/vendor/lib/WABinary/decode.js.map create mode 100644 packages/transport/vendor/lib/WABinary/encode.d.ts create mode 100644 packages/transport/vendor/lib/WABinary/encode.d.ts.map create mode 100644 packages/transport/vendor/lib/WABinary/encode.js create mode 100644 packages/transport/vendor/lib/WABinary/encode.js.map create mode 100644 packages/transport/vendor/lib/WABinary/generic-utils.d.ts create mode 100644 packages/transport/vendor/lib/WABinary/generic-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/WABinary/generic-utils.js create mode 100644 packages/transport/vendor/lib/WABinary/generic-utils.js.map create mode 100644 packages/transport/vendor/lib/WABinary/index.d.ts create mode 100644 packages/transport/vendor/lib/WABinary/index.d.ts.map create mode 100644 packages/transport/vendor/lib/WABinary/index.js create mode 100644 packages/transport/vendor/lib/WABinary/index.js.map create mode 100644 packages/transport/vendor/lib/WABinary/jid-utils.d.ts create mode 100644 packages/transport/vendor/lib/WABinary/jid-utils.d.ts.map create mode 100644 packages/transport/vendor/lib/WABinary/jid-utils.js create mode 100644 packages/transport/vendor/lib/WABinary/jid-utils.js.map create mode 100644 packages/transport/vendor/lib/WABinary/types.d.ts create mode 100644 packages/transport/vendor/lib/WABinary/types.d.ts.map create mode 100644 packages/transport/vendor/lib/WABinary/types.js create mode 100644 packages/transport/vendor/lib/WABinary/types.js.map create mode 100644 packages/transport/vendor/lib/WAM/BinaryInfo.d.ts create mode 100644 packages/transport/vendor/lib/WAM/BinaryInfo.d.ts.map create mode 100644 packages/transport/vendor/lib/WAM/BinaryInfo.js create mode 100644 packages/transport/vendor/lib/WAM/BinaryInfo.js.map create mode 100644 packages/transport/vendor/lib/WAM/constants.d.ts create mode 100644 packages/transport/vendor/lib/WAM/constants.d.ts.map create mode 100644 packages/transport/vendor/lib/WAM/constants.js create mode 100644 packages/transport/vendor/lib/WAM/constants.js.map create mode 100644 packages/transport/vendor/lib/WAM/encode.d.ts create mode 100644 packages/transport/vendor/lib/WAM/encode.d.ts.map create mode 100644 packages/transport/vendor/lib/WAM/encode.js create mode 100644 packages/transport/vendor/lib/WAM/encode.js.map create mode 100644 packages/transport/vendor/lib/WAM/index.d.ts create mode 100644 packages/transport/vendor/lib/WAM/index.d.ts.map create mode 100644 packages/transport/vendor/lib/WAM/index.js create mode 100644 packages/transport/vendor/lib/WAM/index.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/index.js create mode 100644 packages/transport/vendor/lib/WAUSync/Protocols/index.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/USyncQuery.js create mode 100644 packages/transport/vendor/lib/WAUSync/USyncQuery.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/USyncUser.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/USyncUser.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/USyncUser.js create mode 100644 packages/transport/vendor/lib/WAUSync/USyncUser.js.map create mode 100644 packages/transport/vendor/lib/WAUSync/index.d.ts create mode 100644 packages/transport/vendor/lib/WAUSync/index.d.ts.map create mode 100644 packages/transport/vendor/lib/WAUSync/index.js create mode 100644 packages/transport/vendor/lib/WAUSync/index.js.map create mode 100644 packages/transport/vendor/lib/index.d.ts create mode 100644 packages/transport/vendor/lib/index.d.ts.map create mode 100644 packages/transport/vendor/lib/index.js create mode 100644 packages/transport/vendor/lib/index.js.map delete mode 100644 scripts/patch-baileys-esm.mjs diff --git a/README.md b/README.md index cef7d78..df3049d 100644 --- a/README.md +++ b/README.md @@ -67,66 +67,59 @@ packages/ protocol/ # workspace folder for @berrysdk/proto socket/ store/ + transport/ wa-message/ examples/ npm-consumer/ rest/ sdk/ -scripts/ - patch-baileys-esm.mjs -_reference_baileys2/ ``` ## Packages -### `@berrysdk/core` +### `berryprotocol` -Public SDK: +Main public SDK package for consumers. -- `BerryClient` -- `BerryProtocol` -- auth entrypoints -- queueing -- event bridge -- media send helpers - -`BerryProtocol` is an official alias for `BerryClient`, so you can use the SDK like: +Usage: ```ts -import { BerryProtocol } from "@berrysdk/core"; +import BerryProtocol from "berryprotocol"; const client = new BerryProtocol({ sessionId: "store-001", }); ``` -### `berryprotocol` - -Facade package for consumers who want the SDK entrypoint without the scope prefix. - -Important: +### `berryotp` -- npm package names must be lowercase, so the publishable package name is `berryprotocol` -- inside the package, the class is still `BerryProtocol` +Main public OTP package for consumers. Usage: ```ts -import BerryProtocol from "berryprotocol"; - -const client = new BerryProtocol({ - sessionId: "store-001", -}); +import { BerryOTP } from "berryotp"; ``` -### `berryotp` +### `@berrysdk/core` -Facade package for consumers who want BerryOTP without the scope prefix. +Internal public engine package used by `berryprotocol`: -Usage: +- `BerryClient` +- `BerryProtocol` +- auth entrypoints +- queueing +- event bridge +- media send helpers + +`BerryProtocol` is an official alias for `BerryClient`, so advanced consumers can also use: ```ts -import { BerryOTP } from "berryotp"; +import { BerryProtocol } from "@berrysdk/core"; + +const client = new BerryProtocol({ + sessionId: "store-001", +}); ``` ### `@berrysdk/berry-otp` @@ -145,12 +138,20 @@ Official OTP package: WhatsApp transport adapter: -- Baileys socket integration +- BerrySDK transport integration - auth mode handling - reconnect handling - event normalization - sync bridging +### `@berrysdk/transport` + +Internal BerrySDK engine package: + +- wraps the WhatsApp Web runtime used by the SDK +- owns the AI label patch/runtime behavior +- isolates the low-level transport from the public `berryprotocol` package + ### `@berrysdk/events` Shared domain types: @@ -202,18 +203,10 @@ Developer CLI for connect and send-text flows. npm install ``` -After install, BerryProtocol runs `postinstall` and patches local Baileys ESM imports for this environment. - ## Installing from npm To consume the published packages without using this monorepo locally: -```bash -npm install @berrysdk/core -``` - -Or, if you want the facade entrypoint: - ```bash npm install berryprotocol ``` @@ -265,7 +258,7 @@ Currently validated rendering paths include: ## AI label notes -Baileys in this workspace now has an experimental patch for AI-labeled private messages. +BerryProtocol now includes an experimental private-chat AI label path through the internal Berry transport engine. Usage: @@ -280,8 +273,8 @@ Rules: - only private chats are allowed - group, newsletter, status, and non-user JIDs are blocked -- Baileys injects `messageContextInfo.supportPayload` -- Baileys relays an additional `` node +- Berry transport injects `messageContextInfo.supportPayload` +- Berry transport relays an additional `` node Local test files: @@ -292,7 +285,7 @@ Current status: - validated in local private-chat tests - experimental -- distributed through the Berry socket package postinstall patch for Baileys +- distributed through `@berrysdk/transport` ## BerryOTP notes @@ -309,7 +302,7 @@ Important caveats: ## SDK quick start ```ts -import { BerryProtocol } from "@berrysdk/core"; +import BerryProtocol from "berryprotocol"; const client = new BerryProtocol({ sessionId: "store-001", @@ -325,8 +318,8 @@ client.on("message.received", (message) => console.log(message)); ## BerryOTP quick start ```ts -import { BerryProtocol } from "@berrysdk/core"; -import { BerryOTP } from "@berrysdk/berry-otp"; +import BerryProtocol from "berryprotocol"; +import { BerryOTP } from "berryotp"; const client = new BerryProtocol({ sessionId: "otp-session", @@ -407,7 +400,7 @@ await client.sendList("5516999999999@s.whatsapp.net", { }); ``` -### Baileys-style `sendMessage` +### Low-level `sendMessage` ```ts await client.sendMessage("5516999999999@s.whatsapp.net", { @@ -415,7 +408,7 @@ await client.sendMessage("5516999999999@s.whatsapp.net", { }); ``` -### Baileys-style `list` +### Low-level `list` ```ts await client.sendMessage("5516999999999@s.whatsapp.net", { @@ -439,7 +432,7 @@ await client.sendMessage("5516999999999@s.whatsapp.net", { }); ``` -### Baileys-style `interactiveMessage` +### Low-level `interactiveMessage` ```ts await client.sendMessage("5516999999999@s.whatsapp.net", { @@ -501,7 +494,7 @@ await client.sendMessage("5516999999999@s.whatsapp.net", { - `sendLocation()` - `sendContact()` -`sendMessage()` accepts Baileys-style payloads for: +`sendMessage()` accepts low-level compatible payloads for: - `text` - `image` diff --git a/examples/npm-consumer/package.json b/examples/npm-consumer/package.json index 756b17e..8b7ab03 100644 --- a/examples/npm-consumer/package.json +++ b/examples/npm-consumer/package.json @@ -7,7 +7,7 @@ "start": "node test-from-npm.mjs" }, "dependencies": { - "berryprotocol": "^0.1.5", - "berryotp": "^0.1.5" + "berryprotocol": "^0.1.6", + "berryotp": "^0.1.6" } } diff --git a/package-lock.json b/package-lock.json index 2331b7d..53d85c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3413 +1,3453 @@ { - "name": "berrysdk", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "berrysdk", - "version": "0.1.0", - "hasInstallScript": true, - "license": "Apache-2.0", - "workspaces": [ - "packages/*" - ], - "dependencies": { - "baileys": "7.0.0-rc10", - "qrcode-terminal": "^0.12.0" - }, - "devDependencies": { - "@types/better-sqlite3": "^7.6.13", - "@types/express": "^5.0.1", - "@types/node": "^22.15.3", - "@types/qrcode-terminal": "^0.12.2", - "@types/ws": "^8.18.1", - "rimraf": "^6.0.1", - "tsx": "^4.19.4", - "typescript": "^5.8.3" - } - }, - "node_modules/@berrysdk/auth": { - "resolved": "packages/auth", - "link": true - }, - "node_modules/@berrysdk/cli": { - "resolved": "packages/cli", - "link": true - }, - "node_modules/@berrysdk/core": { - "resolved": "packages/core", - "link": true - }, - "node_modules/@berrysdk/events": { - "resolved": "packages/events", - "link": true - }, - "node_modules/@berrysdk/gateway": { - "resolved": "packages/gateway", - "link": true - }, - "node_modules/@berrysdk/media": { - "resolved": "packages/media", - "link": true - }, - "node_modules/@berrysdk/messages": { - "resolved": "packages/messages", - "link": true - }, - "node_modules/@berrysdk/proto": { - "resolved": "packages/protocol", - "link": true - }, - "node_modules/@berrysdk/socket": { - "resolved": "packages/socket", - "link": true - }, - "node_modules/@berrysdk/store": { - "resolved": "packages/store", - "link": true - }, - "node_modules/@berrysdk/wa-message": { - "resolved": "packages/wa-message", - "link": true - }, - "node_modules/@borewit/text-codec": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", - "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@cacheable/memory": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", - "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", - "license": "MIT", - "dependencies": { - "@cacheable/utils": "^2.4.0", - "@keyv/bigmap": "^1.3.1", - "hookified": "^1.15.1", - "keyv": "^5.6.0" - } - }, - "node_modules/@cacheable/node-cache": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", - "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", - "license": "MIT", - "dependencies": { - "cacheable": "^2.3.1", - "hookified": "^1.14.0", - "keyv": "^5.5.5" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@cacheable/utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", - "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", - "license": "MIT", - "dependencies": { - "hashery": "^1.5.1", - "keyv": "^5.6.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@hapi/boom": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", - "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "9.x.x" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@img/colour": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", - "cpu": [ - "riscv64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", - "cpu": [ - "riscv64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/runtime": "^1.7.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@keyv/bigmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", - "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", - "license": "MIT", - "dependencies": { - "hashery": "^1.4.0", - "hookified": "^1.15.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "keyv": "^5.6.0" - } - }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "license": "MIT" - }, - "node_modules/@pinojs/redact": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", - "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", - "license": "MIT" - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", - "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", - "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", - "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", - "license": "BSD-3-Clause" - }, - "node_modules/@tokenizer/inflate": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", - "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "token-types": "^6.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "license": "MIT" - }, - "node_modules/@types/better-sqlite3": { - "version": "7.6.13", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", - "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", - "integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/qrcode-terminal": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", - "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@wppconnect/wa-proto": { - "version": "2.3000.1030818676", - "resolved": "https://registry.npmjs.org/@wppconnect/wa-proto/-/wa-proto-2.3000.1030818676.tgz", - "integrity": "sha512-HiSaUvkJ2sdbZZXLV7mL1EYnnNlACqclFbD8iyG+G3n9uNFPM/j4S4pQW7dEw4k/V1TxUc5gbfucDfpDwHj9Og==", - "license": "Apache-2.0", - "dependencies": { - "long": "^5.3.2", - "protobufjs": "^7.4.0" - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/async-mutex": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", - "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/baileys": { - "version": "7.0.0-rc10", - "resolved": "https://registry.npmjs.org/baileys/-/baileys-7.0.0-rc10.tgz", - "integrity": "sha512-B1ShVyha4iZP7aNyz4QsXFceExzkvLFgISQGaDGHQaYFxIdNqoen+xKmlo1iWEsaexvQORAvUK44VicRi1T94g==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@cacheable/node-cache": "^1.4.0", - "@hapi/boom": "^9.1.3", - "async-mutex": "^0.5.0", - "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", - "lru-cache": "^11.1.0", - "music-metadata": "^11.12.3", - "p-queue": "^9.0.0", - "pino": "^9.6", - "protobufjs": "^7.5.6", - "whatsapp-rust-bridge": "0.5.3", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "audio-decode": "^2.1.3", - "jimp": "^1.6.1", - "link-preview-js": "^3.0.0", - "sharp": "*" - }, - "peerDependenciesMeta": { - "audio-decode": { - "optional": true - }, - "jimp": { - "optional": true - }, - "link-preview-js": { - "optional": true - } - } - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/better-sqlite3": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", - "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", - "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", - "license": "MIT", - "dependencies": { - "@cacheable/memory": "^2.0.8", - "@cacheable/utils": "^2.4.1", - "hookified": "^1.15.0", - "keyv": "^5.6.0", - "qified": "^0.10.1" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, - "node_modules/commander": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", - "license": "MIT", - "engines": { - "node": ">=20" - } - }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/curve25519-js": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", - "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "license": "MIT" - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/file-type": { - "version": "21.3.4", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", - "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", - "license": "MIT", - "dependencies": { - "@tokenizer/inflate": "^0.4.1", - "strtok3": "^10.3.4", - "token-types": "^6.1.1", - "uint8array-extras": "^1.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", - "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hashery": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", - "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", - "license": "MIT", - "dependencies": { - "hookified": "^1.15.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hookified": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", - "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" - } - }, - "node_modules/libsignal": { - "version": "6.0.0", - "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#bcea72df9ec34d9d9140ab30619cf479c7c144c7", - "license": "GPL-3.0", - "dependencies": { - "curve25519-js": "^0.0.4", - "protobufjs": "^7.5.5" - } - }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/lru-cache": { - "version": "11.3.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", - "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/music-metadata": { - "version": "11.12.3", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.12.3.tgz", - "integrity": "sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - }, - { - "type": "buymeacoffee", - "url": "https://buymeacoffee.com/borewit" - } - ], - "license": "MIT", - "dependencies": { - "@borewit/text-codec": "^0.2.2", - "@tokenizer/token": "^0.3.0", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "file-type": "^21.3.1", - "media-typer": "^1.1.0", - "strtok3": "^10.3.4", - "token-types": "^6.1.2", - "uint8array-extras": "^1.5.0", - "win-guid": "^0.2.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-abi": { - "version": "3.92.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", - "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-queue": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", - "integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.4", - "p-timeout": "^7.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", - "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/pino": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", - "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", - "license": "MIT", - "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", - "license": "MIT", - "dependencies": { - "split2": "^4.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", - "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", - "license": "MIT" - }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-warning": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", - "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/protobufjs": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.8.tgz", - "integrity": "sha512-dvpCIeLPbXZS/Ete7yLaO7RenOdken2NHKykBXbsaGxZT0UTltcarBciw+A78SRQs9iMAAVpsYA+l8b1hTePIA==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.5", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.1", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.1", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/qified": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", - "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", - "license": "MIT", - "dependencies": { - "hookified": "^2.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/qified/node_modules/hookified": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", - "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", - "license": "MIT" - }, - "node_modules/qrcode-terminal": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/rimraf": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", - "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "glob": "^13.0.3", - "package-json-from-dist": "^1.0.1" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.2", - "semver": "^7.7.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/sonic-boom": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", - "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "license": "ISC", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strtok3": { - "version": "10.3.5", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", - "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/thread-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", - "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", - "license": "MIT", - "dependencies": { - "real-require": "^0.2.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/token-types": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", - "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", - "license": "MIT", - "dependencies": { - "@borewit/text-codec": "^0.2.1", - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uint8array-extras": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", - "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/whatsapp-rust-bridge": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.3.tgz", - "integrity": "sha512-Xb3GAgtWQQJ30oI4a4pjM4+YUeli9CMLTwTIewUrb+AJMFElIkiT5uo+j1Zhc+amiV0Jj+LfX76c/EEZirJbGA==", - "license": "MIT" - }, - "node_modules/win-guid": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", - "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true + "name": "berrysdk", + "version": "0.1.6", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "berrysdk", + "version": "0.1.6", + "license": "Apache-2.0", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "qrcode-terminal": "^0.12.0" + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.13", + "@types/express": "^5.0.1", + "@types/node": "^22.15.3", + "@types/qrcode-terminal": "^0.12.2", + "@types/ws": "^8.18.1", + "rimraf": "^6.0.1", + "tsx": "^4.19.4", + "typescript": "^5.8.3" + } + }, + "node_modules/@berrysdk/auth": { + "resolved": "packages/auth", + "link": true + }, + "node_modules/@berrysdk/berry-otp": { + "resolved": "packages/berry-otp", + "link": true + }, + "node_modules/@berrysdk/cli": { + "resolved": "packages/cli", + "link": true + }, + "node_modules/@berrysdk/core": { + "resolved": "packages/core", + "link": true + }, + "node_modules/@berrysdk/events": { + "resolved": "packages/events", + "link": true + }, + "node_modules/@berrysdk/gateway": { + "resolved": "packages/gateway", + "link": true + }, + "node_modules/@berrysdk/media": { + "resolved": "packages/media", + "link": true + }, + "node_modules/@berrysdk/messages": { + "resolved": "packages/messages", + "link": true + }, + "node_modules/@berrysdk/proto": { + "resolved": "packages/protocol", + "link": true + }, + "node_modules/@berrysdk/socket": { + "resolved": "packages/socket", + "link": true + }, + "node_modules/@berrysdk/store": { + "resolved": "packages/store", + "link": true + }, + "node_modules/@berrysdk/transport": { + "resolved": "packages/transport", + "link": true + }, + "node_modules/@berrysdk/wa-message": { + "resolved": "packages/wa-message", + "link": true + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@cacheable/memory": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", + "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.4.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/node-cache": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", + "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", + "license": "MIT", + "dependencies": { + "cacheable": "^2.3.1", + "hookified": "^1.14.0", + "keyv": "^5.5.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", + "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/better-sqlite3": { + "version": "7.6.13", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", + "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", + "integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/qrcode-terminal": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", + "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@wppconnect/wa-proto": { + "version": "2.3000.1030818676", + "resolved": "https://registry.npmjs.org/@wppconnect/wa-proto/-/wa-proto-2.3000.1030818676.tgz", + "integrity": "sha512-HiSaUvkJ2sdbZZXLV7mL1EYnnNlACqclFbD8iyG+G3n9uNFPM/j4S4pQW7dEw4k/V1TxUc5gbfucDfpDwHj9Og==", + "license": "Apache-2.0", + "dependencies": { + "long": "^5.3.2", + "protobufjs": "^7.4.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/berryotp": { + "resolved": "packages/berryotp", + "link": true + }, + "node_modules/berryprotocol": { + "resolved": "packages/berryprotocol", + "link": true + }, + "node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", + "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.1", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/libsignal": { + "version": "6.0.0", + "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#bcea72df9ec34d9d9140ab30619cf479c7c144c7", + "license": "GPL-3.0", + "dependencies": { + "curve25519-js": "^0.0.4", + "protobufjs": "^7.5.5" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/music-metadata": { + "version": "11.12.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.12.3.tgz", + "integrity": "sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.2", + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "file-type": "^21.3.1", + "media-typer": "^1.1.0", + "strtok3": "^10.3.4", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0", + "win-guid": "^0.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-queue": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", + "integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.8.tgz", + "integrity": "sha512-dvpCIeLPbXZS/Ete7yLaO7RenOdken2NHKykBXbsaGxZT0UTltcarBciw+A78SRQs9iMAAVpsYA+l8b1hTePIA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.1", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "license": "MIT" + }, + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/whatsapp-rust-bridge": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.3.tgz", + "integrity": "sha512-Xb3GAgtWQQJ30oI4a4pjM4+YUeli9CMLTwTIewUrb+AJMFElIkiT5uo+j1Zhc+amiV0Jj+LfX76c/EEZirJbGA==", + "license": "MIT" + }, + "node_modules/win-guid": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", + "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/auth": { + "name": "@berrysdk/auth", + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "@berrysdk/store": "0.1.1" + } + }, + "packages/berry-otp": { + "name": "@berrysdk/berry-otp", + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/core": "0.1.6" + } + }, + "packages/berryotp": { + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/berry-otp": "0.1.6" + }, + "peerDependencies": { + "berryprotocol": "^0.1.6" + } + }, + "packages/berryprotocol": { + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/core": "0.1.6" + } + }, + "packages/cli": { + "name": "@berrysdk/cli", + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/core": "0.1.6", + "commander": "^14.0.0", + "pino": "^9.6.0" + } + }, + "packages/core": { + "name": "@berrysdk/core", + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/auth": "0.1.1", + "@berrysdk/events": "0.1.1", + "@berrysdk/media": "0.1.1", + "@berrysdk/messages": "0.1.1", + "@berrysdk/socket": "0.1.6", + "@berrysdk/store": "0.1.1", + "pino": "^9.6.0", + "qrcode-terminal": "^0.12.0" + } + }, + "packages/events": { + "name": "@berrysdk/events", + "version": "0.1.1", + "license": "Apache-2.0" + }, + "packages/gateway": { + "name": "@berrysdk/gateway", + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/core": "0.1.6", + "express": "^5.1.0", + "pino": "^9.6.0" + } + }, + "packages/media": { + "name": "@berrysdk/media", + "version": "0.1.1", + "license": "Apache-2.0" + }, + "packages/messages": { + "name": "@berrysdk/messages", + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1" + } + }, + "packages/protocol": { + "name": "@berrysdk/proto", + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@wppconnect/wa-proto": "^2.3000.1030818676", + "protobufjs": "^7.4.0" + } + }, + "packages/socket": { + "name": "@berrysdk/socket", + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "@berrysdk/proto": "0.1.1", + "@berrysdk/transport": "0.1.6", + "@berrysdk/wa-message": "0.1.6", + "pino": "^9.6.0", + "ws": "^8.18.1" + } + }, + "packages/store": { + "name": "@berrysdk/store", + "version": "0.1.1", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "better-sqlite3": "^11.10.0" + } + }, + "packages/transport": { + "name": "@berrysdk/transport", + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node", + "lru-cache": "^11.1.0", + "music-metadata": "^11.12.3", + "p-queue": "^9.0.0", + "pino": "^9.6.0", + "protobufjs": "^7.5.6", + "whatsapp-rust-bridge": "0.5.3", + "ws": "^8.18.1" + }, + "peerDependencies": { + "audio-decode": "^2.1.3", + "jimp": "^1.6.1", + "link-preview-js": "^3.0.0", + "sharp": "*" + }, + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + }, + "sharp": { + "optional": true + } + } + }, + "packages/wa-message": { + "name": "@berrysdk/wa-message", + "version": "0.1.6", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "@berrysdk/proto": "0.1.1", + "@berrysdk/transport": "0.1.6" + } } - } - }, - "packages/auth": { - "name": "@berrysdk/auth", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.0", - "@berrysdk/store": "0.1.0" - } - }, - "packages/cli": { - "name": "@berrysdk/cli", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/core": "0.1.0", - "commander": "^14.0.0", - "pino": "^9.6.0" - } - }, - "packages/core": { - "name": "@berrysdk/core", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/auth": "0.1.0", - "@berrysdk/events": "0.1.0", - "@berrysdk/media": "0.1.0", - "@berrysdk/messages": "0.1.0", - "@berrysdk/socket": "0.1.0", - "@berrysdk/store": "0.1.0", - "pino": "^9.6.0" - } - }, - "packages/events": { - "name": "@berrysdk/events", - "version": "0.1.0", - "license": "Apache-2.0" - }, - "packages/gateway": { - "name": "@berrysdk/gateway", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/core": "0.1.0", - "express": "^5.1.0", - "pino": "^9.6.0" - } - }, - "packages/media": { - "name": "@berrysdk/media", - "version": "0.1.0", - "license": "Apache-2.0" - }, - "packages/messages": { - "name": "@berrysdk/messages", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.0" - } - }, - "packages/protocol": { - "name": "@berrysdk/proto", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@wppconnect/wa-proto": "^2.3000.1030818676", - "protobufjs": "^7.4.0" - } - }, - "packages/socket": { - "name": "@berrysdk/socket", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.0", - "@berrysdk/proto": "0.1.0", - "@berrysdk/wa-message": "0.1.0", - "baileys": "7.0.0-rc10", - "pino": "^9.6.0", - "ws": "^8.18.1" - } - }, - "packages/store": { - "name": "@berrysdk/store", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.0", - "better-sqlite3": "^11.10.0" - } - }, - "packages/wa-message": { - "name": "@berrysdk/wa-message", - "version": "0.1.0", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.0", - "@berrysdk/proto": "0.1.0", - "baileys": "7.0.0-rc10" - } } - } } diff --git a/package.json b/package.json index 0233d54..0993baa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "berrysdk", - "version": "0.1.3", + "version": "0.1.6", "private": true, "type": "module", "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", @@ -8,7 +8,6 @@ "license": "Apache-2.0", "keywords": [ "whatsapp", - "baileys", "sdk", "bot", "berrysdk", @@ -18,11 +17,9 @@ "packages/*" ], "dependencies": { - "baileys": "7.0.0-rc10", "qrcode-terminal": "^0.12.0" }, "scripts": { - "postinstall": "node scripts/patch-baileys-esm.mjs", "build": "tsc -b packages/events packages/transport packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli", "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName \u0027dist\u0027) -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName \u0027.tsbuildinfo\u0027) -ErrorAction SilentlyContinue }\"", "prepare:publish": "npm run clean \u0026\u0026 npm run build", diff --git a/packages/berry-otp/package.json b/packages/berry-otp/package.json index d937deb..1e8ab73 100644 --- a/packages/berry-otp/package.json +++ b/packages/berry-otp/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/berry-otp", - "version": "0.1.5", + "version": "0.1.6", "description": "Official OTP flows for Berry SDK on top of WhatsApp native-flow and fallback buttons.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -21,5 +21,8 @@ }, "publishConfig": { "access": "public" - } + }, + "dependencies": { + "@berrysdk/core": "0.1.6" + } } diff --git a/packages/berryotp/package.json b/packages/berryotp/package.json index 6a7bec7..13ab90b 100644 --- a/packages/berryotp/package.json +++ b/packages/berryotp/package.json @@ -1,6 +1,6 @@ { "name": "berryotp", - "version": "0.1.5", + "version": "0.1.6", "description": "Facade package for BerryOTP so consumers can import it without the @berrysdk scope.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,9 +23,9 @@ "access": "public" }, "dependencies": { - "@berrysdk/berry-otp": "0.1.5" + "@berrysdk/berry-otp": "0.1.6" }, "peerDependencies": { - "berryprotocol": "^0.1.5" + "berryprotocol": "^0.1.6" } } diff --git a/packages/berryprotocol/README.md b/packages/berryprotocol/README.md index 288e169..700d4b3 100644 --- a/packages/berryprotocol/README.md +++ b/packages/berryprotocol/README.md @@ -17,9 +17,9 @@ import BerryProtocol from "berryprotocol"; For OTP flows, install the official companion package: ```bash -npm install @berrysdk/berry-otp +npm install berryotp ``` ```ts -import { BerryOTP } from "@berrysdk/berry-otp"; +import { BerryOTP } from "berryotp"; ``` diff --git a/packages/berryprotocol/package.json b/packages/berryprotocol/package.json index 73089d8..1a539bc 100644 --- a/packages/berryprotocol/package.json +++ b/packages/berryprotocol/package.json @@ -1,6 +1,6 @@ { "name": "berryprotocol", - "version": "0.1.5", + "version": "0.1.6", "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,6 +23,6 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.5" + "@berrysdk/core": "0.1.6" } } diff --git a/packages/cli/package.json b/packages/cli/package.json index a1c6d8f..3fd9a6e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/cli", - "version": "0.1.1", + "version": "0.1.6", "description": "CLI tooling for Berry Protocol sessions and message testing.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -20,7 +20,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.1", + "@berrysdk/core": "0.1.6", "commander": "^14.0.0", "pino": "^9.6.0" } diff --git a/packages/core/package.json b/packages/core/package.json index 511a408..996a1a2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/core", - "version": "0.1.5", + "version": "0.1.6", "description": "Public SDK for Berry Protocol WhatsApp integrations.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -26,7 +26,7 @@ "@berrysdk/events": "0.1.1", "@berrysdk/media": "0.1.1", "@berrysdk/messages": "0.1.1", - "@berrysdk/socket": "0.1.3", + "@berrysdk/socket": "0.1.6", "@berrysdk/store": "0.1.1", "pino": "^9.6.0", "qrcode-terminal": "^0.12.0" diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 4af4ab7..69f1148 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -358,7 +358,8 @@ export class BerryClient { const message = createTextMessage(to, text); return { message, - dispatch: () => this.socket.sendBaileysMessage(to, { text, ...(content.ai ? { ai: true } : {}) }), + dispatch: () => + this.socket.sendTransportMessage(to, { text, ...(content.ai ? { ai: true } : {}) }), }; } @@ -378,7 +379,7 @@ export class BerryClient { media, }, dispatch: () => - this.socket.sendBaileysMessage(to, { + this.socket.sendTransportMessage(to, { ...content, image: media.buffer!, caption: media.caption, @@ -404,7 +405,7 @@ export class BerryClient { media, }, dispatch: () => - this.socket.sendBaileysMessage(to, { + this.socket.sendTransportMessage(to, { ...content, audio: media.buffer!, mimetype: media.mimetype, @@ -428,7 +429,7 @@ export class BerryClient { media, }, dispatch: () => - this.socket.sendBaileysMessage(to, { + this.socket.sendTransportMessage(to, { ...content, document: media.buffer!, caption: media.caption, @@ -496,7 +497,7 @@ export class BerryClient { return { message, dispatch: () => - this.socket.sendBaileysMessage(to, { + this.socket.sendTransportMessage(to, { react: content.react!, ...(content.ai ? { ai: true } : {}), }), @@ -513,7 +514,7 @@ export class BerryClient { return { message: createLocationMessage(to, location), dispatch: () => - this.socket.sendBaileysMessage(to, { + this.socket.sendTransportMessage(to, { location: content.location!, ...(content.ai ? { ai: true } : {}), }), @@ -528,7 +529,7 @@ export class BerryClient { return { message: createContactMessage(to, contact), dispatch: () => - this.socket.sendBaileysMessage(to, { + this.socket.sendTransportMessage(to, { contacts: content.contacts!, ...(content.ai ? { ai: true } : {}), }), @@ -564,7 +565,7 @@ export class BerryClient { }; } - throw new Error("Only Buffer or { url } media inputs are supported for Baileys-compatible sends."); + throw new Error("Only Buffer or { url } media inputs are supported for BerryProtocol-compatible sends."); } private bindInternals(): void { diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 7c385b0..507c49e 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/gateway", - "version": "0.1.1", + "version": "0.1.6", "description": "HTTP gateway for multi-instance Berry Protocol control.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -20,7 +20,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.1", + "@berrysdk/core": "0.1.6", "express": "^5.1.0", "pino": "^9.6.0" } diff --git a/packages/socket/package.json b/packages/socket/package.json index 2124ca2..6bc109e 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/socket", - "version": "0.1.3", + "version": "0.1.6", "description": "Internal transport adapter for Berry Protocol.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -8,12 +8,8 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ - "dist", - "scripts" + "dist" ], - "scripts": { - "postinstall": "node ./scripts/patch-installed-baileys.mjs" - }, "exports": { ".": { "types": "./dist/index.d.ts", @@ -26,8 +22,8 @@ "dependencies": { "@berrysdk/events": "0.1.1", "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.0", - "@berrysdk/wa-message": "0.1.1", + "@berrysdk/transport": "0.1.6", + "@berrysdk/wa-message": "0.1.6", "pino": "^9.6.0", "ws": "^8.18.1" } diff --git a/packages/socket/scripts/patch-installed-baileys.mjs b/packages/socket/scripts/patch-installed-baileys.mjs deleted file mode 100644 index e1f5789..0000000 --- a/packages/socket/scripts/patch-installed-baileys.mjs +++ /dev/null @@ -1,196 +0,0 @@ -import { readFile, writeFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; -import { createRequire } from "node:module"; - -const require = createRequire(import.meta.url); - -const BIZ_BOT_SUPPORT_PAYLOAD = "{}"; - -const patchFile = async (filePath, mutator) => { - const source = await readFile(filePath, "utf8"); - const next = mutator(source); - - if (next !== source) { - await writeFile(filePath, next, "utf8"); - return true; - } - - return false; -}; - -const resolveBaileysRoot = () => { - const packageJsonPath = require.resolve("baileys/package.json"); - return dirname(packageJsonPath); -}; - -const patchMessageTypes = async (baileysRoot) => - patchFile(join(baileysRoot, "lib", "Types", "Message.d.ts"), (source) => { - if (source.includes("ai?: boolean;")) { - return source; - } - - const original = `export type AnyMessageContent = AnyRegularMessageContent | { - forward: WAMessage; - force?: boolean; -} | { - /** Delete your message or anyone's message in a group (admin required) */ - delete: WAMessageKey; -} | { - disappearingMessagesInChat: boolean | number; -} | { - limitSharing: boolean; -};`; - - const patched = `export type AnyMessageContent = (AnyRegularMessageContent | { - forward: WAMessage; - force?: boolean; -} | { - /** Delete your message or anyone's message in a group (admin required) */ - delete: WAMessageKey; -} | { - disappearingMessagesInChat: boolean | number; -} | { - limitSharing: boolean; -}) & { - ai?: boolean; -};`; - - return source.replace(original, patched); - }); - -const patchMessageSend = async (baileysRoot) => - patchFile(join(baileysRoot, "lib", "Socket", "messages-send.js"), (source) => { - let next = source; - - if (!next.includes("const BIZ_BOT_SUPPORT_PAYLOAD = '{}'")) { - next = next.replace( - "import { makeNewsletterSocket } from './newsletter.js';", - `import { makeNewsletterSocket } from './newsletter.js';\nconst BIZ_BOT_SUPPORT_PAYLOAD = '${BIZ_BOT_SUPPORT_PAYLOAD}';`, - ); - } - - if (!next.includes("const isAiMsg = typeof messageContent === 'object'")) { - next = next.replace( - ` const fullMsg = await generateWAMessage(jid, content, { - logger, - userJid, - getUrlInfo: text => getUrlInfo(text, { - thumbnailWidth: linkPreviewImageThumbnailWidth, - fetchOpts: { - timeout: 3000, - ...(httpRequestOptions || {}) - }, - logger, - uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined - }), - //TODO: CACHE - getProfilePicUrl: sock.profilePictureUrl, - getCallLink: sock.createCallLink, - upload: waUploadToServer, - mediaCache: config.mediaCache, - options: config.options, - messageId: generateMessageIDV2(sock.user?.id), - ...options - }); - const isEventMsg = 'event' in content && !!content.event; - const isDeleteMsg = 'delete' in content && !!content.delete; - const isEditMsg = 'edit' in content && !!content.edit; - const isPinMsg = 'pin' in content && !!content.pin; - const isPollMessage = 'poll' in content && !!content.poll;`, - ` const messageContent = typeof content === 'object' && content - ? { ...content } - : content; - const isAiMsg = typeof messageContent === 'object' - && !!messageContent - && 'ai' in messageContent - && !!messageContent.ai; - if (isAiMsg) { - delete messageContent.ai; - } - const fullMsg = await generateWAMessage(jid, messageContent, { - logger, - userJid, - getUrlInfo: text => getUrlInfo(text, { - thumbnailWidth: linkPreviewImageThumbnailWidth, - fetchOpts: { - timeout: 3000, - ...(httpRequestOptions || {}) - }, - logger, - uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined - }), - //TODO: CACHE - getProfilePicUrl: sock.profilePictureUrl, - getCallLink: sock.createCallLink, - upload: waUploadToServer, - mediaCache: config.mediaCache, - options: config.options, - messageId: generateMessageIDV2(sock.user?.id), - ...options - }); - const isEventMsg = typeof messageContent === 'object' && !!messageContent && 'event' in messageContent && !!messageContent.event; - const isDeleteMsg = typeof messageContent === 'object' && !!messageContent && 'delete' in messageContent && !!messageContent.delete; - const isEditMsg = typeof messageContent === 'object' && !!messageContent && 'edit' in messageContent && !!messageContent.edit; - const isPinMsg = typeof messageContent === 'object' && !!messageContent && 'pin' in messageContent && !!messageContent.pin; - const isPollMessage = typeof messageContent === 'object' && !!messageContent && 'poll' in messageContent && !!messageContent.poll;`, - ); - } - - next = next.replaceAll( - "if (isJidGroup(content.delete?.remoteJid) && !content.delete?.fromMe)", - "if (isJidGroup(messageContent.delete?.remoteJid) && !messageContent.delete?.fromMe)", - ); - - if (!next.includes("AI labeled messages are only allowed in private chat")) { - next = next.replace( - ` else if (isEventMsg) { - additionalNodes.push({ - tag: 'meta', - attrs: { - event_type: 'creation' - } - }); - }`, - ` else if (isEventMsg) { - additionalNodes.push({ - tag: 'meta', - attrs: { - event_type: 'creation' - } - }); - } - else if (isAiMsg) { - if (!(isPnUser(jid) || isLidUser(jid))) { - throw new Boom('AI labeled messages are only allowed in private chat', { - statusCode: 400 - }); - } - fullMsg.message.messageContextInfo ||= {}; - fullMsg.message.messageContextInfo.supportPayload = BIZ_BOT_SUPPORT_PAYLOAD; - additionalNodes.push({ - tag: 'bot', - attrs: { - biz_bot: '1' - }, - content: undefined - }); - }`, - ); - } - - return next; - }); - -try { - const baileysRoot = resolveBaileysRoot(); - const results = await Promise.all([ - patchMessageTypes(baileysRoot), - patchMessageSend(baileysRoot), - ]); - - if (results.some(Boolean)) { - console.log("Berry SDK patched installed Baileys with AI label support."); - } -} catch (error) { - console.warn("Berry SDK could not patch installed Baileys:", error instanceof Error ? error.message : error); -} diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index 4f60392..e43f2eb 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -11,7 +11,7 @@ import makeWASocket, { type AnyMessageContent, DisconnectReason, downloadMediaMessage, - fetchLatestBaileysVersion, + fetchLatestBerryWebVersion, generateWAMessageFromContent, makeCacheableSignalKeyStore, useMultiFileAuthState, @@ -242,12 +242,12 @@ export class BerrySocket { return result; } - async sendBaileysMessage(to: string, content: AnyMessageContent): Promise { + async sendTransportMessage(to: string, content: AnyMessageContent): Promise { return this.sendMessage(to, content as MessageContent); } async editMessage(to: string, messageId: string, text: string): Promise { - return this.sendBaileysMessage(to, { + return this.sendTransportMessage(to, { text, edit: { remoteJid: to, @@ -391,7 +391,7 @@ export class BerrySocket { private async createSocketAndWaitUntilOpen(): Promise<"open" | "restart_required"> { const sessionDir = await this.ensureAuthDir(); const { state, saveCreds } = await useMultiFileAuthState(sessionDir); - const { version } = await fetchLatestBaileysVersion(); + const { version } = await fetchLatestBerryWebVersion(); return new Promise<"open" | "restart_required">((resolve, reject) => { const sock = makeWASocket({ diff --git a/packages/transport/package.json b/packages/transport/package.json index 748592d..a2c7e7c 100644 --- a/packages/transport/package.json +++ b/packages/transport/package.json @@ -1,14 +1,15 @@ { "name": "@berrysdk/transport", - "version": "0.1.0", - "description": "Internal WhatsApp Web transport layer for BerrySDK.", + "version": "0.1.6", + "description": "Internal BerrySDK WhatsApp Web engine and transport runtime.", "author": "BerrySDK", "license": "Apache-2.0", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ - "dist" + "dist", + "vendor" ], "exports": { ".": { @@ -22,6 +23,36 @@ "access": "public" }, "dependencies": { - "baileys": "7.0.0-rc10" + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node", + "lru-cache": "^11.1.0", + "music-metadata": "^11.12.3", + "p-queue": "^9.0.0", + "pino": "^9.6.0", + "protobufjs": "^7.5.6", + "whatsapp-rust-bridge": "0.5.3", + "ws": "^8.18.1" + }, + "peerDependencies": { + "audio-decode": "^2.1.3", + "jimp": "^1.6.1", + "link-preview-js": "^3.0.0", + "sharp": "*" + }, + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + }, + "sharp": { + "optional": true + } } } diff --git a/packages/transport/src/index.ts b/packages/transport/src/index.ts index aec9911..0dddb9c 100644 --- a/packages/transport/src/index.ts +++ b/packages/transport/src/index.ts @@ -9,16 +9,17 @@ export { default, DisconnectReason, downloadMediaMessage, + fetchLatestBaileysVersion as fetchLatestBerryWebVersion, fetchLatestBaileysVersion, generateWAMessageFromContent, makeCacheableSignalKeyStore, proto, useMultiFileAuthState, -} from "baileys"; +} from "../vendor/lib/index.js"; export type { AnyMessageContent, BinaryNode, WAMessage, WASocket, -} from "baileys"; +} from "../vendor/lib/index.js"; diff --git a/packages/transport/vendor/WAProto/GenerateStatics.sh b/packages/transport/vendor/WAProto/GenerateStatics.sh new file mode 100644 index 0000000..51316a5 --- /dev/null +++ b/packages/transport/vendor/WAProto/GenerateStatics.sh @@ -0,0 +1,3 @@ +yarn pbjs -t static-module --no-beautify -w es6 --no-bundle --no-delimited --no-verify --no-comments -o ./index.js ./WAProto.proto; +yarn pbjs -t static-module --no-beautify -w es6 --no-bundle --no-delimited --no-verify ./WAProto.proto | yarn pbts --no-comments -o ./index.d.ts -; +node ./fix-imports.js diff --git a/packages/transport/vendor/WAProto/WAProto.proto b/packages/transport/vendor/WAProto/WAProto.proto new file mode 100644 index 0000000..d763174 --- /dev/null +++ b/packages/transport/vendor/WAProto/WAProto.proto @@ -0,0 +1,5479 @@ +syntax = "proto3"; +package proto; + +/// WhatsApp Version: 2.3000.1029496320 + +message ADVDeviceIdentity { + optional uint32 rawId = 1; + optional uint64 timestamp = 2; + optional uint32 keyIndex = 3; + optional ADVEncryptionType accountType = 4; + optional ADVEncryptionType deviceType = 5; +} + +enum ADVEncryptionType { + E2EE = 0; + HOSTED = 1; +} +message ADVKeyIndexList { + optional uint32 rawId = 1; + optional uint64 timestamp = 2; + optional uint32 currentIndex = 3; + repeated uint32 validIndexes = 4 [packed=true]; + optional ADVEncryptionType accountType = 5; +} + +message ADVSignedDeviceIdentity { + optional bytes details = 1; + optional bytes accountSignatureKey = 2; + optional bytes accountSignature = 3; + optional bytes deviceSignature = 4; +} + +message ADVSignedDeviceIdentityHMAC { + optional bytes details = 1; + optional bytes hmac = 2; + optional ADVEncryptionType accountType = 3; +} + +message ADVSignedKeyIndexList { + optional bytes details = 1; + optional bytes accountSignature = 2; + optional bytes accountSignatureKey = 3; +} + +message AIHomeState { + optional int64 lastFetchTime = 1; + repeated AIHomeOption capabilityOptions = 2; + repeated AIHomeOption conversationOptions = 3; + message AIHomeOption { + optional AIHomeActionType type = 1; + optional string title = 2; + optional string promptText = 3; + optional string sessionId = 4; + optional string imageWdsIdentifier = 5; + optional string imageTintColor = 6; + optional string imageBackgroundColor = 7; + enum AIHomeActionType { + PROMPT = 0; + CREATE_IMAGE = 1; + ANIMATE_PHOTO = 2; + ANALYZE_FILE = 3; + } + } + +} + +message AIQueryFanout { + optional MessageKey messageKey = 1; + optional Message message = 2; + optional int64 timestamp = 3; +} + +message AIRegenerateMetadata { + optional MessageKey messageKey = 1; + optional int64 responseTimestampMs = 2; +} + +message AIRichResponseCodeMetadata { + optional string codeLanguage = 1; + repeated AIRichResponseCodeBlock codeBlocks = 2; + message AIRichResponseCodeBlock { + optional AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType highlightType = 1; + optional string codeContent = 2; + } + + enum AIRichResponseCodeHighlightType { + AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT = 0; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD = 1; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD = 2; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING = 3; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER = 4; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT = 5; + } +} + +message AIRichResponseContentItemsMetadata { + repeated AIRichResponseContentItemMetadata itemsMetadata = 1; + optional ContentType contentType = 2; + message AIRichResponseContentItemMetadata { + oneof aIRichResponseContentItem { + AIRichResponseContentItemsMetadata.AIRichResponseReelItem reelItem = 1; + } + } + + message AIRichResponseReelItem { + optional string title = 1; + optional string profileIconUrl = 2; + optional string thumbnailUrl = 3; + optional string videoUrl = 4; + } + + enum ContentType { + DEFAULT = 0; + CAROUSEL = 1; + } +} + +message AIRichResponseDynamicMetadata { + optional AIRichResponseDynamicMetadataType type = 1; + optional uint64 version = 2; + optional string url = 3; + optional uint32 loopCount = 4; + enum AIRichResponseDynamicMetadataType { + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN = 0; + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE = 1; + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF = 2; + } +} + +message AIRichResponseGridImageMetadata { + optional AIRichResponseImageURL gridImageUrl = 1; + repeated AIRichResponseImageURL imageUrls = 2; +} + +message AIRichResponseImageURL { + optional string imagePreviewUrl = 1; + optional string imageHighResUrl = 2; + optional string sourceUrl = 3; +} + +message AIRichResponseInlineImageMetadata { + optional AIRichResponseImageURL imageUrl = 1; + optional string imageText = 2; + optional AIRichResponseImageAlignment alignment = 3; + optional string tapLinkUrl = 4; + enum AIRichResponseImageAlignment { + AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED = 0; + AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED = 1; + AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED = 2; + } +} + +message AIRichResponseLatexMetadata { + optional string text = 1; + repeated AIRichResponseLatexExpression expressions = 2; + message AIRichResponseLatexExpression { + optional string latexExpression = 1; + optional string url = 2; + optional double width = 3; + optional double height = 4; + optional double fontHeight = 5; + optional double imageTopPadding = 6; + optional double imageLeadingPadding = 7; + optional double imageBottomPadding = 8; + optional double imageTrailingPadding = 9; + } + +} + +message AIRichResponseMapMetadata { + optional double centerLatitude = 1; + optional double centerLongitude = 2; + optional double latitudeDelta = 3; + optional double longitudeDelta = 4; + repeated AIRichResponseMapAnnotation annotations = 5; + optional bool showInfoList = 6; + message AIRichResponseMapAnnotation { + optional uint32 annotationNumber = 1; + optional double latitude = 2; + optional double longitude = 3; + optional string title = 4; + optional string body = 5; + } + +} + +message AIRichResponseMessage { + optional AIRichResponseMessageType messageType = 1; + repeated AIRichResponseSubMessage submessages = 2; + optional AIRichResponseUnifiedResponse unifiedResponse = 3; + optional ContextInfo contextInfo = 4; +} + +enum AIRichResponseMessageType { + AI_RICH_RESPONSE_TYPE_UNKNOWN = 0; + AI_RICH_RESPONSE_TYPE_STANDARD = 1; +} +message AIRichResponseSubMessage { + optional AIRichResponseSubMessageType messageType = 1; + optional AIRichResponseGridImageMetadata gridImageMetadata = 2; + optional string messageText = 3; + optional AIRichResponseInlineImageMetadata imageMetadata = 4; + optional AIRichResponseCodeMetadata codeMetadata = 5; + optional AIRichResponseTableMetadata tableMetadata = 6; + optional AIRichResponseDynamicMetadata dynamicMetadata = 7; + optional AIRichResponseLatexMetadata latexMetadata = 8; + optional AIRichResponseMapMetadata mapMetadata = 9; + optional AIRichResponseContentItemsMetadata contentItemsMetadata = 10; +} + +enum AIRichResponseSubMessageType { + AI_RICH_RESPONSE_UNKNOWN = 0; + AI_RICH_RESPONSE_GRID_IMAGE = 1; + AI_RICH_RESPONSE_TEXT = 2; + AI_RICH_RESPONSE_INLINE_IMAGE = 3; + AI_RICH_RESPONSE_TABLE = 4; + AI_RICH_RESPONSE_CODE = 5; + AI_RICH_RESPONSE_DYNAMIC = 6; + AI_RICH_RESPONSE_MAP = 7; + AI_RICH_RESPONSE_LATEX = 8; + AI_RICH_RESPONSE_CONTENT_ITEMS = 9; +} +message AIRichResponseTableMetadata { + repeated AIRichResponseTableRow rows = 1; + optional string title = 2; + message AIRichResponseTableRow { + repeated string items = 1; + optional bool isHeading = 2; + } + +} + +message AIRichResponseUnifiedResponse { + optional bytes data = 1; +} + +message AIThreadInfo { + optional AIThreadServerInfo serverInfo = 1; + optional AIThreadClientInfo clientInfo = 2; + message AIThreadClientInfo { + optional AIThreadType type = 1; + enum AIThreadType { + UNKNOWN = 0; + DEFAULT = 1; + INCOGNITO = 2; + } + } + + message AIThreadServerInfo { + optional string title = 1; + } + +} + +message Account { + optional string lid = 1; + optional string username = 2; + optional string countryCode = 3; + optional bool isUsernameDeleted = 4; +} + +message ActionLink { + optional string url = 1; + optional string buttonTitle = 2; +} + +message AutoDownloadSettings { + optional bool downloadImages = 1; + optional bool downloadAudio = 2; + optional bool downloadVideo = 3; + optional bool downloadDocuments = 4; +} + +message AvatarUserSettings { + optional string fbid = 1; + optional string password = 2; +} + +message BizAccountLinkInfo { + optional uint64 whatsappBizAcctFbid = 1; + optional string whatsappAcctNumber = 2; + optional uint64 issueTime = 3; + optional HostStorageType hostStorage = 4; + optional AccountType accountType = 5; + enum AccountType { + ENTERPRISE = 0; + } + enum HostStorageType { + ON_PREMISE = 0; + FACEBOOK = 1; + } +} + +message BizAccountPayload { + optional VerifiedNameCertificate vnameCert = 1; + optional bytes bizAcctLinkInfo = 2; +} + +message BizIdentityInfo { + optional VerifiedLevelValue vlevel = 1; + optional VerifiedNameCertificate vnameCert = 2; + optional bool signed = 3; + optional bool revoked = 4; + optional HostStorageType hostStorage = 5; + optional ActualActorsType actualActors = 6; + optional uint64 privacyModeTs = 7; + optional uint64 featureControls = 8; + enum ActualActorsType { + SELF = 0; + BSP = 1; + } + enum HostStorageType { + ON_PREMISE = 0; + FACEBOOK = 1; + } + enum VerifiedLevelValue { + UNKNOWN = 0; + LOW = 1; + HIGH = 2; + } +} + +message BotAgeCollectionMetadata { + optional bool ageCollectionEligible = 1; + optional bool shouldTriggerAgeCollectionOnClient = 2; + optional AgeCollectionType ageCollectionType = 3; + enum AgeCollectionType { + O18_BINARY = 0; + WAFFLE = 1; + } +} + +message BotAvatarMetadata { + optional uint32 sentiment = 1; + optional string behaviorGraph = 2; + optional uint32 action = 3; + optional uint32 intensity = 4; + optional uint32 wordCount = 5; +} + +message BotCapabilityMetadata { + repeated BotCapabilityType capabilities = 1; + enum BotCapabilityType { + UNKNOWN = 0; + PROGRESS_INDICATOR = 1; + RICH_RESPONSE_HEADING = 2; + RICH_RESPONSE_NESTED_LIST = 3; + AI_MEMORY = 4; + RICH_RESPONSE_THREAD_SURFING = 5; + RICH_RESPONSE_TABLE = 6; + RICH_RESPONSE_CODE = 7; + RICH_RESPONSE_STRUCTURED_RESPONSE = 8; + RICH_RESPONSE_INLINE_IMAGE = 9; + WA_IG_1P_PLUGIN_RANKING_CONTROL = 10; + WA_IG_1P_PLUGIN_RANKING_UPDATE_1 = 11; + WA_IG_1P_PLUGIN_RANKING_UPDATE_2 = 12; + WA_IG_1P_PLUGIN_RANKING_UPDATE_3 = 13; + WA_IG_1P_PLUGIN_RANKING_UPDATE_4 = 14; + WA_IG_1P_PLUGIN_RANKING_UPDATE_5 = 15; + WA_IG_1P_PLUGIN_RANKING_UPDATE_6 = 16; + WA_IG_1P_PLUGIN_RANKING_UPDATE_7 = 17; + WA_IG_1P_PLUGIN_RANKING_UPDATE_8 = 18; + WA_IG_1P_PLUGIN_RANKING_UPDATE_9 = 19; + WA_IG_1P_PLUGIN_RANKING_UPDATE_10 = 20; + RICH_RESPONSE_SUB_HEADING = 21; + RICH_RESPONSE_GRID_IMAGE = 22; + AI_STUDIO_UGC_MEMORY = 23; + RICH_RESPONSE_LATEX = 24; + RICH_RESPONSE_MAPS = 25; + RICH_RESPONSE_INLINE_REELS = 26; + AGENTIC_PLANNING = 27; + ACCOUNT_LINKING = 28; + STREAMING_DISAGGREGATION = 29; + RICH_RESPONSE_GRID_IMAGE_3P = 30; + RICH_RESPONSE_LATEX_INLINE = 31; + QUERY_PLAN = 32; + PROACTIVE_MESSAGE = 33; + RICH_RESPONSE_UNIFIED_RESPONSE = 34; + PROMOTION_MESSAGE = 35; + SIMPLIFIED_PROFILE_PAGE = 36; + RICH_RESPONSE_SOURCES_IN_MESSAGE = 37; + RICH_RESPONSE_SIDE_BY_SIDE_SURVEY = 38; + RICH_RESPONSE_UNIFIED_TEXT_COMPONENT = 39; + AI_SHARED_MEMORY = 40; + RICH_RESPONSE_UNIFIED_SOURCES = 41; + RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS = 42; + RICH_RESPONSE_UR_INLINE_REELS_ENABLED = 43; + RICH_RESPONSE_UR_MEDIA_GRID_ENABLED = 44; + RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER = 45; + RICH_RESPONSE_IN_APP_SURVEY = 46; + AI_RESPONSE_MODEL_BRANDING = 47; + SESSION_TRANSPARENCY_SYSTEM_MESSAGE = 48; + RICH_RESPONSE_UR_REASONING = 49; + } +} + +message BotFeedbackMessage { + optional MessageKey messageKey = 1; + optional BotFeedbackKind kind = 2; + optional string text = 3; + optional uint64 kindNegative = 4; + optional uint64 kindPositive = 5; + optional ReportKind kindReport = 6; + optional SideBySideSurveyMetadata sideBySideSurveyMetadata = 7; + enum BotFeedbackKind { + BOT_FEEDBACK_POSITIVE = 0; + BOT_FEEDBACK_NEGATIVE_GENERIC = 1; + BOT_FEEDBACK_NEGATIVE_HELPFUL = 2; + BOT_FEEDBACK_NEGATIVE_INTERESTING = 3; + BOT_FEEDBACK_NEGATIVE_ACCURATE = 4; + BOT_FEEDBACK_NEGATIVE_SAFE = 5; + BOT_FEEDBACK_NEGATIVE_OTHER = 6; + BOT_FEEDBACK_NEGATIVE_REFUSED = 7; + BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING = 8; + BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT = 9; + BOT_FEEDBACK_NEGATIVE_PERSONALIZED = 10; + BOT_FEEDBACK_NEGATIVE_CLARITY = 11; + BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON = 12; + BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY = 13; + BOT_FEEDBACK_NEGATIVE = 14; + } + enum BotFeedbackKindMultipleNegative { + BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC = 1; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL = 2; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING = 4; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE = 8; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE = 16; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER = 32; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED = 64; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING = 128; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT = 256; + } + enum BotFeedbackKindMultiplePositive { + BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC = 1; + } + enum ReportKind { + NONE = 0; + GENERIC = 1; + } + message SideBySideSurveyMetadata { + optional string selectedRequestId = 1; + optional uint32 surveyId = 2; + optional string simonSessionFbid = 3; + optional string responseOtid = 4; + optional string responseTimestampMsString = 5; + optional bool isSelectedResponsePrimary = 6; + optional string messageIdToEdit = 7; + optional SideBySideSurveyAnalyticsData analyticsData = 8; + optional SidebySideSurveyMetaAiAnalyticsData metaAiAnalyticsData = 9; + message SideBySideSurveyAnalyticsData { + optional string tessaEvent = 1; + optional string tessaSessionFbid = 2; + optional string simonSessionFbid = 3; + } + + message SidebySideSurveyMetaAiAnalyticsData { + optional uint32 surveyId = 1; + optional string primaryResponseId = 2; + optional string testArmName = 3; + optional string timestampMsString = 4; + optional SideBySideSurveyCTAImpressionEventData ctaImpressionEvent = 5; + optional SideBySideSurveyCTAClickEventData ctaClickEvent = 6; + optional SideBySideSurveyCardImpressionEventData cardImpressionEvent = 7; + optional SideBySideSurveyResponseEventData responseEvent = 8; + optional SideBySideSurveyAbandonEventData abandonEvent = 9; + message SideBySideSurveyAbandonEventData { + optional string abandonDwellTimeMsString = 1; + } + + message SideBySideSurveyCTAClickEventData { + optional bool isSurveyExpired = 1; + optional string clickDwellTimeMsString = 2; + } + + message SideBySideSurveyCTAImpressionEventData { + optional bool isSurveyExpired = 1; + } + + message SideBySideSurveyCardImpressionEventData { + } + + message SideBySideSurveyResponseEventData { + optional string responseDwellTimeMsString = 1; + optional string selectedResponseId = 2; + } + + } + + } + +} + +message BotImagineMetadata { + optional ImagineType imagineType = 1; + enum ImagineType { + UNKNOWN = 0; + IMAGINE = 1; + MEMU = 2; + FLASH = 3; + EDIT = 4; + } +} + +message BotLinkedAccount { + optional BotLinkedAccountType type = 1; + enum BotLinkedAccountType { + BOT_LINKED_ACCOUNT_TYPE_1P = 0; + } +} + +message BotLinkedAccountsMetadata { + repeated BotLinkedAccount accounts = 1; + optional bytes acAuthTokens = 2; + optional int32 acErrorCode = 3; +} + +message BotMediaMetadata { + optional string fileSha256 = 1; + optional string mediaKey = 2; + optional string fileEncSha256 = 3; + optional string directPath = 4; + optional int64 mediaKeyTimestamp = 5; + optional string mimetype = 6; + optional OrientationType orientationType = 7; + enum OrientationType { + CENTER = 1; + LEFT = 2; + RIGHT = 3; + } +} + +message BotMemoryFact { + optional string fact = 1; + optional string factId = 2; +} + +message BotMemoryMetadata { + repeated BotMemoryFact addedFacts = 1; + repeated BotMemoryFact removedFacts = 2; + optional string disclaimer = 3; +} + +message BotMemuMetadata { + repeated BotMediaMetadata faceImages = 1; +} + +message BotMessageOrigin { + optional BotMessageOriginType type = 1; + enum BotMessageOriginType { + BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED = 0; + } +} + +message BotMessageOriginMetadata { + repeated BotMessageOrigin origins = 1; +} + +message BotMessageSharingInfo { + optional BotMetricsEntryPoint botEntryPointOrigin = 1; + optional uint32 forwardScore = 2; +} + +message BotMetadata { + optional BotAvatarMetadata avatarMetadata = 1; + optional string personaId = 2; + optional BotPluginMetadata pluginMetadata = 3; + optional BotSuggestedPromptMetadata suggestedPromptMetadata = 4; + optional string invokerJid = 5; + optional BotSessionMetadata sessionMetadata = 6; + optional BotMemuMetadata memuMetadata = 7; + optional string timezone = 8; + optional BotReminderMetadata reminderMetadata = 9; + optional BotModelMetadata modelMetadata = 10; + optional string messageDisclaimerText = 11; + optional BotProgressIndicatorMetadata progressIndicatorMetadata = 12; + optional BotCapabilityMetadata capabilityMetadata = 13; + optional BotImagineMetadata imagineMetadata = 14; + optional BotMemoryMetadata memoryMetadata = 15; + optional BotRenderingMetadata renderingMetadata = 16; + optional BotMetricsMetadata botMetricsMetadata = 17; + optional BotLinkedAccountsMetadata botLinkedAccountsMetadata = 18; + optional BotSourcesMetadata richResponseSourcesMetadata = 19; + optional bytes aiConversationContext = 20; + optional BotPromotionMessageMetadata botPromotionMessageMetadata = 21; + optional BotModeSelectionMetadata botModeSelectionMetadata = 22; + optional BotQuotaMetadata botQuotaMetadata = 23; + optional BotAgeCollectionMetadata botAgeCollectionMetadata = 24; + optional string conversationStarterPromptId = 25; + optional string botResponseId = 26; + optional BotSignatureVerificationMetadata verificationMetadata = 27; + optional BotUnifiedResponseMutation unifiedResponseMutation = 28; + optional BotMessageOriginMetadata botMessageOriginMetadata = 29; + optional InThreadSurveyMetadata inThreadSurveyMetadata = 30; + optional AIThreadInfo botThreadInfo = 31; + optional AIRegenerateMetadata regenerateMetadata = 32; + optional SessionTransparencyMetadata sessionTransparencyMetadata = 33; + optional bytes internalMetadata = 999; +} + +enum BotMetricsEntryPoint { + UNDEFINED_ENTRY_POINT = 0; + FAVICON = 1; + CHATLIST = 2; + AISEARCH_NULL_STATE_PAPER_PLANE = 3; + AISEARCH_NULL_STATE_SUGGESTION = 4; + AISEARCH_TYPE_AHEAD_SUGGESTION = 5; + AISEARCH_TYPE_AHEAD_PAPER_PLANE = 6; + AISEARCH_TYPE_AHEAD_RESULT_CHATLIST = 7; + AISEARCH_TYPE_AHEAD_RESULT_MESSAGES = 8; + AIVOICE_SEARCH_BAR = 9; + AIVOICE_FAVICON = 10; + AISTUDIO = 11; + DEEPLINK = 12; + NOTIFICATION = 13; + PROFILE_MESSAGE_BUTTON = 14; + FORWARD = 15; + APP_SHORTCUT = 16; + FF_FAMILY = 17; + AI_TAB = 18; + AI_HOME = 19; + AI_DEEPLINK_IMMERSIVE = 20; + AI_DEEPLINK = 21; + META_AI_CHAT_SHORTCUT_AI_STUDIO = 22; + UGC_CHAT_SHORTCUT_AI_STUDIO = 23; + NEW_CHAT_AI_STUDIO = 24; + AIVOICE_FAVICON_CALL_HISTORY = 25; + ASK_META_AI_CONTEXT_MENU = 26; + ASK_META_AI_CONTEXT_MENU_1ON1 = 27; + ASK_META_AI_CONTEXT_MENU_GROUP = 28; + INVOKE_META_AI_1ON1 = 29; + INVOKE_META_AI_GROUP = 30; + META_AI_FORWARD = 31; + NEW_CHAT_AI_CONTACT = 32; + MESSAGE_QUICK_ACTION_1_ON_1_CHAT = 33; + MESSAGE_QUICK_ACTION_GROUP_CHAT = 34; + ATTACHMENT_TRAY_1_ON_1_CHAT = 35; + ATTACHMENT_TRAY_GROUP_CHAT = 36; + ASK_META_AI_MEDIA_VIEWER_1ON1 = 37; + ASK_META_AI_MEDIA_VIEWER_GROUP = 38; +} +message BotMetricsMetadata { + optional string destinationId = 1; + optional BotMetricsEntryPoint destinationEntryPoint = 2; + optional BotMetricsThreadEntryPoint threadOrigin = 3; +} + +enum BotMetricsThreadEntryPoint { + AI_TAB_THREAD = 1; + AI_HOME_THREAD = 2; + AI_DEEPLINK_IMMERSIVE_THREAD = 3; + AI_DEEPLINK_THREAD = 4; + ASK_META_AI_CONTEXT_MENU_THREAD = 5; +} +message BotModeSelectionMetadata { + repeated BotUserSelectionMode mode = 1; + enum BotUserSelectionMode { + UNKNOWN_MODE = 0; + REASONING_MODE = 1; + } +} + +message BotModelMetadata { + optional ModelType modelType = 1; + optional PremiumModelStatus premiumModelStatus = 2; + optional string modelNameOverride = 3; + enum ModelType { + UNKNOWN_TYPE = 0; + LLAMA_PROD = 1; + LLAMA_PROD_PREMIUM = 2; + } + enum PremiumModelStatus { + UNKNOWN_STATUS = 0; + AVAILABLE = 1; + QUOTA_EXCEED_LIMIT = 2; + } +} + +message BotPluginMetadata { + optional SearchProvider provider = 1; + optional PluginType pluginType = 2; + optional string thumbnailCdnUrl = 3; + optional string profilePhotoCdnUrl = 4; + optional string searchProviderUrl = 5; + optional uint32 referenceIndex = 6; + optional uint32 expectedLinksCount = 7; + optional string searchQuery = 9; + optional MessageKey parentPluginMessageKey = 10; + optional PluginType deprecatedField = 11; + optional PluginType parentPluginType = 12; + optional string faviconCdnUrl = 13; + enum PluginType { + UNKNOWN_PLUGIN = 0; + REELS = 1; + SEARCH = 2; + } + enum SearchProvider { + UNKNOWN = 0; + BING = 1; + GOOGLE = 2; + SUPPORT = 3; + } +} + +message BotProgressIndicatorMetadata { + optional string progressDescription = 1; + repeated BotPlanningStepMetadata stepsMetadata = 2; + message BotPlanningStepMetadata { + optional string statusTitle = 1; + optional string statusBody = 2; + repeated BotPlanningSearchSourcesMetadata sourcesMetadata = 3; + optional PlanningStepStatus status = 4; + optional bool isReasoning = 5; + optional bool isEnhancedSearch = 6; + repeated BotPlanningStepSectionMetadata sections = 7; + message BotPlanningSearchSourceMetadata { + optional string title = 1; + optional BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider provider = 2; + optional string sourceUrl = 3; + optional string favIconUrl = 4; + } + + message BotPlanningSearchSourcesMetadata { + optional string sourceTitle = 1; + optional BotPlanningSearchSourceProvider provider = 2; + optional string sourceUrl = 3; + enum BotPlanningSearchSourceProvider { + UNKNOWN = 0; + OTHER = 1; + GOOGLE = 2; + BING = 3; + } + } + + message BotPlanningStepSectionMetadata { + optional string sectionTitle = 1; + optional string sectionBody = 2; + repeated BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata sourcesMetadata = 3; + } + + enum BotSearchSourceProvider { + UNKNOWN_PROVIDER = 0; + OTHER = 1; + GOOGLE = 2; + BING = 3; + } + enum PlanningStepStatus { + UNKNOWN = 0; + PLANNED = 1; + EXECUTING = 2; + FINISHED = 3; + } + } + +} + +message BotPromotionMessageMetadata { + optional BotPromotionType promotionType = 1; + optional string buttonTitle = 2; + enum BotPromotionType { + UNKNOWN_TYPE = 0; + C50 = 1; + SURVEY_PLATFORM = 2; + } +} + +message BotPromptSuggestion { + optional string prompt = 1; + optional string promptId = 2; +} + +message BotPromptSuggestions { + repeated BotPromptSuggestion suggestions = 1; +} + +message BotQuotaMetadata { + repeated BotFeatureQuotaMetadata botFeatureQuotaMetadata = 1; + message BotFeatureQuotaMetadata { + optional BotFeatureType featureType = 1; + optional uint32 remainingQuota = 2; + optional uint64 expirationTimestamp = 3; + enum BotFeatureType { + UNKNOWN_FEATURE = 0; + REASONING_FEATURE = 1; + } + } + +} + +message BotReminderMetadata { + optional MessageKey requestMessageKey = 1; + optional ReminderAction action = 2; + optional string name = 3; + optional uint64 nextTriggerTimestamp = 4; + optional ReminderFrequency frequency = 5; + enum ReminderAction { + NOTIFY = 1; + CREATE = 2; + DELETE = 3; + UPDATE = 4; + } + enum ReminderFrequency { + ONCE = 1; + DAILY = 2; + WEEKLY = 3; + BIWEEKLY = 4; + MONTHLY = 5; + } +} + +message BotRenderingMetadata { + repeated Keyword keywords = 1; + message Keyword { + optional string value = 1; + repeated string associatedPrompts = 2; + } + +} + +message BotSessionMetadata { + optional string sessionId = 1; + optional BotSessionSource sessionSource = 2; +} + +enum BotSessionSource { + NONE = 0; + NULL_STATE = 1; + TYPEAHEAD = 2; + USER_INPUT = 3; + EMU_FLASH = 4; + EMU_FLASH_FOLLOWUP = 5; + VOICE = 6; +} +message BotSignatureVerificationMetadata { + repeated BotSignatureVerificationUseCaseProof proofs = 1; +} + +message BotSignatureVerificationUseCaseProof { + optional int32 version = 1; + optional BotSignatureUseCase useCase = 2; + optional bytes signature = 3; + repeated bytes certificateChain = 4; + enum BotSignatureUseCase { + UNSPECIFIED = 0; + WA_BOT_MSG = 1; + } +} + +message BotSourcesMetadata { + repeated BotSourceItem sources = 1; + message BotSourceItem { + optional SourceProvider provider = 1; + optional string thumbnailCdnUrl = 2; + optional string sourceProviderUrl = 3; + optional string sourceQuery = 4; + optional string faviconCdnUrl = 5; + optional uint32 citationNumber = 6; + optional string sourceTitle = 7; + enum SourceProvider { + UNKNOWN = 0; + BING = 1; + GOOGLE = 2; + SUPPORT = 3; + OTHER = 4; + } + } + +} + +message BotSuggestedPromptMetadata { + repeated string suggestedPrompts = 1; + optional uint32 selectedPromptIndex = 2; + optional BotPromptSuggestions promptSuggestions = 3; + optional string selectedPromptId = 4; +} + +message BotUnifiedResponseMutation { + optional SideBySideMetadata sbsMetadata = 1; + repeated MediaDetailsMetadata mediaDetailsMetadataList = 2; + message MediaDetailsMetadata { + optional string id = 1; + optional BotMediaMetadata highResMedia = 2; + optional BotMediaMetadata previewMedia = 3; + } + + message SideBySideMetadata { + optional string primaryResponseId = 1; + optional bool surveyCtaHasRendered = 2; + } + +} + +message CallLogRecord { + optional CallResult callResult = 1; + optional bool isDndMode = 2; + optional SilenceReason silenceReason = 3; + optional int64 duration = 4; + optional int64 startTime = 5; + optional bool isIncoming = 6; + optional bool isVideo = 7; + optional bool isCallLink = 8; + optional string callLinkToken = 9; + optional string scheduledCallId = 10; + optional string callId = 11; + optional string callCreatorJid = 12; + optional string groupJid = 13; + repeated ParticipantInfo participants = 14; + optional CallType callType = 15; + enum CallResult { + CONNECTED = 0; + REJECTED = 1; + CANCELLED = 2; + ACCEPTEDELSEWHERE = 3; + MISSED = 4; + INVALID = 5; + UNAVAILABLE = 6; + UPCOMING = 7; + FAILED = 8; + ABANDONED = 9; + ONGOING = 10; + } + enum CallType { + REGULAR = 0; + SCHEDULED_CALL = 1; + VOICE_CHAT = 2; + } + message ParticipantInfo { + optional string userJid = 1; + optional CallLogRecord.CallResult callResult = 2; + } + + enum SilenceReason { + NONE = 0; + SCHEDULED = 1; + PRIVACY = 2; + LIGHTWEIGHT = 3; + } +} + +message CertChain { + optional NoiseCertificate leaf = 1; + optional NoiseCertificate intermediate = 2; + message NoiseCertificate { + optional bytes details = 1; + optional bytes signature = 2; + message Details { + optional uint32 serial = 1; + optional uint32 issuerSerial = 2; + optional bytes key = 3; + optional uint64 notBefore = 4; + optional uint64 notAfter = 5; + } + + } + +} + +message ChatLockSettings { + optional bool hideLockedChats = 1; + optional UserPassword secretCode = 2; +} + +message ChatRowOpaqueData { + optional DraftMessage draftMessage = 1; + message DraftMessage { + optional string text = 1; + optional string omittedUrl = 2; + optional CtwaContextLinkData ctwaContextLinkData = 3; + optional CtwaContextData ctwaContext = 4; + optional int64 timestamp = 5; + message CtwaContextData { + optional string conversionSource = 1; + optional bytes conversionData = 2; + optional string sourceUrl = 3; + optional string sourceId = 4; + optional string sourceType = 5; + optional string title = 6; + optional string description = 7; + optional string thumbnail = 8; + optional string thumbnailUrl = 9; + optional ContextInfoExternalAdReplyInfoMediaType mediaType = 10; + optional string mediaUrl = 11; + optional bool isSuspiciousLink = 12; + enum ContextInfoExternalAdReplyInfoMediaType { + NONE = 0; + IMAGE = 1; + VIDEO = 2; + } + } + + message CtwaContextLinkData { + optional string context = 1; + optional string sourceUrl = 2; + optional string icebreaker = 3; + optional string phone = 4; + } + + } + +} + +message Citation { + string title = 1; + string subtitle = 2; + string cmsId = 3; + string imageUrl = 4; +} + +message ClientPairingProps { + optional bool isChatDbLidMigrated = 1; + optional bool isSyncdPureLidSession = 2; + optional bool isSyncdSnapshotRecoveryEnabled = 3; +} + +message ClientPayload { + optional uint64 username = 1; + optional bool passive = 3; + optional UserAgent userAgent = 5; + optional WebInfo webInfo = 6; + optional string pushName = 7; + optional sfixed32 sessionId = 9; + optional bool shortConnect = 10; + optional ConnectType connectType = 12; + optional ConnectReason connectReason = 13; + repeated int32 shards = 14; + optional DNSSource dnsSource = 15; + optional uint32 connectAttemptCount = 16; + optional uint32 device = 18; + optional DevicePairingRegistrationData devicePairingData = 19; + optional Product product = 20; + optional bytes fbCat = 21; + optional bytes fbUserAgent = 22; + optional bool oc = 23; + optional int32 lc = 24; + optional IOSAppExtension iosAppExtension = 30; + optional uint64 fbAppId = 31; + optional bytes fbDeviceId = 32; + optional bool pull = 33; + optional bytes paddingBytes = 34; + optional int32 yearClass = 36; + optional int32 memClass = 37; + optional InteropData interopData = 38; + optional TrafficAnonymization trafficAnonymization = 40; + optional bool lidDbMigrated = 41; + optional AccountType accountType = 42; + optional sfixed32 connectionSequenceInfo = 43; + optional bool paaLink = 44; + optional int32 preacksCount = 45; + optional int32 processingQueueSize = 46; + enum AccountType { + DEFAULT = 0; + GUEST = 1; + } + enum ConnectReason { + PUSH = 0; + USER_ACTIVATED = 1; + SCHEDULED = 2; + ERROR_RECONNECT = 3; + NETWORK_SWITCH = 4; + PING_RECONNECT = 5; + UNKNOWN = 6; + } + enum ConnectType { + CELLULAR_UNKNOWN = 0; + WIFI_UNKNOWN = 1; + CELLULAR_EDGE = 100; + CELLULAR_IDEN = 101; + CELLULAR_UMTS = 102; + CELLULAR_EVDO = 103; + CELLULAR_GPRS = 104; + CELLULAR_HSDPA = 105; + CELLULAR_HSUPA = 106; + CELLULAR_HSPA = 107; + CELLULAR_CDMA = 108; + CELLULAR_1XRTT = 109; + CELLULAR_EHRPD = 110; + CELLULAR_LTE = 111; + CELLULAR_HSPAP = 112; + } + message DNSSource { + optional DNSResolutionMethod dnsMethod = 15; + optional bool appCached = 16; + enum DNSResolutionMethod { + SYSTEM = 0; + GOOGLE = 1; + HARDCODED = 2; + OVERRIDE = 3; + FALLBACK = 4; + MNS = 5; + } + } + + message DevicePairingRegistrationData { + optional bytes eRegid = 1; + optional bytes eKeytype = 2; + optional bytes eIdent = 3; + optional bytes eSkeyId = 4; + optional bytes eSkeyVal = 5; + optional bytes eSkeySig = 6; + optional bytes buildHash = 7; + optional bytes deviceProps = 8; + } + + enum IOSAppExtension { + SHARE_EXTENSION = 0; + SERVICE_EXTENSION = 1; + INTENTS_EXTENSION = 2; + } + message InteropData { + optional uint64 accountId = 1; + optional bytes token = 2; + optional bool enableReadReceipts = 3; + } + + enum Product { + WHATSAPP = 0; + MESSENGER = 1; + INTEROP = 2; + INTEROP_MSGR = 3; + WHATSAPP_LID = 4; + } + enum TrafficAnonymization { + OFF = 0; + STANDARD = 1; + } + message UserAgent { + optional Platform platform = 1; + optional AppVersion appVersion = 2; + optional string mcc = 3; + optional string mnc = 4; + optional string osVersion = 5; + optional string manufacturer = 6; + optional string device = 7; + optional string osBuildNumber = 8; + optional string phoneId = 9; + optional ReleaseChannel releaseChannel = 10; + optional string localeLanguageIso6391 = 11; + optional string localeCountryIso31661Alpha2 = 12; + optional string deviceBoard = 13; + optional string deviceExpId = 14; + optional DeviceType deviceType = 15; + optional string deviceModelType = 16; + message AppVersion { + optional uint32 primary = 1; + optional uint32 secondary = 2; + optional uint32 tertiary = 3; + optional uint32 quaternary = 4; + optional uint32 quinary = 5; + } + + enum DeviceType { + PHONE = 0; + TABLET = 1; + DESKTOP = 2; + WEARABLE = 3; + VR = 4; + } + enum Platform { + ANDROID = 0; + IOS = 1; + WINDOWS_PHONE = 2; + BLACKBERRY = 3; + BLACKBERRYX = 4; + S40 = 5; + S60 = 6; + PYTHON_CLIENT = 7; + TIZEN = 8; + ENTERPRISE = 9; + SMB_ANDROID = 10; + KAIOS = 11; + SMB_IOS = 12; + WINDOWS = 13; + WEB = 14; + PORTAL = 15; + GREEN_ANDROID = 16; + GREEN_IPHONE = 17; + BLUE_ANDROID = 18; + BLUE_IPHONE = 19; + FBLITE_ANDROID = 20; + MLITE_ANDROID = 21; + IGLITE_ANDROID = 22; + PAGE = 23; + MACOS = 24; + OCULUS_MSG = 25; + OCULUS_CALL = 26; + MILAN = 27; + CAPI = 28; + WEAROS = 29; + ARDEVICE = 30; + VRDEVICE = 31; + BLUE_WEB = 32; + IPAD = 33; + TEST = 34; + SMART_GLASSES = 35; + BLUE_VR = 36; + AR_WRIST = 37; + } + enum ReleaseChannel { + RELEASE = 0; + BETA = 1; + ALPHA = 2; + DEBUG = 3; + } + } + + message WebInfo { + optional string refToken = 1; + optional string version = 2; + optional WebdPayload webdPayload = 3; + optional WebSubPlatform webSubPlatform = 4; + enum WebSubPlatform { + WEB_BROWSER = 0; + APP_STORE = 1; + WIN_STORE = 2; + DARWIN = 3; + WIN32 = 4; + WIN_HYBRID = 5; + } + message WebdPayload { + optional bool usesParticipantInKey = 1; + optional bool supportsStarredMessages = 2; + optional bool supportsDocumentMessages = 3; + optional bool supportsUrlMessages = 4; + optional bool supportsMediaRetry = 5; + optional bool supportsE2EImage = 6; + optional bool supportsE2EVideo = 7; + optional bool supportsE2EAudio = 8; + optional bool supportsE2EDocument = 9; + optional string documentTypes = 10; + optional bytes features = 11; + } + + } + +} + +enum CollectionName { + COLLECTION_NAME_UNKNOWN = 0; + REGULAR = 1; + REGULAR_LOW = 2; + REGULAR_HIGH = 3; + CRITICAL_BLOCK = 4; + CRITICAL_UNBLOCK_LOW = 5; +} +message CommentMetadata { + optional MessageKey commentParentKey = 1; + optional uint32 replyCount = 2; +} + +message CompanionCommitment { + optional bytes hash = 1; +} + +message CompanionEphemeralIdentity { + optional bytes publicKey = 1; + optional DeviceProps.PlatformType deviceType = 2; + optional string ref = 3; +} + +message Config { + map field = 1; + optional uint32 version = 2; +} + +message ContextInfo { + optional string stanzaId = 1; + optional string participant = 2; + optional Message quotedMessage = 3; + optional string remoteJid = 4; + repeated string mentionedJid = 15; + optional string conversionSource = 18; + optional bytes conversionData = 19; + optional uint32 conversionDelaySeconds = 20; + optional uint32 forwardingScore = 21; + optional bool isForwarded = 22; + optional AdReplyInfo quotedAd = 23; + optional MessageKey placeholderKey = 24; + optional uint32 expiration = 25; + optional int64 ephemeralSettingTimestamp = 26; + optional bytes ephemeralSharedSecret = 27; + optional ExternalAdReplyInfo externalAdReply = 28; + optional string entryPointConversionSource = 29; + optional string entryPointConversionApp = 30; + optional uint32 entryPointConversionDelaySeconds = 31; + optional DisappearingMode disappearingMode = 32; + optional ActionLink actionLink = 33; + optional string groupSubject = 34; + optional string parentGroupJid = 35; + optional string trustBannerType = 37; + optional uint32 trustBannerAction = 38; + optional bool isSampled = 39; + repeated GroupMention groupMentions = 40; + optional UTMInfo utm = 41; + optional ForwardedNewsletterMessageInfo forwardedNewsletterMessageInfo = 43; + optional BusinessMessageForwardInfo businessMessageForwardInfo = 44; + optional string smbClientCampaignId = 45; + optional string smbServerCampaignId = 46; + optional DataSharingContext dataSharingContext = 47; + optional bool alwaysShowAdAttribution = 48; + optional FeatureEligibilities featureEligibilities = 49; + optional string entryPointConversionExternalSource = 50; + optional string entryPointConversionExternalMedium = 51; + optional string ctwaSignals = 54; + optional bytes ctwaPayload = 55; + optional ForwardedAIBotMessageInfo forwardedAiBotMessageInfo = 56; + optional StatusAttributionType statusAttributionType = 57; + optional UrlTrackingMap urlTrackingMap = 58; + optional PairedMediaType pairedMediaType = 59; + optional uint32 rankingVersion = 60; + optional MemberLabel memberLabel = 62; + optional bool isQuestion = 63; + optional StatusSourceType statusSourceType = 64; + repeated StatusAttribution statusAttributions = 65; + optional bool isGroupStatus = 66; + optional ForwardOrigin forwardOrigin = 67; + optional QuestionReplyQuotedMessage questionReplyQuotedMessage = 68; + optional StatusAudienceMetadata statusAudienceMetadata = 69; + optional uint32 nonJidMentions = 70; + optional QuotedType quotedType = 71; + optional BotMessageSharingInfo botMessageSharingInfo = 72; + message AdReplyInfo { + optional string advertiserName = 1; + optional MediaType mediaType = 2; + optional bytes jpegThumbnail = 16; + optional string caption = 17; + enum MediaType { + NONE = 0; + IMAGE = 1; + VIDEO = 2; + } + } + + message BusinessMessageForwardInfo { + optional string businessOwnerJid = 1; + } + + message DataSharingContext { + optional bool showMmDisclosure = 1; + optional string encryptedSignalTokenConsented = 2; + repeated Parameters parameters = 3; + optional int32 dataSharingFlags = 4; + enum DataSharingFlags { + SHOW_MM_DISCLOSURE_ON_CLICK = 1; + SHOW_MM_DISCLOSURE_ON_READ = 2; + } + message Parameters { + optional string key = 1; + optional string stringData = 2; + optional int64 intData = 3; + optional float floatData = 4; + optional ContextInfo.DataSharingContext.Parameters contents = 5; + } + + } + + message ExternalAdReplyInfo { + optional string title = 1; + optional string body = 2; + optional MediaType mediaType = 3; + optional string thumbnailUrl = 4; + optional string mediaUrl = 5; + optional bytes thumbnail = 6; + optional string sourceType = 7; + optional string sourceId = 8; + optional string sourceUrl = 9; + optional bool containsAutoReply = 10; + optional bool renderLargerThumbnail = 11; + optional bool showAdAttribution = 12; + optional string ctwaClid = 13; + optional string ref = 14; + optional bool clickToWhatsappCall = 15; + optional bool adContextPreviewDismissed = 16; + optional string sourceApp = 17; + optional bool automatedGreetingMessageShown = 18; + optional string greetingMessageBody = 19; + optional string ctaPayload = 20; + optional bool disableNudge = 21; + optional string originalImageUrl = 22; + optional string automatedGreetingMessageCtaType = 23; + optional bool wtwaAdFormat = 24; + optional AdType adType = 25; + optional string wtwaWebsiteUrl = 26; + optional string adPreviewUrl = 27; + enum AdType { + CTWA = 0; + CAWC = 1; + } + enum MediaType { + NONE = 0; + IMAGE = 1; + VIDEO = 2; + } + } + + message FeatureEligibilities { + optional bool cannotBeReactedTo = 1; + optional bool cannotBeRanked = 2; + optional bool canRequestFeedback = 3; + optional bool canBeReshared = 4; + optional bool canReceiveMultiReact = 5; + } + + enum ForwardOrigin { + UNKNOWN = 0; + CHAT = 1; + STATUS = 2; + CHANNELS = 3; + META_AI = 4; + UGC = 5; + } + message ForwardedNewsletterMessageInfo { + optional string newsletterJid = 1; + optional int32 serverMessageId = 2; + optional string newsletterName = 3; + optional ContentType contentType = 4; + optional string accessibilityText = 5; + enum ContentType { + UPDATE = 1; + UPDATE_CARD = 2; + LINK_CARD = 3; + } + } + + enum PairedMediaType { + NOT_PAIRED_MEDIA = 0; + SD_VIDEO_PARENT = 1; + HD_VIDEO_CHILD = 2; + SD_IMAGE_PARENT = 3; + HD_IMAGE_CHILD = 4; + MOTION_PHOTO_PARENT = 5; + MOTION_PHOTO_CHILD = 6; + HEVC_VIDEO_PARENT = 7; + HEVC_VIDEO_CHILD = 8; + } + message QuestionReplyQuotedMessage { + optional int32 serverQuestionId = 1; + optional Message quotedQuestion = 2; + optional Message quotedResponse = 3; + } + + enum QuotedType { + EXPLICIT = 0; + AUTO = 1; + } + enum StatusAttributionType { + NONE = 0; + RESHARED_FROM_MENTION = 1; + RESHARED_FROM_POST = 2; + RESHARED_FROM_POST_MANY_TIMES = 3; + FORWARDED_FROM_STATUS = 4; + } + message StatusAudienceMetadata { + optional AudienceType audienceType = 1; + enum AudienceType { + UNKNOWN = 0; + CLOSE_FRIENDS = 1; + } + } + + enum StatusSourceType { + IMAGE = 0; + VIDEO = 1; + GIF = 2; + AUDIO = 3; + TEXT = 4; + MUSIC_STANDALONE = 5; + } + message UTMInfo { + optional string utmSource = 1; + optional string utmCampaign = 2; + } + +} + +message Conversation { + string id = 1; + repeated HistorySyncMsg messages = 2; + optional string newJid = 3; + optional string oldJid = 4; + optional uint64 lastMsgTimestamp = 5; + optional uint32 unreadCount = 6; + optional bool readOnly = 7; + optional bool endOfHistoryTransfer = 8; + optional uint32 ephemeralExpiration = 9; + optional int64 ephemeralSettingTimestamp = 10; + optional EndOfHistoryTransferType endOfHistoryTransferType = 11; + optional uint64 conversationTimestamp = 12; + optional string name = 13; + optional string pHash = 14; + optional bool notSpam = 15; + optional bool archived = 16; + optional DisappearingMode disappearingMode = 17; + optional uint32 unreadMentionCount = 18; + optional bool markedAsUnread = 19; + repeated GroupParticipant participant = 20; + optional bytes tcToken = 21; + optional uint64 tcTokenTimestamp = 22; + optional bytes contactPrimaryIdentityKey = 23; + optional uint32 pinned = 24; + optional uint64 muteEndTime = 25; + optional WallpaperSettings wallpaper = 26; + optional MediaVisibility mediaVisibility = 27; + optional uint64 tcTokenSenderTimestamp = 28; + optional bool suspended = 29; + optional bool terminated = 30; + optional uint64 createdAt = 31; + optional string createdBy = 32; + optional string description = 33; + optional bool support = 34; + optional bool isParentGroup = 35; + optional string parentGroupId = 37; + optional bool isDefaultSubgroup = 36; + optional string displayName = 38; + optional string pnJid = 39; + optional bool shareOwnPn = 40; + optional bool pnhDuplicateLidThread = 41; + optional string lidJid = 42; + optional string username = 43; + optional string lidOriginType = 44; + optional uint32 commentsCount = 45; + optional bool locked = 46; + optional PrivacySystemMessage systemMessageToInsert = 47; + optional bool capiCreatedGroup = 48; + optional string accountLid = 49; + optional bool limitSharing = 50; + optional int64 limitSharingSettingTimestamp = 51; + optional LimitSharing.TriggerType limitSharingTrigger = 52; + optional bool limitSharingInitiatedByMe = 53; + optional bool maibaAiThreadEnabled = 54; + enum EndOfHistoryTransferType { + COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY = 0; + COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY = 1; + COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY = 2; + } +} + +message DeviceCapabilities { + optional ChatLockSupportLevel chatLockSupportLevel = 1; + optional LIDMigration lidMigration = 2; + optional BusinessBroadcast businessBroadcast = 3; + optional UserHasAvatar userHasAvatar = 4; + optional MemberNameTagPrimarySupport memberNameTagPrimarySupport = 5; + message BusinessBroadcast { + optional bool importListEnabled = 1; + } + + enum ChatLockSupportLevel { + NONE = 0; + MINIMAL = 1; + FULL = 2; + } + message LIDMigration { + optional uint64 chatDbMigrationTimestamp = 1; + } + + enum MemberNameTagPrimarySupport { + DISABLED = 0; + RECEIVER_ENABLED = 1; + SENDER_ENABLED = 2; + } + message UserHasAvatar { + optional bool userHasAvatar = 1; + } + +} + +message DeviceConsistencyCodeMessage { + optional uint32 generation = 1; + optional bytes signature = 2; +} + +message DeviceListMetadata { + optional bytes senderKeyHash = 1; + optional uint64 senderTimestamp = 2; + repeated uint32 senderKeyIndexes = 3 [packed=true]; + optional ADVEncryptionType senderAccountType = 4; + optional ADVEncryptionType receiverAccountType = 5; + optional bytes recipientKeyHash = 8; + optional uint64 recipientTimestamp = 9; + repeated uint32 recipientKeyIndexes = 10 [packed=true]; +} + +message DeviceProps { + optional string os = 1; + optional AppVersion version = 2; + optional PlatformType platformType = 3; + optional bool requireFullSync = 4; + optional HistorySyncConfig historySyncConfig = 5; + message AppVersion { + optional uint32 primary = 1; + optional uint32 secondary = 2; + optional uint32 tertiary = 3; + optional uint32 quaternary = 4; + optional uint32 quinary = 5; + } + + message HistorySyncConfig { + optional uint32 fullSyncDaysLimit = 1; + optional uint32 fullSyncSizeMbLimit = 2; + optional uint32 storageQuotaMb = 3; + optional bool inlineInitialPayloadInE2EeMsg = 4; + optional uint32 recentSyncDaysLimit = 5; + optional bool supportCallLogHistory = 6; + optional bool supportBotUserAgentChatHistory = 7; + optional bool supportCagReactionsAndPolls = 8; + optional bool supportBizHostedMsg = 9; + optional bool supportRecentSyncChunkMessageCountTuning = 10; + optional bool supportHostedGroupMsg = 11; + optional bool supportFbidBotChatHistory = 12; + optional bool supportAddOnHistorySyncMigration = 13; + optional bool supportMessageAssociation = 14; + optional bool supportGroupHistory = 15; + optional bool onDemandReady = 16; + optional bool supportGuestChat = 17; + optional bool completeOnDemandReady = 18; + optional uint32 thumbnailSyncDaysLimit = 19; + } + + enum PlatformType { + UNKNOWN = 0; + CHROME = 1; + FIREFOX = 2; + IE = 3; + OPERA = 4; + SAFARI = 5; + EDGE = 6; + DESKTOP = 7; + IPAD = 8; + ANDROID_TABLET = 9; + OHANA = 10; + ALOHA = 11; + CATALINA = 12; + TCL_TV = 13; + IOS_PHONE = 14; + IOS_CATALYST = 15; + ANDROID_PHONE = 16; + ANDROID_AMBIGUOUS = 17; + WEAR_OS = 18; + AR_WRIST = 19; + AR_DEVICE = 20; + UWP = 21; + VR = 22; + CLOUD_API = 23; + SMARTGLASSES = 24; + } +} + +message DisappearingMode { + optional Initiator initiator = 1; + optional Trigger trigger = 2; + optional string initiatorDeviceJid = 3; + optional bool initiatedByMe = 4; + enum Initiator { + CHANGED_IN_CHAT = 0; + INITIATED_BY_ME = 1; + INITIATED_BY_OTHER = 2; + BIZ_UPGRADE_FB_HOSTING = 3; + } + enum Trigger { + UNKNOWN = 0; + CHAT_SETTING = 1; + ACCOUNT_SETTING = 2; + BULK_CHANGE = 3; + BIZ_SUPPORTS_FB_HOSTING = 4; + UNKNOWN_GROUPS = 5; + } +} + +message EmbeddedContent { + oneof content { + EmbeddedMessage embeddedMessage = 1; + EmbeddedMusic embeddedMusic = 2; + } +} + +message EmbeddedMessage { + optional string stanzaId = 1; + optional Message message = 2; +} + +message EmbeddedMusic { + optional string musicContentMediaId = 1; + optional string songId = 2; + optional string author = 3; + optional string title = 4; + optional string artworkDirectPath = 5; + optional bytes artworkSha256 = 6; + optional bytes artworkEncSha256 = 7; + optional string artistAttribution = 8; + optional bytes countryBlocklist = 9; + optional bool isExplicit = 10; + optional bytes artworkMediaKey = 11; + optional int64 musicSongStartTimeInMs = 12; + optional int64 derivedContentStartTimeInMs = 13; + optional int64 overlapDurationInMs = 14; +} + +message EncryptedPairingRequest { + optional bytes encryptedPayload = 1; + optional bytes iv = 2; +} + +message EphemeralSetting { + optional sfixed32 duration = 1; + optional sfixed64 timestamp = 2; +} + +message EventAdditionalMetadata { + optional bool isStale = 1; +} + +message EventResponse { + optional MessageKey eventResponseMessageKey = 1; + optional int64 timestampMs = 2; + optional Message.EventResponseMessage eventResponseMessage = 3; + optional bool unread = 4; +} + +message ExitCode { + optional uint64 code = 1; + optional string text = 2; +} + +message ExternalBlobReference { + optional bytes mediaKey = 1; + optional string directPath = 2; + optional string handle = 3; + optional uint64 fileSizeBytes = 4; + optional bytes fileSha256 = 5; + optional bytes fileEncSha256 = 6; +} + +message Field { + optional uint32 minVersion = 1; + optional uint32 maxVersion = 2; + optional uint32 notReportableMinVersion = 3; + optional bool isMessage = 4; + map subfield = 5; +} + +message ForwardedAIBotMessageInfo { + optional string botName = 1; + optional string botJid = 2; + optional string creatorName = 3; +} + +message GlobalSettings { + optional WallpaperSettings lightThemeWallpaper = 1; + optional MediaVisibility mediaVisibility = 2; + optional WallpaperSettings darkThemeWallpaper = 3; + optional AutoDownloadSettings autoDownloadWiFi = 4; + optional AutoDownloadSettings autoDownloadCellular = 5; + optional AutoDownloadSettings autoDownloadRoaming = 6; + optional bool showIndividualNotificationsPreview = 7; + optional bool showGroupNotificationsPreview = 8; + optional int32 disappearingModeDuration = 9; + optional int64 disappearingModeTimestamp = 10; + optional AvatarUserSettings avatarUserSettings = 11; + optional int32 fontSize = 12; + optional bool securityNotifications = 13; + optional bool autoUnarchiveChats = 14; + optional int32 videoQualityMode = 15; + optional int32 photoQualityMode = 16; + optional NotificationSettings individualNotificationSettings = 17; + optional NotificationSettings groupNotificationSettings = 18; + optional ChatLockSettings chatLockSettings = 19; + optional int64 chatDbLidMigrationTimestamp = 20; +} + +message GroupHistoryBundleInfo { + optional Message.MessageHistoryBundle deprecatedMessageHistoryBundle = 1; + optional ProcessState processState = 2; + enum ProcessState { + NOT_INJECTED = 0; + INJECTED = 1; + INJECTED_PARTIAL = 2; + INJECTION_FAILED = 3; + INJECTION_FAILED_NO_RETRY = 4; + } +} + +message GroupHistoryIndividualMessageInfo { + optional MessageKey bundleMessageKey = 1; + optional bool editedAfterReceivedAsHistory = 2; +} + +message GroupMention { + optional string groupJid = 1; + optional string groupSubject = 2; +} + +message GroupParticipant { + string userJid = 1; + optional Rank rank = 2; + optional MemberLabel memberLabel = 3; + enum Rank { + REGULAR = 0; + ADMIN = 1; + SUPERADMIN = 2; + } +} + +message HandshakeMessage { + optional ClientHello clientHello = 2; + optional ServerHello serverHello = 3; + optional ClientFinish clientFinish = 4; + message ClientFinish { + optional bytes static = 1; + optional bytes payload = 2; + optional bytes extendedCiphertext = 3; + } + + message ClientHello { + optional bytes ephemeral = 1; + optional bytes static = 2; + optional bytes payload = 3; + optional bool useExtended = 4; + optional bytes extendedCiphertext = 5; + } + + message ServerHello { + optional bytes ephemeral = 1; + optional bytes static = 2; + optional bytes payload = 3; + optional bytes extendedStatic = 4; + } + +} + +message HistorySync { + HistorySyncType syncType = 1; + repeated Conversation conversations = 2; + repeated WebMessageInfo statusV3Messages = 3; + optional uint32 chunkOrder = 5; + optional uint32 progress = 6; + repeated Pushname pushnames = 7; + optional GlobalSettings globalSettings = 8; + optional bytes threadIdUserSecret = 9; + optional uint32 threadDsTimeframeOffset = 10; + repeated StickerMetadata recentStickers = 11; + repeated PastParticipants pastParticipants = 12; + repeated CallLogRecord callLogRecords = 13; + optional BotAIWaitListState aiWaitListState = 14; + repeated PhoneNumberToLIDMapping phoneNumberToLidMappings = 15; + optional string companionMetaNonce = 16; + optional bytes shareableChatIdentifierEncryptionKey = 17; + repeated Account accounts = 18; + enum BotAIWaitListState { + IN_WAITLIST = 0; + AI_AVAILABLE = 1; + } + enum HistorySyncType { + INITIAL_BOOTSTRAP = 0; + INITIAL_STATUS_V3 = 1; + FULL = 2; + RECENT = 3; + PUSH_NAME = 4; + NON_BLOCKING_DATA = 5; + ON_DEMAND = 6; + } +} + +message HistorySyncMsg { + optional WebMessageInfo message = 1; + optional uint64 msgOrderId = 2; +} + +message HydratedTemplateButton { + optional uint32 index = 4; + oneof hydratedButton { + HydratedTemplateButton.HydratedQuickReplyButton quickReplyButton = 1; + HydratedTemplateButton.HydratedURLButton urlButton = 2; + HydratedTemplateButton.HydratedCallButton callButton = 3; + } + message HydratedCallButton { + optional string displayText = 1; + optional string phoneNumber = 2; + } + + message HydratedQuickReplyButton { + optional string displayText = 1; + optional string id = 2; + } + + message HydratedURLButton { + optional string displayText = 1; + optional string url = 2; + optional string consentedUsersUrl = 3; + optional WebviewPresentationType webviewPresentation = 4; + enum WebviewPresentationType { + FULL = 1; + TALL = 2; + COMPACT = 3; + } + } + +} + +message IdentityKeyPairStructure { + optional bytes publicKey = 1; + optional bytes privateKey = 2; +} + +message InThreadSurveyMetadata { + optional string tessaSessionId = 1; + optional string simonSessionId = 2; + optional string simonSurveyId = 3; + optional string tessaRootId = 4; + optional string requestId = 5; + optional string tessaEvent = 6; + optional string invitationHeaderText = 7; + optional string invitationBodyText = 8; + optional string invitationCtaText = 9; + optional string invitationCtaUrl = 10; + optional string surveyTitle = 11; + repeated InThreadSurveyQuestion questions = 12; + optional string surveyContinueButtonText = 13; + optional string surveySubmitButtonText = 14; + optional string privacyStatementFull = 15; + repeated InThreadSurveyPrivacyStatementPart privacyStatementParts = 16; + optional string feedbackToastText = 17; + message InThreadSurveyOption { + optional string stringValue = 1; + optional uint32 numericValue = 2; + optional string textTranslated = 3; + } + + message InThreadSurveyPrivacyStatementPart { + optional string text = 1; + optional string url = 2; + } + + message InThreadSurveyQuestion { + optional string questionText = 1; + optional string questionId = 2; + repeated InThreadSurveyMetadata.InThreadSurveyOption questionOptions = 3; + } + +} + +message InteractiveAnnotation { + repeated Point polygonVertices = 1; + optional bool shouldSkipConfirmation = 4; + optional EmbeddedContent embeddedContent = 5; + optional StatusLinkType statusLinkType = 8; + oneof action { + Location location = 2; + ContextInfo.ForwardedNewsletterMessageInfo newsletter = 3; + bool embeddedAction = 6; + TapLinkAction tapAction = 7; + } + enum StatusLinkType { + RASTERIZED_LINK_PREVIEW = 1; + RASTERIZED_LINK_TRUNCATED = 2; + RASTERIZED_LINK_FULL_URL = 3; + } +} + +message InteractiveMessageAdditionalMetadata { + optional bool isGalaxyFlowCompleted = 1; +} + +message KeepInChat { + optional KeepType keepType = 1; + optional int64 serverTimestamp = 2; + optional MessageKey key = 3; + optional string deviceJid = 4; + optional int64 clientTimestampMs = 5; + optional int64 serverTimestampMs = 6; +} + +enum KeepType { + UNKNOWN = 0; + KEEP_FOR_ALL = 1; + UNDO_KEEP_FOR_ALL = 2; +} +message KeyExchangeMessage { + optional uint32 id = 1; + optional bytes baseKey = 2; + optional bytes ratchetKey = 3; + optional bytes identityKey = 4; + optional bytes baseKeySignature = 5; +} + +message KeyId { + optional bytes id = 1; +} + +message LIDMigrationMapping { + uint64 pn = 1; + uint64 assignedLid = 2; + optional uint64 latestLid = 3; +} + +message LIDMigrationMappingSyncMessage { + optional bytes encodedMappingPayload = 1; +} + +message LIDMigrationMappingSyncPayload { + repeated LIDMigrationMapping pnToLidMappings = 1; + optional uint64 chatDbMigrationTimestamp = 2; +} + +message LegacyMessage { + optional Message.EventResponseMessage eventResponseMessage = 1; + optional Message.PollVoteMessage pollVote = 2; +} + +message LimitSharing { + optional bool sharingLimited = 1; + optional TriggerType trigger = 2; + optional int64 limitSharingSettingTimestamp = 3; + optional bool initiatedByMe = 4; + enum TriggerType { + UNKNOWN = 0; + CHAT_SETTING = 1; + BIZ_SUPPORTS_FB_HOSTING = 2; + UNKNOWN_GROUP = 3; + } +} + +message LocalizedName { + optional string lg = 1; + optional string lc = 2; + optional string verifiedName = 3; +} + +message Location { + optional double degreesLatitude = 1; + optional double degreesLongitude = 2; + optional string name = 3; +} + +message MediaData { + optional string localPath = 1; +} + +message MediaNotifyMessage { + optional string expressPathUrl = 1; + optional bytes fileEncSha256 = 2; + optional uint64 fileLength = 3; +} + +message MediaRetryNotification { + optional string stanzaId = 1; + optional string directPath = 2; + optional ResultType result = 3; + optional bytes messageSecret = 4; + enum ResultType { + GENERAL_ERROR = 0; + SUCCESS = 1; + NOT_FOUND = 2; + DECRYPTION_ERROR = 3; + } +} + +enum MediaVisibility { + DEFAULT = 0; + OFF = 1; + ON = 2; +} +message MemberLabel { + optional string label = 1; + optional int64 labelTimestamp = 2; +} + +message Message { + optional string conversation = 1; + optional SenderKeyDistributionMessage senderKeyDistributionMessage = 2; + optional ImageMessage imageMessage = 3; + optional ContactMessage contactMessage = 4; + optional LocationMessage locationMessage = 5; + optional ExtendedTextMessage extendedTextMessage = 6; + optional DocumentMessage documentMessage = 7; + optional AudioMessage audioMessage = 8; + optional VideoMessage videoMessage = 9; + optional Call call = 10; + optional Chat chat = 11; + optional ProtocolMessage protocolMessage = 12; + optional ContactsArrayMessage contactsArrayMessage = 13; + optional HighlyStructuredMessage highlyStructuredMessage = 14; + optional SenderKeyDistributionMessage fastRatchetKeySenderKeyDistributionMessage = 15; + optional SendPaymentMessage sendPaymentMessage = 16; + optional LiveLocationMessage liveLocationMessage = 18; + optional RequestPaymentMessage requestPaymentMessage = 22; + optional DeclinePaymentRequestMessage declinePaymentRequestMessage = 23; + optional CancelPaymentRequestMessage cancelPaymentRequestMessage = 24; + optional TemplateMessage templateMessage = 25; + optional StickerMessage stickerMessage = 26; + optional GroupInviteMessage groupInviteMessage = 28; + optional TemplateButtonReplyMessage templateButtonReplyMessage = 29; + optional ProductMessage productMessage = 30; + optional DeviceSentMessage deviceSentMessage = 31; + optional MessageContextInfo messageContextInfo = 35; + optional ListMessage listMessage = 36; + optional FutureProofMessage viewOnceMessage = 37; + optional OrderMessage orderMessage = 38; + optional ListResponseMessage listResponseMessage = 39; + optional FutureProofMessage ephemeralMessage = 40; + optional InvoiceMessage invoiceMessage = 41; + optional ButtonsMessage buttonsMessage = 42; + optional ButtonsResponseMessage buttonsResponseMessage = 43; + optional PaymentInviteMessage paymentInviteMessage = 44; + optional InteractiveMessage interactiveMessage = 45; + optional ReactionMessage reactionMessage = 46; + optional StickerSyncRMRMessage stickerSyncRmrMessage = 47; + optional InteractiveResponseMessage interactiveResponseMessage = 48; + optional PollCreationMessage pollCreationMessage = 49; + optional PollUpdateMessage pollUpdateMessage = 50; + optional KeepInChatMessage keepInChatMessage = 51; + optional FutureProofMessage documentWithCaptionMessage = 53; + optional RequestPhoneNumberMessage requestPhoneNumberMessage = 54; + optional FutureProofMessage viewOnceMessageV2 = 55; + optional EncReactionMessage encReactionMessage = 56; + optional FutureProofMessage editedMessage = 58; + optional FutureProofMessage viewOnceMessageV2Extension = 59; + optional PollCreationMessage pollCreationMessageV2 = 60; + optional ScheduledCallCreationMessage scheduledCallCreationMessage = 61; + optional FutureProofMessage groupMentionedMessage = 62; + optional PinInChatMessage pinInChatMessage = 63; + optional PollCreationMessage pollCreationMessageV3 = 64; + optional ScheduledCallEditMessage scheduledCallEditMessage = 65; + optional VideoMessage ptvMessage = 66; + optional FutureProofMessage botInvokeMessage = 67; + optional CallLogMessage callLogMesssage = 69; + optional MessageHistoryBundle messageHistoryBundle = 70; + optional EncCommentMessage encCommentMessage = 71; + optional BCallMessage bcallMessage = 72; + optional FutureProofMessage lottieStickerMessage = 74; + optional EventMessage eventMessage = 75; + optional EncEventResponseMessage encEventResponseMessage = 76; + optional CommentMessage commentMessage = 77; + optional NewsletterAdminInviteMessage newsletterAdminInviteMessage = 78; + optional PlaceholderMessage placeholderMessage = 80; + optional SecretEncryptedMessage secretEncryptedMessage = 82; + optional AlbumMessage albumMessage = 83; + optional FutureProofMessage eventCoverImage = 85; + optional StickerPackMessage stickerPackMessage = 86; + optional FutureProofMessage statusMentionMessage = 87; + optional PollResultSnapshotMessage pollResultSnapshotMessage = 88; + optional FutureProofMessage pollCreationOptionImageMessage = 90; + optional FutureProofMessage associatedChildMessage = 91; + optional FutureProofMessage groupStatusMentionMessage = 92; + optional FutureProofMessage pollCreationMessageV4 = 93; + optional FutureProofMessage statusAddYours = 95; + optional FutureProofMessage groupStatusMessage = 96; + optional AIRichResponseMessage richResponseMessage = 97; + optional StatusNotificationMessage statusNotificationMessage = 98; + optional FutureProofMessage limitSharingMessage = 99; + optional FutureProofMessage botTaskMessage = 100; + optional FutureProofMessage questionMessage = 101; + optional MessageHistoryNotice messageHistoryNotice = 102; + optional FutureProofMessage groupStatusMessageV2 = 103; + optional FutureProofMessage botForwardedMessage = 104; + optional StatusQuestionAnswerMessage statusQuestionAnswerMessage = 105; + optional FutureProofMessage questionReplyMessage = 106; + optional QuestionResponseMessage questionResponseMessage = 107; + optional StatusQuotedMessage statusQuotedMessage = 109; + optional StatusStickerInteractionMessage statusStickerInteractionMessage = 110; + optional PollCreationMessage pollCreationMessageV5 = 111; + optional NewsletterFollowerInviteMessage newsletterFollowerInviteMessageV2 = 113; + optional PollResultSnapshotMessage pollResultSnapshotMessageV3 = 114; + message AlbumMessage { + optional uint32 expectedImageCount = 2; + optional uint32 expectedVideoCount = 3; + optional ContextInfo contextInfo = 17; + } + + message AppStateFatalExceptionNotification { + repeated string collectionNames = 1; + optional int64 timestamp = 2; + } + + message AppStateSyncKey { + optional Message.AppStateSyncKeyId keyId = 1; + optional Message.AppStateSyncKeyData keyData = 2; + } + + message AppStateSyncKeyData { + optional bytes keyData = 1; + optional Message.AppStateSyncKeyFingerprint fingerprint = 2; + optional int64 timestamp = 3; + } + + message AppStateSyncKeyFingerprint { + optional uint32 rawId = 1; + optional uint32 currentIndex = 2; + repeated uint32 deviceIndexes = 3 [packed=true]; + } + + message AppStateSyncKeyId { + optional bytes keyId = 1; + } + + message AppStateSyncKeyRequest { + repeated Message.AppStateSyncKeyId keyIds = 1; + } + + message AppStateSyncKeyShare { + repeated Message.AppStateSyncKey keys = 1; + } + + message AudioMessage { + optional string url = 1; + optional string mimetype = 2; + optional bytes fileSha256 = 3; + optional uint64 fileLength = 4; + optional uint32 seconds = 5; + optional bool ptt = 6; + optional bytes mediaKey = 7; + optional bytes fileEncSha256 = 8; + optional string directPath = 9; + optional int64 mediaKeyTimestamp = 10; + optional ContextInfo contextInfo = 17; + optional bytes streamingSidecar = 18; + optional bytes waveform = 19; + optional fixed32 backgroundArgb = 20; + optional bool viewOnce = 21; + optional string accessibilityLabel = 22; + optional Message.MediaKeyDomain mediaKeyDomain = 23; + } + + message BCallMessage { + optional string sessionId = 1; + optional MediaType mediaType = 2; + optional bytes masterKey = 3; + optional string caption = 4; + enum MediaType { + UNKNOWN = 0; + AUDIO = 1; + VIDEO = 2; + } + } + + message ButtonsMessage { + optional string contentText = 6; + optional string footerText = 7; + optional ContextInfo contextInfo = 8; + repeated Button buttons = 9; + optional HeaderType headerType = 10; + oneof header { + string text = 1; + Message.DocumentMessage documentMessage = 2; + Message.ImageMessage imageMessage = 3; + Message.VideoMessage videoMessage = 4; + Message.LocationMessage locationMessage = 5; + } + message Button { + optional string buttonId = 1; + optional ButtonText buttonText = 2; + optional Type type = 3; + optional NativeFlowInfo nativeFlowInfo = 4; + message ButtonText { + optional string displayText = 1; + } + + message NativeFlowInfo { + optional string name = 1; + optional string paramsJson = 2; + } + + enum Type { + UNKNOWN = 0; + RESPONSE = 1; + NATIVE_FLOW = 2; + } + } + + enum HeaderType { + UNKNOWN = 0; + EMPTY = 1; + TEXT = 2; + DOCUMENT = 3; + IMAGE = 4; + VIDEO = 5; + LOCATION = 6; + } + } + + message ButtonsResponseMessage { + optional string selectedButtonId = 1; + optional ContextInfo contextInfo = 3; + optional Type type = 4; + oneof response { + string selectedDisplayText = 2; + } + enum Type { + UNKNOWN = 0; + DISPLAY_TEXT = 1; + } + } + + message Call { + optional bytes callKey = 1; + optional string conversionSource = 2; + optional bytes conversionData = 3; + optional uint32 conversionDelaySeconds = 4; + optional string ctwaSignals = 5; + optional bytes ctwaPayload = 6; + optional ContextInfo contextInfo = 7; + optional string nativeFlowCallButtonPayload = 8; + optional string deeplinkPayload = 9; + } + + message CallLogMessage { + optional bool isVideo = 1; + optional CallOutcome callOutcome = 2; + optional int64 durationSecs = 3; + optional CallType callType = 4; + repeated CallParticipant participants = 5; + enum CallOutcome { + CONNECTED = 0; + MISSED = 1; + FAILED = 2; + REJECTED = 3; + ACCEPTED_ELSEWHERE = 4; + ONGOING = 5; + SILENCED_BY_DND = 6; + SILENCED_UNKNOWN_CALLER = 7; + } + message CallParticipant { + optional string jid = 1; + optional Message.CallLogMessage.CallOutcome callOutcome = 2; + } + + enum CallType { + REGULAR = 0; + SCHEDULED_CALL = 1; + VOICE_CHAT = 2; + } + } + + message CancelPaymentRequestMessage { + optional MessageKey key = 1; + } + + message Chat { + optional string displayName = 1; + optional string id = 2; + } + + message CloudAPIThreadControlNotification { + optional CloudAPIThreadControl status = 1; + optional int64 senderNotificationTimestampMs = 2; + optional string consumerLid = 3; + optional string consumerPhoneNumber = 4; + optional CloudAPIThreadControlNotificationContent notificationContent = 5; + optional bool shouldSuppressNotification = 6; + enum CloudAPIThreadControl { + UNKNOWN = 0; + CONTROL_PASSED = 1; + CONTROL_TAKEN = 2; + } + message CloudAPIThreadControlNotificationContent { + optional string handoffNotificationText = 1; + optional string extraJson = 2; + } + + } + + message CommentMessage { + optional Message message = 1; + optional MessageKey targetMessageKey = 2; + } + + message ContactMessage { + optional string displayName = 1; + optional string vcard = 16; + optional ContextInfo contextInfo = 17; + } + + message ContactsArrayMessage { + optional string displayName = 1; + repeated Message.ContactMessage contacts = 2; + optional ContextInfo contextInfo = 17; + } + + message DeclinePaymentRequestMessage { + optional MessageKey key = 1; + } + + message DeviceSentMessage { + optional string destinationJid = 1; + optional Message message = 2; + optional string phash = 3; + } + + message DocumentMessage { + optional string url = 1; + optional string mimetype = 2; + optional string title = 3; + optional bytes fileSha256 = 4; + optional uint64 fileLength = 5; + optional uint32 pageCount = 6; + optional bytes mediaKey = 7; + optional string fileName = 8; + optional bytes fileEncSha256 = 9; + optional string directPath = 10; + optional int64 mediaKeyTimestamp = 11; + optional bool contactVcard = 12; + optional string thumbnailDirectPath = 13; + optional bytes thumbnailSha256 = 14; + optional bytes thumbnailEncSha256 = 15; + optional bytes jpegThumbnail = 16; + optional ContextInfo contextInfo = 17; + optional uint32 thumbnailHeight = 18; + optional uint32 thumbnailWidth = 19; + optional string caption = 20; + optional string accessibilityLabel = 21; + optional Message.MediaKeyDomain mediaKeyDomain = 22; + } + + message EncCommentMessage { + optional MessageKey targetMessageKey = 1; + optional bytes encPayload = 2; + optional bytes encIv = 3; + } + + message EncEventResponseMessage { + optional MessageKey eventCreationMessageKey = 1; + optional bytes encPayload = 2; + optional bytes encIv = 3; + } + + message EncReactionMessage { + optional MessageKey targetMessageKey = 1; + optional bytes encPayload = 2; + optional bytes encIv = 3; + } + + message EventMessage { + optional ContextInfo contextInfo = 1; + optional bool isCanceled = 2; + optional string name = 3; + optional string description = 4; + optional Message.LocationMessage location = 5; + optional string joinLink = 6; + optional int64 startTime = 7; + optional int64 endTime = 8; + optional bool extraGuestsAllowed = 9; + optional bool isScheduleCall = 10; + optional bool hasReminder = 11; + optional int64 reminderOffsetSec = 12; + } + + message EventResponseMessage { + optional EventResponseType response = 1; + optional int64 timestampMs = 2; + optional int32 extraGuestCount = 3; + enum EventResponseType { + UNKNOWN = 0; + GOING = 1; + NOT_GOING = 2; + MAYBE = 3; + } + } + + message ExtendedTextMessage { + optional string text = 1; + optional string matchedText = 2; + optional string description = 5; + optional string title = 6; + optional fixed32 textArgb = 7; + optional fixed32 backgroundArgb = 8; + optional FontType font = 9; + optional PreviewType previewType = 10; + optional bytes jpegThumbnail = 16; + optional ContextInfo contextInfo = 17; + optional bool doNotPlayInline = 18; + optional string thumbnailDirectPath = 19; + optional bytes thumbnailSha256 = 20; + optional bytes thumbnailEncSha256 = 21; + optional bytes mediaKey = 22; + optional int64 mediaKeyTimestamp = 23; + optional uint32 thumbnailHeight = 24; + optional uint32 thumbnailWidth = 25; + optional InviteLinkGroupType inviteLinkGroupType = 26; + optional string inviteLinkParentGroupSubjectV2 = 27; + optional bytes inviteLinkParentGroupThumbnailV2 = 28; + optional InviteLinkGroupType inviteLinkGroupTypeV2 = 29; + optional bool viewOnce = 30; + optional uint32 videoHeight = 31; + optional uint32 videoWidth = 32; + optional Message.MMSThumbnailMetadata faviconMMSMetadata = 33; + optional Message.LinkPreviewMetadata linkPreviewMetadata = 34; + optional Message.PaymentLinkMetadata paymentLinkMetadata = 35; + repeated Message.VideoEndCard endCardTiles = 36; + optional string videoContentUrl = 37; + optional EmbeddedMusic musicMetadata = 38; + optional Message.PaymentExtendedMetadata paymentExtendedMetadata = 39; + enum FontType { + SYSTEM = 0; + SYSTEM_TEXT = 1; + FB_SCRIPT = 2; + SYSTEM_BOLD = 6; + MORNINGBREEZE_REGULAR = 7; + CALISTOGA_REGULAR = 8; + EXO2_EXTRABOLD = 9; + COURIERPRIME_BOLD = 10; + } + enum InviteLinkGroupType { + DEFAULT = 0; + PARENT = 1; + SUB = 2; + DEFAULT_SUB = 3; + } + enum PreviewType { + NONE = 0; + VIDEO = 1; + PLACEHOLDER = 4; + IMAGE = 5; + PAYMENT_LINKS = 6; + PROFILE = 7; + } + } + + message FullHistorySyncOnDemandRequestMetadata { + optional string requestId = 1; + } + + message FutureProofMessage { + optional Message message = 1; + } + + message GroupInviteMessage { + optional string groupJid = 1; + optional string inviteCode = 2; + optional int64 inviteExpiration = 3; + optional string groupName = 4; + optional bytes jpegThumbnail = 5; + optional string caption = 6; + optional ContextInfo contextInfo = 7; + optional GroupType groupType = 8; + enum GroupType { + DEFAULT = 0; + PARENT = 1; + } + } + + message HighlyStructuredMessage { + optional string namespace = 1; + optional string elementName = 2; + repeated string params = 3; + optional string fallbackLg = 4; + optional string fallbackLc = 5; + repeated HSMLocalizableParameter localizableParams = 6; + optional string deterministicLg = 7; + optional string deterministicLc = 8; + optional Message.TemplateMessage hydratedHsm = 9; + message HSMLocalizableParameter { + optional string default = 1; + oneof paramOneof { + Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency currency = 2; + Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime dateTime = 3; + } + message HSMCurrency { + optional string currencyCode = 1; + optional int64 amount1000 = 2; + } + + message HSMDateTime { + oneof datetimeOneof { + Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent component = 1; + Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch unixEpoch = 2; + } + message HSMDateTimeComponent { + optional DayOfWeekType dayOfWeek = 1; + optional uint32 year = 2; + optional uint32 month = 3; + optional uint32 dayOfMonth = 4; + optional uint32 hour = 5; + optional uint32 minute = 6; + optional CalendarType calendar = 7; + enum CalendarType { + GREGORIAN = 1; + SOLAR_HIJRI = 2; + } + enum DayOfWeekType { + MONDAY = 1; + TUESDAY = 2; + WEDNESDAY = 3; + THURSDAY = 4; + FRIDAY = 5; + SATURDAY = 6; + SUNDAY = 7; + } + } + + message HSMDateTimeUnixEpoch { + optional int64 timestamp = 1; + } + + } + + } + + } + + message HistorySyncMessageAccessStatus { + optional bool completeAccessGranted = 1; + } + + message HistorySyncNotification { + optional bytes fileSha256 = 1; + optional uint64 fileLength = 2; + optional bytes mediaKey = 3; + optional bytes fileEncSha256 = 4; + optional string directPath = 5; + optional Message.HistorySyncType syncType = 6; + optional uint32 chunkOrder = 7; + optional string originalMessageId = 8; + optional uint32 progress = 9; + optional int64 oldestMsgInChunkTimestampSec = 10; + optional bytes initialHistBootstrapInlinePayload = 11; + optional string peerDataRequestSessionId = 12; + optional Message.FullHistorySyncOnDemandRequestMetadata fullHistorySyncOnDemandRequestMetadata = 13; + optional string encHandle = 14; + optional Message.HistorySyncMessageAccessStatus messageAccessStatus = 15; + } + + enum HistorySyncType { + INITIAL_BOOTSTRAP = 0; + INITIAL_STATUS_V3 = 1; + FULL = 2; + RECENT = 3; + PUSH_NAME = 4; + NON_BLOCKING_DATA = 5; + ON_DEMAND = 6; + NO_HISTORY = 7; + MESSAGE_ACCESS_STATUS = 8; + } + message ImageMessage { + optional string url = 1; + optional string mimetype = 2; + optional string caption = 3; + optional bytes fileSha256 = 4; + optional uint64 fileLength = 5; + optional uint32 height = 6; + optional uint32 width = 7; + optional bytes mediaKey = 8; + optional bytes fileEncSha256 = 9; + repeated InteractiveAnnotation interactiveAnnotations = 10; + optional string directPath = 11; + optional int64 mediaKeyTimestamp = 12; + optional bytes jpegThumbnail = 16; + optional ContextInfo contextInfo = 17; + optional bytes firstScanSidecar = 18; + optional uint32 firstScanLength = 19; + optional uint32 experimentGroupId = 20; + optional bytes scansSidecar = 21; + repeated uint32 scanLengths = 22; + optional bytes midQualityFileSha256 = 23; + optional bytes midQualityFileEncSha256 = 24; + optional bool viewOnce = 25; + optional string thumbnailDirectPath = 26; + optional bytes thumbnailSha256 = 27; + optional bytes thumbnailEncSha256 = 28; + optional string staticUrl = 29; + repeated InteractiveAnnotation annotations = 30; + optional ImageSourceType imageSourceType = 31; + optional string accessibilityLabel = 32; + optional Message.MediaKeyDomain mediaKeyDomain = 33; + optional string qrUrl = 34; + enum ImageSourceType { + USER_IMAGE = 0; + AI_GENERATED = 1; + AI_MODIFIED = 2; + RASTERIZED_TEXT_STATUS = 3; + } + } + + message InitialSecurityNotificationSettingSync { + optional bool securityNotificationEnabled = 1; + } + + message InteractiveMessage { + optional Header header = 1; + optional Body body = 2; + optional Footer footer = 3; + optional ContextInfo contextInfo = 15; + optional UrlTrackingMap urlTrackingMap = 16; + oneof interactiveMessage { + Message.InteractiveMessage.ShopMessage shopStorefrontMessage = 4; + Message.InteractiveMessage.CollectionMessage collectionMessage = 5; + Message.InteractiveMessage.NativeFlowMessage nativeFlowMessage = 6; + Message.InteractiveMessage.CarouselMessage carouselMessage = 7; + } + message Body { + optional string text = 1; + } + + message CarouselMessage { + repeated Message.InteractiveMessage cards = 1; + optional int32 messageVersion = 2; + optional CarouselCardType carouselCardType = 3; + enum CarouselCardType { + UNKNOWN = 0; + HSCROLL_CARDS = 1; + ALBUM_IMAGE = 2; + } + } + + message CollectionMessage { + optional string bizJid = 1; + optional string id = 2; + optional int32 messageVersion = 3; + } + + message Footer { + optional string text = 1; + optional bool hasMediaAttachment = 3; + oneof media { + Message.AudioMessage audioMessage = 2; + } + } + + message Header { + optional string title = 1; + optional string subtitle = 2; + optional bool hasMediaAttachment = 5; + oneof media { + Message.DocumentMessage documentMessage = 3; + Message.ImageMessage imageMessage = 4; + bytes jpegThumbnail = 6; + Message.VideoMessage videoMessage = 7; + Message.LocationMessage locationMessage = 8; + Message.ProductMessage productMessage = 9; + } + } + + message NativeFlowMessage { + repeated NativeFlowButton buttons = 1; + optional string messageParamsJson = 2; + optional int32 messageVersion = 3; + message NativeFlowButton { + optional string name = 1; + optional string buttonParamsJson = 2; + } + + } + + message ShopMessage { + optional string id = 1; + optional Surface surface = 2; + optional int32 messageVersion = 3; + enum Surface { + UNKNOWN_SURFACE = 0; + FB = 1; + IG = 2; + WA = 3; + } + } + + } + + message InteractiveResponseMessage { + optional Body body = 1; + optional ContextInfo contextInfo = 15; + oneof interactiveResponseMessage { + Message.InteractiveResponseMessage.NativeFlowResponseMessage nativeFlowResponseMessage = 2; + } + message Body { + optional string text = 1; + optional Format format = 2; + enum Format { + DEFAULT = 0; + EXTENSIONS_1 = 1; + } + } + + message NativeFlowResponseMessage { + optional string name = 1; + optional string paramsJson = 2; + optional int32 version = 3; + } + + } + + message InvoiceMessage { + optional string note = 1; + optional string token = 2; + optional AttachmentType attachmentType = 3; + optional string attachmentMimetype = 4; + optional bytes attachmentMediaKey = 5; + optional int64 attachmentMediaKeyTimestamp = 6; + optional bytes attachmentFileSha256 = 7; + optional bytes attachmentFileEncSha256 = 8; + optional string attachmentDirectPath = 9; + optional bytes attachmentJpegThumbnail = 10; + enum AttachmentType { + IMAGE = 0; + PDF = 1; + } + } + + message KeepInChatMessage { + optional MessageKey key = 1; + optional KeepType keepType = 2; + optional int64 timestampMs = 3; + } + + message LinkPreviewMetadata { + optional Message.PaymentLinkMetadata paymentLinkMetadata = 1; + optional Message.URLMetadata urlMetadata = 2; + optional uint32 fbExperimentId = 3; + optional uint32 linkMediaDuration = 4; + optional SocialMediaPostType socialMediaPostType = 5; + optional bool linkInlineVideoMuted = 6; + optional string videoContentUrl = 7; + optional EmbeddedMusic musicMetadata = 8; + optional string videoContentCaption = 9; + enum SocialMediaPostType { + NONE = 0; + REEL = 1; + LIVE_VIDEO = 2; + LONG_VIDEO = 3; + SINGLE_IMAGE = 4; + CAROUSEL = 5; + } + } + + message ListMessage { + optional string title = 1; + optional string description = 2; + optional string buttonText = 3; + optional ListType listType = 4; + repeated Section sections = 5; + optional ProductListInfo productListInfo = 6; + optional string footerText = 7; + optional ContextInfo contextInfo = 8; + enum ListType { + UNKNOWN = 0; + SINGLE_SELECT = 1; + PRODUCT_LIST = 2; + } + message Product { + optional string productId = 1; + } + + message ProductListHeaderImage { + optional string productId = 1; + optional bytes jpegThumbnail = 2; + } + + message ProductListInfo { + repeated Message.ListMessage.ProductSection productSections = 1; + optional Message.ListMessage.ProductListHeaderImage headerImage = 2; + optional string businessOwnerJid = 3; + } + + message ProductSection { + optional string title = 1; + repeated Message.ListMessage.Product products = 2; + } + + message Row { + optional string title = 1; + optional string description = 2; + optional string rowId = 3; + } + + message Section { + optional string title = 1; + repeated Message.ListMessage.Row rows = 2; + } + + } + + message ListResponseMessage { + optional string title = 1; + optional ListType listType = 2; + optional SingleSelectReply singleSelectReply = 3; + optional ContextInfo contextInfo = 4; + optional string description = 5; + enum ListType { + UNKNOWN = 0; + SINGLE_SELECT = 1; + } + message SingleSelectReply { + optional string selectedRowId = 1; + } + + } + + message LiveLocationMessage { + optional double degreesLatitude = 1; + optional double degreesLongitude = 2; + optional uint32 accuracyInMeters = 3; + optional float speedInMps = 4; + optional uint32 degreesClockwiseFromMagneticNorth = 5; + optional string caption = 6; + optional int64 sequenceNumber = 7; + optional uint32 timeOffset = 8; + optional bytes jpegThumbnail = 16; + optional ContextInfo contextInfo = 17; + } + + message LocationMessage { + optional double degreesLatitude = 1; + optional double degreesLongitude = 2; + optional string name = 3; + optional string address = 4; + optional string url = 5; + optional bool isLive = 6; + optional uint32 accuracyInMeters = 7; + optional float speedInMps = 8; + optional uint32 degreesClockwiseFromMagneticNorth = 9; + optional string comment = 11; + optional bytes jpegThumbnail = 16; + optional ContextInfo contextInfo = 17; + } + + message MMSThumbnailMetadata { + optional string thumbnailDirectPath = 1; + optional bytes thumbnailSha256 = 2; + optional bytes thumbnailEncSha256 = 3; + optional bytes mediaKey = 4; + optional int64 mediaKeyTimestamp = 5; + optional uint32 thumbnailHeight = 6; + optional uint32 thumbnailWidth = 7; + optional Message.MediaKeyDomain mediaKeyDomain = 8; + } + + enum MediaKeyDomain { + UNSET = 0; + E2EE_CHAT = 1; + STATUS = 2; + CAPI = 3; + BOT = 4; + } + message MessageHistoryBundle { + optional string mimetype = 1; + optional bytes fileSha256 = 2; + optional bytes mediaKey = 3; + optional bytes fileEncSha256 = 4; + optional string directPath = 5; + optional int64 mediaKeyTimestamp = 6; + optional ContextInfo contextInfo = 7; + optional Message.MessageHistoryMetadata messageHistoryMetadata = 8; + } + + message MessageHistoryMetadata { + repeated string historyReceivers = 1; + optional int64 oldestMessageTimestamp = 2; + optional int64 messageCount = 3; + } + + message MessageHistoryNotice { + optional ContextInfo contextInfo = 1; + optional Message.MessageHistoryMetadata messageHistoryMetadata = 2; + } + + message NewsletterAdminInviteMessage { + optional string newsletterJid = 1; + optional string newsletterName = 2; + optional bytes jpegThumbnail = 3; + optional string caption = 4; + optional int64 inviteExpiration = 5; + optional ContextInfo contextInfo = 6; + } + + message NewsletterFollowerInviteMessage { + optional string newsletterJid = 1; + optional string newsletterName = 2; + optional bytes jpegThumbnail = 3; + optional string caption = 4; + optional ContextInfo contextInfo = 5; + } + + message OrderMessage { + optional string orderId = 1; + optional bytes thumbnail = 2; + optional int32 itemCount = 3; + optional OrderStatus status = 4; + optional OrderSurface surface = 5; + optional string message = 6; + optional string orderTitle = 7; + optional string sellerJid = 8; + optional string token = 9; + optional int64 totalAmount1000 = 10; + optional string totalCurrencyCode = 11; + optional ContextInfo contextInfo = 17; + optional int32 messageVersion = 12; + optional MessageKey orderRequestMessageId = 13; + optional string catalogType = 15; + enum OrderStatus { + INQUIRY = 1; + ACCEPTED = 2; + DECLINED = 3; + } + enum OrderSurface { + CATALOG = 1; + } + } + + message PaymentExtendedMetadata { + optional uint32 type = 1; + optional string platform = 2; + optional string messageParamsJson = 3; + } + + message PaymentInviteMessage { + optional ServiceType serviceType = 1; + optional int64 expiryTimestamp = 2; + enum ServiceType { + UNKNOWN = 0; + FBPAY = 1; + NOVI = 2; + UPI = 3; + } + } + + message PaymentLinkMetadata { + optional PaymentLinkButton button = 1; + optional PaymentLinkHeader header = 2; + optional PaymentLinkProvider provider = 3; + message PaymentLinkButton { + optional string displayText = 1; + } + + message PaymentLinkHeader { + optional PaymentLinkHeaderType headerType = 1; + enum PaymentLinkHeaderType { + LINK_PREVIEW = 0; + ORDER = 1; + } + } + + message PaymentLinkProvider { + optional string paramsJson = 1; + } + + } + + message PeerDataOperationRequestMessage { + optional Message.PeerDataOperationRequestType peerDataOperationRequestType = 1; + repeated RequestStickerReupload requestStickerReupload = 2; + repeated RequestUrlPreview requestUrlPreview = 3; + optional HistorySyncOnDemandRequest historySyncOnDemandRequest = 4; + repeated PlaceholderMessageResendRequest placeholderMessageResendRequest = 5; + optional FullHistorySyncOnDemandRequest fullHistorySyncOnDemandRequest = 6; + optional SyncDCollectionFatalRecoveryRequest syncdCollectionFatalRecoveryRequest = 7; + optional HistorySyncChunkRetryRequest historySyncChunkRetryRequest = 8; + optional GalaxyFlowAction galaxyFlowAction = 9; + message FullHistorySyncOnDemandRequest { + optional Message.FullHistorySyncOnDemandRequestMetadata requestMetadata = 1; + optional DeviceProps.HistorySyncConfig historySyncConfig = 2; + } + + message GalaxyFlowAction { + optional GalaxyFlowActionType type = 1; + optional string flowId = 2; + optional string stanzaId = 3; + enum GalaxyFlowActionType { + NOTIFY_LAUNCH = 1; + } + } + + message HistorySyncChunkRetryRequest { + optional Message.HistorySyncType syncType = 1; + optional uint32 chunkOrder = 2; + optional string chunkNotificationId = 3; + optional bool regenerateChunk = 4; + } + + message HistorySyncOnDemandRequest { + optional string chatJid = 1; + optional string oldestMsgId = 2; + optional bool oldestMsgFromMe = 3; + optional int32 onDemandMsgCount = 4; + optional int64 oldestMsgTimestampMs = 5; + optional string accountLid = 6; + } + + message PlaceholderMessageResendRequest { + optional MessageKey messageKey = 1; + } + + message RequestStickerReupload { + optional string fileSha256 = 1; + } + + message RequestUrlPreview { + optional string url = 1; + optional bool includeHqThumbnail = 2; + } + + message SyncDCollectionFatalRecoveryRequest { + optional string collectionName = 1; + optional int64 timestamp = 2; + } + + } + + message PeerDataOperationRequestResponseMessage { + optional Message.PeerDataOperationRequestType peerDataOperationRequestType = 1; + optional string stanzaId = 2; + repeated PeerDataOperationResult peerDataOperationResult = 3; + message PeerDataOperationResult { + optional MediaRetryNotification.ResultType mediaUploadResult = 1; + optional Message.StickerMessage stickerMessage = 2; + optional LinkPreviewResponse linkPreviewResponse = 3; + optional PlaceholderMessageResendResponse placeholderMessageResendResponse = 4; + optional WaffleNonceFetchResponse waffleNonceFetchRequestResponse = 5; + optional FullHistorySyncOnDemandRequestResponse fullHistorySyncOnDemandRequestResponse = 6; + optional CompanionMetaNonceFetchResponse companionMetaNonceFetchRequestResponse = 7; + optional SyncDSnapshotFatalRecoveryResponse syncdSnapshotFatalRecoveryResponse = 8; + optional CompanionCanonicalUserNonceFetchResponse companionCanonicalUserNonceFetchRequestResponse = 9; + optional HistorySyncChunkRetryResponse historySyncChunkRetryResponse = 10; + message CompanionCanonicalUserNonceFetchResponse { + optional string nonce = 1; + optional string waFbid = 2; + optional bool forceRefresh = 3; + } + + message CompanionMetaNonceFetchResponse { + optional string nonce = 1; + } + + message FullHistorySyncOnDemandRequestResponse { + optional Message.FullHistorySyncOnDemandRequestMetadata requestMetadata = 1; + optional Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode responseCode = 2; + } + + enum FullHistorySyncOnDemandResponseCode { + REQUEST_SUCCESS = 0; + REQUEST_TIME_EXPIRED = 1; + DECLINED_SHARING_HISTORY = 2; + GENERIC_ERROR = 3; + ERROR_REQUEST_ON_NON_SMB_PRIMARY = 4; + ERROR_HOSTED_DEVICE_NOT_CONNECTED = 5; + ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET = 6; + } + message HistorySyncChunkRetryResponse { + optional Message.HistorySyncType syncType = 1; + optional uint32 chunkOrder = 2; + optional string requestId = 3; + optional Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode responseCode = 4; + optional bool canRecover = 5; + } + + enum HistorySyncChunkRetryResponseCode { + GENERATION_ERROR = 1; + CHUNK_CONSUMED = 2; + TIMEOUT = 3; + SESSION_EXHAUSTED = 4; + CHUNK_EXHAUSTED = 5; + DUPLICATED_REQUEST = 6; + } + message LinkPreviewResponse { + optional string url = 1; + optional string title = 2; + optional string description = 3; + optional bytes thumbData = 4; + optional string matchText = 6; + optional string previewType = 7; + optional LinkPreviewHighQualityThumbnail hqThumbnail = 8; + optional PaymentLinkPreviewMetadata previewMetadata = 9; + message LinkPreviewHighQualityThumbnail { + optional string directPath = 1; + optional string thumbHash = 2; + optional string encThumbHash = 3; + optional bytes mediaKey = 4; + optional int64 mediaKeyTimestampMs = 5; + optional int32 thumbWidth = 6; + optional int32 thumbHeight = 7; + } + + message PaymentLinkPreviewMetadata { + optional bool isBusinessVerified = 1; + optional string providerName = 2; + } + + } + + message PlaceholderMessageResendResponse { + optional bytes webMessageInfoBytes = 1; + } + + message SyncDSnapshotFatalRecoveryResponse { + optional bytes collectionSnapshot = 1; + optional bool isCompressed = 2; + } + + message WaffleNonceFetchResponse { + optional string nonce = 1; + optional string waEntFbid = 2; + } + + } + + } + + enum PeerDataOperationRequestType { + UPLOAD_STICKER = 0; + SEND_RECENT_STICKER_BOOTSTRAP = 1; + GENERATE_LINK_PREVIEW = 2; + HISTORY_SYNC_ON_DEMAND = 3; + PLACEHOLDER_MESSAGE_RESEND = 4; + WAFFLE_LINKING_NONCE_FETCH = 5; + FULL_HISTORY_SYNC_ON_DEMAND = 6; + COMPANION_META_NONCE_FETCH = 7; + COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY = 8; + COMPANION_CANONICAL_USER_NONCE_FETCH = 9; + HISTORY_SYNC_CHUNK_RETRY = 10; + GALAXY_FLOW_ACTION = 11; + } + message PinInChatMessage { + optional MessageKey key = 1; + optional Type type = 2; + optional int64 senderTimestampMs = 3; + enum Type { + UNKNOWN_TYPE = 0; + PIN_FOR_ALL = 1; + UNPIN_FOR_ALL = 2; + } + } + + message PlaceholderMessage { + optional PlaceholderType type = 1; + enum PlaceholderType { + MASK_LINKED_DEVICES = 0; + } + } + + enum PollContentType { + UNKNOWN = 0; + TEXT = 1; + IMAGE = 2; + } + message PollCreationMessage { + optional bytes encKey = 1; + optional string name = 2; + repeated Option options = 3; + optional uint32 selectableOptionsCount = 4; + optional ContextInfo contextInfo = 5; + optional Message.PollContentType pollContentType = 6; + optional Message.PollType pollType = 7; + optional Option correctAnswer = 8; + message Option { + optional string optionName = 1; + optional string optionHash = 2; + } + + } + + message PollEncValue { + optional bytes encPayload = 1; + optional bytes encIv = 2; + } + + message PollResultSnapshotMessage { + optional string name = 1; + repeated PollVote pollVotes = 2; + optional ContextInfo contextInfo = 3; + optional Message.PollType pollType = 4; + message PollVote { + optional string optionName = 1; + optional int64 optionVoteCount = 2; + } + + } + + enum PollType { + POLL = 0; + QUIZ = 1; + } + message PollUpdateMessage { + optional MessageKey pollCreationMessageKey = 1; + optional Message.PollEncValue vote = 2; + optional Message.PollUpdateMessageMetadata metadata = 3; + optional int64 senderTimestampMs = 4; + } + + message PollUpdateMessageMetadata { + } + + message PollVoteMessage { + repeated bytes selectedOptions = 1; + } + + message ProductMessage { + optional ProductSnapshot product = 1; + optional string businessOwnerJid = 2; + optional CatalogSnapshot catalog = 4; + optional string body = 5; + optional string footer = 6; + optional ContextInfo contextInfo = 17; + message CatalogSnapshot { + optional Message.ImageMessage catalogImage = 1; + optional string title = 2; + optional string description = 3; + } + + message ProductSnapshot { + optional Message.ImageMessage productImage = 1; + optional string productId = 2; + optional string title = 3; + optional string description = 4; + optional string currencyCode = 5; + optional int64 priceAmount1000 = 6; + optional string retailerId = 7; + optional string url = 8; + optional uint32 productImageCount = 9; + optional string firstImageId = 11; + optional int64 salePriceAmount1000 = 12; + optional string signedUrl = 13; + } + + } + + message ProtocolMessage { + optional MessageKey key = 1; + optional Type type = 2; + optional uint32 ephemeralExpiration = 4; + optional int64 ephemeralSettingTimestamp = 5; + optional Message.HistorySyncNotification historySyncNotification = 6; + optional Message.AppStateSyncKeyShare appStateSyncKeyShare = 7; + optional Message.AppStateSyncKeyRequest appStateSyncKeyRequest = 8; + optional Message.InitialSecurityNotificationSettingSync initialSecurityNotificationSettingSync = 9; + optional Message.AppStateFatalExceptionNotification appStateFatalExceptionNotification = 10; + optional DisappearingMode disappearingMode = 11; + optional Message editedMessage = 14; + optional int64 timestampMs = 15; + optional Message.PeerDataOperationRequestMessage peerDataOperationRequestMessage = 16; + optional Message.PeerDataOperationRequestResponseMessage peerDataOperationRequestResponseMessage = 17; + optional BotFeedbackMessage botFeedbackMessage = 18; + optional string invokerJid = 19; + optional Message.RequestWelcomeMessageMetadata requestWelcomeMessageMetadata = 20; + optional MediaNotifyMessage mediaNotifyMessage = 21; + optional Message.CloudAPIThreadControlNotification cloudApiThreadControlNotification = 22; + optional LIDMigrationMappingSyncMessage lidMigrationMappingSyncMessage = 23; + optional LimitSharing limitSharing = 24; + optional bytes aiPsiMetadata = 25; + optional AIQueryFanout aiQueryFanout = 26; + optional MemberLabel memberLabel = 27; + enum Type { + REVOKE = 0; + EPHEMERAL_SETTING = 3; + EPHEMERAL_SYNC_RESPONSE = 4; + HISTORY_SYNC_NOTIFICATION = 5; + APP_STATE_SYNC_KEY_SHARE = 6; + APP_STATE_SYNC_KEY_REQUEST = 7; + MSG_FANOUT_BACKFILL_REQUEST = 8; + INITIAL_SECURITY_NOTIFICATION_SETTING_SYNC = 9; + APP_STATE_FATAL_EXCEPTION_NOTIFICATION = 10; + SHARE_PHONE_NUMBER = 11; + MESSAGE_EDIT = 14; + PEER_DATA_OPERATION_REQUEST_MESSAGE = 16; + PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE = 17; + REQUEST_WELCOME_MESSAGE = 18; + BOT_FEEDBACK_MESSAGE = 19; + MEDIA_NOTIFY_MESSAGE = 20; + CLOUD_API_THREAD_CONTROL_NOTIFICATION = 21; + LID_MIGRATION_MAPPING_SYNC = 22; + REMINDER_MESSAGE = 23; + BOT_MEMU_ONBOARDING_MESSAGE = 24; + STATUS_MENTION_MESSAGE = 25; + STOP_GENERATION_MESSAGE = 26; + LIMIT_SHARING = 27; + AI_PSI_METADATA = 28; + AI_QUERY_FANOUT = 29; + GROUP_MEMBER_LABEL_CHANGE = 30; + } + } + + message QuestionResponseMessage { + optional MessageKey key = 1; + optional string text = 2; + } + + message ReactionMessage { + optional MessageKey key = 1; + optional string text = 2; + optional string groupingKey = 3; + optional int64 senderTimestampMs = 4; + } + + message RequestPaymentMessage { + optional Message noteMessage = 4; + optional string currencyCodeIso4217 = 1; + optional uint64 amount1000 = 2; + optional string requestFrom = 3; + optional int64 expiryTimestamp = 5; + optional Money amount = 6; + optional PaymentBackground background = 7; + } + + message RequestPhoneNumberMessage { + optional ContextInfo contextInfo = 1; + } + + message RequestWelcomeMessageMetadata { + optional LocalChatState localChatState = 1; + enum LocalChatState { + EMPTY = 0; + NON_EMPTY = 1; + } + } + + message ScheduledCallCreationMessage { + optional int64 scheduledTimestampMs = 1; + optional CallType callType = 2; + optional string title = 3; + enum CallType { + UNKNOWN = 0; + VOICE = 1; + VIDEO = 2; + } + } + + message ScheduledCallEditMessage { + optional MessageKey key = 1; + optional EditType editType = 2; + enum EditType { + UNKNOWN = 0; + CANCEL = 1; + } + } + + message SecretEncryptedMessage { + optional MessageKey targetMessageKey = 1; + optional bytes encPayload = 2; + optional bytes encIv = 3; + optional SecretEncType secretEncType = 4; + enum SecretEncType { + UNKNOWN = 0; + EVENT_EDIT = 1; + MESSAGE_EDIT = 2; + } + } + + message SendPaymentMessage { + optional Message noteMessage = 2; + optional MessageKey requestMessageKey = 3; + optional PaymentBackground background = 4; + optional string transactionData = 5; + } + + message SenderKeyDistributionMessage { + optional string groupId = 1; + optional bytes axolotlSenderKeyDistributionMessage = 2; + } + + message StatusNotificationMessage { + optional MessageKey responseMessageKey = 1; + optional MessageKey originalMessageKey = 2; + optional StatusNotificationType type = 3; + enum StatusNotificationType { + UNKNOWN = 0; + STATUS_ADD_YOURS = 1; + STATUS_RESHARE = 2; + STATUS_QUESTION_ANSWER_RESHARE = 3; + } + } + + message StatusQuestionAnswerMessage { + optional MessageKey key = 1; + optional string text = 2; + } + + message StatusQuotedMessage { + optional StatusQuotedMessageType type = 1; + optional string text = 2; + optional bytes thumbnail = 3; + optional MessageKey originalStatusId = 4; + enum StatusQuotedMessageType { + QUESTION_ANSWER = 1; + } + } + + message StatusStickerInteractionMessage { + optional MessageKey key = 1; + optional string stickerKey = 2; + optional StatusStickerType type = 3; + enum StatusStickerType { + UNKNOWN = 0; + REACTION = 1; + } + } + + message StickerMessage { + optional string url = 1; + optional bytes fileSha256 = 2; + optional bytes fileEncSha256 = 3; + optional bytes mediaKey = 4; + optional string mimetype = 5; + optional uint32 height = 6; + optional uint32 width = 7; + optional string directPath = 8; + optional uint64 fileLength = 9; + optional int64 mediaKeyTimestamp = 10; + optional uint32 firstFrameLength = 11; + optional bytes firstFrameSidecar = 12; + optional bool isAnimated = 13; + optional bytes pngThumbnail = 16; + optional ContextInfo contextInfo = 17; + optional int64 stickerSentTs = 18; + optional bool isAvatar = 19; + optional bool isAiSticker = 20; + optional bool isLottie = 21; + optional string accessibilityLabel = 22; + optional Message.MediaKeyDomain mediaKeyDomain = 23; + } + + message StickerPackMessage { + optional string stickerPackId = 1; + optional string name = 2; + optional string publisher = 3; + repeated Sticker stickers = 4; + optional uint64 fileLength = 5; + optional bytes fileSha256 = 6; + optional bytes fileEncSha256 = 7; + optional bytes mediaKey = 8; + optional string directPath = 9; + optional string caption = 10; + optional ContextInfo contextInfo = 11; + optional string packDescription = 12; + optional int64 mediaKeyTimestamp = 13; + optional string trayIconFileName = 14; + optional string thumbnailDirectPath = 15; + optional bytes thumbnailSha256 = 16; + optional bytes thumbnailEncSha256 = 17; + optional uint32 thumbnailHeight = 18; + optional uint32 thumbnailWidth = 19; + optional string imageDataHash = 20; + optional uint64 stickerPackSize = 21; + optional StickerPackOrigin stickerPackOrigin = 22; + message Sticker { + optional string fileName = 1; + optional bool isAnimated = 2; + repeated string emojis = 3; + optional string accessibilityLabel = 4; + optional bool isLottie = 5; + optional string mimetype = 6; + } + + enum StickerPackOrigin { + FIRST_PARTY = 0; + THIRD_PARTY = 1; + USER_CREATED = 2; + } + } + + message StickerSyncRMRMessage { + repeated string filehash = 1; + optional string rmrSource = 2; + optional int64 requestTimestamp = 3; + } + + message TemplateButtonReplyMessage { + optional string selectedId = 1; + optional string selectedDisplayText = 2; + optional ContextInfo contextInfo = 3; + optional uint32 selectedIndex = 4; + optional uint32 selectedCarouselCardIndex = 5; + } + + message TemplateMessage { + optional ContextInfo contextInfo = 3; + optional HydratedFourRowTemplate hydratedTemplate = 4; + optional string templateId = 9; + oneof format { + Message.TemplateMessage.FourRowTemplate fourRowTemplate = 1; + Message.TemplateMessage.HydratedFourRowTemplate hydratedFourRowTemplate = 2; + Message.InteractiveMessage interactiveMessageTemplate = 5; + } + message FourRowTemplate { + optional Message.HighlyStructuredMessage content = 6; + optional Message.HighlyStructuredMessage footer = 7; + repeated TemplateButton buttons = 8; + oneof title { + Message.DocumentMessage documentMessage = 1; + Message.HighlyStructuredMessage highlyStructuredMessage = 2; + Message.ImageMessage imageMessage = 3; + Message.VideoMessage videoMessage = 4; + Message.LocationMessage locationMessage = 5; + } + } + + message HydratedFourRowTemplate { + optional string hydratedContentText = 6; + optional string hydratedFooterText = 7; + repeated HydratedTemplateButton hydratedButtons = 8; + optional string templateId = 9; + optional bool maskLinkedDevices = 10; + oneof title { + Message.DocumentMessage documentMessage = 1; + string hydratedTitleText = 2; + Message.ImageMessage imageMessage = 3; + Message.VideoMessage videoMessage = 4; + Message.LocationMessage locationMessage = 5; + } + } + + } + + message URLMetadata { + optional uint32 fbExperimentId = 1; + } + + message VideoEndCard { + string username = 1; + string caption = 2; + string thumbnailImageUrl = 3; + string profilePictureUrl = 4; + } + + message VideoMessage { + optional string url = 1; + optional string mimetype = 2; + optional bytes fileSha256 = 3; + optional uint64 fileLength = 4; + optional uint32 seconds = 5; + optional bytes mediaKey = 6; + optional string caption = 7; + optional bool gifPlayback = 8; + optional uint32 height = 9; + optional uint32 width = 10; + optional bytes fileEncSha256 = 11; + repeated InteractiveAnnotation interactiveAnnotations = 12; + optional string directPath = 13; + optional int64 mediaKeyTimestamp = 14; + optional bytes jpegThumbnail = 16; + optional ContextInfo contextInfo = 17; + optional bytes streamingSidecar = 18; + optional Attribution gifAttribution = 19; + optional bool viewOnce = 20; + optional string thumbnailDirectPath = 21; + optional bytes thumbnailSha256 = 22; + optional bytes thumbnailEncSha256 = 23; + optional string staticUrl = 24; + repeated InteractiveAnnotation annotations = 25; + optional string accessibilityLabel = 26; + repeated ProcessedVideo processedVideos = 27; + optional uint32 externalShareFullVideoDurationInSeconds = 28; + optional uint64 motionPhotoPresentationOffsetMs = 29; + optional string metadataUrl = 30; + optional VideoSourceType videoSourceType = 31; + optional Message.MediaKeyDomain mediaKeyDomain = 32; + enum Attribution { + NONE = 0; + GIPHY = 1; + TENOR = 2; + KLIPY = 3; + } + enum VideoSourceType { + USER_VIDEO = 0; + AI_GENERATED = 1; + } + } + +} + +message MessageAddOn { + optional MessageAddOnType messageAddOnType = 1; + optional Message messageAddOn = 2; + optional int64 senderTimestampMs = 3; + optional int64 serverTimestampMs = 4; + optional WebMessageInfo.Status status = 5; + optional MessageAddOnContextInfo addOnContextInfo = 6; + optional MessageKey messageAddOnKey = 7; + optional LegacyMessage legacyMessage = 8; + enum MessageAddOnType { + UNDEFINED = 0; + REACTION = 1; + EVENT_RESPONSE = 2; + POLL_UPDATE = 3; + PIN_IN_CHAT = 4; + } +} + +message MessageAddOnContextInfo { + optional uint32 messageAddOnDurationInSecs = 1; + optional MessageContextInfo.MessageAddonExpiryType messageAddOnExpiryType = 2; +} + +message MessageAssociation { + optional AssociationType associationType = 1; + optional MessageKey parentMessageKey = 2; + optional int32 messageIndex = 3; + enum AssociationType { + UNKNOWN = 0; + MEDIA_ALBUM = 1; + BOT_PLUGIN = 2; + EVENT_COVER_IMAGE = 3; + STATUS_POLL = 4; + HD_VIDEO_DUAL_UPLOAD = 5; + STATUS_EXTERNAL_RESHARE = 6; + MEDIA_POLL = 7; + STATUS_ADD_YOURS = 8; + STATUS_NOTIFICATION = 9; + HD_IMAGE_DUAL_UPLOAD = 10; + STICKER_ANNOTATION = 11; + MOTION_PHOTO = 12; + STATUS_LINK_ACTION = 13; + VIEW_ALL_REPLIES = 14; + STATUS_ADD_YOURS_AI_IMAGINE = 15; + STATUS_QUESTION = 16; + STATUS_ADD_YOURS_DIWALI = 17; + STATUS_REACTION = 18; + HEVC_VIDEO_DUAL_UPLOAD = 19; + } +} + +message MessageContextInfo { + optional DeviceListMetadata deviceListMetadata = 1; + optional int32 deviceListMetadataVersion = 2; + optional bytes messageSecret = 3; + optional bytes paddingBytes = 4; + optional uint32 messageAddOnDurationInSecs = 5; + optional bytes botMessageSecret = 6; + optional BotMetadata botMetadata = 7; + optional int32 reportingTokenVersion = 8; + optional MessageAddonExpiryType messageAddOnExpiryType = 9; + optional MessageAssociation messageAssociation = 10; + optional bool capiCreatedGroup = 11; + optional string supportPayload = 12; + optional LimitSharing limitSharing = 13; + optional LimitSharing limitSharingV2 = 14; + repeated ThreadID threadId = 15; + optional WebLinkRenderConfig weblinkRenderConfig = 16; + enum MessageAddonExpiryType { + STATIC = 1; + DEPENDENT_ON_PARENT = 2; + } +} + +message MessageKey { + optional string remoteJid = 1; + optional bool fromMe = 2; + optional string id = 3; + optional string participant = 4; +} + +message MessageSecretMessage { + optional sfixed32 version = 1; + optional bytes encIv = 2; + optional bytes encPayload = 3; +} + +message Money { + optional int64 value = 1; + optional uint32 offset = 2; + optional string currencyCode = 3; +} + +message MsgOpaqueData { + optional string body = 1; + optional string caption = 3; + optional double lng = 5; + optional bool isLive = 6; + optional double lat = 7; + optional int32 paymentAmount1000 = 8; + optional string paymentNoteMsgBody = 9; + optional string matchedText = 11; + optional string title = 12; + optional string description = 13; + optional bytes futureproofBuffer = 14; + optional string clientUrl = 15; + optional string loc = 16; + optional string pollName = 17; + repeated PollOption pollOptions = 18; + optional uint32 pollSelectableOptionsCount = 20; + optional bytes messageSecret = 21; + optional string originalSelfAuthor = 51; + optional int64 senderTimestampMs = 22; + optional string pollUpdateParentKey = 23; + optional PollEncValue encPollVote = 24; + optional bool isSentCagPollCreation = 28; + optional PollContentType pollContentType = 42; + optional PollType pollType = 46; + optional int32 correctOptionIndex = 47; + optional PollVotesSnapshot pollVotesSnapshot = 41; + optional string encReactionTargetMessageKey = 25; + optional bytes encReactionEncPayload = 26; + optional bytes encReactionEncIv = 27; + optional bytes botMessageSecret = 29; + optional string targetMessageKey = 30; + optional bytes encPayload = 31; + optional bytes encIv = 32; + optional string eventName = 33; + optional bool isEventCanceled = 34; + optional string eventDescription = 35; + optional string eventJoinLink = 36; + optional int64 eventStartTime = 37; + optional EventLocation eventLocation = 38; + optional int64 eventEndTime = 40; + optional bool eventIsScheduledCall = 44; + optional bool eventExtraGuestsAllowed = 45; + optional bytes plainProtobufBytes = 43; + message EventLocation { + optional double degreesLatitude = 1; + optional double degreesLongitude = 2; + optional string name = 3; + optional string address = 4; + optional string url = 5; + optional bytes jpegThumbnail = 6; + } + + enum PollContentType { + UNKNOWN = 0; + TEXT = 1; + IMAGE = 2; + } + message PollOption { + optional string name = 1; + optional string hash = 2; + } + + enum PollType { + POLL = 0; + QUIZ = 1; + } + message PollVoteSnapshot { + optional MsgOpaqueData.PollOption option = 1; + optional int32 optionVoteCount = 2; + } + + message PollVotesSnapshot { + repeated MsgOpaqueData.PollVoteSnapshot pollVotes = 1; + } + +} + +message MsgRowOpaqueData { + optional MsgOpaqueData currentMsg = 1; + optional MsgOpaqueData quotedMsg = 2; +} + +enum MutationProps { + STAR_ACTION = 2; + CONTACT_ACTION = 3; + MUTE_ACTION = 4; + PIN_ACTION = 5; + SECURITY_NOTIFICATION_SETTING = 6; + PUSH_NAME_SETTING = 7; + QUICK_REPLY_ACTION = 8; + RECENT_EMOJI_WEIGHTS_ACTION = 11; + LABEL_MESSAGE_ACTION = 13; + LABEL_EDIT_ACTION = 14; + LABEL_ASSOCIATION_ACTION = 15; + LOCALE_SETTING = 16; + ARCHIVE_CHAT_ACTION = 17; + DELETE_MESSAGE_FOR_ME_ACTION = 18; + KEY_EXPIRATION = 19; + MARK_CHAT_AS_READ_ACTION = 20; + CLEAR_CHAT_ACTION = 21; + DELETE_CHAT_ACTION = 22; + UNARCHIVE_CHATS_SETTING = 23; + PRIMARY_FEATURE = 24; + ANDROID_UNSUPPORTED_ACTIONS = 26; + AGENT_ACTION = 27; + SUBSCRIPTION_ACTION = 28; + USER_STATUS_MUTE_ACTION = 29; + TIME_FORMAT_ACTION = 30; + NUX_ACTION = 31; + PRIMARY_VERSION_ACTION = 32; + STICKER_ACTION = 33; + REMOVE_RECENT_STICKER_ACTION = 34; + CHAT_ASSIGNMENT = 35; + CHAT_ASSIGNMENT_OPENED_STATUS = 36; + PN_FOR_LID_CHAT_ACTION = 37; + MARKETING_MESSAGE_ACTION = 38; + MARKETING_MESSAGE_BROADCAST_ACTION = 39; + EXTERNAL_WEB_BETA_ACTION = 40; + PRIVACY_SETTING_RELAY_ALL_CALLS = 41; + CALL_LOG_ACTION = 42; + UGC_BOT = 43; + STATUS_PRIVACY = 44; + BOT_WELCOME_REQUEST_ACTION = 45; + DELETE_INDIVIDUAL_CALL_LOG = 46; + LABEL_REORDERING_ACTION = 47; + PAYMENT_INFO_ACTION = 48; + CUSTOM_PAYMENT_METHODS_ACTION = 49; + LOCK_CHAT_ACTION = 50; + CHAT_LOCK_SETTINGS = 51; + WAMO_USER_IDENTIFIER_ACTION = 52; + PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION = 53; + DEVICE_CAPABILITIES = 54; + NOTE_EDIT_ACTION = 55; + FAVORITES_ACTION = 56; + MERCHANT_PAYMENT_PARTNER_ACTION = 57; + WAFFLE_ACCOUNT_LINK_STATE_ACTION = 58; + USERNAME_CHAT_START_MODE = 59; + NOTIFICATION_ACTIVITY_SETTING_ACTION = 60; + LID_CONTACT_ACTION = 61; + CTWA_PER_CUSTOMER_DATA_SHARING_ACTION = 62; + PAYMENT_TOS_ACTION = 63; + PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION = 64; + BUSINESS_BROADCAST_ASSOCIATION_ACTION = 65; + DETECTED_OUTCOMES_STATUS_ACTION = 66; + MAIBA_AI_FEATURES_CONTROL_ACTION = 68; + BUSINESS_BROADCAST_LIST_ACTION = 69; + MUSIC_USER_ID_ACTION = 70; + STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION = 71; + AVATAR_UPDATED_ACTION = 72; + GALAXY_FLOW_ACTION = 73; + PRIVATE_PROCESSING_SETTING_ACTION = 74; + NEWSLETTER_SAVED_INTERESTS_ACTION = 75; + AI_THREAD_RENAME_ACTION = 76; + INTERACTIVE_MESSAGE_ACTION = 77; + SHARE_OWN_PN = 10001; + BUSINESS_BROADCAST_ACTION = 10002; +} +message NoiseCertificate { + optional bytes details = 1; + optional bytes signature = 2; + message Details { + optional uint32 serial = 1; + optional string issuer = 2; + optional uint64 expires = 3; + optional string subject = 4; + optional bytes key = 5; + } + +} + +message NotificationMessageInfo { + optional MessageKey key = 1; + optional Message message = 2; + optional uint64 messageTimestamp = 3; + optional string participant = 4; +} + +message NotificationSettings { + optional string messageVibrate = 1; + optional string messagePopup = 2; + optional string messageLight = 3; + optional bool lowPriorityNotifications = 4; + optional bool reactionsMuted = 5; + optional string callVibrate = 6; +} + +message PairingRequest { + optional bytes companionPublicKey = 1; + optional bytes companionIdentityKey = 2; + optional bytes advSecret = 3; +} + +message PastParticipant { + optional string userJid = 1; + optional LeaveReason leaveReason = 2; + optional uint64 leaveTs = 3; + enum LeaveReason { + LEFT = 0; + REMOVED = 1; + } +} + +message PastParticipants { + optional string groupJid = 1; + repeated PastParticipant pastParticipants = 2; +} + +message PatchDebugData { + optional bytes currentLthash = 1; + optional bytes newLthash = 2; + optional bytes patchVersion = 3; + optional bytes collectionName = 4; + optional bytes firstFourBytesFromAHashOfSnapshotMacKey = 5; + optional bytes newLthashSubtract = 6; + optional int32 numberAdd = 7; + optional int32 numberRemove = 8; + optional int32 numberOverride = 9; + optional Platform senderPlatform = 10; + optional bool isSenderPrimary = 11; + enum Platform { + ANDROID = 0; + SMBA = 1; + IPHONE = 2; + SMBI = 3; + WEB = 4; + UWP = 5; + DARWIN = 6; + IPAD = 7; + WEAROS = 8; + WASG = 9; + WEARM = 10; + CAPI = 11; + } +} + +message PaymentBackground { + optional string id = 1; + optional uint64 fileLength = 2; + optional uint32 width = 3; + optional uint32 height = 4; + optional string mimetype = 5; + optional fixed32 placeholderArgb = 6; + optional fixed32 textArgb = 7; + optional fixed32 subtextArgb = 8; + optional MediaData mediaData = 9; + optional Type type = 10; + message MediaData { + optional bytes mediaKey = 1; + optional int64 mediaKeyTimestamp = 2; + optional bytes fileSha256 = 3; + optional bytes fileEncSha256 = 4; + optional string directPath = 5; + } + + enum Type { + UNKNOWN = 0; + DEFAULT = 1; + } +} + +message PaymentInfo { + optional Currency currencyDeprecated = 1; + optional uint64 amount1000 = 2; + optional string receiverJid = 3; + optional Status status = 4; + optional uint64 transactionTimestamp = 5; + optional MessageKey requestMessageKey = 6; + optional uint64 expiryTimestamp = 7; + optional bool futureproofed = 8; + optional string currency = 9; + optional TxnStatus txnStatus = 10; + optional bool useNoviFiatFormat = 11; + optional Money primaryAmount = 12; + optional Money exchangeAmount = 13; + enum Currency { + UNKNOWN_CURRENCY = 0; + INR = 1; + } + enum Status { + UNKNOWN_STATUS = 0; + PROCESSING = 1; + SENT = 2; + NEED_TO_ACCEPT = 3; + COMPLETE = 4; + COULD_NOT_COMPLETE = 5; + REFUNDED = 6; + EXPIRED = 7; + REJECTED = 8; + CANCELLED = 9; + WAITING_FOR_PAYER = 10; + WAITING = 11; + } + enum TxnStatus { + UNKNOWN = 0; + PENDING_SETUP = 1; + PENDING_RECEIVER_SETUP = 2; + INIT = 3; + SUCCESS = 4; + COMPLETED = 5; + FAILED = 6; + FAILED_RISK = 7; + FAILED_PROCESSING = 8; + FAILED_RECEIVER_PROCESSING = 9; + FAILED_DA = 10; + FAILED_DA_FINAL = 11; + REFUNDED_TXN = 12; + REFUND_FAILED = 13; + REFUND_FAILED_PROCESSING = 14; + REFUND_FAILED_DA = 15; + EXPIRED_TXN = 16; + AUTH_CANCELED = 17; + AUTH_CANCEL_FAILED_PROCESSING = 18; + AUTH_CANCEL_FAILED = 19; + COLLECT_INIT = 20; + COLLECT_SUCCESS = 21; + COLLECT_FAILED = 22; + COLLECT_FAILED_RISK = 23; + COLLECT_REJECTED = 24; + COLLECT_EXPIRED = 25; + COLLECT_CANCELED = 26; + COLLECT_CANCELLING = 27; + IN_REVIEW = 28; + REVERSAL_SUCCESS = 29; + REVERSAL_PENDING = 30; + REFUND_PENDING = 31; + } +} + +message PhoneNumberToLIDMapping { + optional string pnJid = 1; + optional string lidJid = 2; +} + +message PhotoChange { + optional bytes oldPhoto = 1; + optional bytes newPhoto = 2; + optional uint32 newPhotoId = 3; +} + +message PinInChat { + optional Type type = 1; + optional MessageKey key = 2; + optional int64 senderTimestampMs = 3; + optional int64 serverTimestampMs = 4; + optional MessageAddOnContextInfo messageAddOnContextInfo = 5; + enum Type { + UNKNOWN_TYPE = 0; + PIN_FOR_ALL = 1; + UNPIN_FOR_ALL = 2; + } +} + +message Point { + optional int32 xDeprecated = 1; + optional int32 yDeprecated = 2; + optional double x = 3; + optional double y = 4; +} + +message PollAdditionalMetadata { + optional bool pollInvalidated = 1; +} + +message PollEncValue { + optional bytes encPayload = 1; + optional bytes encIv = 2; +} + +message PollUpdate { + optional MessageKey pollUpdateMessageKey = 1; + optional Message.PollVoteMessage vote = 2; + optional int64 senderTimestampMs = 3; + optional int64 serverTimestampMs = 4; + optional bool unread = 5; +} + +message PreKeyRecordStructure { + optional uint32 id = 1; + optional bytes publicKey = 2; + optional bytes privateKey = 3; +} + +message PreKeySignalMessage { + optional uint32 registrationId = 5; + optional uint32 preKeyId = 1; + optional uint32 signedPreKeyId = 6; + optional bytes baseKey = 2; + optional bytes identityKey = 3; + optional bytes message = 4; +} + +message PremiumMessageInfo { + optional string serverCampaignId = 1; +} + +message PrimaryEphemeralIdentity { + optional bytes publicKey = 1; + optional bytes nonce = 2; +} + +enum PrivacySystemMessage { + E2EE_MSG = 1; + NE2EE_SELF = 2; + NE2EE_OTHER = 3; +} +message ProcessedVideo { + optional string directPath = 1; + optional bytes fileSha256 = 2; + optional uint32 height = 3; + optional uint32 width = 4; + optional uint64 fileLength = 5; + optional uint32 bitrate = 6; + optional VideoQuality quality = 7; + repeated string capabilities = 8; + enum VideoQuality { + UNDEFINED = 0; + LOW = 1; + MID = 2; + HIGH = 3; + } +} + +message ProloguePayload { + optional bytes companionEphemeralIdentity = 1; + optional CompanionCommitment commitment = 2; +} + +message Pushname { + optional string id = 1; + optional string pushname = 2; +} + +message QuarantinedMessage { + optional bytes originalData = 1; + optional string extractedText = 2; +} + +message Reaction { + optional MessageKey key = 1; + optional string text = 2; + optional string groupingKey = 3; + optional int64 senderTimestampMs = 4; + optional bool unread = 5; +} + +message RecentEmojiWeight { + optional string emoji = 1; + optional float weight = 2; +} + +message RecordStructure { + optional SessionStructure currentSession = 1; + repeated SessionStructure previousSessions = 2; +} + +message Reportable { + optional uint32 minVersion = 1; + optional uint32 maxVersion = 2; + optional uint32 notReportableMinVersion = 3; + optional bool never = 4; +} + +message ReportingTokenInfo { + optional bytes reportingTag = 1; +} + +message SenderKeyDistributionMessage { + optional uint32 id = 1; + optional uint32 iteration = 2; + optional bytes chainKey = 3; + optional bytes signingKey = 4; +} + +message SenderKeyMessage { + optional uint32 id = 1; + optional uint32 iteration = 2; + optional bytes ciphertext = 3; +} + +message SenderKeyRecordStructure { + repeated SenderKeyStateStructure senderKeyStates = 1; +} + +message SenderKeyStateStructure { + optional uint32 senderKeyId = 1; + optional SenderChainKey senderChainKey = 2; + optional SenderSigningKey senderSigningKey = 3; + repeated SenderMessageKey senderMessageKeys = 4; + message SenderChainKey { + optional uint32 iteration = 1; + optional bytes seed = 2; + } + + message SenderMessageKey { + optional uint32 iteration = 1; + optional bytes seed = 2; + } + + message SenderSigningKey { + optional bytes public = 1; + optional bytes private = 2; + } + +} + +message ServerErrorReceipt { + optional string stanzaId = 1; +} + +message SessionStructure { + optional uint32 sessionVersion = 1; + optional bytes localIdentityPublic = 2; + optional bytes remoteIdentityPublic = 3; + optional bytes rootKey = 4; + optional uint32 previousCounter = 5; + optional Chain senderChain = 6; + repeated Chain receiverChains = 7; + optional PendingKeyExchange pendingKeyExchange = 8; + optional PendingPreKey pendingPreKey = 9; + optional uint32 remoteRegistrationId = 10; + optional uint32 localRegistrationId = 11; + optional bool needsRefresh = 12; + optional bytes aliceBaseKey = 13; + message Chain { + optional bytes senderRatchetKey = 1; + optional bytes senderRatchetKeyPrivate = 2; + optional ChainKey chainKey = 3; + repeated MessageKey messageKeys = 4; + message ChainKey { + optional uint32 index = 1; + optional bytes key = 2; + } + + message MessageKey { + optional uint32 index = 1; + optional bytes cipherKey = 2; + optional bytes macKey = 3; + optional bytes iv = 4; + } + + } + + message PendingKeyExchange { + optional uint32 sequence = 1; + optional bytes localBaseKey = 2; + optional bytes localBaseKeyPrivate = 3; + optional bytes localRatchetKey = 4; + optional bytes localRatchetKeyPrivate = 5; + optional bytes localIdentityKey = 7; + optional bytes localIdentityKeyPrivate = 8; + } + + message PendingPreKey { + optional uint32 preKeyId = 1; + optional int32 signedPreKeyId = 3; + optional bytes baseKey = 2; + } + +} + +message SessionTransparencyMetadata { + optional string disclaimerText = 1; + optional string hcaId = 2; + optional SessionTransparencyType sessionTransparencyType = 3; +} + +enum SessionTransparencyType { + UNKNOWN_TYPE = 0; + NY_AI_SAFETY_DISCLAIMER = 1; +} +message SignalMessage { + optional bytes ratchetKey = 1; + optional uint32 counter = 2; + optional uint32 previousCounter = 3; + optional bytes ciphertext = 4; +} + +message SignedPreKeyRecordStructure { + optional uint32 id = 1; + optional bytes publicKey = 2; + optional bytes privateKey = 3; + optional bytes signature = 4; + optional fixed64 timestamp = 5; +} + +message StatusAttribution { + optional Type type = 1; + optional string actionUrl = 2; + oneof attributionData { + StatusAttribution.StatusReshare statusReshare = 3; + StatusAttribution.ExternalShare externalShare = 4; + StatusAttribution.Music music = 5; + StatusAttribution.GroupStatus groupStatus = 6; + StatusAttribution.RLAttribution rlAttribution = 7; + StatusAttribution.AiCreatedAttribution aiCreatedAttribution = 8; + } + message AiCreatedAttribution { + optional Source source = 1; + enum Source { + UNKNOWN = 0; + STATUS_MIMICRY = 1; + } + } + + message ExternalShare { + optional string actionUrl = 1; + optional Source source = 2; + optional int32 duration = 3; + optional string actionFallbackUrl = 4; + enum Source { + UNKNOWN = 0; + INSTAGRAM = 1; + FACEBOOK = 2; + MESSENGER = 3; + SPOTIFY = 4; + YOUTUBE = 5; + PINTEREST = 6; + THREADS = 7; + APPLE_MUSIC = 8; + SHARECHAT = 9; + GOOGLE_PHOTOS = 10; + } + } + + message GroupStatus { + optional string authorJid = 1; + } + + message Music { + optional string authorName = 1; + optional string songId = 2; + optional string title = 3; + optional string author = 4; + optional string artistAttribution = 5; + optional bool isExplicit = 6; + } + + message RLAttribution { + optional Source source = 1; + enum Source { + UNKNOWN = 0; + RAY_BAN_META_GLASSES = 1; + OAKLEY_META_GLASSES = 2; + HYPERNOVA_GLASSES = 3; + } + } + + message StatusReshare { + optional Source source = 1; + optional Metadata metadata = 2; + message Metadata { + optional int32 duration = 1; + optional string channelJid = 2; + optional int32 channelMessageId = 3; + optional bool hasMultipleReshares = 4; + } + + enum Source { + UNKNOWN = 0; + INTERNAL_RESHARE = 1; + MENTION_RESHARE = 2; + CHANNEL_RESHARE = 3; + FORWARD = 4; + } + } + + enum Type { + UNKNOWN = 0; + RESHARE = 1; + EXTERNAL_SHARE = 2; + MUSIC = 3; + STATUS_MENTION = 4; + GROUP_STATUS = 5; + RL_ATTRIBUTION = 6; + AI_CREATED = 7; + LAYOUTS = 8; + } +} + +message StatusMentionMessage { + optional Message quotedStatus = 1; +} + +message StatusPSA { + uint64 campaignId = 44; + optional uint64 campaignExpirationTimestamp = 45; +} + +message StickerMetadata { + optional string url = 1; + optional bytes fileSha256 = 2; + optional bytes fileEncSha256 = 3; + optional bytes mediaKey = 4; + optional string mimetype = 5; + optional uint32 height = 6; + optional uint32 width = 7; + optional string directPath = 8; + optional uint64 fileLength = 9; + optional float weight = 10; + optional int64 lastStickerSentTs = 11; + optional bool isLottie = 12; + optional string imageHash = 13; + optional bool isAvatarSticker = 14; +} + +message SyncActionData { + optional bytes index = 1; + optional SyncActionValue value = 2; + optional bytes padding = 3; + optional int32 version = 4; +} + +message SyncActionValue { + optional int64 timestamp = 1; + optional StarAction starAction = 2; + optional ContactAction contactAction = 3; + optional MuteAction muteAction = 4; + optional PinAction pinAction = 5; + optional PushNameSetting pushNameSetting = 7; + optional QuickReplyAction quickReplyAction = 8; + optional RecentEmojiWeightsAction recentEmojiWeightsAction = 11; + optional LabelEditAction labelEditAction = 14; + optional LabelAssociationAction labelAssociationAction = 15; + optional LocaleSetting localeSetting = 16; + optional ArchiveChatAction archiveChatAction = 17; + optional DeleteMessageForMeAction deleteMessageForMeAction = 18; + optional KeyExpiration keyExpiration = 19; + optional MarkChatAsReadAction markChatAsReadAction = 20; + optional ClearChatAction clearChatAction = 21; + optional DeleteChatAction deleteChatAction = 22; + optional UnarchiveChatsSetting unarchiveChatsSetting = 23; + optional PrimaryFeature primaryFeature = 24; + optional AndroidUnsupportedActions androidUnsupportedActions = 26; + optional AgentAction agentAction = 27; + optional SubscriptionAction subscriptionAction = 28; + optional UserStatusMuteAction userStatusMuteAction = 29; + optional TimeFormatAction timeFormatAction = 30; + optional NuxAction nuxAction = 31; + optional PrimaryVersionAction primaryVersionAction = 32; + optional StickerAction stickerAction = 33; + optional RemoveRecentStickerAction removeRecentStickerAction = 34; + optional ChatAssignmentAction chatAssignment = 35; + optional ChatAssignmentOpenedStatusAction chatAssignmentOpenedStatus = 36; + optional PnForLidChatAction pnForLidChatAction = 37; + optional MarketingMessageAction marketingMessageAction = 38; + optional MarketingMessageBroadcastAction marketingMessageBroadcastAction = 39; + optional ExternalWebBetaAction externalWebBetaAction = 40; + optional PrivacySettingRelayAllCalls privacySettingRelayAllCalls = 41; + optional CallLogAction callLogAction = 42; + optional UGCBot ugcBot = 43; + optional StatusPrivacyAction statusPrivacy = 44; + optional BotWelcomeRequestAction botWelcomeRequestAction = 45; + optional DeleteIndividualCallLogAction deleteIndividualCallLog = 46; + optional LabelReorderingAction labelReorderingAction = 47; + optional PaymentInfoAction paymentInfoAction = 48; + optional CustomPaymentMethodsAction customPaymentMethodsAction = 49; + optional LockChatAction lockChatAction = 50; + optional ChatLockSettings chatLockSettings = 51; + optional WamoUserIdentifierAction wamoUserIdentifierAction = 52; + optional PrivacySettingDisableLinkPreviewsAction privacySettingDisableLinkPreviewsAction = 53; + optional DeviceCapabilities deviceCapabilities = 54; + optional NoteEditAction noteEditAction = 55; + optional FavoritesAction favoritesAction = 56; + optional MerchantPaymentPartnerAction merchantPaymentPartnerAction = 57; + optional WaffleAccountLinkStateAction waffleAccountLinkStateAction = 58; + optional UsernameChatStartModeAction usernameChatStartMode = 59; + optional NotificationActivitySettingAction notificationActivitySettingAction = 60; + optional LidContactAction lidContactAction = 61; + optional CtwaPerCustomerDataSharingAction ctwaPerCustomerDataSharingAction = 62; + optional PaymentTosAction paymentTosAction = 63; + optional PrivacySettingChannelsPersonalisedRecommendationAction privacySettingChannelsPersonalisedRecommendationAction = 64; + optional BusinessBroadcastAssociationAction businessBroadcastAssociationAction = 65; + optional DetectedOutcomesStatusAction detectedOutcomesStatusAction = 66; + optional MaibaAIFeaturesControlAction maibaAiFeaturesControlAction = 68; + optional BusinessBroadcastListAction businessBroadcastListAction = 69; + optional MusicUserIdAction musicUserIdAction = 70; + optional StatusPostOptInNotificationPreferencesAction statusPostOptInNotificationPreferencesAction = 71; + optional AvatarUpdatedAction avatarUpdatedAction = 72; + optional PrivateProcessingSettingAction privateProcessingSettingAction = 74; + optional NewsletterSavedInterestsAction newsletterSavedInterestsAction = 75; + optional AiThreadRenameAction aiThreadRenameAction = 76; + optional InteractiveMessageAction interactiveMessageAction = 77; + message AgentAction { + optional string name = 1; + optional int32 deviceID = 2; + optional bool isDeleted = 3; + } + + message AiThreadRenameAction { + optional string newTitle = 1; + } + + message AndroidUnsupportedActions { + optional bool allowed = 1; + } + + message ArchiveChatAction { + optional bool archived = 1; + optional SyncActionValue.SyncActionMessageRange messageRange = 2; + } + + message AvatarUpdatedAction { + optional AvatarEventType eventType = 1; + repeated SyncActionValue.StickerAction recentAvatarStickers = 2; + enum AvatarEventType { + UPDATED = 0; + CREATED = 1; + DELETED = 2; + } + } + + message BotWelcomeRequestAction { + optional bool isSent = 1; + } + + message BroadcastListParticipant { + string lidJid = 1; + optional string pnJid = 2; + } + + message BusinessBroadcastAssociationAction { + optional bool deleted = 1; + } + + message BusinessBroadcastListAction { + optional bool deleted = 1; + repeated SyncActionValue.BroadcastListParticipant participants = 2; + optional string listName = 3; + } + + message CallLogAction { + optional CallLogRecord callLogRecord = 1; + } + + message ChatAssignmentAction { + optional string deviceAgentID = 1; + } + + message ChatAssignmentOpenedStatusAction { + optional bool chatOpened = 1; + } + + message ClearChatAction { + optional SyncActionValue.SyncActionMessageRange messageRange = 1; + } + + message ContactAction { + optional string fullName = 1; + optional string firstName = 2; + optional string lidJid = 3; + optional bool saveOnPrimaryAddressbook = 4; + optional string pnJid = 5; + optional string username = 6; + } + + message CtwaPerCustomerDataSharingAction { + optional bool isCtwaPerCustomerDataSharingEnabled = 1; + } + + message CustomPaymentMethod { + string credentialId = 1; + string country = 2; + string type = 3; + repeated SyncActionValue.CustomPaymentMethodMetadata metadata = 4; + } + + message CustomPaymentMethodMetadata { + string key = 1; + string value = 2; + } + + message CustomPaymentMethodsAction { + repeated SyncActionValue.CustomPaymentMethod customPaymentMethods = 1; + } + + message DeleteChatAction { + optional SyncActionValue.SyncActionMessageRange messageRange = 1; + } + + message DeleteIndividualCallLogAction { + optional string peerJid = 1; + optional bool isIncoming = 2; + } + + message DeleteMessageForMeAction { + optional bool deleteMedia = 1; + optional int64 messageTimestamp = 2; + } + + message DetectedOutcomesStatusAction { + optional bool isEnabled = 1; + } + + message ExternalWebBetaAction { + optional bool isOptIn = 1; + } + + message FavoritesAction { + repeated Favorite favorites = 1; + message Favorite { + optional string id = 1; + } + + } + + message InteractiveMessageAction { + InteractiveMessageActionMode type = 1; + enum InteractiveMessageActionMode { + DISABLE_CTA = 1; + } + } + + message KeyExpiration { + optional int32 expiredKeyEpoch = 1; + } + + message LabelAssociationAction { + optional bool labeled = 1; + } + + message LabelEditAction { + optional string name = 1; + optional int32 color = 2; + optional int32 predefinedId = 3; + optional bool deleted = 4; + optional int32 orderIndex = 5; + optional bool isActive = 6; + optional ListType type = 7; + optional bool isImmutable = 8; + optional int64 muteEndTimeMs = 9; + enum ListType { + NONE = 0; + UNREAD = 1; + GROUPS = 2; + FAVORITES = 3; + PREDEFINED = 4; + CUSTOM = 5; + COMMUNITY = 6; + SERVER_ASSIGNED = 7; + DRAFTED = 8; + AI_HANDOFF = 9; + } + } + + message LabelReorderingAction { + repeated int32 sortedLabelIds = 1; + } + + message LidContactAction { + optional string fullName = 1; + optional string firstName = 2; + optional string username = 3; + } + + message LocaleSetting { + optional string locale = 1; + } + + message LockChatAction { + optional bool locked = 1; + } + + message MaibaAIFeaturesControlAction { + optional MaibaAIFeatureStatus aiFeatureStatus = 1; + enum MaibaAIFeatureStatus { + ENABLED = 0; + ENABLED_HAS_LEARNING = 1; + DISABLED = 2; + } + } + + message MarkChatAsReadAction { + optional bool read = 1; + optional SyncActionValue.SyncActionMessageRange messageRange = 2; + } + + message MarketingMessageAction { + optional string name = 1; + optional string message = 2; + optional MarketingMessagePrototypeType type = 3; + optional int64 createdAt = 4; + optional int64 lastSentAt = 5; + optional bool isDeleted = 6; + optional string mediaId = 7; + enum MarketingMessagePrototypeType { + PERSONALIZED = 0; + } + } + + message MarketingMessageBroadcastAction { + optional int32 repliedCount = 1; + } + + message MerchantPaymentPartnerAction { + Status status = 1; + string country = 2; + optional string gatewayName = 3; + optional string credentialId = 4; + enum Status { + ACTIVE = 0; + INACTIVE = 1; + } + } + + message MusicUserIdAction { + optional string musicUserId = 1; + map music_user_id_map = 2; + } + + message MuteAction { + optional bool muted = 1; + optional int64 muteEndTimestamp = 2; + optional bool autoMuted = 3; + } + + message NewsletterSavedInterestsAction { + optional string newsletterSavedInterests = 1; + } + + message NoteEditAction { + optional NoteType type = 1; + optional string chatJid = 2; + optional int64 createdAt = 3; + optional bool deleted = 4; + optional string unstructuredContent = 5; + enum NoteType { + UNSTRUCTURED = 1; + STRUCTURED = 2; + } + } + + message NotificationActivitySettingAction { + optional NotificationActivitySetting notificationActivitySetting = 1; + enum NotificationActivitySetting { + DEFAULT_ALL_MESSAGES = 0; + ALL_MESSAGES = 1; + HIGHLIGHTS = 2; + DEFAULT_HIGHLIGHTS = 3; + } + } + + message NuxAction { + optional bool acknowledged = 1; + } + + message PaymentInfoAction { + optional string cpi = 1; + } + + message PaymentTosAction { + PaymentNotice paymentNotice = 1; + bool accepted = 2; + enum PaymentNotice { + BR_PAY_PRIVACY_POLICY = 0; + } + } + + message PinAction { + optional bool pinned = 1; + } + + message PnForLidChatAction { + optional string pnJid = 1; + } + + message PrimaryFeature { + repeated string flags = 1; + } + + message PrimaryVersionAction { + optional string version = 1; + } + + message PrivacySettingChannelsPersonalisedRecommendationAction { + optional bool isUserOptedOut = 1; + } + + message PrivacySettingDisableLinkPreviewsAction { + optional bool isPreviewsDisabled = 1; + } + + message PrivacySettingRelayAllCalls { + optional bool isEnabled = 1; + } + + message PrivateProcessingSettingAction { + optional PrivateProcessingStatus privateProcessingStatus = 1; + enum PrivateProcessingStatus { + UNDEFINED = 0; + ENABLED = 1; + DISABLED = 2; + } + } + + message PushNameSetting { + optional string name = 1; + } + + message QuickReplyAction { + optional string shortcut = 1; + optional string message = 2; + repeated string keywords = 3; + optional int32 count = 4; + optional bool deleted = 5; + } + + message RecentEmojiWeightsAction { + repeated RecentEmojiWeight weights = 1; + } + + message RemoveRecentStickerAction { + optional int64 lastStickerSentTs = 1; + } + + message StarAction { + optional bool starred = 1; + } + + message StatusPostOptInNotificationPreferencesAction { + optional bool enabled = 1; + } + + message StatusPrivacyAction { + optional StatusDistributionMode mode = 1; + repeated string userJid = 2; + enum StatusDistributionMode { + ALLOW_LIST = 0; + DENY_LIST = 1; + CONTACTS = 2; + CLOSE_FRIENDS = 3; + } + } + + message StickerAction { + optional string url = 1; + optional bytes fileEncSha256 = 2; + optional bytes mediaKey = 3; + optional string mimetype = 4; + optional uint32 height = 5; + optional uint32 width = 6; + optional string directPath = 7; + optional uint64 fileLength = 8; + optional bool isFavorite = 9; + optional uint32 deviceIdHint = 10; + optional bool isLottie = 11; + optional string imageHash = 12; + optional bool isAvatarSticker = 13; + } + + message SubscriptionAction { + optional bool isDeactivated = 1; + optional bool isAutoRenewing = 2; + optional int64 expirationDate = 3; + } + + message SyncActionMessage { + optional MessageKey key = 1; + optional int64 timestamp = 2; + } + + message SyncActionMessageRange { + optional int64 lastMessageTimestamp = 1; + optional int64 lastSystemMessageTimestamp = 2; + repeated SyncActionValue.SyncActionMessage messages = 3; + } + + message TimeFormatAction { + optional bool isTwentyFourHourFormatEnabled = 1; + } + + message UGCBot { + optional bytes definition = 1; + } + + message UnarchiveChatsSetting { + optional bool unarchiveChats = 1; + } + + message UserStatusMuteAction { + optional bool muted = 1; + } + + message UsernameChatStartModeAction { + optional ChatStartMode chatStartMode = 1; + enum ChatStartMode { + LID = 1; + PN = 2; + } + } + + message WaffleAccountLinkStateAction { + optional AccountLinkState linkState = 2; + enum AccountLinkState { + ACTIVE = 0; + PAUSED = 1; + UNLINKED = 2; + } + } + + message WamoUserIdentifierAction { + optional string identifier = 1; + } + +} + +message SyncdIndex { + optional bytes blob = 1; +} + +message SyncdMutation { + optional SyncdOperation operation = 1; + optional SyncdRecord record = 2; + enum SyncdOperation { + SET = 0; + REMOVE = 1; + } +} + +message SyncdMutations { + repeated SyncdMutation mutations = 1; +} + +message SyncdPatch { + optional SyncdVersion version = 1; + repeated SyncdMutation mutations = 2; + optional ExternalBlobReference externalMutations = 3; + optional bytes snapshotMac = 4; + optional bytes patchMac = 5; + optional KeyId keyId = 6; + optional ExitCode exitCode = 7; + optional uint32 deviceIndex = 8; + optional bytes clientDebugData = 9; +} + +message SyncdRecord { + optional SyncdIndex index = 1; + optional SyncdValue value = 2; + optional KeyId keyId = 3; +} + +message SyncdSnapshot { + optional SyncdVersion version = 1; + repeated SyncdRecord records = 2; + optional bytes mac = 3; + optional KeyId keyId = 4; +} + +message SyncdValue { + optional bytes blob = 1; +} + +message SyncdVersion { + optional uint64 version = 1; +} + +message TapLinkAction { + optional string title = 1; + optional string tapUrl = 2; +} + +message TemplateButton { + optional uint32 index = 4; + oneof button { + TemplateButton.QuickReplyButton quickReplyButton = 1; + TemplateButton.URLButton urlButton = 2; + TemplateButton.CallButton callButton = 3; + } + message CallButton { + optional Message.HighlyStructuredMessage displayText = 1; + optional Message.HighlyStructuredMessage phoneNumber = 2; + } + + message QuickReplyButton { + optional Message.HighlyStructuredMessage displayText = 1; + optional string id = 2; + } + + message URLButton { + optional Message.HighlyStructuredMessage displayText = 1; + optional Message.HighlyStructuredMessage url = 2; + } + +} + +message ThreadID { + optional ThreadType threadType = 1; + optional MessageKey threadKey = 2; + enum ThreadType { + UNKNOWN = 0; + VIEW_REPLIES = 1; + AI_THREAD = 2; + } +} + +message UrlTrackingMap { + repeated UrlTrackingMapElement urlTrackingMapElements = 1; + message UrlTrackingMapElement { + optional string originalUrl = 1; + optional string unconsentedUsersUrl = 2; + optional string consentedUsersUrl = 3; + optional uint32 cardIndex = 4; + } + +} + +message UserPassword { + optional Encoding encoding = 1; + optional Transformer transformer = 2; + repeated TransformerArg transformerArg = 3; + optional bytes transformedData = 4; + enum Encoding { + UTF8 = 0; + UTF8_BROKEN = 1; + } + enum Transformer { + NONE = 0; + PBKDF2_HMAC_SHA512 = 1; + PBKDF2_HMAC_SHA384 = 2; + } + message TransformerArg { + optional string key = 1; + optional Value value = 2; + message Value { + oneof value { + bytes asBlob = 1; + uint32 asUnsignedInteger = 2; + } + } + + } + +} + +message UserReceipt { + string userJid = 1; + optional int64 receiptTimestamp = 2; + optional int64 readTimestamp = 3; + optional int64 playedTimestamp = 4; + repeated string pendingDeviceJid = 5; + repeated string deliveredDeviceJid = 6; +} + +message VerifiedNameCertificate { + optional bytes details = 1; + optional bytes signature = 2; + optional bytes serverSignature = 3; + message Details { + optional uint64 serial = 1; + optional string issuer = 2; + optional string verifiedName = 4; + repeated LocalizedName localizedNames = 8; + optional uint64 issueTime = 10; + } + +} + +message WallpaperSettings { + optional string filename = 1; + optional uint32 opacity = 2; +} + +message WebFeatures { + optional Flag labelsDisplay = 1; + optional Flag voipIndividualOutgoing = 2; + optional Flag groupsV3 = 3; + optional Flag groupsV3Create = 4; + optional Flag changeNumberV2 = 5; + optional Flag queryStatusV3Thumbnail = 6; + optional Flag liveLocations = 7; + optional Flag queryVname = 8; + optional Flag voipIndividualIncoming = 9; + optional Flag quickRepliesQuery = 10; + optional Flag payments = 11; + optional Flag stickerPackQuery = 12; + optional Flag liveLocationsFinal = 13; + optional Flag labelsEdit = 14; + optional Flag mediaUpload = 15; + optional Flag mediaUploadRichQuickReplies = 18; + optional Flag vnameV2 = 19; + optional Flag videoPlaybackUrl = 20; + optional Flag statusRanking = 21; + optional Flag voipIndividualVideo = 22; + optional Flag thirdPartyStickers = 23; + optional Flag frequentlyForwardedSetting = 24; + optional Flag groupsV4JoinPermission = 25; + optional Flag recentStickers = 26; + optional Flag catalog = 27; + optional Flag starredStickers = 28; + optional Flag voipGroupCall = 29; + optional Flag templateMessage = 30; + optional Flag templateMessageInteractivity = 31; + optional Flag ephemeralMessages = 32; + optional Flag e2ENotificationSync = 33; + optional Flag recentStickersV2 = 34; + optional Flag recentStickersV3 = 36; + optional Flag userNotice = 37; + optional Flag support = 39; + optional Flag groupUiiCleanup = 40; + optional Flag groupDogfoodingInternalOnly = 41; + optional Flag settingsSync = 42; + optional Flag archiveV2 = 43; + optional Flag ephemeralAllowGroupMembers = 44; + optional Flag ephemeral24HDuration = 45; + optional Flag mdForceUpgrade = 46; + optional Flag disappearingMode = 47; + optional Flag externalMdOptInAvailable = 48; + optional Flag noDeleteMessageTimeLimit = 49; + enum Flag { + NOT_STARTED = 0; + FORCE_UPGRADE = 1; + DEVELOPMENT = 2; + PRODUCTION = 3; + } +} + +enum WebLinkRenderConfig { + WEBVIEW = 0; + SYSTEM = 1; +} +message WebMessageInfo { + MessageKey key = 1; + optional Message message = 2; + optional uint64 messageTimestamp = 3; + optional Status status = 4; + optional string participant = 5; + optional uint64 messageC2STimestamp = 6; + optional bool ignore = 16; + optional bool starred = 17; + optional bool broadcast = 18; + optional string pushName = 19; + optional bytes mediaCiphertextSha256 = 20; + optional bool multicast = 21; + optional bool urlText = 22; + optional bool urlNumber = 23; + optional StubType messageStubType = 24; + optional bool clearMedia = 25; + repeated string messageStubParameters = 26; + optional uint32 duration = 27; + repeated string labels = 28; + optional PaymentInfo paymentInfo = 29; + optional Message.LiveLocationMessage finalLiveLocation = 30; + optional PaymentInfo quotedPaymentInfo = 31; + optional uint64 ephemeralStartTimestamp = 32; + optional uint32 ephemeralDuration = 33; + optional bool ephemeralOffToOn = 34; + optional bool ephemeralOutOfSync = 35; + optional BizPrivacyStatus bizPrivacyStatus = 36; + optional string verifiedBizName = 37; + optional MediaData mediaData = 38; + optional PhotoChange photoChange = 39; + repeated UserReceipt userReceipt = 40; + repeated Reaction reactions = 41; + optional MediaData quotedStickerData = 42; + optional bytes futureproofData = 43; + optional StatusPSA statusPsa = 44; + repeated PollUpdate pollUpdates = 45; + optional PollAdditionalMetadata pollAdditionalMetadata = 46; + optional string agentId = 47; + optional bool statusAlreadyViewed = 48; + optional bytes messageSecret = 49; + optional KeepInChat keepInChat = 50; + optional string originalSelfAuthorUserJidString = 51; + optional uint64 revokeMessageTimestamp = 52; + optional PinInChat pinInChat = 54; + optional PremiumMessageInfo premiumMessageInfo = 55; + optional bool is1PBizBotMessage = 56; + optional bool isGroupHistoryMessage = 57; + optional string botMessageInvokerJid = 58; + optional CommentMetadata commentMetadata = 59; + repeated EventResponse eventResponses = 61; + optional ReportingTokenInfo reportingTokenInfo = 62; + optional uint64 newsletterServerId = 63; + optional EventAdditionalMetadata eventAdditionalMetadata = 64; + optional bool isMentionedInStatus = 65; + repeated string statusMentions = 66; + optional MessageKey targetMessageId = 67; + repeated MessageAddOn messageAddOns = 68; + optional StatusMentionMessage statusMentionMessageInfo = 69; + optional bool isSupportAiMessage = 70; + repeated string statusMentionSources = 71; + repeated Citation supportAiCitations = 72; + optional string botTargetId = 73; + optional GroupHistoryIndividualMessageInfo groupHistoryIndividualMessageInfo = 74; + optional GroupHistoryBundleInfo groupHistoryBundleInfo = 75; + optional InteractiveMessageAdditionalMetadata interactiveMessageAdditionalMetadata = 76; + optional QuarantinedMessage quarantinedMessage = 77; + enum BizPrivacyStatus { + E2EE = 0; + FB = 2; + BSP = 1; + BSP_AND_FB = 3; + } + enum Status { + ERROR = 0; + PENDING = 1; + SERVER_ACK = 2; + DELIVERY_ACK = 3; + READ = 4; + PLAYED = 5; + } + enum StubType { + UNKNOWN = 0; + REVOKE = 1; + CIPHERTEXT = 2; + FUTUREPROOF = 3; + NON_VERIFIED_TRANSITION = 4; + UNVERIFIED_TRANSITION = 5; + VERIFIED_TRANSITION = 6; + VERIFIED_LOW_UNKNOWN = 7; + VERIFIED_HIGH = 8; + VERIFIED_INITIAL_UNKNOWN = 9; + VERIFIED_INITIAL_LOW = 10; + VERIFIED_INITIAL_HIGH = 11; + VERIFIED_TRANSITION_ANY_TO_NONE = 12; + VERIFIED_TRANSITION_ANY_TO_HIGH = 13; + VERIFIED_TRANSITION_HIGH_TO_LOW = 14; + VERIFIED_TRANSITION_HIGH_TO_UNKNOWN = 15; + VERIFIED_TRANSITION_UNKNOWN_TO_LOW = 16; + VERIFIED_TRANSITION_LOW_TO_UNKNOWN = 17; + VERIFIED_TRANSITION_NONE_TO_LOW = 18; + VERIFIED_TRANSITION_NONE_TO_UNKNOWN = 19; + GROUP_CREATE = 20; + GROUP_CHANGE_SUBJECT = 21; + GROUP_CHANGE_ICON = 22; + GROUP_CHANGE_INVITE_LINK = 23; + GROUP_CHANGE_DESCRIPTION = 24; + GROUP_CHANGE_RESTRICT = 25; + GROUP_CHANGE_ANNOUNCE = 26; + GROUP_PARTICIPANT_ADD = 27; + GROUP_PARTICIPANT_REMOVE = 28; + GROUP_PARTICIPANT_PROMOTE = 29; + GROUP_PARTICIPANT_DEMOTE = 30; + GROUP_PARTICIPANT_INVITE = 31; + GROUP_PARTICIPANT_LEAVE = 32; + GROUP_PARTICIPANT_CHANGE_NUMBER = 33; + BROADCAST_CREATE = 34; + BROADCAST_ADD = 35; + BROADCAST_REMOVE = 36; + GENERIC_NOTIFICATION = 37; + E2E_IDENTITY_CHANGED = 38; + E2E_ENCRYPTED = 39; + CALL_MISSED_VOICE = 40; + CALL_MISSED_VIDEO = 41; + INDIVIDUAL_CHANGE_NUMBER = 42; + GROUP_DELETE = 43; + GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE = 44; + CALL_MISSED_GROUP_VOICE = 45; + CALL_MISSED_GROUP_VIDEO = 46; + PAYMENT_CIPHERTEXT = 47; + PAYMENT_FUTUREPROOF = 48; + PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED = 49; + PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED = 50; + PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED = 51; + PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP = 52; + PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP = 53; + PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER = 54; + PAYMENT_ACTION_SEND_PAYMENT_REMINDER = 55; + PAYMENT_ACTION_SEND_PAYMENT_INVITATION = 56; + PAYMENT_ACTION_REQUEST_DECLINED = 57; + PAYMENT_ACTION_REQUEST_EXPIRED = 58; + PAYMENT_ACTION_REQUEST_CANCELLED = 59; + BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM = 60; + BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP = 61; + BIZ_INTRO_TOP = 62; + BIZ_INTRO_BOTTOM = 63; + BIZ_NAME_CHANGE = 64; + BIZ_MOVE_TO_CONSUMER_APP = 65; + BIZ_TWO_TIER_MIGRATION_TOP = 66; + BIZ_TWO_TIER_MIGRATION_BOTTOM = 67; + OVERSIZED = 68; + GROUP_CHANGE_NO_FREQUENTLY_FORWARDED = 69; + GROUP_V4_ADD_INVITE_SENT = 70; + GROUP_PARTICIPANT_ADD_REQUEST_JOIN = 71; + CHANGE_EPHEMERAL_SETTING = 72; + E2E_DEVICE_CHANGED = 73; + VIEWED_ONCE = 74; + E2E_ENCRYPTED_NOW = 75; + BLUE_MSG_BSP_FB_TO_BSP_PREMISE = 76; + BLUE_MSG_BSP_FB_TO_SELF_FB = 77; + BLUE_MSG_BSP_FB_TO_SELF_PREMISE = 78; + BLUE_MSG_BSP_FB_UNVERIFIED = 79; + BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 80; + BLUE_MSG_BSP_FB_VERIFIED = 81; + BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 82; + BLUE_MSG_BSP_PREMISE_TO_SELF_PREMISE = 83; + BLUE_MSG_BSP_PREMISE_UNVERIFIED = 84; + BLUE_MSG_BSP_PREMISE_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 85; + BLUE_MSG_BSP_PREMISE_VERIFIED = 86; + BLUE_MSG_BSP_PREMISE_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 87; + BLUE_MSG_CONSUMER_TO_BSP_FB_UNVERIFIED = 88; + BLUE_MSG_CONSUMER_TO_BSP_PREMISE_UNVERIFIED = 89; + BLUE_MSG_CONSUMER_TO_SELF_FB_UNVERIFIED = 90; + BLUE_MSG_CONSUMER_TO_SELF_PREMISE_UNVERIFIED = 91; + BLUE_MSG_SELF_FB_TO_BSP_PREMISE = 92; + BLUE_MSG_SELF_FB_TO_SELF_PREMISE = 93; + BLUE_MSG_SELF_FB_UNVERIFIED = 94; + BLUE_MSG_SELF_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 95; + BLUE_MSG_SELF_FB_VERIFIED = 96; + BLUE_MSG_SELF_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 97; + BLUE_MSG_SELF_PREMISE_TO_BSP_PREMISE = 98; + BLUE_MSG_SELF_PREMISE_UNVERIFIED = 99; + BLUE_MSG_SELF_PREMISE_VERIFIED = 100; + BLUE_MSG_TO_BSP_FB = 101; + BLUE_MSG_TO_CONSUMER = 102; + BLUE_MSG_TO_SELF_FB = 103; + BLUE_MSG_UNVERIFIED_TO_BSP_FB_VERIFIED = 104; + BLUE_MSG_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 105; + BLUE_MSG_UNVERIFIED_TO_SELF_FB_VERIFIED = 106; + BLUE_MSG_UNVERIFIED_TO_VERIFIED = 107; + BLUE_MSG_VERIFIED_TO_BSP_FB_UNVERIFIED = 108; + BLUE_MSG_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 109; + BLUE_MSG_VERIFIED_TO_SELF_FB_UNVERIFIED = 110; + BLUE_MSG_VERIFIED_TO_UNVERIFIED = 111; + BLUE_MSG_BSP_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 112; + BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_FB_VERIFIED = 113; + BLUE_MSG_BSP_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 114; + BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_FB_UNVERIFIED = 115; + BLUE_MSG_SELF_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 116; + BLUE_MSG_SELF_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 117; + E2E_IDENTITY_UNAVAILABLE = 118; + GROUP_CREATING = 119; + GROUP_CREATE_FAILED = 120; + GROUP_BOUNCED = 121; + BLOCK_CONTACT = 122; + EPHEMERAL_SETTING_NOT_APPLIED = 123; + SYNC_FAILED = 124; + SYNCING = 125; + BIZ_PRIVACY_MODE_INIT_FB = 126; + BIZ_PRIVACY_MODE_INIT_BSP = 127; + BIZ_PRIVACY_MODE_TO_FB = 128; + BIZ_PRIVACY_MODE_TO_BSP = 129; + DISAPPEARING_MODE = 130; + E2E_DEVICE_FETCH_FAILED = 131; + ADMIN_REVOKE = 132; + GROUP_INVITE_LINK_GROWTH_LOCKED = 133; + COMMUNITY_LINK_PARENT_GROUP = 134; + COMMUNITY_LINK_SIBLING_GROUP = 135; + COMMUNITY_LINK_SUB_GROUP = 136; + COMMUNITY_UNLINK_PARENT_GROUP = 137; + COMMUNITY_UNLINK_SIBLING_GROUP = 138; + COMMUNITY_UNLINK_SUB_GROUP = 139; + GROUP_PARTICIPANT_ACCEPT = 140; + GROUP_PARTICIPANT_LINKED_GROUP_JOIN = 141; + COMMUNITY_CREATE = 142; + EPHEMERAL_KEEP_IN_CHAT = 143; + GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST = 144; + GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE = 145; + INTEGRITY_UNLINK_PARENT_GROUP = 146; + COMMUNITY_PARTICIPANT_PROMOTE = 147; + COMMUNITY_PARTICIPANT_DEMOTE = 148; + COMMUNITY_PARENT_GROUP_DELETED = 149; + COMMUNITY_LINK_PARENT_GROUP_MEMBERSHIP_APPROVAL = 150; + GROUP_PARTICIPANT_JOINED_GROUP_AND_PARENT_GROUP = 151; + MASKED_THREAD_CREATED = 152; + MASKED_THREAD_UNMASKED = 153; + BIZ_CHAT_ASSIGNMENT = 154; + CHAT_PSA = 155; + CHAT_POLL_CREATION_MESSAGE = 156; + CAG_MASKED_THREAD_CREATED = 157; + COMMUNITY_PARENT_GROUP_SUBJECT_CHANGED = 158; + CAG_INVITE_AUTO_ADD = 159; + BIZ_CHAT_ASSIGNMENT_UNASSIGN = 160; + CAG_INVITE_AUTO_JOINED = 161; + SCHEDULED_CALL_START_MESSAGE = 162; + COMMUNITY_INVITE_RICH = 163; + COMMUNITY_INVITE_AUTO_ADD_RICH = 164; + SUB_GROUP_INVITE_RICH = 165; + SUB_GROUP_PARTICIPANT_ADD_RICH = 166; + COMMUNITY_LINK_PARENT_GROUP_RICH = 167; + COMMUNITY_PARTICIPANT_ADD_RICH = 168; + SILENCED_UNKNOWN_CALLER_AUDIO = 169; + SILENCED_UNKNOWN_CALLER_VIDEO = 170; + GROUP_MEMBER_ADD_MODE = 171; + GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD = 172; + COMMUNITY_CHANGE_DESCRIPTION = 173; + SENDER_INVITE = 174; + RECEIVER_INVITE = 175; + COMMUNITY_ALLOW_MEMBER_ADDED_GROUPS = 176; + PINNED_MESSAGE_IN_CHAT = 177; + PAYMENT_INVITE_SETUP_INVITER = 178; + PAYMENT_INVITE_SETUP_INVITEE_RECEIVE_ONLY = 179; + PAYMENT_INVITE_SETUP_INVITEE_SEND_AND_RECEIVE = 180; + LINKED_GROUP_CALL_START = 181; + REPORT_TO_ADMIN_ENABLED_STATUS = 182; + EMPTY_SUBGROUP_CREATE = 183; + SCHEDULED_CALL_CANCEL = 184; + SUBGROUP_ADMIN_TRIGGERED_AUTO_ADD_RICH = 185; + GROUP_CHANGE_RECENT_HISTORY_SHARING = 186; + PAID_MESSAGE_SERVER_CAMPAIGN_ID = 187; + GENERAL_CHAT_CREATE = 188; + GENERAL_CHAT_ADD = 189; + GENERAL_CHAT_AUTO_ADD_DISABLED = 190; + SUGGESTED_SUBGROUP_ANNOUNCE = 191; + BIZ_BOT_1P_MESSAGING_ENABLED = 192; + CHANGE_USERNAME = 193; + BIZ_COEX_PRIVACY_INIT_SELF = 194; + BIZ_COEX_PRIVACY_TRANSITION_SELF = 195; + SUPPORT_AI_EDUCATION = 196; + BIZ_BOT_3P_MESSAGING_ENABLED = 197; + REMINDER_SETUP_MESSAGE = 198; + REMINDER_SENT_MESSAGE = 199; + REMINDER_CANCEL_MESSAGE = 200; + BIZ_COEX_PRIVACY_INIT = 201; + BIZ_COEX_PRIVACY_TRANSITION = 202; + GROUP_DEACTIVATED = 203; + COMMUNITY_DEACTIVATE_SIBLING_GROUP = 204; + EVENT_UPDATED = 205; + EVENT_CANCELED = 206; + COMMUNITY_OWNER_UPDATED = 207; + COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN = 208; + CAPI_GROUP_NE2EE_SYSTEM_MESSAGE = 209; + STATUS_MENTION = 210; + USER_CONTROLS_SYSTEM_MESSAGE = 211; + SUPPORT_SYSTEM_MESSAGE = 212; + CHANGE_LID = 213; + BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE = 214; + BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE = 215; + CHANGE_LIMIT_SHARING = 216; + GROUP_MEMBER_LINK_MODE = 217; + BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE = 218; + PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE = 219; + QUARANTINED_MESSAGE = 220; + GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE = 221; + } +} + +message WebNotificationsInfo { + optional uint64 timestamp = 2; + optional uint32 unreadChats = 3; + optional uint32 notifyMessageCount = 4; + repeated WebMessageInfo notifyMessages = 5; +} diff --git a/packages/transport/vendor/WAProto/fix-imports.js b/packages/transport/vendor/WAProto/fix-imports.js new file mode 100644 index 0000000..49723b3 --- /dev/null +++ b/packages/transport/vendor/WAProto/fix-imports.js @@ -0,0 +1,85 @@ +import { readFileSync, writeFileSync } from 'fs'; +import { exit } from 'process'; + +const filePath = './index.js' + +try { + let content = readFileSync(filePath, 'utf8') + + content = content.replace(/import \* as (\$protobuf) from/g, 'import $1 from') + content = content.replace(/(['"])protobufjs\/minimal(['"])/g, '$1protobufjs/minimal.js$2') + + const marker = 'const $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});\n\n' + const longToStringHelper = + 'function longToString(value, unsigned) {\n' + + '\tif (typeof value === "string") {\n' + + '\t\treturn value;\n' + + '\t}\n' + + '\tif (typeof value === "number") {\n' + + '\t\treturn String(value);\n' + + '\t}\n' + + '\t// Fast path: convert Long {low, high} directly via native BigInt\n' + + '\t// BigInt.toString() is a native C++ operation, much faster than Long\'s pure JS division loops\n' + + '\tif (value && typeof value.low === "number" && typeof value.high === "number") {\n' + + '\t\tconst lo = BigInt(value.low >>> 0);\n' + + '\t\tconst hi = BigInt(value.high >>> 0);\n' + + '\t\tconst combined = (hi << 32n) | lo;\n' + + '\t\tif (!unsigned && value.high < 0) {\n' + + '\t\t\treturn (combined - (1n << 64n)).toString();\n' + + '\t\t}\n' + + '\t\treturn combined.toString();\n' + + '\t}\n' + + '\treturn String(value);\n' + + '}\n\n' + const longToNumberHelper = + 'function longToNumber(value, unsigned) {\n' + + '\tif (typeof value === "number") {\n' + + '\t\treturn value;\n' + + '\t}\n' + + '\tif (typeof value === "string") {\n' + + '\t\treturn Number(value);\n' + + '\t}\n' + + '\t// Fast path: convert Long {low, high} directly via native BigInt\n' + + '\tif (value && typeof value.low === "number" && typeof value.high === "number") {\n' + + '\t\tconst lo = BigInt(value.low >>> 0);\n' + + '\t\tconst hi = BigInt(value.high >>> 0);\n' + + '\t\tconst combined = (hi << 32n) | lo;\n' + + '\t\tif (!unsigned && value.high < 0) {\n' + + '\t\t\treturn Number(combined - (1n << 64n));\n' + + '\t\t}\n' + + '\t\treturn Number(combined);\n' + + '\t}\n' + + '\treturn Number(value);\n' + + '}\n\n' + + if (!content.includes('function longToString(')) { + const markerIndex = content.indexOf(marker) + if (markerIndex === -1) { + throw new Error('Unable to inject Long helpers: marker not found in WAProto index output') + } + + content = content.replace(marker, `${marker}${longToStringHelper}${longToNumberHelper}`) + } else { + const longToStringRegex = /function longToString\(value, unsigned\) {\n[\s\S]*?\n}\n\n/ + const longToNumberRegex = /function longToNumber\(value, unsigned\) {\n[\s\S]*?\n}\n\n/ + + if (!longToStringRegex.test(content) || !longToNumberRegex.test(content)) { + throw new Error('Unable to update Long helpers: existing definitions not found') + } + + content = content.replace(longToStringRegex, longToStringHelper) + content = content.replace(longToNumberRegex, longToNumberHelper) + } + + const longPattern = /([ \t]+d\.(\w+) = )o\.longs === String \? \$util\.Long\.prototype\.toString\.call\(m\.\2\) : o\.longs === Number \? new \$util\.LongBits\(m\.\2\.low >>> 0, m\.\2\.high >>> 0\)\.toNumber\((true)?\) : m\.\2;/g + content = content.replace(longPattern, (_match, prefix, field, unsignedFlag) => { + const unsignedArg = unsignedFlag ? ', true' : '' + return `${prefix}o.longs === String ? longToString(m.${field}${unsignedArg}) : o.longs === Number ? longToNumber(m.${field}${unsignedArg}) : m.${field};` + }) + + writeFileSync(filePath, content, 'utf8') + console.log(`✅ Fixed imports in ${filePath}`) +} catch (error) { + console.error(`❌ Error fixing imports: ${error.message}`) + exit(1) +} diff --git a/packages/transport/vendor/WAProto/index.d.ts b/packages/transport/vendor/WAProto/index.d.ts new file mode 100644 index 0000000..8640580 --- /dev/null +++ b/packages/transport/vendor/WAProto/index.d.ts @@ -0,0 +1,14017 @@ +import * as $protobuf from "protobufjs"; +import Long = require("long"); +export namespace proto { + + interface IADVDeviceIdentity { + rawId?: (number|null); + timestamp?: (number|Long|null); + keyIndex?: (number|null); + accountType?: (proto.ADVEncryptionType|null); + deviceType?: (proto.ADVEncryptionType|null); + } + + class ADVDeviceIdentity implements IADVDeviceIdentity { + constructor(p?: proto.IADVDeviceIdentity); + public rawId?: (number|null); + public timestamp?: (number|Long|null); + public keyIndex?: (number|null); + public accountType?: (proto.ADVEncryptionType|null); + public deviceType?: (proto.ADVEncryptionType|null); + public static create(properties?: proto.IADVDeviceIdentity): proto.ADVDeviceIdentity; + public static encode(m: proto.IADVDeviceIdentity, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ADVDeviceIdentity; + public static fromObject(d: { [k: string]: any }): proto.ADVDeviceIdentity; + public static toObject(m: proto.ADVDeviceIdentity, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum ADVEncryptionType { + E2EE = 0, + HOSTED = 1 + } + + interface IADVKeyIndexList { + rawId?: (number|null); + timestamp?: (number|Long|null); + currentIndex?: (number|null); + validIndexes?: (number[]|null); + accountType?: (proto.ADVEncryptionType|null); + } + + class ADVKeyIndexList implements IADVKeyIndexList { + constructor(p?: proto.IADVKeyIndexList); + public rawId?: (number|null); + public timestamp?: (number|Long|null); + public currentIndex?: (number|null); + public validIndexes: number[]; + public accountType?: (proto.ADVEncryptionType|null); + public static create(properties?: proto.IADVKeyIndexList): proto.ADVKeyIndexList; + public static encode(m: proto.IADVKeyIndexList, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ADVKeyIndexList; + public static fromObject(d: { [k: string]: any }): proto.ADVKeyIndexList; + public static toObject(m: proto.ADVKeyIndexList, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IADVSignedDeviceIdentity { + details?: (Uint8Array|null); + accountSignatureKey?: (Uint8Array|null); + accountSignature?: (Uint8Array|null); + deviceSignature?: (Uint8Array|null); + } + + class ADVSignedDeviceIdentity implements IADVSignedDeviceIdentity { + constructor(p?: proto.IADVSignedDeviceIdentity); + public details?: (Uint8Array|null); + public accountSignatureKey?: (Uint8Array|null); + public accountSignature?: (Uint8Array|null); + public deviceSignature?: (Uint8Array|null); + public static create(properties?: proto.IADVSignedDeviceIdentity): proto.ADVSignedDeviceIdentity; + public static encode(m: proto.IADVSignedDeviceIdentity, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ADVSignedDeviceIdentity; + public static fromObject(d: { [k: string]: any }): proto.ADVSignedDeviceIdentity; + public static toObject(m: proto.ADVSignedDeviceIdentity, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IADVSignedDeviceIdentityHMAC { + details?: (Uint8Array|null); + hmac?: (Uint8Array|null); + accountType?: (proto.ADVEncryptionType|null); + } + + class ADVSignedDeviceIdentityHMAC implements IADVSignedDeviceIdentityHMAC { + constructor(p?: proto.IADVSignedDeviceIdentityHMAC); + public details?: (Uint8Array|null); + public hmac?: (Uint8Array|null); + public accountType?: (proto.ADVEncryptionType|null); + public static create(properties?: proto.IADVSignedDeviceIdentityHMAC): proto.ADVSignedDeviceIdentityHMAC; + public static encode(m: proto.IADVSignedDeviceIdentityHMAC, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ADVSignedDeviceIdentityHMAC; + public static fromObject(d: { [k: string]: any }): proto.ADVSignedDeviceIdentityHMAC; + public static toObject(m: proto.ADVSignedDeviceIdentityHMAC, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IADVSignedKeyIndexList { + details?: (Uint8Array|null); + accountSignature?: (Uint8Array|null); + accountSignatureKey?: (Uint8Array|null); + } + + class ADVSignedKeyIndexList implements IADVSignedKeyIndexList { + constructor(p?: proto.IADVSignedKeyIndexList); + public details?: (Uint8Array|null); + public accountSignature?: (Uint8Array|null); + public accountSignatureKey?: (Uint8Array|null); + public static create(properties?: proto.IADVSignedKeyIndexList): proto.ADVSignedKeyIndexList; + public static encode(m: proto.IADVSignedKeyIndexList, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ADVSignedKeyIndexList; + public static fromObject(d: { [k: string]: any }): proto.ADVSignedKeyIndexList; + public static toObject(m: proto.ADVSignedKeyIndexList, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAIHomeState { + lastFetchTime?: (number|Long|null); + capabilityOptions?: (proto.AIHomeState.IAIHomeOption[]|null); + conversationOptions?: (proto.AIHomeState.IAIHomeOption[]|null); + } + + class AIHomeState implements IAIHomeState { + constructor(p?: proto.IAIHomeState); + public lastFetchTime?: (number|Long|null); + public capabilityOptions: proto.AIHomeState.IAIHomeOption[]; + public conversationOptions: proto.AIHomeState.IAIHomeOption[]; + public static create(properties?: proto.IAIHomeState): proto.AIHomeState; + public static encode(m: proto.IAIHomeState, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIHomeState; + public static fromObject(d: { [k: string]: any }): proto.AIHomeState; + public static toObject(m: proto.AIHomeState, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIHomeState { + + interface IAIHomeOption { + type?: (proto.AIHomeState.AIHomeOption.AIHomeActionType|null); + title?: (string|null); + promptText?: (string|null); + sessionId?: (string|null); + imageWdsIdentifier?: (string|null); + imageTintColor?: (string|null); + imageBackgroundColor?: (string|null); + } + + class AIHomeOption implements IAIHomeOption { + constructor(p?: proto.AIHomeState.IAIHomeOption); + public type?: (proto.AIHomeState.AIHomeOption.AIHomeActionType|null); + public title?: (string|null); + public promptText?: (string|null); + public sessionId?: (string|null); + public imageWdsIdentifier?: (string|null); + public imageTintColor?: (string|null); + public imageBackgroundColor?: (string|null); + public static create(properties?: proto.AIHomeState.IAIHomeOption): proto.AIHomeState.AIHomeOption; + public static encode(m: proto.AIHomeState.IAIHomeOption, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIHomeState.AIHomeOption; + public static fromObject(d: { [k: string]: any }): proto.AIHomeState.AIHomeOption; + public static toObject(m: proto.AIHomeState.AIHomeOption, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIHomeOption { + + enum AIHomeActionType { + PROMPT = 0, + CREATE_IMAGE = 1, + ANIMATE_PHOTO = 2, + ANALYZE_FILE = 3 + } + } + } + + interface IAIQueryFanout { + messageKey?: (proto.IMessageKey|null); + message?: (proto.IMessage|null); + timestamp?: (number|Long|null); + } + + class AIQueryFanout implements IAIQueryFanout { + constructor(p?: proto.IAIQueryFanout); + public messageKey?: (proto.IMessageKey|null); + public message?: (proto.IMessage|null); + public timestamp?: (number|Long|null); + public static create(properties?: proto.IAIQueryFanout): proto.AIQueryFanout; + public static encode(m: proto.IAIQueryFanout, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIQueryFanout; + public static fromObject(d: { [k: string]: any }): proto.AIQueryFanout; + public static toObject(m: proto.AIQueryFanout, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAIRegenerateMetadata { + messageKey?: (proto.IMessageKey|null); + responseTimestampMs?: (number|Long|null); + } + + class AIRegenerateMetadata implements IAIRegenerateMetadata { + constructor(p?: proto.IAIRegenerateMetadata); + public messageKey?: (proto.IMessageKey|null); + public responseTimestampMs?: (number|Long|null); + public static create(properties?: proto.IAIRegenerateMetadata): proto.AIRegenerateMetadata; + public static encode(m: proto.IAIRegenerateMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRegenerateMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRegenerateMetadata; + public static toObject(m: proto.AIRegenerateMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAIRichResponseCodeMetadata { + codeLanguage?: (string|null); + codeBlocks?: (proto.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock[]|null); + } + + class AIRichResponseCodeMetadata implements IAIRichResponseCodeMetadata { + constructor(p?: proto.IAIRichResponseCodeMetadata); + public codeLanguage?: (string|null); + public codeBlocks: proto.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock[]; + public static create(properties?: proto.IAIRichResponseCodeMetadata): proto.AIRichResponseCodeMetadata; + public static encode(m: proto.IAIRichResponseCodeMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseCodeMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseCodeMetadata; + public static toObject(m: proto.AIRichResponseCodeMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIRichResponseCodeMetadata { + + interface IAIRichResponseCodeBlock { + highlightType?: (proto.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType|null); + codeContent?: (string|null); + } + + class AIRichResponseCodeBlock implements IAIRichResponseCodeBlock { + constructor(p?: proto.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock); + public highlightType?: (proto.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType|null); + public codeContent?: (string|null); + public static create(properties?: proto.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock): proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock; + public static encode(m: proto.AIRichResponseCodeMetadata.IAIRichResponseCodeBlock, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock; + public static toObject(m: proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum AIRichResponseCodeHighlightType { + AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT = 0, + AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD = 1, + AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD = 2, + AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING = 3, + AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER = 4, + AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT = 5 + } + } + + interface IAIRichResponseContentItemsMetadata { + itemsMetadata?: (proto.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata[]|null); + contentType?: (proto.AIRichResponseContentItemsMetadata.ContentType|null); + } + + class AIRichResponseContentItemsMetadata implements IAIRichResponseContentItemsMetadata { + constructor(p?: proto.IAIRichResponseContentItemsMetadata); + public itemsMetadata: proto.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata[]; + public contentType?: (proto.AIRichResponseContentItemsMetadata.ContentType|null); + public static create(properties?: proto.IAIRichResponseContentItemsMetadata): proto.AIRichResponseContentItemsMetadata; + public static encode(m: proto.IAIRichResponseContentItemsMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseContentItemsMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseContentItemsMetadata; + public static toObject(m: proto.AIRichResponseContentItemsMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIRichResponseContentItemsMetadata { + + interface IAIRichResponseContentItemMetadata { + reelItem?: (proto.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem|null); + } + + class AIRichResponseContentItemMetadata implements IAIRichResponseContentItemMetadata { + constructor(p?: proto.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata); + public reelItem?: (proto.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem|null); + public aIRichResponseContentItem?: "reelItem"; + public static create(properties?: proto.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata): proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata; + public static encode(m: proto.AIRichResponseContentItemsMetadata.IAIRichResponseContentItemMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata; + public static toObject(m: proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAIRichResponseReelItem { + title?: (string|null); + profileIconUrl?: (string|null); + thumbnailUrl?: (string|null); + videoUrl?: (string|null); + } + + class AIRichResponseReelItem implements IAIRichResponseReelItem { + constructor(p?: proto.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem); + public title?: (string|null); + public profileIconUrl?: (string|null); + public thumbnailUrl?: (string|null); + public videoUrl?: (string|null); + public static create(properties?: proto.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem): proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem; + public static encode(m: proto.AIRichResponseContentItemsMetadata.IAIRichResponseReelItem, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem; + public static toObject(m: proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum ContentType { + DEFAULT = 0, + CAROUSEL = 1 + } + } + + interface IAIRichResponseDynamicMetadata { + type?: (proto.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType|null); + version?: (number|Long|null); + url?: (string|null); + loopCount?: (number|null); + } + + class AIRichResponseDynamicMetadata implements IAIRichResponseDynamicMetadata { + constructor(p?: proto.IAIRichResponseDynamicMetadata); + public type?: (proto.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType|null); + public version?: (number|Long|null); + public url?: (string|null); + public loopCount?: (number|null); + public static create(properties?: proto.IAIRichResponseDynamicMetadata): proto.AIRichResponseDynamicMetadata; + public static encode(m: proto.IAIRichResponseDynamicMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseDynamicMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseDynamicMetadata; + public static toObject(m: proto.AIRichResponseDynamicMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIRichResponseDynamicMetadata { + + enum AIRichResponseDynamicMetadataType { + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN = 0, + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE = 1, + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF = 2 + } + } + + interface IAIRichResponseGridImageMetadata { + gridImageUrl?: (proto.IAIRichResponseImageURL|null); + imageUrls?: (proto.IAIRichResponseImageURL[]|null); + } + + class AIRichResponseGridImageMetadata implements IAIRichResponseGridImageMetadata { + constructor(p?: proto.IAIRichResponseGridImageMetadata); + public gridImageUrl?: (proto.IAIRichResponseImageURL|null); + public imageUrls: proto.IAIRichResponseImageURL[]; + public static create(properties?: proto.IAIRichResponseGridImageMetadata): proto.AIRichResponseGridImageMetadata; + public static encode(m: proto.IAIRichResponseGridImageMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseGridImageMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseGridImageMetadata; + public static toObject(m: proto.AIRichResponseGridImageMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAIRichResponseImageURL { + imagePreviewUrl?: (string|null); + imageHighResUrl?: (string|null); + sourceUrl?: (string|null); + } + + class AIRichResponseImageURL implements IAIRichResponseImageURL { + constructor(p?: proto.IAIRichResponseImageURL); + public imagePreviewUrl?: (string|null); + public imageHighResUrl?: (string|null); + public sourceUrl?: (string|null); + public static create(properties?: proto.IAIRichResponseImageURL): proto.AIRichResponseImageURL; + public static encode(m: proto.IAIRichResponseImageURL, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseImageURL; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseImageURL; + public static toObject(m: proto.AIRichResponseImageURL, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAIRichResponseInlineImageMetadata { + imageUrl?: (proto.IAIRichResponseImageURL|null); + imageText?: (string|null); + alignment?: (proto.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment|null); + tapLinkUrl?: (string|null); + } + + class AIRichResponseInlineImageMetadata implements IAIRichResponseInlineImageMetadata { + constructor(p?: proto.IAIRichResponseInlineImageMetadata); + public imageUrl?: (proto.IAIRichResponseImageURL|null); + public imageText?: (string|null); + public alignment?: (proto.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment|null); + public tapLinkUrl?: (string|null); + public static create(properties?: proto.IAIRichResponseInlineImageMetadata): proto.AIRichResponseInlineImageMetadata; + public static encode(m: proto.IAIRichResponseInlineImageMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseInlineImageMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseInlineImageMetadata; + public static toObject(m: proto.AIRichResponseInlineImageMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIRichResponseInlineImageMetadata { + + enum AIRichResponseImageAlignment { + AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED = 0, + AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED = 1, + AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED = 2 + } + } + + interface IAIRichResponseLatexMetadata { + text?: (string|null); + expressions?: (proto.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression[]|null); + } + + class AIRichResponseLatexMetadata implements IAIRichResponseLatexMetadata { + constructor(p?: proto.IAIRichResponseLatexMetadata); + public text?: (string|null); + public expressions: proto.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression[]; + public static create(properties?: proto.IAIRichResponseLatexMetadata): proto.AIRichResponseLatexMetadata; + public static encode(m: proto.IAIRichResponseLatexMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseLatexMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseLatexMetadata; + public static toObject(m: proto.AIRichResponseLatexMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIRichResponseLatexMetadata { + + interface IAIRichResponseLatexExpression { + latexExpression?: (string|null); + url?: (string|null); + width?: (number|null); + height?: (number|null); + fontHeight?: (number|null); + imageTopPadding?: (number|null); + imageLeadingPadding?: (number|null); + imageBottomPadding?: (number|null); + imageTrailingPadding?: (number|null); + } + + class AIRichResponseLatexExpression implements IAIRichResponseLatexExpression { + constructor(p?: proto.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression); + public latexExpression?: (string|null); + public url?: (string|null); + public width?: (number|null); + public height?: (number|null); + public fontHeight?: (number|null); + public imageTopPadding?: (number|null); + public imageLeadingPadding?: (number|null); + public imageBottomPadding?: (number|null); + public imageTrailingPadding?: (number|null); + public static create(properties?: proto.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression): proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression; + public static encode(m: proto.AIRichResponseLatexMetadata.IAIRichResponseLatexExpression, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression; + public static toObject(m: proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IAIRichResponseMapMetadata { + centerLatitude?: (number|null); + centerLongitude?: (number|null); + latitudeDelta?: (number|null); + longitudeDelta?: (number|null); + annotations?: (proto.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation[]|null); + showInfoList?: (boolean|null); + } + + class AIRichResponseMapMetadata implements IAIRichResponseMapMetadata { + constructor(p?: proto.IAIRichResponseMapMetadata); + public centerLatitude?: (number|null); + public centerLongitude?: (number|null); + public latitudeDelta?: (number|null); + public longitudeDelta?: (number|null); + public annotations: proto.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation[]; + public showInfoList?: (boolean|null); + public static create(properties?: proto.IAIRichResponseMapMetadata): proto.AIRichResponseMapMetadata; + public static encode(m: proto.IAIRichResponseMapMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseMapMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseMapMetadata; + public static toObject(m: proto.AIRichResponseMapMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIRichResponseMapMetadata { + + interface IAIRichResponseMapAnnotation { + annotationNumber?: (number|null); + latitude?: (number|null); + longitude?: (number|null); + title?: (string|null); + body?: (string|null); + } + + class AIRichResponseMapAnnotation implements IAIRichResponseMapAnnotation { + constructor(p?: proto.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation); + public annotationNumber?: (number|null); + public latitude?: (number|null); + public longitude?: (number|null); + public title?: (string|null); + public body?: (string|null); + public static create(properties?: proto.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation): proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation; + public static encode(m: proto.AIRichResponseMapMetadata.IAIRichResponseMapAnnotation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation; + public static toObject(m: proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IAIRichResponseMessage { + messageType?: (proto.AIRichResponseMessageType|null); + submessages?: (proto.IAIRichResponseSubMessage[]|null); + unifiedResponse?: (proto.IAIRichResponseUnifiedResponse|null); + contextInfo?: (proto.IContextInfo|null); + } + + class AIRichResponseMessage implements IAIRichResponseMessage { + constructor(p?: proto.IAIRichResponseMessage); + public messageType?: (proto.AIRichResponseMessageType|null); + public submessages: proto.IAIRichResponseSubMessage[]; + public unifiedResponse?: (proto.IAIRichResponseUnifiedResponse|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.IAIRichResponseMessage): proto.AIRichResponseMessage; + public static encode(m: proto.IAIRichResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseMessage; + public static toObject(m: proto.AIRichResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum AIRichResponseMessageType { + AI_RICH_RESPONSE_TYPE_UNKNOWN = 0, + AI_RICH_RESPONSE_TYPE_STANDARD = 1 + } + + interface IAIRichResponseSubMessage { + messageType?: (proto.AIRichResponseSubMessageType|null); + gridImageMetadata?: (proto.IAIRichResponseGridImageMetadata|null); + messageText?: (string|null); + imageMetadata?: (proto.IAIRichResponseInlineImageMetadata|null); + codeMetadata?: (proto.IAIRichResponseCodeMetadata|null); + tableMetadata?: (proto.IAIRichResponseTableMetadata|null); + dynamicMetadata?: (proto.IAIRichResponseDynamicMetadata|null); + latexMetadata?: (proto.IAIRichResponseLatexMetadata|null); + mapMetadata?: (proto.IAIRichResponseMapMetadata|null); + contentItemsMetadata?: (proto.IAIRichResponseContentItemsMetadata|null); + } + + class AIRichResponseSubMessage implements IAIRichResponseSubMessage { + constructor(p?: proto.IAIRichResponseSubMessage); + public messageType?: (proto.AIRichResponseSubMessageType|null); + public gridImageMetadata?: (proto.IAIRichResponseGridImageMetadata|null); + public messageText?: (string|null); + public imageMetadata?: (proto.IAIRichResponseInlineImageMetadata|null); + public codeMetadata?: (proto.IAIRichResponseCodeMetadata|null); + public tableMetadata?: (proto.IAIRichResponseTableMetadata|null); + public dynamicMetadata?: (proto.IAIRichResponseDynamicMetadata|null); + public latexMetadata?: (proto.IAIRichResponseLatexMetadata|null); + public mapMetadata?: (proto.IAIRichResponseMapMetadata|null); + public contentItemsMetadata?: (proto.IAIRichResponseContentItemsMetadata|null); + public static create(properties?: proto.IAIRichResponseSubMessage): proto.AIRichResponseSubMessage; + public static encode(m: proto.IAIRichResponseSubMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseSubMessage; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseSubMessage; + public static toObject(m: proto.AIRichResponseSubMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum AIRichResponseSubMessageType { + AI_RICH_RESPONSE_UNKNOWN = 0, + AI_RICH_RESPONSE_GRID_IMAGE = 1, + AI_RICH_RESPONSE_TEXT = 2, + AI_RICH_RESPONSE_INLINE_IMAGE = 3, + AI_RICH_RESPONSE_TABLE = 4, + AI_RICH_RESPONSE_CODE = 5, + AI_RICH_RESPONSE_DYNAMIC = 6, + AI_RICH_RESPONSE_MAP = 7, + AI_RICH_RESPONSE_LATEX = 8, + AI_RICH_RESPONSE_CONTENT_ITEMS = 9 + } + + interface IAIRichResponseTableMetadata { + rows?: (proto.AIRichResponseTableMetadata.IAIRichResponseTableRow[]|null); + title?: (string|null); + } + + class AIRichResponseTableMetadata implements IAIRichResponseTableMetadata { + constructor(p?: proto.IAIRichResponseTableMetadata); + public rows: proto.AIRichResponseTableMetadata.IAIRichResponseTableRow[]; + public title?: (string|null); + public static create(properties?: proto.IAIRichResponseTableMetadata): proto.AIRichResponseTableMetadata; + public static encode(m: proto.IAIRichResponseTableMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseTableMetadata; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseTableMetadata; + public static toObject(m: proto.AIRichResponseTableMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIRichResponseTableMetadata { + + interface IAIRichResponseTableRow { + items?: (string[]|null); + isHeading?: (boolean|null); + } + + class AIRichResponseTableRow implements IAIRichResponseTableRow { + constructor(p?: proto.AIRichResponseTableMetadata.IAIRichResponseTableRow); + public items: string[]; + public isHeading?: (boolean|null); + public static create(properties?: proto.AIRichResponseTableMetadata.IAIRichResponseTableRow): proto.AIRichResponseTableMetadata.AIRichResponseTableRow; + public static encode(m: proto.AIRichResponseTableMetadata.IAIRichResponseTableRow, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseTableMetadata.AIRichResponseTableRow; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseTableMetadata.AIRichResponseTableRow; + public static toObject(m: proto.AIRichResponseTableMetadata.AIRichResponseTableRow, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IAIRichResponseUnifiedResponse { + data?: (Uint8Array|null); + } + + class AIRichResponseUnifiedResponse implements IAIRichResponseUnifiedResponse { + constructor(p?: proto.IAIRichResponseUnifiedResponse); + public data?: (Uint8Array|null); + public static create(properties?: proto.IAIRichResponseUnifiedResponse): proto.AIRichResponseUnifiedResponse; + public static encode(m: proto.IAIRichResponseUnifiedResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIRichResponseUnifiedResponse; + public static fromObject(d: { [k: string]: any }): proto.AIRichResponseUnifiedResponse; + public static toObject(m: proto.AIRichResponseUnifiedResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAIThreadInfo { + serverInfo?: (proto.AIThreadInfo.IAIThreadServerInfo|null); + clientInfo?: (proto.AIThreadInfo.IAIThreadClientInfo|null); + } + + class AIThreadInfo implements IAIThreadInfo { + constructor(p?: proto.IAIThreadInfo); + public serverInfo?: (proto.AIThreadInfo.IAIThreadServerInfo|null); + public clientInfo?: (proto.AIThreadInfo.IAIThreadClientInfo|null); + public static create(properties?: proto.IAIThreadInfo): proto.AIThreadInfo; + public static encode(m: proto.IAIThreadInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIThreadInfo; + public static fromObject(d: { [k: string]: any }): proto.AIThreadInfo; + public static toObject(m: proto.AIThreadInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIThreadInfo { + + interface IAIThreadClientInfo { + type?: (proto.AIThreadInfo.AIThreadClientInfo.AIThreadType|null); + } + + class AIThreadClientInfo implements IAIThreadClientInfo { + constructor(p?: proto.AIThreadInfo.IAIThreadClientInfo); + public type?: (proto.AIThreadInfo.AIThreadClientInfo.AIThreadType|null); + public static create(properties?: proto.AIThreadInfo.IAIThreadClientInfo): proto.AIThreadInfo.AIThreadClientInfo; + public static encode(m: proto.AIThreadInfo.IAIThreadClientInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIThreadInfo.AIThreadClientInfo; + public static fromObject(d: { [k: string]: any }): proto.AIThreadInfo.AIThreadClientInfo; + public static toObject(m: proto.AIThreadInfo.AIThreadClientInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AIThreadClientInfo { + + enum AIThreadType { + UNKNOWN = 0, + DEFAULT = 1, + INCOGNITO = 2 + } + } + + interface IAIThreadServerInfo { + title?: (string|null); + } + + class AIThreadServerInfo implements IAIThreadServerInfo { + constructor(p?: proto.AIThreadInfo.IAIThreadServerInfo); + public title?: (string|null); + public static create(properties?: proto.AIThreadInfo.IAIThreadServerInfo): proto.AIThreadInfo.AIThreadServerInfo; + public static encode(m: proto.AIThreadInfo.IAIThreadServerInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AIThreadInfo.AIThreadServerInfo; + public static fromObject(d: { [k: string]: any }): proto.AIThreadInfo.AIThreadServerInfo; + public static toObject(m: proto.AIThreadInfo.AIThreadServerInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IAccount { + lid?: (string|null); + username?: (string|null); + countryCode?: (string|null); + isUsernameDeleted?: (boolean|null); + } + + class Account implements IAccount { + constructor(p?: proto.IAccount); + public lid?: (string|null); + public username?: (string|null); + public countryCode?: (string|null); + public isUsernameDeleted?: (boolean|null); + public static create(properties?: proto.IAccount): proto.Account; + public static encode(m: proto.IAccount, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Account; + public static fromObject(d: { [k: string]: any }): proto.Account; + public static toObject(m: proto.Account, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IActionLink { + url?: (string|null); + buttonTitle?: (string|null); + } + + class ActionLink implements IActionLink { + constructor(p?: proto.IActionLink); + public url?: (string|null); + public buttonTitle?: (string|null); + public static create(properties?: proto.IActionLink): proto.ActionLink; + public static encode(m: proto.IActionLink, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ActionLink; + public static fromObject(d: { [k: string]: any }): proto.ActionLink; + public static toObject(m: proto.ActionLink, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAutoDownloadSettings { + downloadImages?: (boolean|null); + downloadAudio?: (boolean|null); + downloadVideo?: (boolean|null); + downloadDocuments?: (boolean|null); + } + + class AutoDownloadSettings implements IAutoDownloadSettings { + constructor(p?: proto.IAutoDownloadSettings); + public downloadImages?: (boolean|null); + public downloadAudio?: (boolean|null); + public downloadVideo?: (boolean|null); + public downloadDocuments?: (boolean|null); + public static create(properties?: proto.IAutoDownloadSettings): proto.AutoDownloadSettings; + public static encode(m: proto.IAutoDownloadSettings, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AutoDownloadSettings; + public static fromObject(d: { [k: string]: any }): proto.AutoDownloadSettings; + public static toObject(m: proto.AutoDownloadSettings, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAvatarUserSettings { + fbid?: (string|null); + password?: (string|null); + } + + class AvatarUserSettings implements IAvatarUserSettings { + constructor(p?: proto.IAvatarUserSettings); + public fbid?: (string|null); + public password?: (string|null); + public static create(properties?: proto.IAvatarUserSettings): proto.AvatarUserSettings; + public static encode(m: proto.IAvatarUserSettings, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.AvatarUserSettings; + public static fromObject(d: { [k: string]: any }): proto.AvatarUserSettings; + public static toObject(m: proto.AvatarUserSettings, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBizAccountLinkInfo { + whatsappBizAcctFbid?: (number|Long|null); + whatsappAcctNumber?: (string|null); + issueTime?: (number|Long|null); + hostStorage?: (proto.BizAccountLinkInfo.HostStorageType|null); + accountType?: (proto.BizAccountLinkInfo.AccountType|null); + } + + class BizAccountLinkInfo implements IBizAccountLinkInfo { + constructor(p?: proto.IBizAccountLinkInfo); + public whatsappBizAcctFbid?: (number|Long|null); + public whatsappAcctNumber?: (string|null); + public issueTime?: (number|Long|null); + public hostStorage?: (proto.BizAccountLinkInfo.HostStorageType|null); + public accountType?: (proto.BizAccountLinkInfo.AccountType|null); + public static create(properties?: proto.IBizAccountLinkInfo): proto.BizAccountLinkInfo; + public static encode(m: proto.IBizAccountLinkInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BizAccountLinkInfo; + public static fromObject(d: { [k: string]: any }): proto.BizAccountLinkInfo; + public static toObject(m: proto.BizAccountLinkInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BizAccountLinkInfo { + + enum AccountType { + ENTERPRISE = 0 + } + + enum HostStorageType { + ON_PREMISE = 0, + FACEBOOK = 1 + } + } + + interface IBizAccountPayload { + vnameCert?: (proto.IVerifiedNameCertificate|null); + bizAcctLinkInfo?: (Uint8Array|null); + } + + class BizAccountPayload implements IBizAccountPayload { + constructor(p?: proto.IBizAccountPayload); + public vnameCert?: (proto.IVerifiedNameCertificate|null); + public bizAcctLinkInfo?: (Uint8Array|null); + public static create(properties?: proto.IBizAccountPayload): proto.BizAccountPayload; + public static encode(m: proto.IBizAccountPayload, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BizAccountPayload; + public static fromObject(d: { [k: string]: any }): proto.BizAccountPayload; + public static toObject(m: proto.BizAccountPayload, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBizIdentityInfo { + vlevel?: (proto.BizIdentityInfo.VerifiedLevelValue|null); + vnameCert?: (proto.IVerifiedNameCertificate|null); + signed?: (boolean|null); + revoked?: (boolean|null); + hostStorage?: (proto.BizIdentityInfo.HostStorageType|null); + actualActors?: (proto.BizIdentityInfo.ActualActorsType|null); + privacyModeTs?: (number|Long|null); + featureControls?: (number|Long|null); + } + + class BizIdentityInfo implements IBizIdentityInfo { + constructor(p?: proto.IBizIdentityInfo); + public vlevel?: (proto.BizIdentityInfo.VerifiedLevelValue|null); + public vnameCert?: (proto.IVerifiedNameCertificate|null); + public signed?: (boolean|null); + public revoked?: (boolean|null); + public hostStorage?: (proto.BizIdentityInfo.HostStorageType|null); + public actualActors?: (proto.BizIdentityInfo.ActualActorsType|null); + public privacyModeTs?: (number|Long|null); + public featureControls?: (number|Long|null); + public static create(properties?: proto.IBizIdentityInfo): proto.BizIdentityInfo; + public static encode(m: proto.IBizIdentityInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BizIdentityInfo; + public static fromObject(d: { [k: string]: any }): proto.BizIdentityInfo; + public static toObject(m: proto.BizIdentityInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BizIdentityInfo { + + enum ActualActorsType { + SELF = 0, + BSP = 1 + } + + enum HostStorageType { + ON_PREMISE = 0, + FACEBOOK = 1 + } + + enum VerifiedLevelValue { + UNKNOWN = 0, + LOW = 1, + HIGH = 2 + } + } + + interface IBotAgeCollectionMetadata { + ageCollectionEligible?: (boolean|null); + shouldTriggerAgeCollectionOnClient?: (boolean|null); + ageCollectionType?: (proto.BotAgeCollectionMetadata.AgeCollectionType|null); + } + + class BotAgeCollectionMetadata implements IBotAgeCollectionMetadata { + constructor(p?: proto.IBotAgeCollectionMetadata); + public ageCollectionEligible?: (boolean|null); + public shouldTriggerAgeCollectionOnClient?: (boolean|null); + public ageCollectionType?: (proto.BotAgeCollectionMetadata.AgeCollectionType|null); + public static create(properties?: proto.IBotAgeCollectionMetadata): proto.BotAgeCollectionMetadata; + public static encode(m: proto.IBotAgeCollectionMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotAgeCollectionMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotAgeCollectionMetadata; + public static toObject(m: proto.BotAgeCollectionMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotAgeCollectionMetadata { + + enum AgeCollectionType { + O18_BINARY = 0, + WAFFLE = 1 + } + } + + interface IBotAvatarMetadata { + sentiment?: (number|null); + behaviorGraph?: (string|null); + action?: (number|null); + intensity?: (number|null); + wordCount?: (number|null); + } + + class BotAvatarMetadata implements IBotAvatarMetadata { + constructor(p?: proto.IBotAvatarMetadata); + public sentiment?: (number|null); + public behaviorGraph?: (string|null); + public action?: (number|null); + public intensity?: (number|null); + public wordCount?: (number|null); + public static create(properties?: proto.IBotAvatarMetadata): proto.BotAvatarMetadata; + public static encode(m: proto.IBotAvatarMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotAvatarMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotAvatarMetadata; + public static toObject(m: proto.BotAvatarMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotCapabilityMetadata { + capabilities?: (proto.BotCapabilityMetadata.BotCapabilityType[]|null); + } + + class BotCapabilityMetadata implements IBotCapabilityMetadata { + constructor(p?: proto.IBotCapabilityMetadata); + public capabilities: proto.BotCapabilityMetadata.BotCapabilityType[]; + public static create(properties?: proto.IBotCapabilityMetadata): proto.BotCapabilityMetadata; + public static encode(m: proto.IBotCapabilityMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotCapabilityMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotCapabilityMetadata; + public static toObject(m: proto.BotCapabilityMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotCapabilityMetadata { + + enum BotCapabilityType { + UNKNOWN = 0, + PROGRESS_INDICATOR = 1, + RICH_RESPONSE_HEADING = 2, + RICH_RESPONSE_NESTED_LIST = 3, + AI_MEMORY = 4, + RICH_RESPONSE_THREAD_SURFING = 5, + RICH_RESPONSE_TABLE = 6, + RICH_RESPONSE_CODE = 7, + RICH_RESPONSE_STRUCTURED_RESPONSE = 8, + RICH_RESPONSE_INLINE_IMAGE = 9, + WA_IG_1P_PLUGIN_RANKING_CONTROL = 10, + WA_IG_1P_PLUGIN_RANKING_UPDATE_1 = 11, + WA_IG_1P_PLUGIN_RANKING_UPDATE_2 = 12, + WA_IG_1P_PLUGIN_RANKING_UPDATE_3 = 13, + WA_IG_1P_PLUGIN_RANKING_UPDATE_4 = 14, + WA_IG_1P_PLUGIN_RANKING_UPDATE_5 = 15, + WA_IG_1P_PLUGIN_RANKING_UPDATE_6 = 16, + WA_IG_1P_PLUGIN_RANKING_UPDATE_7 = 17, + WA_IG_1P_PLUGIN_RANKING_UPDATE_8 = 18, + WA_IG_1P_PLUGIN_RANKING_UPDATE_9 = 19, + WA_IG_1P_PLUGIN_RANKING_UPDATE_10 = 20, + RICH_RESPONSE_SUB_HEADING = 21, + RICH_RESPONSE_GRID_IMAGE = 22, + AI_STUDIO_UGC_MEMORY = 23, + RICH_RESPONSE_LATEX = 24, + RICH_RESPONSE_MAPS = 25, + RICH_RESPONSE_INLINE_REELS = 26, + AGENTIC_PLANNING = 27, + ACCOUNT_LINKING = 28, + STREAMING_DISAGGREGATION = 29, + RICH_RESPONSE_GRID_IMAGE_3P = 30, + RICH_RESPONSE_LATEX_INLINE = 31, + QUERY_PLAN = 32, + PROACTIVE_MESSAGE = 33, + RICH_RESPONSE_UNIFIED_RESPONSE = 34, + PROMOTION_MESSAGE = 35, + SIMPLIFIED_PROFILE_PAGE = 36, + RICH_RESPONSE_SOURCES_IN_MESSAGE = 37, + RICH_RESPONSE_SIDE_BY_SIDE_SURVEY = 38, + RICH_RESPONSE_UNIFIED_TEXT_COMPONENT = 39, + AI_SHARED_MEMORY = 40, + RICH_RESPONSE_UNIFIED_SOURCES = 41, + RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS = 42, + RICH_RESPONSE_UR_INLINE_REELS_ENABLED = 43, + RICH_RESPONSE_UR_MEDIA_GRID_ENABLED = 44, + RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER = 45, + RICH_RESPONSE_IN_APP_SURVEY = 46, + AI_RESPONSE_MODEL_BRANDING = 47, + SESSION_TRANSPARENCY_SYSTEM_MESSAGE = 48, + RICH_RESPONSE_UR_REASONING = 49 + } + } + + interface IBotFeedbackMessage { + messageKey?: (proto.IMessageKey|null); + kind?: (proto.BotFeedbackMessage.BotFeedbackKind|null); + text?: (string|null); + kindNegative?: (number|Long|null); + kindPositive?: (number|Long|null); + kindReport?: (proto.BotFeedbackMessage.ReportKind|null); + sideBySideSurveyMetadata?: (proto.BotFeedbackMessage.ISideBySideSurveyMetadata|null); + } + + class BotFeedbackMessage implements IBotFeedbackMessage { + constructor(p?: proto.IBotFeedbackMessage); + public messageKey?: (proto.IMessageKey|null); + public kind?: (proto.BotFeedbackMessage.BotFeedbackKind|null); + public text?: (string|null); + public kindNegative?: (number|Long|null); + public kindPositive?: (number|Long|null); + public kindReport?: (proto.BotFeedbackMessage.ReportKind|null); + public sideBySideSurveyMetadata?: (proto.BotFeedbackMessage.ISideBySideSurveyMetadata|null); + public static create(properties?: proto.IBotFeedbackMessage): proto.BotFeedbackMessage; + public static encode(m: proto.IBotFeedbackMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage; + public static toObject(m: proto.BotFeedbackMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotFeedbackMessage { + + enum BotFeedbackKind { + BOT_FEEDBACK_POSITIVE = 0, + BOT_FEEDBACK_NEGATIVE_GENERIC = 1, + BOT_FEEDBACK_NEGATIVE_HELPFUL = 2, + BOT_FEEDBACK_NEGATIVE_INTERESTING = 3, + BOT_FEEDBACK_NEGATIVE_ACCURATE = 4, + BOT_FEEDBACK_NEGATIVE_SAFE = 5, + BOT_FEEDBACK_NEGATIVE_OTHER = 6, + BOT_FEEDBACK_NEGATIVE_REFUSED = 7, + BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING = 8, + BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT = 9, + BOT_FEEDBACK_NEGATIVE_PERSONALIZED = 10, + BOT_FEEDBACK_NEGATIVE_CLARITY = 11, + BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON = 12, + BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY = 13, + BOT_FEEDBACK_NEGATIVE = 14 + } + + enum BotFeedbackKindMultipleNegative { + BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC = 1, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL = 2, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING = 4, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE = 8, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE = 16, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER = 32, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED = 64, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING = 128, + BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT = 256 + } + + enum BotFeedbackKindMultiplePositive { + BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC = 1 + } + + enum ReportKind { + NONE = 0, + GENERIC = 1 + } + + interface ISideBySideSurveyMetadata { + selectedRequestId?: (string|null); + surveyId?: (number|null); + simonSessionFbid?: (string|null); + responseOtid?: (string|null); + responseTimestampMsString?: (string|null); + isSelectedResponsePrimary?: (boolean|null); + messageIdToEdit?: (string|null); + analyticsData?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData|null); + metaAiAnalyticsData?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISidebySideSurveyMetaAiAnalyticsData|null); + } + + class SideBySideSurveyMetadata implements ISideBySideSurveyMetadata { + constructor(p?: proto.BotFeedbackMessage.ISideBySideSurveyMetadata); + public selectedRequestId?: (string|null); + public surveyId?: (number|null); + public simonSessionFbid?: (string|null); + public responseOtid?: (string|null); + public responseTimestampMsString?: (string|null); + public isSelectedResponsePrimary?: (boolean|null); + public messageIdToEdit?: (string|null); + public analyticsData?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData|null); + public metaAiAnalyticsData?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISidebySideSurveyMetaAiAnalyticsData|null); + public static create(properties?: proto.BotFeedbackMessage.ISideBySideSurveyMetadata): proto.BotFeedbackMessage.SideBySideSurveyMetadata; + public static encode(m: proto.BotFeedbackMessage.ISideBySideSurveyMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace SideBySideSurveyMetadata { + + interface ISideBySideSurveyAnalyticsData { + tessaEvent?: (string|null); + tessaSessionFbid?: (string|null); + simonSessionFbid?: (string|null); + } + + class SideBySideSurveyAnalyticsData implements ISideBySideSurveyAnalyticsData { + constructor(p?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData); + public tessaEvent?: (string|null); + public tessaSessionFbid?: (string|null); + public simonSessionFbid?: (string|null); + public static create(properties?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData; + public static encode(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISideBySideSurveyAnalyticsData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISidebySideSurveyMetaAiAnalyticsData { + surveyId?: (number|null); + primaryResponseId?: (string|null); + testArmName?: (string|null); + timestampMsString?: (string|null); + ctaImpressionEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAImpressionEventData|null); + ctaClickEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAClickEventData|null); + cardImpressionEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCardImpressionEventData|null); + responseEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyResponseEventData|null); + abandonEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyAbandonEventData|null); + } + + class SidebySideSurveyMetaAiAnalyticsData implements ISidebySideSurveyMetaAiAnalyticsData { + constructor(p?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISidebySideSurveyMetaAiAnalyticsData); + public surveyId?: (number|null); + public primaryResponseId?: (string|null); + public testArmName?: (string|null); + public timestampMsString?: (string|null); + public ctaImpressionEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAImpressionEventData|null); + public ctaClickEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAClickEventData|null); + public cardImpressionEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCardImpressionEventData|null); + public responseEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyResponseEventData|null); + public abandonEvent?: (proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyAbandonEventData|null); + public static create(properties?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISidebySideSurveyMetaAiAnalyticsData): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData; + public static encode(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.ISidebySideSurveyMetaAiAnalyticsData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace SidebySideSurveyMetaAiAnalyticsData { + + interface ISideBySideSurveyAbandonEventData { + abandonDwellTimeMsString?: (string|null); + } + + class SideBySideSurveyAbandonEventData implements ISideBySideSurveyAbandonEventData { + constructor(p?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyAbandonEventData); + public abandonDwellTimeMsString?: (string|null); + public static create(properties?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyAbandonEventData): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData; + public static encode(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyAbandonEventData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISideBySideSurveyCTAClickEventData { + isSurveyExpired?: (boolean|null); + clickDwellTimeMsString?: (string|null); + } + + class SideBySideSurveyCTAClickEventData implements ISideBySideSurveyCTAClickEventData { + constructor(p?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAClickEventData); + public isSurveyExpired?: (boolean|null); + public clickDwellTimeMsString?: (string|null); + public static create(properties?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAClickEventData): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData; + public static encode(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAClickEventData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISideBySideSurveyCTAImpressionEventData { + isSurveyExpired?: (boolean|null); + } + + class SideBySideSurveyCTAImpressionEventData implements ISideBySideSurveyCTAImpressionEventData { + constructor(p?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAImpressionEventData); + public isSurveyExpired?: (boolean|null); + public static create(properties?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAImpressionEventData): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData; + public static encode(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCTAImpressionEventData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISideBySideSurveyCardImpressionEventData { + } + + class SideBySideSurveyCardImpressionEventData implements ISideBySideSurveyCardImpressionEventData { + constructor(p?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCardImpressionEventData); + public static create(properties?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCardImpressionEventData): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData; + public static encode(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyCardImpressionEventData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISideBySideSurveyResponseEventData { + responseDwellTimeMsString?: (string|null); + selectedResponseId?: (string|null); + } + + class SideBySideSurveyResponseEventData implements ISideBySideSurveyResponseEventData { + constructor(p?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyResponseEventData); + public responseDwellTimeMsString?: (string|null); + public selectedResponseId?: (string|null); + public static create(properties?: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyResponseEventData): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData; + public static encode(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ISideBySideSurveyResponseEventData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData; + public static fromObject(d: { [k: string]: any }): proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData; + public static toObject(m: proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + } + } + + interface IBotImagineMetadata { + imagineType?: (proto.BotImagineMetadata.ImagineType|null); + } + + class BotImagineMetadata implements IBotImagineMetadata { + constructor(p?: proto.IBotImagineMetadata); + public imagineType?: (proto.BotImagineMetadata.ImagineType|null); + public static create(properties?: proto.IBotImagineMetadata): proto.BotImagineMetadata; + public static encode(m: proto.IBotImagineMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotImagineMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotImagineMetadata; + public static toObject(m: proto.BotImagineMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotImagineMetadata { + + enum ImagineType { + UNKNOWN = 0, + IMAGINE = 1, + MEMU = 2, + FLASH = 3, + EDIT = 4 + } + } + + interface IBotLinkedAccount { + type?: (proto.BotLinkedAccount.BotLinkedAccountType|null); + } + + class BotLinkedAccount implements IBotLinkedAccount { + constructor(p?: proto.IBotLinkedAccount); + public type?: (proto.BotLinkedAccount.BotLinkedAccountType|null); + public static create(properties?: proto.IBotLinkedAccount): proto.BotLinkedAccount; + public static encode(m: proto.IBotLinkedAccount, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotLinkedAccount; + public static fromObject(d: { [k: string]: any }): proto.BotLinkedAccount; + public static toObject(m: proto.BotLinkedAccount, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotLinkedAccount { + + enum BotLinkedAccountType { + BOT_LINKED_ACCOUNT_TYPE_1P = 0 + } + } + + interface IBotLinkedAccountsMetadata { + accounts?: (proto.IBotLinkedAccount[]|null); + acAuthTokens?: (Uint8Array|null); + acErrorCode?: (number|null); + } + + class BotLinkedAccountsMetadata implements IBotLinkedAccountsMetadata { + constructor(p?: proto.IBotLinkedAccountsMetadata); + public accounts: proto.IBotLinkedAccount[]; + public acAuthTokens?: (Uint8Array|null); + public acErrorCode?: (number|null); + public static create(properties?: proto.IBotLinkedAccountsMetadata): proto.BotLinkedAccountsMetadata; + public static encode(m: proto.IBotLinkedAccountsMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotLinkedAccountsMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotLinkedAccountsMetadata; + public static toObject(m: proto.BotLinkedAccountsMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotMediaMetadata { + fileSha256?: (string|null); + mediaKey?: (string|null); + fileEncSha256?: (string|null); + directPath?: (string|null); + mediaKeyTimestamp?: (number|Long|null); + mimetype?: (string|null); + orientationType?: (proto.BotMediaMetadata.OrientationType|null); + } + + class BotMediaMetadata implements IBotMediaMetadata { + constructor(p?: proto.IBotMediaMetadata); + public fileSha256?: (string|null); + public mediaKey?: (string|null); + public fileEncSha256?: (string|null); + public directPath?: (string|null); + public mediaKeyTimestamp?: (number|Long|null); + public mimetype?: (string|null); + public orientationType?: (proto.BotMediaMetadata.OrientationType|null); + public static create(properties?: proto.IBotMediaMetadata): proto.BotMediaMetadata; + public static encode(m: proto.IBotMediaMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMediaMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotMediaMetadata; + public static toObject(m: proto.BotMediaMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotMediaMetadata { + + enum OrientationType { + CENTER = 1, + LEFT = 2, + RIGHT = 3 + } + } + + interface IBotMemoryFact { + fact?: (string|null); + factId?: (string|null); + } + + class BotMemoryFact implements IBotMemoryFact { + constructor(p?: proto.IBotMemoryFact); + public fact?: (string|null); + public factId?: (string|null); + public static create(properties?: proto.IBotMemoryFact): proto.BotMemoryFact; + public static encode(m: proto.IBotMemoryFact, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMemoryFact; + public static fromObject(d: { [k: string]: any }): proto.BotMemoryFact; + public static toObject(m: proto.BotMemoryFact, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotMemoryMetadata { + addedFacts?: (proto.IBotMemoryFact[]|null); + removedFacts?: (proto.IBotMemoryFact[]|null); + disclaimer?: (string|null); + } + + class BotMemoryMetadata implements IBotMemoryMetadata { + constructor(p?: proto.IBotMemoryMetadata); + public addedFacts: proto.IBotMemoryFact[]; + public removedFacts: proto.IBotMemoryFact[]; + public disclaimer?: (string|null); + public static create(properties?: proto.IBotMemoryMetadata): proto.BotMemoryMetadata; + public static encode(m: proto.IBotMemoryMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMemoryMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotMemoryMetadata; + public static toObject(m: proto.BotMemoryMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotMemuMetadata { + faceImages?: (proto.IBotMediaMetadata[]|null); + } + + class BotMemuMetadata implements IBotMemuMetadata { + constructor(p?: proto.IBotMemuMetadata); + public faceImages: proto.IBotMediaMetadata[]; + public static create(properties?: proto.IBotMemuMetadata): proto.BotMemuMetadata; + public static encode(m: proto.IBotMemuMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMemuMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotMemuMetadata; + public static toObject(m: proto.BotMemuMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotMessageOrigin { + type?: (proto.BotMessageOrigin.BotMessageOriginType|null); + } + + class BotMessageOrigin implements IBotMessageOrigin { + constructor(p?: proto.IBotMessageOrigin); + public type?: (proto.BotMessageOrigin.BotMessageOriginType|null); + public static create(properties?: proto.IBotMessageOrigin): proto.BotMessageOrigin; + public static encode(m: proto.IBotMessageOrigin, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMessageOrigin; + public static fromObject(d: { [k: string]: any }): proto.BotMessageOrigin; + public static toObject(m: proto.BotMessageOrigin, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotMessageOrigin { + + enum BotMessageOriginType { + BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED = 0 + } + } + + interface IBotMessageOriginMetadata { + origins?: (proto.IBotMessageOrigin[]|null); + } + + class BotMessageOriginMetadata implements IBotMessageOriginMetadata { + constructor(p?: proto.IBotMessageOriginMetadata); + public origins: proto.IBotMessageOrigin[]; + public static create(properties?: proto.IBotMessageOriginMetadata): proto.BotMessageOriginMetadata; + public static encode(m: proto.IBotMessageOriginMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMessageOriginMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotMessageOriginMetadata; + public static toObject(m: proto.BotMessageOriginMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotMessageSharingInfo { + botEntryPointOrigin?: (proto.BotMetricsEntryPoint|null); + forwardScore?: (number|null); + } + + class BotMessageSharingInfo implements IBotMessageSharingInfo { + constructor(p?: proto.IBotMessageSharingInfo); + public botEntryPointOrigin?: (proto.BotMetricsEntryPoint|null); + public forwardScore?: (number|null); + public static create(properties?: proto.IBotMessageSharingInfo): proto.BotMessageSharingInfo; + public static encode(m: proto.IBotMessageSharingInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMessageSharingInfo; + public static fromObject(d: { [k: string]: any }): proto.BotMessageSharingInfo; + public static toObject(m: proto.BotMessageSharingInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotMetadata { + avatarMetadata?: (proto.IBotAvatarMetadata|null); + personaId?: (string|null); + pluginMetadata?: (proto.IBotPluginMetadata|null); + suggestedPromptMetadata?: (proto.IBotSuggestedPromptMetadata|null); + invokerJid?: (string|null); + sessionMetadata?: (proto.IBotSessionMetadata|null); + memuMetadata?: (proto.IBotMemuMetadata|null); + timezone?: (string|null); + reminderMetadata?: (proto.IBotReminderMetadata|null); + modelMetadata?: (proto.IBotModelMetadata|null); + messageDisclaimerText?: (string|null); + progressIndicatorMetadata?: (proto.IBotProgressIndicatorMetadata|null); + capabilityMetadata?: (proto.IBotCapabilityMetadata|null); + imagineMetadata?: (proto.IBotImagineMetadata|null); + memoryMetadata?: (proto.IBotMemoryMetadata|null); + renderingMetadata?: (proto.IBotRenderingMetadata|null); + botMetricsMetadata?: (proto.IBotMetricsMetadata|null); + botLinkedAccountsMetadata?: (proto.IBotLinkedAccountsMetadata|null); + richResponseSourcesMetadata?: (proto.IBotSourcesMetadata|null); + aiConversationContext?: (Uint8Array|null); + botPromotionMessageMetadata?: (proto.IBotPromotionMessageMetadata|null); + botModeSelectionMetadata?: (proto.IBotModeSelectionMetadata|null); + botQuotaMetadata?: (proto.IBotQuotaMetadata|null); + botAgeCollectionMetadata?: (proto.IBotAgeCollectionMetadata|null); + conversationStarterPromptId?: (string|null); + botResponseId?: (string|null); + verificationMetadata?: (proto.IBotSignatureVerificationMetadata|null); + unifiedResponseMutation?: (proto.IBotUnifiedResponseMutation|null); + botMessageOriginMetadata?: (proto.IBotMessageOriginMetadata|null); + inThreadSurveyMetadata?: (proto.IInThreadSurveyMetadata|null); + botThreadInfo?: (proto.IAIThreadInfo|null); + regenerateMetadata?: (proto.IAIRegenerateMetadata|null); + sessionTransparencyMetadata?: (proto.ISessionTransparencyMetadata|null); + internalMetadata?: (Uint8Array|null); + } + + class BotMetadata implements IBotMetadata { + constructor(p?: proto.IBotMetadata); + public avatarMetadata?: (proto.IBotAvatarMetadata|null); + public personaId?: (string|null); + public pluginMetadata?: (proto.IBotPluginMetadata|null); + public suggestedPromptMetadata?: (proto.IBotSuggestedPromptMetadata|null); + public invokerJid?: (string|null); + public sessionMetadata?: (proto.IBotSessionMetadata|null); + public memuMetadata?: (proto.IBotMemuMetadata|null); + public timezone?: (string|null); + public reminderMetadata?: (proto.IBotReminderMetadata|null); + public modelMetadata?: (proto.IBotModelMetadata|null); + public messageDisclaimerText?: (string|null); + public progressIndicatorMetadata?: (proto.IBotProgressIndicatorMetadata|null); + public capabilityMetadata?: (proto.IBotCapabilityMetadata|null); + public imagineMetadata?: (proto.IBotImagineMetadata|null); + public memoryMetadata?: (proto.IBotMemoryMetadata|null); + public renderingMetadata?: (proto.IBotRenderingMetadata|null); + public botMetricsMetadata?: (proto.IBotMetricsMetadata|null); + public botLinkedAccountsMetadata?: (proto.IBotLinkedAccountsMetadata|null); + public richResponseSourcesMetadata?: (proto.IBotSourcesMetadata|null); + public aiConversationContext?: (Uint8Array|null); + public botPromotionMessageMetadata?: (proto.IBotPromotionMessageMetadata|null); + public botModeSelectionMetadata?: (proto.IBotModeSelectionMetadata|null); + public botQuotaMetadata?: (proto.IBotQuotaMetadata|null); + public botAgeCollectionMetadata?: (proto.IBotAgeCollectionMetadata|null); + public conversationStarterPromptId?: (string|null); + public botResponseId?: (string|null); + public verificationMetadata?: (proto.IBotSignatureVerificationMetadata|null); + public unifiedResponseMutation?: (proto.IBotUnifiedResponseMutation|null); + public botMessageOriginMetadata?: (proto.IBotMessageOriginMetadata|null); + public inThreadSurveyMetadata?: (proto.IInThreadSurveyMetadata|null); + public botThreadInfo?: (proto.IAIThreadInfo|null); + public regenerateMetadata?: (proto.IAIRegenerateMetadata|null); + public sessionTransparencyMetadata?: (proto.ISessionTransparencyMetadata|null); + public internalMetadata?: (Uint8Array|null); + public static create(properties?: proto.IBotMetadata): proto.BotMetadata; + public static encode(m: proto.IBotMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotMetadata; + public static toObject(m: proto.BotMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum BotMetricsEntryPoint { + UNDEFINED_ENTRY_POINT = 0, + FAVICON = 1, + CHATLIST = 2, + AISEARCH_NULL_STATE_PAPER_PLANE = 3, + AISEARCH_NULL_STATE_SUGGESTION = 4, + AISEARCH_TYPE_AHEAD_SUGGESTION = 5, + AISEARCH_TYPE_AHEAD_PAPER_PLANE = 6, + AISEARCH_TYPE_AHEAD_RESULT_CHATLIST = 7, + AISEARCH_TYPE_AHEAD_RESULT_MESSAGES = 8, + AIVOICE_SEARCH_BAR = 9, + AIVOICE_FAVICON = 10, + AISTUDIO = 11, + DEEPLINK = 12, + NOTIFICATION = 13, + PROFILE_MESSAGE_BUTTON = 14, + FORWARD = 15, + APP_SHORTCUT = 16, + FF_FAMILY = 17, + AI_TAB = 18, + AI_HOME = 19, + AI_DEEPLINK_IMMERSIVE = 20, + AI_DEEPLINK = 21, + META_AI_CHAT_SHORTCUT_AI_STUDIO = 22, + UGC_CHAT_SHORTCUT_AI_STUDIO = 23, + NEW_CHAT_AI_STUDIO = 24, + AIVOICE_FAVICON_CALL_HISTORY = 25, + ASK_META_AI_CONTEXT_MENU = 26, + ASK_META_AI_CONTEXT_MENU_1ON1 = 27, + ASK_META_AI_CONTEXT_MENU_GROUP = 28, + INVOKE_META_AI_1ON1 = 29, + INVOKE_META_AI_GROUP = 30, + META_AI_FORWARD = 31, + NEW_CHAT_AI_CONTACT = 32, + MESSAGE_QUICK_ACTION_1_ON_1_CHAT = 33, + MESSAGE_QUICK_ACTION_GROUP_CHAT = 34, + ATTACHMENT_TRAY_1_ON_1_CHAT = 35, + ATTACHMENT_TRAY_GROUP_CHAT = 36, + ASK_META_AI_MEDIA_VIEWER_1ON1 = 37, + ASK_META_AI_MEDIA_VIEWER_GROUP = 38 + } + + interface IBotMetricsMetadata { + destinationId?: (string|null); + destinationEntryPoint?: (proto.BotMetricsEntryPoint|null); + threadOrigin?: (proto.BotMetricsThreadEntryPoint|null); + } + + class BotMetricsMetadata implements IBotMetricsMetadata { + constructor(p?: proto.IBotMetricsMetadata); + public destinationId?: (string|null); + public destinationEntryPoint?: (proto.BotMetricsEntryPoint|null); + public threadOrigin?: (proto.BotMetricsThreadEntryPoint|null); + public static create(properties?: proto.IBotMetricsMetadata): proto.BotMetricsMetadata; + public static encode(m: proto.IBotMetricsMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotMetricsMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotMetricsMetadata; + public static toObject(m: proto.BotMetricsMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum BotMetricsThreadEntryPoint { + AI_TAB_THREAD = 1, + AI_HOME_THREAD = 2, + AI_DEEPLINK_IMMERSIVE_THREAD = 3, + AI_DEEPLINK_THREAD = 4, + ASK_META_AI_CONTEXT_MENU_THREAD = 5 + } + + interface IBotModeSelectionMetadata { + mode?: (proto.BotModeSelectionMetadata.BotUserSelectionMode[]|null); + } + + class BotModeSelectionMetadata implements IBotModeSelectionMetadata { + constructor(p?: proto.IBotModeSelectionMetadata); + public mode: proto.BotModeSelectionMetadata.BotUserSelectionMode[]; + public static create(properties?: proto.IBotModeSelectionMetadata): proto.BotModeSelectionMetadata; + public static encode(m: proto.IBotModeSelectionMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotModeSelectionMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotModeSelectionMetadata; + public static toObject(m: proto.BotModeSelectionMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotModeSelectionMetadata { + + enum BotUserSelectionMode { + UNKNOWN_MODE = 0, + REASONING_MODE = 1 + } + } + + interface IBotModelMetadata { + modelType?: (proto.BotModelMetadata.ModelType|null); + premiumModelStatus?: (proto.BotModelMetadata.PremiumModelStatus|null); + modelNameOverride?: (string|null); + } + + class BotModelMetadata implements IBotModelMetadata { + constructor(p?: proto.IBotModelMetadata); + public modelType?: (proto.BotModelMetadata.ModelType|null); + public premiumModelStatus?: (proto.BotModelMetadata.PremiumModelStatus|null); + public modelNameOverride?: (string|null); + public static create(properties?: proto.IBotModelMetadata): proto.BotModelMetadata; + public static encode(m: proto.IBotModelMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotModelMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotModelMetadata; + public static toObject(m: proto.BotModelMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotModelMetadata { + + enum ModelType { + UNKNOWN_TYPE = 0, + LLAMA_PROD = 1, + LLAMA_PROD_PREMIUM = 2 + } + + enum PremiumModelStatus { + UNKNOWN_STATUS = 0, + AVAILABLE = 1, + QUOTA_EXCEED_LIMIT = 2 + } + } + + interface IBotPluginMetadata { + provider?: (proto.BotPluginMetadata.SearchProvider|null); + pluginType?: (proto.BotPluginMetadata.PluginType|null); + thumbnailCdnUrl?: (string|null); + profilePhotoCdnUrl?: (string|null); + searchProviderUrl?: (string|null); + referenceIndex?: (number|null); + expectedLinksCount?: (number|null); + searchQuery?: (string|null); + parentPluginMessageKey?: (proto.IMessageKey|null); + deprecatedField?: (proto.BotPluginMetadata.PluginType|null); + parentPluginType?: (proto.BotPluginMetadata.PluginType|null); + faviconCdnUrl?: (string|null); + } + + class BotPluginMetadata implements IBotPluginMetadata { + constructor(p?: proto.IBotPluginMetadata); + public provider?: (proto.BotPluginMetadata.SearchProvider|null); + public pluginType?: (proto.BotPluginMetadata.PluginType|null); + public thumbnailCdnUrl?: (string|null); + public profilePhotoCdnUrl?: (string|null); + public searchProviderUrl?: (string|null); + public referenceIndex?: (number|null); + public expectedLinksCount?: (number|null); + public searchQuery?: (string|null); + public parentPluginMessageKey?: (proto.IMessageKey|null); + public deprecatedField?: (proto.BotPluginMetadata.PluginType|null); + public parentPluginType?: (proto.BotPluginMetadata.PluginType|null); + public faviconCdnUrl?: (string|null); + public static create(properties?: proto.IBotPluginMetadata): proto.BotPluginMetadata; + public static encode(m: proto.IBotPluginMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotPluginMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotPluginMetadata; + public static toObject(m: proto.BotPluginMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotPluginMetadata { + + enum PluginType { + UNKNOWN_PLUGIN = 0, + REELS = 1, + SEARCH = 2 + } + + enum SearchProvider { + UNKNOWN = 0, + BING = 1, + GOOGLE = 2, + SUPPORT = 3 + } + } + + interface IBotProgressIndicatorMetadata { + progressDescription?: (string|null); + stepsMetadata?: (proto.BotProgressIndicatorMetadata.IBotPlanningStepMetadata[]|null); + } + + class BotProgressIndicatorMetadata implements IBotProgressIndicatorMetadata { + constructor(p?: proto.IBotProgressIndicatorMetadata); + public progressDescription?: (string|null); + public stepsMetadata: proto.BotProgressIndicatorMetadata.IBotPlanningStepMetadata[]; + public static create(properties?: proto.IBotProgressIndicatorMetadata): proto.BotProgressIndicatorMetadata; + public static encode(m: proto.IBotProgressIndicatorMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotProgressIndicatorMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotProgressIndicatorMetadata; + public static toObject(m: proto.BotProgressIndicatorMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotProgressIndicatorMetadata { + + interface IBotPlanningStepMetadata { + statusTitle?: (string|null); + statusBody?: (string|null); + sourcesMetadata?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata[]|null); + status?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus|null); + isReasoning?: (boolean|null); + isEnhancedSearch?: (boolean|null); + sections?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata[]|null); + } + + class BotPlanningStepMetadata implements IBotPlanningStepMetadata { + constructor(p?: proto.BotProgressIndicatorMetadata.IBotPlanningStepMetadata); + public statusTitle?: (string|null); + public statusBody?: (string|null); + public sourcesMetadata: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata[]; + public status?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus|null); + public isReasoning?: (boolean|null); + public isEnhancedSearch?: (boolean|null); + public sections: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata[]; + public static create(properties?: proto.BotProgressIndicatorMetadata.IBotPlanningStepMetadata): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata; + public static encode(m: proto.BotProgressIndicatorMetadata.IBotPlanningStepMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata; + public static toObject(m: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotPlanningStepMetadata { + + interface IBotPlanningSearchSourceMetadata { + title?: (string|null); + provider?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider|null); + sourceUrl?: (string|null); + favIconUrl?: (string|null); + } + + class BotPlanningSearchSourceMetadata implements IBotPlanningSearchSourceMetadata { + constructor(p?: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata); + public title?: (string|null); + public provider?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider|null); + public sourceUrl?: (string|null); + public favIconUrl?: (string|null); + public static create(properties?: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata; + public static encode(m: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata; + public static toObject(m: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotPlanningSearchSourcesMetadata { + sourceTitle?: (string|null); + provider?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider|null); + sourceUrl?: (string|null); + } + + class BotPlanningSearchSourcesMetadata implements IBotPlanningSearchSourcesMetadata { + constructor(p?: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata); + public sourceTitle?: (string|null); + public provider?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider|null); + public sourceUrl?: (string|null); + public static create(properties?: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata; + public static encode(m: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourcesMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata; + public static toObject(m: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotPlanningSearchSourcesMetadata { + + enum BotPlanningSearchSourceProvider { + UNKNOWN = 0, + OTHER = 1, + GOOGLE = 2, + BING = 3 + } + } + + interface IBotPlanningStepSectionMetadata { + sectionTitle?: (string|null); + sectionBody?: (string|null); + sourcesMetadata?: (proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata[]|null); + } + + class BotPlanningStepSectionMetadata implements IBotPlanningStepSectionMetadata { + constructor(p?: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata); + public sectionTitle?: (string|null); + public sectionBody?: (string|null); + public sourcesMetadata: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningSearchSourceMetadata[]; + public static create(properties?: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata; + public static encode(m: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.IBotPlanningStepSectionMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata; + public static toObject(m: proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum BotSearchSourceProvider { + UNKNOWN_PROVIDER = 0, + OTHER = 1, + GOOGLE = 2, + BING = 3 + } + + enum PlanningStepStatus { + UNKNOWN = 0, + PLANNED = 1, + EXECUTING = 2, + FINISHED = 3 + } + } + } + + interface IBotPromotionMessageMetadata { + promotionType?: (proto.BotPromotionMessageMetadata.BotPromotionType|null); + buttonTitle?: (string|null); + } + + class BotPromotionMessageMetadata implements IBotPromotionMessageMetadata { + constructor(p?: proto.IBotPromotionMessageMetadata); + public promotionType?: (proto.BotPromotionMessageMetadata.BotPromotionType|null); + public buttonTitle?: (string|null); + public static create(properties?: proto.IBotPromotionMessageMetadata): proto.BotPromotionMessageMetadata; + public static encode(m: proto.IBotPromotionMessageMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotPromotionMessageMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotPromotionMessageMetadata; + public static toObject(m: proto.BotPromotionMessageMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotPromotionMessageMetadata { + + enum BotPromotionType { + UNKNOWN_TYPE = 0, + C50 = 1, + SURVEY_PLATFORM = 2 + } + } + + interface IBotPromptSuggestion { + prompt?: (string|null); + promptId?: (string|null); + } + + class BotPromptSuggestion implements IBotPromptSuggestion { + constructor(p?: proto.IBotPromptSuggestion); + public prompt?: (string|null); + public promptId?: (string|null); + public static create(properties?: proto.IBotPromptSuggestion): proto.BotPromptSuggestion; + public static encode(m: proto.IBotPromptSuggestion, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotPromptSuggestion; + public static fromObject(d: { [k: string]: any }): proto.BotPromptSuggestion; + public static toObject(m: proto.BotPromptSuggestion, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotPromptSuggestions { + suggestions?: (proto.IBotPromptSuggestion[]|null); + } + + class BotPromptSuggestions implements IBotPromptSuggestions { + constructor(p?: proto.IBotPromptSuggestions); + public suggestions: proto.IBotPromptSuggestion[]; + public static create(properties?: proto.IBotPromptSuggestions): proto.BotPromptSuggestions; + public static encode(m: proto.IBotPromptSuggestions, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotPromptSuggestions; + public static fromObject(d: { [k: string]: any }): proto.BotPromptSuggestions; + public static toObject(m: proto.BotPromptSuggestions, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotQuotaMetadata { + botFeatureQuotaMetadata?: (proto.BotQuotaMetadata.IBotFeatureQuotaMetadata[]|null); + } + + class BotQuotaMetadata implements IBotQuotaMetadata { + constructor(p?: proto.IBotQuotaMetadata); + public botFeatureQuotaMetadata: proto.BotQuotaMetadata.IBotFeatureQuotaMetadata[]; + public static create(properties?: proto.IBotQuotaMetadata): proto.BotQuotaMetadata; + public static encode(m: proto.IBotQuotaMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotQuotaMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotQuotaMetadata; + public static toObject(m: proto.BotQuotaMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotQuotaMetadata { + + interface IBotFeatureQuotaMetadata { + featureType?: (proto.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType|null); + remainingQuota?: (number|null); + expirationTimestamp?: (number|Long|null); + } + + class BotFeatureQuotaMetadata implements IBotFeatureQuotaMetadata { + constructor(p?: proto.BotQuotaMetadata.IBotFeatureQuotaMetadata); + public featureType?: (proto.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType|null); + public remainingQuota?: (number|null); + public expirationTimestamp?: (number|Long|null); + public static create(properties?: proto.BotQuotaMetadata.IBotFeatureQuotaMetadata): proto.BotQuotaMetadata.BotFeatureQuotaMetadata; + public static encode(m: proto.BotQuotaMetadata.IBotFeatureQuotaMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotQuotaMetadata.BotFeatureQuotaMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotQuotaMetadata.BotFeatureQuotaMetadata; + public static toObject(m: proto.BotQuotaMetadata.BotFeatureQuotaMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotFeatureQuotaMetadata { + + enum BotFeatureType { + UNKNOWN_FEATURE = 0, + REASONING_FEATURE = 1 + } + } + } + + interface IBotReminderMetadata { + requestMessageKey?: (proto.IMessageKey|null); + action?: (proto.BotReminderMetadata.ReminderAction|null); + name?: (string|null); + nextTriggerTimestamp?: (number|Long|null); + frequency?: (proto.BotReminderMetadata.ReminderFrequency|null); + } + + class BotReminderMetadata implements IBotReminderMetadata { + constructor(p?: proto.IBotReminderMetadata); + public requestMessageKey?: (proto.IMessageKey|null); + public action?: (proto.BotReminderMetadata.ReminderAction|null); + public name?: (string|null); + public nextTriggerTimestamp?: (number|Long|null); + public frequency?: (proto.BotReminderMetadata.ReminderFrequency|null); + public static create(properties?: proto.IBotReminderMetadata): proto.BotReminderMetadata; + public static encode(m: proto.IBotReminderMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotReminderMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotReminderMetadata; + public static toObject(m: proto.BotReminderMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotReminderMetadata { + + enum ReminderAction { + NOTIFY = 1, + CREATE = 2, + DELETE = 3, + UPDATE = 4 + } + + enum ReminderFrequency { + ONCE = 1, + DAILY = 2, + WEEKLY = 3, + BIWEEKLY = 4, + MONTHLY = 5 + } + } + + interface IBotRenderingMetadata { + keywords?: (proto.BotRenderingMetadata.IKeyword[]|null); + } + + class BotRenderingMetadata implements IBotRenderingMetadata { + constructor(p?: proto.IBotRenderingMetadata); + public keywords: proto.BotRenderingMetadata.IKeyword[]; + public static create(properties?: proto.IBotRenderingMetadata): proto.BotRenderingMetadata; + public static encode(m: proto.IBotRenderingMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotRenderingMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotRenderingMetadata; + public static toObject(m: proto.BotRenderingMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotRenderingMetadata { + + interface IKeyword { + value?: (string|null); + associatedPrompts?: (string[]|null); + } + + class Keyword implements IKeyword { + constructor(p?: proto.BotRenderingMetadata.IKeyword); + public value?: (string|null); + public associatedPrompts: string[]; + public static create(properties?: proto.BotRenderingMetadata.IKeyword): proto.BotRenderingMetadata.Keyword; + public static encode(m: proto.BotRenderingMetadata.IKeyword, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotRenderingMetadata.Keyword; + public static fromObject(d: { [k: string]: any }): proto.BotRenderingMetadata.Keyword; + public static toObject(m: proto.BotRenderingMetadata.Keyword, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IBotSessionMetadata { + sessionId?: (string|null); + sessionSource?: (proto.BotSessionSource|null); + } + + class BotSessionMetadata implements IBotSessionMetadata { + constructor(p?: proto.IBotSessionMetadata); + public sessionId?: (string|null); + public sessionSource?: (proto.BotSessionSource|null); + public static create(properties?: proto.IBotSessionMetadata): proto.BotSessionMetadata; + public static encode(m: proto.IBotSessionMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotSessionMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotSessionMetadata; + public static toObject(m: proto.BotSessionMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum BotSessionSource { + NONE = 0, + NULL_STATE = 1, + TYPEAHEAD = 2, + USER_INPUT = 3, + EMU_FLASH = 4, + EMU_FLASH_FOLLOWUP = 5, + VOICE = 6 + } + + interface IBotSignatureVerificationMetadata { + proofs?: (proto.IBotSignatureVerificationUseCaseProof[]|null); + } + + class BotSignatureVerificationMetadata implements IBotSignatureVerificationMetadata { + constructor(p?: proto.IBotSignatureVerificationMetadata); + public proofs: proto.IBotSignatureVerificationUseCaseProof[]; + public static create(properties?: proto.IBotSignatureVerificationMetadata): proto.BotSignatureVerificationMetadata; + public static encode(m: proto.IBotSignatureVerificationMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotSignatureVerificationMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotSignatureVerificationMetadata; + public static toObject(m: proto.BotSignatureVerificationMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotSignatureVerificationUseCaseProof { + version?: (number|null); + useCase?: (proto.BotSignatureVerificationUseCaseProof.BotSignatureUseCase|null); + signature?: (Uint8Array|null); + certificateChain?: (Uint8Array[]|null); + } + + class BotSignatureVerificationUseCaseProof implements IBotSignatureVerificationUseCaseProof { + constructor(p?: proto.IBotSignatureVerificationUseCaseProof); + public version?: (number|null); + public useCase?: (proto.BotSignatureVerificationUseCaseProof.BotSignatureUseCase|null); + public signature?: (Uint8Array|null); + public certificateChain: Uint8Array[]; + public static create(properties?: proto.IBotSignatureVerificationUseCaseProof): proto.BotSignatureVerificationUseCaseProof; + public static encode(m: proto.IBotSignatureVerificationUseCaseProof, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotSignatureVerificationUseCaseProof; + public static fromObject(d: { [k: string]: any }): proto.BotSignatureVerificationUseCaseProof; + public static toObject(m: proto.BotSignatureVerificationUseCaseProof, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotSignatureVerificationUseCaseProof { + + enum BotSignatureUseCase { + UNSPECIFIED = 0, + WA_BOT_MSG = 1 + } + } + + interface IBotSourcesMetadata { + sources?: (proto.BotSourcesMetadata.IBotSourceItem[]|null); + } + + class BotSourcesMetadata implements IBotSourcesMetadata { + constructor(p?: proto.IBotSourcesMetadata); + public sources: proto.BotSourcesMetadata.IBotSourceItem[]; + public static create(properties?: proto.IBotSourcesMetadata): proto.BotSourcesMetadata; + public static encode(m: proto.IBotSourcesMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotSourcesMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotSourcesMetadata; + public static toObject(m: proto.BotSourcesMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotSourcesMetadata { + + interface IBotSourceItem { + provider?: (proto.BotSourcesMetadata.BotSourceItem.SourceProvider|null); + thumbnailCdnUrl?: (string|null); + sourceProviderUrl?: (string|null); + sourceQuery?: (string|null); + faviconCdnUrl?: (string|null); + citationNumber?: (number|null); + sourceTitle?: (string|null); + } + + class BotSourceItem implements IBotSourceItem { + constructor(p?: proto.BotSourcesMetadata.IBotSourceItem); + public provider?: (proto.BotSourcesMetadata.BotSourceItem.SourceProvider|null); + public thumbnailCdnUrl?: (string|null); + public sourceProviderUrl?: (string|null); + public sourceQuery?: (string|null); + public faviconCdnUrl?: (string|null); + public citationNumber?: (number|null); + public sourceTitle?: (string|null); + public static create(properties?: proto.BotSourcesMetadata.IBotSourceItem): proto.BotSourcesMetadata.BotSourceItem; + public static encode(m: proto.BotSourcesMetadata.IBotSourceItem, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotSourcesMetadata.BotSourceItem; + public static fromObject(d: { [k: string]: any }): proto.BotSourcesMetadata.BotSourceItem; + public static toObject(m: proto.BotSourcesMetadata.BotSourceItem, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotSourceItem { + + enum SourceProvider { + UNKNOWN = 0, + BING = 1, + GOOGLE = 2, + SUPPORT = 3, + OTHER = 4 + } + } + } + + interface IBotSuggestedPromptMetadata { + suggestedPrompts?: (string[]|null); + selectedPromptIndex?: (number|null); + promptSuggestions?: (proto.IBotPromptSuggestions|null); + selectedPromptId?: (string|null); + } + + class BotSuggestedPromptMetadata implements IBotSuggestedPromptMetadata { + constructor(p?: proto.IBotSuggestedPromptMetadata); + public suggestedPrompts: string[]; + public selectedPromptIndex?: (number|null); + public promptSuggestions?: (proto.IBotPromptSuggestions|null); + public selectedPromptId?: (string|null); + public static create(properties?: proto.IBotSuggestedPromptMetadata): proto.BotSuggestedPromptMetadata; + public static encode(m: proto.IBotSuggestedPromptMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotSuggestedPromptMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotSuggestedPromptMetadata; + public static toObject(m: proto.BotSuggestedPromptMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBotUnifiedResponseMutation { + sbsMetadata?: (proto.BotUnifiedResponseMutation.ISideBySideMetadata|null); + mediaDetailsMetadataList?: (proto.BotUnifiedResponseMutation.IMediaDetailsMetadata[]|null); + } + + class BotUnifiedResponseMutation implements IBotUnifiedResponseMutation { + constructor(p?: proto.IBotUnifiedResponseMutation); + public sbsMetadata?: (proto.BotUnifiedResponseMutation.ISideBySideMetadata|null); + public mediaDetailsMetadataList: proto.BotUnifiedResponseMutation.IMediaDetailsMetadata[]; + public static create(properties?: proto.IBotUnifiedResponseMutation): proto.BotUnifiedResponseMutation; + public static encode(m: proto.IBotUnifiedResponseMutation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotUnifiedResponseMutation; + public static fromObject(d: { [k: string]: any }): proto.BotUnifiedResponseMutation; + public static toObject(m: proto.BotUnifiedResponseMutation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BotUnifiedResponseMutation { + + interface IMediaDetailsMetadata { + id?: (string|null); + highResMedia?: (proto.IBotMediaMetadata|null); + previewMedia?: (proto.IBotMediaMetadata|null); + } + + class MediaDetailsMetadata implements IMediaDetailsMetadata { + constructor(p?: proto.BotUnifiedResponseMutation.IMediaDetailsMetadata); + public id?: (string|null); + public highResMedia?: (proto.IBotMediaMetadata|null); + public previewMedia?: (proto.IBotMediaMetadata|null); + public static create(properties?: proto.BotUnifiedResponseMutation.IMediaDetailsMetadata): proto.BotUnifiedResponseMutation.MediaDetailsMetadata; + public static encode(m: proto.BotUnifiedResponseMutation.IMediaDetailsMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotUnifiedResponseMutation.MediaDetailsMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotUnifiedResponseMutation.MediaDetailsMetadata; + public static toObject(m: proto.BotUnifiedResponseMutation.MediaDetailsMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISideBySideMetadata { + primaryResponseId?: (string|null); + surveyCtaHasRendered?: (boolean|null); + } + + class SideBySideMetadata implements ISideBySideMetadata { + constructor(p?: proto.BotUnifiedResponseMutation.ISideBySideMetadata); + public primaryResponseId?: (string|null); + public surveyCtaHasRendered?: (boolean|null); + public static create(properties?: proto.BotUnifiedResponseMutation.ISideBySideMetadata): proto.BotUnifiedResponseMutation.SideBySideMetadata; + public static encode(m: proto.BotUnifiedResponseMutation.ISideBySideMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotUnifiedResponseMutation.SideBySideMetadata; + public static fromObject(d: { [k: string]: any }): proto.BotUnifiedResponseMutation.SideBySideMetadata; + public static toObject(m: proto.BotUnifiedResponseMutation.SideBySideMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface ICallLogRecord { + callResult?: (proto.CallLogRecord.CallResult|null); + isDndMode?: (boolean|null); + silenceReason?: (proto.CallLogRecord.SilenceReason|null); + duration?: (number|Long|null); + startTime?: (number|Long|null); + isIncoming?: (boolean|null); + isVideo?: (boolean|null); + isCallLink?: (boolean|null); + callLinkToken?: (string|null); + scheduledCallId?: (string|null); + callId?: (string|null); + callCreatorJid?: (string|null); + groupJid?: (string|null); + participants?: (proto.CallLogRecord.IParticipantInfo[]|null); + callType?: (proto.CallLogRecord.CallType|null); + } + + class CallLogRecord implements ICallLogRecord { + constructor(p?: proto.ICallLogRecord); + public callResult?: (proto.CallLogRecord.CallResult|null); + public isDndMode?: (boolean|null); + public silenceReason?: (proto.CallLogRecord.SilenceReason|null); + public duration?: (number|Long|null); + public startTime?: (number|Long|null); + public isIncoming?: (boolean|null); + public isVideo?: (boolean|null); + public isCallLink?: (boolean|null); + public callLinkToken?: (string|null); + public scheduledCallId?: (string|null); + public callId?: (string|null); + public callCreatorJid?: (string|null); + public groupJid?: (string|null); + public participants: proto.CallLogRecord.IParticipantInfo[]; + public callType?: (proto.CallLogRecord.CallType|null); + public static create(properties?: proto.ICallLogRecord): proto.CallLogRecord; + public static encode(m: proto.ICallLogRecord, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CallLogRecord; + public static fromObject(d: { [k: string]: any }): proto.CallLogRecord; + public static toObject(m: proto.CallLogRecord, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace CallLogRecord { + + enum CallResult { + CONNECTED = 0, + REJECTED = 1, + CANCELLED = 2, + ACCEPTEDELSEWHERE = 3, + MISSED = 4, + INVALID = 5, + UNAVAILABLE = 6, + UPCOMING = 7, + FAILED = 8, + ABANDONED = 9, + ONGOING = 10 + } + + enum CallType { + REGULAR = 0, + SCHEDULED_CALL = 1, + VOICE_CHAT = 2 + } + + interface IParticipantInfo { + userJid?: (string|null); + callResult?: (proto.CallLogRecord.CallResult|null); + } + + class ParticipantInfo implements IParticipantInfo { + constructor(p?: proto.CallLogRecord.IParticipantInfo); + public userJid?: (string|null); + public callResult?: (proto.CallLogRecord.CallResult|null); + public static create(properties?: proto.CallLogRecord.IParticipantInfo): proto.CallLogRecord.ParticipantInfo; + public static encode(m: proto.CallLogRecord.IParticipantInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CallLogRecord.ParticipantInfo; + public static fromObject(d: { [k: string]: any }): proto.CallLogRecord.ParticipantInfo; + public static toObject(m: proto.CallLogRecord.ParticipantInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum SilenceReason { + NONE = 0, + SCHEDULED = 1, + PRIVACY = 2, + LIGHTWEIGHT = 3 + } + } + + interface ICertChain { + leaf?: (proto.CertChain.INoiseCertificate|null); + intermediate?: (proto.CertChain.INoiseCertificate|null); + } + + class CertChain implements ICertChain { + constructor(p?: proto.ICertChain); + public leaf?: (proto.CertChain.INoiseCertificate|null); + public intermediate?: (proto.CertChain.INoiseCertificate|null); + public static create(properties?: proto.ICertChain): proto.CertChain; + public static encode(m: proto.ICertChain, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CertChain; + public static fromObject(d: { [k: string]: any }): proto.CertChain; + public static toObject(m: proto.CertChain, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace CertChain { + + interface INoiseCertificate { + details?: (Uint8Array|null); + signature?: (Uint8Array|null); + } + + class NoiseCertificate implements INoiseCertificate { + constructor(p?: proto.CertChain.INoiseCertificate); + public details?: (Uint8Array|null); + public signature?: (Uint8Array|null); + public static create(properties?: proto.CertChain.INoiseCertificate): proto.CertChain.NoiseCertificate; + public static encode(m: proto.CertChain.INoiseCertificate, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CertChain.NoiseCertificate; + public static fromObject(d: { [k: string]: any }): proto.CertChain.NoiseCertificate; + public static toObject(m: proto.CertChain.NoiseCertificate, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace NoiseCertificate { + + interface IDetails { + serial?: (number|null); + issuerSerial?: (number|null); + key?: (Uint8Array|null); + notBefore?: (number|Long|null); + notAfter?: (number|Long|null); + } + + class Details implements IDetails { + constructor(p?: proto.CertChain.NoiseCertificate.IDetails); + public serial?: (number|null); + public issuerSerial?: (number|null); + public key?: (Uint8Array|null); + public notBefore?: (number|Long|null); + public notAfter?: (number|Long|null); + public static create(properties?: proto.CertChain.NoiseCertificate.IDetails): proto.CertChain.NoiseCertificate.Details; + public static encode(m: proto.CertChain.NoiseCertificate.IDetails, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CertChain.NoiseCertificate.Details; + public static fromObject(d: { [k: string]: any }): proto.CertChain.NoiseCertificate.Details; + public static toObject(m: proto.CertChain.NoiseCertificate.Details, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + } + + interface IChatLockSettings { + hideLockedChats?: (boolean|null); + secretCode?: (proto.IUserPassword|null); + } + + class ChatLockSettings implements IChatLockSettings { + constructor(p?: proto.IChatLockSettings); + public hideLockedChats?: (boolean|null); + public secretCode?: (proto.IUserPassword|null); + public static create(properties?: proto.IChatLockSettings): proto.ChatLockSettings; + public static encode(m: proto.IChatLockSettings, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ChatLockSettings; + public static fromObject(d: { [k: string]: any }): proto.ChatLockSettings; + public static toObject(m: proto.ChatLockSettings, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IChatRowOpaqueData { + draftMessage?: (proto.ChatRowOpaqueData.IDraftMessage|null); + } + + class ChatRowOpaqueData implements IChatRowOpaqueData { + constructor(p?: proto.IChatRowOpaqueData); + public draftMessage?: (proto.ChatRowOpaqueData.IDraftMessage|null); + public static create(properties?: proto.IChatRowOpaqueData): proto.ChatRowOpaqueData; + public static encode(m: proto.IChatRowOpaqueData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ChatRowOpaqueData; + public static fromObject(d: { [k: string]: any }): proto.ChatRowOpaqueData; + public static toObject(m: proto.ChatRowOpaqueData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ChatRowOpaqueData { + + interface IDraftMessage { + text?: (string|null); + omittedUrl?: (string|null); + ctwaContextLinkData?: (proto.ChatRowOpaqueData.DraftMessage.ICtwaContextLinkData|null); + ctwaContext?: (proto.ChatRowOpaqueData.DraftMessage.ICtwaContextData|null); + timestamp?: (number|Long|null); + } + + class DraftMessage implements IDraftMessage { + constructor(p?: proto.ChatRowOpaqueData.IDraftMessage); + public text?: (string|null); + public omittedUrl?: (string|null); + public ctwaContextLinkData?: (proto.ChatRowOpaqueData.DraftMessage.ICtwaContextLinkData|null); + public ctwaContext?: (proto.ChatRowOpaqueData.DraftMessage.ICtwaContextData|null); + public timestamp?: (number|Long|null); + public static create(properties?: proto.ChatRowOpaqueData.IDraftMessage): proto.ChatRowOpaqueData.DraftMessage; + public static encode(m: proto.ChatRowOpaqueData.IDraftMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ChatRowOpaqueData.DraftMessage; + public static fromObject(d: { [k: string]: any }): proto.ChatRowOpaqueData.DraftMessage; + public static toObject(m: proto.ChatRowOpaqueData.DraftMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace DraftMessage { + + interface ICtwaContextData { + conversionSource?: (string|null); + conversionData?: (Uint8Array|null); + sourceUrl?: (string|null); + sourceId?: (string|null); + sourceType?: (string|null); + title?: (string|null); + description?: (string|null); + thumbnail?: (string|null); + thumbnailUrl?: (string|null); + mediaType?: (proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.ContextInfoExternalAdReplyInfoMediaType|null); + mediaUrl?: (string|null); + isSuspiciousLink?: (boolean|null); + } + + class CtwaContextData implements ICtwaContextData { + constructor(p?: proto.ChatRowOpaqueData.DraftMessage.ICtwaContextData); + public conversionSource?: (string|null); + public conversionData?: (Uint8Array|null); + public sourceUrl?: (string|null); + public sourceId?: (string|null); + public sourceType?: (string|null); + public title?: (string|null); + public description?: (string|null); + public thumbnail?: (string|null); + public thumbnailUrl?: (string|null); + public mediaType?: (proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.ContextInfoExternalAdReplyInfoMediaType|null); + public mediaUrl?: (string|null); + public isSuspiciousLink?: (boolean|null); + public static create(properties?: proto.ChatRowOpaqueData.DraftMessage.ICtwaContextData): proto.ChatRowOpaqueData.DraftMessage.CtwaContextData; + public static encode(m: proto.ChatRowOpaqueData.DraftMessage.ICtwaContextData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ChatRowOpaqueData.DraftMessage.CtwaContextData; + public static fromObject(d: { [k: string]: any }): proto.ChatRowOpaqueData.DraftMessage.CtwaContextData; + public static toObject(m: proto.ChatRowOpaqueData.DraftMessage.CtwaContextData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace CtwaContextData { + + enum ContextInfoExternalAdReplyInfoMediaType { + NONE = 0, + IMAGE = 1, + VIDEO = 2 + } + } + + interface ICtwaContextLinkData { + context?: (string|null); + sourceUrl?: (string|null); + icebreaker?: (string|null); + phone?: (string|null); + } + + class CtwaContextLinkData implements ICtwaContextLinkData { + constructor(p?: proto.ChatRowOpaqueData.DraftMessage.ICtwaContextLinkData); + public context?: (string|null); + public sourceUrl?: (string|null); + public icebreaker?: (string|null); + public phone?: (string|null); + public static create(properties?: proto.ChatRowOpaqueData.DraftMessage.ICtwaContextLinkData): proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData; + public static encode(m: proto.ChatRowOpaqueData.DraftMessage.ICtwaContextLinkData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData; + public static fromObject(d: { [k: string]: any }): proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData; + public static toObject(m: proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + } + + interface ICitation { + title?: (string|null); + subtitle?: (string|null); + cmsId?: (string|null); + imageUrl?: (string|null); + } + + class Citation implements ICitation { + constructor(p?: proto.ICitation); + public title: string; + public subtitle: string; + public cmsId: string; + public imageUrl: string; + public static create(properties?: proto.ICitation): proto.Citation; + public static encode(m: proto.ICitation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Citation; + public static fromObject(d: { [k: string]: any }): proto.Citation; + public static toObject(m: proto.Citation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IClientPairingProps { + isChatDbLidMigrated?: (boolean|null); + isSyncdPureLidSession?: (boolean|null); + isSyncdSnapshotRecoveryEnabled?: (boolean|null); + } + + class ClientPairingProps implements IClientPairingProps { + constructor(p?: proto.IClientPairingProps); + public isChatDbLidMigrated?: (boolean|null); + public isSyncdPureLidSession?: (boolean|null); + public isSyncdSnapshotRecoveryEnabled?: (boolean|null); + public static create(properties?: proto.IClientPairingProps): proto.ClientPairingProps; + public static encode(m: proto.IClientPairingProps, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPairingProps; + public static fromObject(d: { [k: string]: any }): proto.ClientPairingProps; + public static toObject(m: proto.ClientPairingProps, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IClientPayload { + username?: (number|Long|null); + passive?: (boolean|null); + userAgent?: (proto.ClientPayload.IUserAgent|null); + webInfo?: (proto.ClientPayload.IWebInfo|null); + pushName?: (string|null); + sessionId?: (number|null); + shortConnect?: (boolean|null); + connectType?: (proto.ClientPayload.ConnectType|null); + connectReason?: (proto.ClientPayload.ConnectReason|null); + shards?: (number[]|null); + dnsSource?: (proto.ClientPayload.IDNSSource|null); + connectAttemptCount?: (number|null); + device?: (number|null); + devicePairingData?: (proto.ClientPayload.IDevicePairingRegistrationData|null); + product?: (proto.ClientPayload.Product|null); + fbCat?: (Uint8Array|null); + fbUserAgent?: (Uint8Array|null); + oc?: (boolean|null); + lc?: (number|null); + iosAppExtension?: (proto.ClientPayload.IOSAppExtension|null); + fbAppId?: (number|Long|null); + fbDeviceId?: (Uint8Array|null); + pull?: (boolean|null); + paddingBytes?: (Uint8Array|null); + yearClass?: (number|null); + memClass?: (number|null); + interopData?: (proto.ClientPayload.IInteropData|null); + trafficAnonymization?: (proto.ClientPayload.TrafficAnonymization|null); + lidDbMigrated?: (boolean|null); + accountType?: (proto.ClientPayload.AccountType|null); + connectionSequenceInfo?: (number|null); + paaLink?: (boolean|null); + preacksCount?: (number|null); + processingQueueSize?: (number|null); + } + + class ClientPayload implements IClientPayload { + constructor(p?: proto.IClientPayload); + public username?: (number|Long|null); + public passive?: (boolean|null); + public userAgent?: (proto.ClientPayload.IUserAgent|null); + public webInfo?: (proto.ClientPayload.IWebInfo|null); + public pushName?: (string|null); + public sessionId?: (number|null); + public shortConnect?: (boolean|null); + public connectType?: (proto.ClientPayload.ConnectType|null); + public connectReason?: (proto.ClientPayload.ConnectReason|null); + public shards: number[]; + public dnsSource?: (proto.ClientPayload.IDNSSource|null); + public connectAttemptCount?: (number|null); + public device?: (number|null); + public devicePairingData?: (proto.ClientPayload.IDevicePairingRegistrationData|null); + public product?: (proto.ClientPayload.Product|null); + public fbCat?: (Uint8Array|null); + public fbUserAgent?: (Uint8Array|null); + public oc?: (boolean|null); + public lc?: (number|null); + public iosAppExtension?: (proto.ClientPayload.IOSAppExtension|null); + public fbAppId?: (number|Long|null); + public fbDeviceId?: (Uint8Array|null); + public pull?: (boolean|null); + public paddingBytes?: (Uint8Array|null); + public yearClass?: (number|null); + public memClass?: (number|null); + public interopData?: (proto.ClientPayload.IInteropData|null); + public trafficAnonymization?: (proto.ClientPayload.TrafficAnonymization|null); + public lidDbMigrated?: (boolean|null); + public accountType?: (proto.ClientPayload.AccountType|null); + public connectionSequenceInfo?: (number|null); + public paaLink?: (boolean|null); + public preacksCount?: (number|null); + public processingQueueSize?: (number|null); + public static create(properties?: proto.IClientPayload): proto.ClientPayload; + public static encode(m: proto.IClientPayload, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload; + public static toObject(m: proto.ClientPayload, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ClientPayload { + + enum AccountType { + DEFAULT = 0, + GUEST = 1 + } + + enum ConnectReason { + PUSH = 0, + USER_ACTIVATED = 1, + SCHEDULED = 2, + ERROR_RECONNECT = 3, + NETWORK_SWITCH = 4, + PING_RECONNECT = 5, + UNKNOWN = 6 + } + + enum ConnectType { + CELLULAR_UNKNOWN = 0, + WIFI_UNKNOWN = 1, + CELLULAR_EDGE = 100, + CELLULAR_IDEN = 101, + CELLULAR_UMTS = 102, + CELLULAR_EVDO = 103, + CELLULAR_GPRS = 104, + CELLULAR_HSDPA = 105, + CELLULAR_HSUPA = 106, + CELLULAR_HSPA = 107, + CELLULAR_CDMA = 108, + CELLULAR_1XRTT = 109, + CELLULAR_EHRPD = 110, + CELLULAR_LTE = 111, + CELLULAR_HSPAP = 112 + } + + interface IDNSSource { + dnsMethod?: (proto.ClientPayload.DNSSource.DNSResolutionMethod|null); + appCached?: (boolean|null); + } + + class DNSSource implements IDNSSource { + constructor(p?: proto.ClientPayload.IDNSSource); + public dnsMethod?: (proto.ClientPayload.DNSSource.DNSResolutionMethod|null); + public appCached?: (boolean|null); + public static create(properties?: proto.ClientPayload.IDNSSource): proto.ClientPayload.DNSSource; + public static encode(m: proto.ClientPayload.IDNSSource, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload.DNSSource; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload.DNSSource; + public static toObject(m: proto.ClientPayload.DNSSource, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace DNSSource { + + enum DNSResolutionMethod { + SYSTEM = 0, + GOOGLE = 1, + HARDCODED = 2, + OVERRIDE = 3, + FALLBACK = 4, + MNS = 5 + } + } + + interface IDevicePairingRegistrationData { + eRegid?: (Uint8Array|null); + eKeytype?: (Uint8Array|null); + eIdent?: (Uint8Array|null); + eSkeyId?: (Uint8Array|null); + eSkeyVal?: (Uint8Array|null); + eSkeySig?: (Uint8Array|null); + buildHash?: (Uint8Array|null); + deviceProps?: (Uint8Array|null); + } + + class DevicePairingRegistrationData implements IDevicePairingRegistrationData { + constructor(p?: proto.ClientPayload.IDevicePairingRegistrationData); + public eRegid?: (Uint8Array|null); + public eKeytype?: (Uint8Array|null); + public eIdent?: (Uint8Array|null); + public eSkeyId?: (Uint8Array|null); + public eSkeyVal?: (Uint8Array|null); + public eSkeySig?: (Uint8Array|null); + public buildHash?: (Uint8Array|null); + public deviceProps?: (Uint8Array|null); + public static create(properties?: proto.ClientPayload.IDevicePairingRegistrationData): proto.ClientPayload.DevicePairingRegistrationData; + public static encode(m: proto.ClientPayload.IDevicePairingRegistrationData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload.DevicePairingRegistrationData; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload.DevicePairingRegistrationData; + public static toObject(m: proto.ClientPayload.DevicePairingRegistrationData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum IOSAppExtension { + SHARE_EXTENSION = 0, + SERVICE_EXTENSION = 1, + INTENTS_EXTENSION = 2 + } + + interface IInteropData { + accountId?: (number|Long|null); + token?: (Uint8Array|null); + enableReadReceipts?: (boolean|null); + } + + class InteropData implements IInteropData { + constructor(p?: proto.ClientPayload.IInteropData); + public accountId?: (number|Long|null); + public token?: (Uint8Array|null); + public enableReadReceipts?: (boolean|null); + public static create(properties?: proto.ClientPayload.IInteropData): proto.ClientPayload.InteropData; + public static encode(m: proto.ClientPayload.IInteropData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload.InteropData; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload.InteropData; + public static toObject(m: proto.ClientPayload.InteropData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum Product { + WHATSAPP = 0, + MESSENGER = 1, + INTEROP = 2, + INTEROP_MSGR = 3, + WHATSAPP_LID = 4 + } + + enum TrafficAnonymization { + OFF = 0, + STANDARD = 1 + } + + interface IUserAgent { + platform?: (proto.ClientPayload.UserAgent.Platform|null); + appVersion?: (proto.ClientPayload.UserAgent.IAppVersion|null); + mcc?: (string|null); + mnc?: (string|null); + osVersion?: (string|null); + manufacturer?: (string|null); + device?: (string|null); + osBuildNumber?: (string|null); + phoneId?: (string|null); + releaseChannel?: (proto.ClientPayload.UserAgent.ReleaseChannel|null); + localeLanguageIso6391?: (string|null); + localeCountryIso31661Alpha2?: (string|null); + deviceBoard?: (string|null); + deviceExpId?: (string|null); + deviceType?: (proto.ClientPayload.UserAgent.DeviceType|null); + deviceModelType?: (string|null); + } + + class UserAgent implements IUserAgent { + constructor(p?: proto.ClientPayload.IUserAgent); + public platform?: (proto.ClientPayload.UserAgent.Platform|null); + public appVersion?: (proto.ClientPayload.UserAgent.IAppVersion|null); + public mcc?: (string|null); + public mnc?: (string|null); + public osVersion?: (string|null); + public manufacturer?: (string|null); + public device?: (string|null); + public osBuildNumber?: (string|null); + public phoneId?: (string|null); + public releaseChannel?: (proto.ClientPayload.UserAgent.ReleaseChannel|null); + public localeLanguageIso6391?: (string|null); + public localeCountryIso31661Alpha2?: (string|null); + public deviceBoard?: (string|null); + public deviceExpId?: (string|null); + public deviceType?: (proto.ClientPayload.UserAgent.DeviceType|null); + public deviceModelType?: (string|null); + public static create(properties?: proto.ClientPayload.IUserAgent): proto.ClientPayload.UserAgent; + public static encode(m: proto.ClientPayload.IUserAgent, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload.UserAgent; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload.UserAgent; + public static toObject(m: proto.ClientPayload.UserAgent, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace UserAgent { + + interface IAppVersion { + primary?: (number|null); + secondary?: (number|null); + tertiary?: (number|null); + quaternary?: (number|null); + quinary?: (number|null); + } + + class AppVersion implements IAppVersion { + constructor(p?: proto.ClientPayload.UserAgent.IAppVersion); + public primary?: (number|null); + public secondary?: (number|null); + public tertiary?: (number|null); + public quaternary?: (number|null); + public quinary?: (number|null); + public static create(properties?: proto.ClientPayload.UserAgent.IAppVersion): proto.ClientPayload.UserAgent.AppVersion; + public static encode(m: proto.ClientPayload.UserAgent.IAppVersion, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload.UserAgent.AppVersion; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload.UserAgent.AppVersion; + public static toObject(m: proto.ClientPayload.UserAgent.AppVersion, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum DeviceType { + PHONE = 0, + TABLET = 1, + DESKTOP = 2, + WEARABLE = 3, + VR = 4 + } + + enum Platform { + ANDROID = 0, + IOS = 1, + WINDOWS_PHONE = 2, + BLACKBERRY = 3, + BLACKBERRYX = 4, + S40 = 5, + S60 = 6, + PYTHON_CLIENT = 7, + TIZEN = 8, + ENTERPRISE = 9, + SMB_ANDROID = 10, + KAIOS = 11, + SMB_IOS = 12, + WINDOWS = 13, + WEB = 14, + PORTAL = 15, + GREEN_ANDROID = 16, + GREEN_IPHONE = 17, + BLUE_ANDROID = 18, + BLUE_IPHONE = 19, + FBLITE_ANDROID = 20, + MLITE_ANDROID = 21, + IGLITE_ANDROID = 22, + PAGE = 23, + MACOS = 24, + OCULUS_MSG = 25, + OCULUS_CALL = 26, + MILAN = 27, + CAPI = 28, + WEAROS = 29, + ARDEVICE = 30, + VRDEVICE = 31, + BLUE_WEB = 32, + IPAD = 33, + TEST = 34, + SMART_GLASSES = 35, + BLUE_VR = 36, + AR_WRIST = 37 + } + + enum ReleaseChannel { + RELEASE = 0, + BETA = 1, + ALPHA = 2, + DEBUG = 3 + } + } + + interface IWebInfo { + refToken?: (string|null); + version?: (string|null); + webdPayload?: (proto.ClientPayload.WebInfo.IWebdPayload|null); + webSubPlatform?: (proto.ClientPayload.WebInfo.WebSubPlatform|null); + } + + class WebInfo implements IWebInfo { + constructor(p?: proto.ClientPayload.IWebInfo); + public refToken?: (string|null); + public version?: (string|null); + public webdPayload?: (proto.ClientPayload.WebInfo.IWebdPayload|null); + public webSubPlatform?: (proto.ClientPayload.WebInfo.WebSubPlatform|null); + public static create(properties?: proto.ClientPayload.IWebInfo): proto.ClientPayload.WebInfo; + public static encode(m: proto.ClientPayload.IWebInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload.WebInfo; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload.WebInfo; + public static toObject(m: proto.ClientPayload.WebInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace WebInfo { + + enum WebSubPlatform { + WEB_BROWSER = 0, + APP_STORE = 1, + WIN_STORE = 2, + DARWIN = 3, + WIN32 = 4, + WIN_HYBRID = 5 + } + + interface IWebdPayload { + usesParticipantInKey?: (boolean|null); + supportsStarredMessages?: (boolean|null); + supportsDocumentMessages?: (boolean|null); + supportsUrlMessages?: (boolean|null); + supportsMediaRetry?: (boolean|null); + supportsE2EImage?: (boolean|null); + supportsE2EVideo?: (boolean|null); + supportsE2EAudio?: (boolean|null); + supportsE2EDocument?: (boolean|null); + documentTypes?: (string|null); + features?: (Uint8Array|null); + } + + class WebdPayload implements IWebdPayload { + constructor(p?: proto.ClientPayload.WebInfo.IWebdPayload); + public usesParticipantInKey?: (boolean|null); + public supportsStarredMessages?: (boolean|null); + public supportsDocumentMessages?: (boolean|null); + public supportsUrlMessages?: (boolean|null); + public supportsMediaRetry?: (boolean|null); + public supportsE2EImage?: (boolean|null); + public supportsE2EVideo?: (boolean|null); + public supportsE2EAudio?: (boolean|null); + public supportsE2EDocument?: (boolean|null); + public documentTypes?: (string|null); + public features?: (Uint8Array|null); + public static create(properties?: proto.ClientPayload.WebInfo.IWebdPayload): proto.ClientPayload.WebInfo.WebdPayload; + public static encode(m: proto.ClientPayload.WebInfo.IWebdPayload, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ClientPayload.WebInfo.WebdPayload; + public static fromObject(d: { [k: string]: any }): proto.ClientPayload.WebInfo.WebdPayload; + public static toObject(m: proto.ClientPayload.WebInfo.WebdPayload, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + } + + enum CollectionName { + COLLECTION_NAME_UNKNOWN = 0, + REGULAR = 1, + REGULAR_LOW = 2, + REGULAR_HIGH = 3, + CRITICAL_BLOCK = 4, + CRITICAL_UNBLOCK_LOW = 5 + } + + interface ICommentMetadata { + commentParentKey?: (proto.IMessageKey|null); + replyCount?: (number|null); + } + + class CommentMetadata implements ICommentMetadata { + constructor(p?: proto.ICommentMetadata); + public commentParentKey?: (proto.IMessageKey|null); + public replyCount?: (number|null); + public static create(properties?: proto.ICommentMetadata): proto.CommentMetadata; + public static encode(m: proto.ICommentMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CommentMetadata; + public static fromObject(d: { [k: string]: any }): proto.CommentMetadata; + public static toObject(m: proto.CommentMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICompanionCommitment { + hash?: (Uint8Array|null); + } + + class CompanionCommitment implements ICompanionCommitment { + constructor(p?: proto.ICompanionCommitment); + public hash?: (Uint8Array|null); + public static create(properties?: proto.ICompanionCommitment): proto.CompanionCommitment; + public static encode(m: proto.ICompanionCommitment, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CompanionCommitment; + public static fromObject(d: { [k: string]: any }): proto.CompanionCommitment; + public static toObject(m: proto.CompanionCommitment, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICompanionEphemeralIdentity { + publicKey?: (Uint8Array|null); + deviceType?: (proto.DeviceProps.PlatformType|null); + ref?: (string|null); + } + + class CompanionEphemeralIdentity implements ICompanionEphemeralIdentity { + constructor(p?: proto.ICompanionEphemeralIdentity); + public publicKey?: (Uint8Array|null); + public deviceType?: (proto.DeviceProps.PlatformType|null); + public ref?: (string|null); + public static create(properties?: proto.ICompanionEphemeralIdentity): proto.CompanionEphemeralIdentity; + public static encode(m: proto.ICompanionEphemeralIdentity, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.CompanionEphemeralIdentity; + public static fromObject(d: { [k: string]: any }): proto.CompanionEphemeralIdentity; + public static toObject(m: proto.CompanionEphemeralIdentity, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IConfig { + field?: ({ [k: string]: proto.IField }|null); + version?: (number|null); + } + + class Config implements IConfig { + constructor(p?: proto.IConfig); + public field: { [k: string]: proto.IField }; + public version?: (number|null); + public static create(properties?: proto.IConfig): proto.Config; + public static encode(m: proto.IConfig, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Config; + public static fromObject(d: { [k: string]: any }): proto.Config; + public static toObject(m: proto.Config, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IContextInfo { + stanzaId?: (string|null); + participant?: (string|null); + quotedMessage?: (proto.IMessage|null); + remoteJid?: (string|null); + mentionedJid?: (string[]|null); + conversionSource?: (string|null); + conversionData?: (Uint8Array|null); + conversionDelaySeconds?: (number|null); + forwardingScore?: (number|null); + isForwarded?: (boolean|null); + quotedAd?: (proto.ContextInfo.IAdReplyInfo|null); + placeholderKey?: (proto.IMessageKey|null); + expiration?: (number|null); + ephemeralSettingTimestamp?: (number|Long|null); + ephemeralSharedSecret?: (Uint8Array|null); + externalAdReply?: (proto.ContextInfo.IExternalAdReplyInfo|null); + entryPointConversionSource?: (string|null); + entryPointConversionApp?: (string|null); + entryPointConversionDelaySeconds?: (number|null); + disappearingMode?: (proto.IDisappearingMode|null); + actionLink?: (proto.IActionLink|null); + groupSubject?: (string|null); + parentGroupJid?: (string|null); + trustBannerType?: (string|null); + trustBannerAction?: (number|null); + isSampled?: (boolean|null); + groupMentions?: (proto.IGroupMention[]|null); + utm?: (proto.ContextInfo.IUTMInfo|null); + forwardedNewsletterMessageInfo?: (proto.ContextInfo.IForwardedNewsletterMessageInfo|null); + businessMessageForwardInfo?: (proto.ContextInfo.IBusinessMessageForwardInfo|null); + smbClientCampaignId?: (string|null); + smbServerCampaignId?: (string|null); + dataSharingContext?: (proto.ContextInfo.IDataSharingContext|null); + alwaysShowAdAttribution?: (boolean|null); + featureEligibilities?: (proto.ContextInfo.IFeatureEligibilities|null); + entryPointConversionExternalSource?: (string|null); + entryPointConversionExternalMedium?: (string|null); + ctwaSignals?: (string|null); + ctwaPayload?: (Uint8Array|null); + forwardedAiBotMessageInfo?: (proto.IForwardedAIBotMessageInfo|null); + statusAttributionType?: (proto.ContextInfo.StatusAttributionType|null); + urlTrackingMap?: (proto.IUrlTrackingMap|null); + pairedMediaType?: (proto.ContextInfo.PairedMediaType|null); + rankingVersion?: (number|null); + memberLabel?: (proto.IMemberLabel|null); + isQuestion?: (boolean|null); + statusSourceType?: (proto.ContextInfo.StatusSourceType|null); + statusAttributions?: (proto.IStatusAttribution[]|null); + isGroupStatus?: (boolean|null); + forwardOrigin?: (proto.ContextInfo.ForwardOrigin|null); + questionReplyQuotedMessage?: (proto.ContextInfo.IQuestionReplyQuotedMessage|null); + statusAudienceMetadata?: (proto.ContextInfo.IStatusAudienceMetadata|null); + nonJidMentions?: (number|null); + quotedType?: (proto.ContextInfo.QuotedType|null); + botMessageSharingInfo?: (proto.IBotMessageSharingInfo|null); + } + + class ContextInfo implements IContextInfo { + constructor(p?: proto.IContextInfo); + public stanzaId?: (string|null); + public participant?: (string|null); + public quotedMessage?: (proto.IMessage|null); + public remoteJid?: (string|null); + public mentionedJid: string[]; + public conversionSource?: (string|null); + public conversionData?: (Uint8Array|null); + public conversionDelaySeconds?: (number|null); + public forwardingScore?: (number|null); + public isForwarded?: (boolean|null); + public quotedAd?: (proto.ContextInfo.IAdReplyInfo|null); + public placeholderKey?: (proto.IMessageKey|null); + public expiration?: (number|null); + public ephemeralSettingTimestamp?: (number|Long|null); + public ephemeralSharedSecret?: (Uint8Array|null); + public externalAdReply?: (proto.ContextInfo.IExternalAdReplyInfo|null); + public entryPointConversionSource?: (string|null); + public entryPointConversionApp?: (string|null); + public entryPointConversionDelaySeconds?: (number|null); + public disappearingMode?: (proto.IDisappearingMode|null); + public actionLink?: (proto.IActionLink|null); + public groupSubject?: (string|null); + public parentGroupJid?: (string|null); + public trustBannerType?: (string|null); + public trustBannerAction?: (number|null); + public isSampled?: (boolean|null); + public groupMentions: proto.IGroupMention[]; + public utm?: (proto.ContextInfo.IUTMInfo|null); + public forwardedNewsletterMessageInfo?: (proto.ContextInfo.IForwardedNewsletterMessageInfo|null); + public businessMessageForwardInfo?: (proto.ContextInfo.IBusinessMessageForwardInfo|null); + public smbClientCampaignId?: (string|null); + public smbServerCampaignId?: (string|null); + public dataSharingContext?: (proto.ContextInfo.IDataSharingContext|null); + public alwaysShowAdAttribution?: (boolean|null); + public featureEligibilities?: (proto.ContextInfo.IFeatureEligibilities|null); + public entryPointConversionExternalSource?: (string|null); + public entryPointConversionExternalMedium?: (string|null); + public ctwaSignals?: (string|null); + public ctwaPayload?: (Uint8Array|null); + public forwardedAiBotMessageInfo?: (proto.IForwardedAIBotMessageInfo|null); + public statusAttributionType?: (proto.ContextInfo.StatusAttributionType|null); + public urlTrackingMap?: (proto.IUrlTrackingMap|null); + public pairedMediaType?: (proto.ContextInfo.PairedMediaType|null); + public rankingVersion?: (number|null); + public memberLabel?: (proto.IMemberLabel|null); + public isQuestion?: (boolean|null); + public statusSourceType?: (proto.ContextInfo.StatusSourceType|null); + public statusAttributions: proto.IStatusAttribution[]; + public isGroupStatus?: (boolean|null); + public forwardOrigin?: (proto.ContextInfo.ForwardOrigin|null); + public questionReplyQuotedMessage?: (proto.ContextInfo.IQuestionReplyQuotedMessage|null); + public statusAudienceMetadata?: (proto.ContextInfo.IStatusAudienceMetadata|null); + public nonJidMentions?: (number|null); + public quotedType?: (proto.ContextInfo.QuotedType|null); + public botMessageSharingInfo?: (proto.IBotMessageSharingInfo|null); + public static create(properties?: proto.IContextInfo): proto.ContextInfo; + public static encode(m: proto.IContextInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo; + public static toObject(m: proto.ContextInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ContextInfo { + + interface IAdReplyInfo { + advertiserName?: (string|null); + mediaType?: (proto.ContextInfo.AdReplyInfo.MediaType|null); + jpegThumbnail?: (Uint8Array|null); + caption?: (string|null); + } + + class AdReplyInfo implements IAdReplyInfo { + constructor(p?: proto.ContextInfo.IAdReplyInfo); + public advertiserName?: (string|null); + public mediaType?: (proto.ContextInfo.AdReplyInfo.MediaType|null); + public jpegThumbnail?: (Uint8Array|null); + public caption?: (string|null); + public static create(properties?: proto.ContextInfo.IAdReplyInfo): proto.ContextInfo.AdReplyInfo; + public static encode(m: proto.ContextInfo.IAdReplyInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.AdReplyInfo; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.AdReplyInfo; + public static toObject(m: proto.ContextInfo.AdReplyInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AdReplyInfo { + + enum MediaType { + NONE = 0, + IMAGE = 1, + VIDEO = 2 + } + } + + interface IBusinessMessageForwardInfo { + businessOwnerJid?: (string|null); + } + + class BusinessMessageForwardInfo implements IBusinessMessageForwardInfo { + constructor(p?: proto.ContextInfo.IBusinessMessageForwardInfo); + public businessOwnerJid?: (string|null); + public static create(properties?: proto.ContextInfo.IBusinessMessageForwardInfo): proto.ContextInfo.BusinessMessageForwardInfo; + public static encode(m: proto.ContextInfo.IBusinessMessageForwardInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.BusinessMessageForwardInfo; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.BusinessMessageForwardInfo; + public static toObject(m: proto.ContextInfo.BusinessMessageForwardInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDataSharingContext { + showMmDisclosure?: (boolean|null); + encryptedSignalTokenConsented?: (string|null); + parameters?: (proto.ContextInfo.DataSharingContext.IParameters[]|null); + dataSharingFlags?: (number|null); + } + + class DataSharingContext implements IDataSharingContext { + constructor(p?: proto.ContextInfo.IDataSharingContext); + public showMmDisclosure?: (boolean|null); + public encryptedSignalTokenConsented?: (string|null); + public parameters: proto.ContextInfo.DataSharingContext.IParameters[]; + public dataSharingFlags?: (number|null); + public static create(properties?: proto.ContextInfo.IDataSharingContext): proto.ContextInfo.DataSharingContext; + public static encode(m: proto.ContextInfo.IDataSharingContext, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.DataSharingContext; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.DataSharingContext; + public static toObject(m: proto.ContextInfo.DataSharingContext, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace DataSharingContext { + + enum DataSharingFlags { + SHOW_MM_DISCLOSURE_ON_CLICK = 1, + SHOW_MM_DISCLOSURE_ON_READ = 2 + } + + interface IParameters { + key?: (string|null); + stringData?: (string|null); + intData?: (number|Long|null); + floatData?: (number|null); + contents?: (proto.ContextInfo.DataSharingContext.IParameters|null); + } + + class Parameters implements IParameters { + constructor(p?: proto.ContextInfo.DataSharingContext.IParameters); + public key?: (string|null); + public stringData?: (string|null); + public intData?: (number|Long|null); + public floatData?: (number|null); + public contents?: (proto.ContextInfo.DataSharingContext.IParameters|null); + public static create(properties?: proto.ContextInfo.DataSharingContext.IParameters): proto.ContextInfo.DataSharingContext.Parameters; + public static encode(m: proto.ContextInfo.DataSharingContext.IParameters, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.DataSharingContext.Parameters; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.DataSharingContext.Parameters; + public static toObject(m: proto.ContextInfo.DataSharingContext.Parameters, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IExternalAdReplyInfo { + title?: (string|null); + body?: (string|null); + mediaType?: (proto.ContextInfo.ExternalAdReplyInfo.MediaType|null); + thumbnailUrl?: (string|null); + mediaUrl?: (string|null); + thumbnail?: (Uint8Array|null); + sourceType?: (string|null); + sourceId?: (string|null); + sourceUrl?: (string|null); + containsAutoReply?: (boolean|null); + renderLargerThumbnail?: (boolean|null); + showAdAttribution?: (boolean|null); + ctwaClid?: (string|null); + ref?: (string|null); + clickToWhatsappCall?: (boolean|null); + adContextPreviewDismissed?: (boolean|null); + sourceApp?: (string|null); + automatedGreetingMessageShown?: (boolean|null); + greetingMessageBody?: (string|null); + ctaPayload?: (string|null); + disableNudge?: (boolean|null); + originalImageUrl?: (string|null); + automatedGreetingMessageCtaType?: (string|null); + wtwaAdFormat?: (boolean|null); + adType?: (proto.ContextInfo.ExternalAdReplyInfo.AdType|null); + wtwaWebsiteUrl?: (string|null); + adPreviewUrl?: (string|null); + } + + class ExternalAdReplyInfo implements IExternalAdReplyInfo { + constructor(p?: proto.ContextInfo.IExternalAdReplyInfo); + public title?: (string|null); + public body?: (string|null); + public mediaType?: (proto.ContextInfo.ExternalAdReplyInfo.MediaType|null); + public thumbnailUrl?: (string|null); + public mediaUrl?: (string|null); + public thumbnail?: (Uint8Array|null); + public sourceType?: (string|null); + public sourceId?: (string|null); + public sourceUrl?: (string|null); + public containsAutoReply?: (boolean|null); + public renderLargerThumbnail?: (boolean|null); + public showAdAttribution?: (boolean|null); + public ctwaClid?: (string|null); + public ref?: (string|null); + public clickToWhatsappCall?: (boolean|null); + public adContextPreviewDismissed?: (boolean|null); + public sourceApp?: (string|null); + public automatedGreetingMessageShown?: (boolean|null); + public greetingMessageBody?: (string|null); + public ctaPayload?: (string|null); + public disableNudge?: (boolean|null); + public originalImageUrl?: (string|null); + public automatedGreetingMessageCtaType?: (string|null); + public wtwaAdFormat?: (boolean|null); + public adType?: (proto.ContextInfo.ExternalAdReplyInfo.AdType|null); + public wtwaWebsiteUrl?: (string|null); + public adPreviewUrl?: (string|null); + public static create(properties?: proto.ContextInfo.IExternalAdReplyInfo): proto.ContextInfo.ExternalAdReplyInfo; + public static encode(m: proto.ContextInfo.IExternalAdReplyInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.ExternalAdReplyInfo; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.ExternalAdReplyInfo; + public static toObject(m: proto.ContextInfo.ExternalAdReplyInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ExternalAdReplyInfo { + + enum AdType { + CTWA = 0, + CAWC = 1 + } + + enum MediaType { + NONE = 0, + IMAGE = 1, + VIDEO = 2 + } + } + + interface IFeatureEligibilities { + cannotBeReactedTo?: (boolean|null); + cannotBeRanked?: (boolean|null); + canRequestFeedback?: (boolean|null); + canBeReshared?: (boolean|null); + canReceiveMultiReact?: (boolean|null); + } + + class FeatureEligibilities implements IFeatureEligibilities { + constructor(p?: proto.ContextInfo.IFeatureEligibilities); + public cannotBeReactedTo?: (boolean|null); + public cannotBeRanked?: (boolean|null); + public canRequestFeedback?: (boolean|null); + public canBeReshared?: (boolean|null); + public canReceiveMultiReact?: (boolean|null); + public static create(properties?: proto.ContextInfo.IFeatureEligibilities): proto.ContextInfo.FeatureEligibilities; + public static encode(m: proto.ContextInfo.IFeatureEligibilities, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.FeatureEligibilities; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.FeatureEligibilities; + public static toObject(m: proto.ContextInfo.FeatureEligibilities, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum ForwardOrigin { + UNKNOWN = 0, + CHAT = 1, + STATUS = 2, + CHANNELS = 3, + META_AI = 4, + UGC = 5 + } + + interface IForwardedNewsletterMessageInfo { + newsletterJid?: (string|null); + serverMessageId?: (number|null); + newsletterName?: (string|null); + contentType?: (proto.ContextInfo.ForwardedNewsletterMessageInfo.ContentType|null); + accessibilityText?: (string|null); + } + + class ForwardedNewsletterMessageInfo implements IForwardedNewsletterMessageInfo { + constructor(p?: proto.ContextInfo.IForwardedNewsletterMessageInfo); + public newsletterJid?: (string|null); + public serverMessageId?: (number|null); + public newsletterName?: (string|null); + public contentType?: (proto.ContextInfo.ForwardedNewsletterMessageInfo.ContentType|null); + public accessibilityText?: (string|null); + public static create(properties?: proto.ContextInfo.IForwardedNewsletterMessageInfo): proto.ContextInfo.ForwardedNewsletterMessageInfo; + public static encode(m: proto.ContextInfo.IForwardedNewsletterMessageInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.ForwardedNewsletterMessageInfo; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.ForwardedNewsletterMessageInfo; + public static toObject(m: proto.ContextInfo.ForwardedNewsletterMessageInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ForwardedNewsletterMessageInfo { + + enum ContentType { + UPDATE = 1, + UPDATE_CARD = 2, + LINK_CARD = 3 + } + } + + enum PairedMediaType { + NOT_PAIRED_MEDIA = 0, + SD_VIDEO_PARENT = 1, + HD_VIDEO_CHILD = 2, + SD_IMAGE_PARENT = 3, + HD_IMAGE_CHILD = 4, + MOTION_PHOTO_PARENT = 5, + MOTION_PHOTO_CHILD = 6, + HEVC_VIDEO_PARENT = 7, + HEVC_VIDEO_CHILD = 8 + } + + interface IQuestionReplyQuotedMessage { + serverQuestionId?: (number|null); + quotedQuestion?: (proto.IMessage|null); + quotedResponse?: (proto.IMessage|null); + } + + class QuestionReplyQuotedMessage implements IQuestionReplyQuotedMessage { + constructor(p?: proto.ContextInfo.IQuestionReplyQuotedMessage); + public serverQuestionId?: (number|null); + public quotedQuestion?: (proto.IMessage|null); + public quotedResponse?: (proto.IMessage|null); + public static create(properties?: proto.ContextInfo.IQuestionReplyQuotedMessage): proto.ContextInfo.QuestionReplyQuotedMessage; + public static encode(m: proto.ContextInfo.IQuestionReplyQuotedMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.QuestionReplyQuotedMessage; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.QuestionReplyQuotedMessage; + public static toObject(m: proto.ContextInfo.QuestionReplyQuotedMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum QuotedType { + EXPLICIT = 0, + AUTO = 1 + } + + enum StatusAttributionType { + NONE = 0, + RESHARED_FROM_MENTION = 1, + RESHARED_FROM_POST = 2, + RESHARED_FROM_POST_MANY_TIMES = 3, + FORWARDED_FROM_STATUS = 4 + } + + interface IStatusAudienceMetadata { + audienceType?: (proto.ContextInfo.StatusAudienceMetadata.AudienceType|null); + } + + class StatusAudienceMetadata implements IStatusAudienceMetadata { + constructor(p?: proto.ContextInfo.IStatusAudienceMetadata); + public audienceType?: (proto.ContextInfo.StatusAudienceMetadata.AudienceType|null); + public static create(properties?: proto.ContextInfo.IStatusAudienceMetadata): proto.ContextInfo.StatusAudienceMetadata; + public static encode(m: proto.ContextInfo.IStatusAudienceMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.StatusAudienceMetadata; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.StatusAudienceMetadata; + public static toObject(m: proto.ContextInfo.StatusAudienceMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StatusAudienceMetadata { + + enum AudienceType { + UNKNOWN = 0, + CLOSE_FRIENDS = 1 + } + } + + enum StatusSourceType { + IMAGE = 0, + VIDEO = 1, + GIF = 2, + AUDIO = 3, + TEXT = 4, + MUSIC_STANDALONE = 5 + } + + interface IUTMInfo { + utmSource?: (string|null); + utmCampaign?: (string|null); + } + + class UTMInfo implements IUTMInfo { + constructor(p?: proto.ContextInfo.IUTMInfo); + public utmSource?: (string|null); + public utmCampaign?: (string|null); + public static create(properties?: proto.ContextInfo.IUTMInfo): proto.ContextInfo.UTMInfo; + public static encode(m: proto.ContextInfo.IUTMInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ContextInfo.UTMInfo; + public static fromObject(d: { [k: string]: any }): proto.ContextInfo.UTMInfo; + public static toObject(m: proto.ContextInfo.UTMInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IConversation { + id?: (string|null); + messages?: (proto.IHistorySyncMsg[]|null); + newJid?: (string|null); + oldJid?: (string|null); + lastMsgTimestamp?: (number|Long|null); + unreadCount?: (number|null); + readOnly?: (boolean|null); + endOfHistoryTransfer?: (boolean|null); + ephemeralExpiration?: (number|null); + ephemeralSettingTimestamp?: (number|Long|null); + endOfHistoryTransferType?: (proto.Conversation.EndOfHistoryTransferType|null); + conversationTimestamp?: (number|Long|null); + name?: (string|null); + pHash?: (string|null); + notSpam?: (boolean|null); + archived?: (boolean|null); + disappearingMode?: (proto.IDisappearingMode|null); + unreadMentionCount?: (number|null); + markedAsUnread?: (boolean|null); + participant?: (proto.IGroupParticipant[]|null); + tcToken?: (Uint8Array|null); + tcTokenTimestamp?: (number|Long|null); + contactPrimaryIdentityKey?: (Uint8Array|null); + pinned?: (number|null); + muteEndTime?: (number|Long|null); + wallpaper?: (proto.IWallpaperSettings|null); + mediaVisibility?: (proto.MediaVisibility|null); + tcTokenSenderTimestamp?: (number|Long|null); + suspended?: (boolean|null); + terminated?: (boolean|null); + createdAt?: (number|Long|null); + createdBy?: (string|null); + description?: (string|null); + support?: (boolean|null); + isParentGroup?: (boolean|null); + parentGroupId?: (string|null); + isDefaultSubgroup?: (boolean|null); + displayName?: (string|null); + pnJid?: (string|null); + shareOwnPn?: (boolean|null); + pnhDuplicateLidThread?: (boolean|null); + lidJid?: (string|null); + username?: (string|null); + lidOriginType?: (string|null); + commentsCount?: (number|null); + locked?: (boolean|null); + systemMessageToInsert?: (proto.PrivacySystemMessage|null); + capiCreatedGroup?: (boolean|null); + accountLid?: (string|null); + limitSharing?: (boolean|null); + limitSharingSettingTimestamp?: (number|Long|null); + limitSharingTrigger?: (proto.LimitSharing.TriggerType|null); + limitSharingInitiatedByMe?: (boolean|null); + maibaAiThreadEnabled?: (boolean|null); + } + + class Conversation implements IConversation { + constructor(p?: proto.IConversation); + public id: string; + public messages: proto.IHistorySyncMsg[]; + public newJid?: (string|null); + public oldJid?: (string|null); + public lastMsgTimestamp?: (number|Long|null); + public unreadCount?: (number|null); + public readOnly?: (boolean|null); + public endOfHistoryTransfer?: (boolean|null); + public ephemeralExpiration?: (number|null); + public ephemeralSettingTimestamp?: (number|Long|null); + public endOfHistoryTransferType?: (proto.Conversation.EndOfHistoryTransferType|null); + public conversationTimestamp?: (number|Long|null); + public name?: (string|null); + public pHash?: (string|null); + public notSpam?: (boolean|null); + public archived?: (boolean|null); + public disappearingMode?: (proto.IDisappearingMode|null); + public unreadMentionCount?: (number|null); + public markedAsUnread?: (boolean|null); + public participant: proto.IGroupParticipant[]; + public tcToken?: (Uint8Array|null); + public tcTokenTimestamp?: (number|Long|null); + public contactPrimaryIdentityKey?: (Uint8Array|null); + public pinned?: (number|null); + public muteEndTime?: (number|Long|null); + public wallpaper?: (proto.IWallpaperSettings|null); + public mediaVisibility?: (proto.MediaVisibility|null); + public tcTokenSenderTimestamp?: (number|Long|null); + public suspended?: (boolean|null); + public terminated?: (boolean|null); + public createdAt?: (number|Long|null); + public createdBy?: (string|null); + public description?: (string|null); + public support?: (boolean|null); + public isParentGroup?: (boolean|null); + public parentGroupId?: (string|null); + public isDefaultSubgroup?: (boolean|null); + public displayName?: (string|null); + public pnJid?: (string|null); + public shareOwnPn?: (boolean|null); + public pnhDuplicateLidThread?: (boolean|null); + public lidJid?: (string|null); + public username?: (string|null); + public lidOriginType?: (string|null); + public commentsCount?: (number|null); + public locked?: (boolean|null); + public systemMessageToInsert?: (proto.PrivacySystemMessage|null); + public capiCreatedGroup?: (boolean|null); + public accountLid?: (string|null); + public limitSharing?: (boolean|null); + public limitSharingSettingTimestamp?: (number|Long|null); + public limitSharingTrigger?: (proto.LimitSharing.TriggerType|null); + public limitSharingInitiatedByMe?: (boolean|null); + public maibaAiThreadEnabled?: (boolean|null); + public static create(properties?: proto.IConversation): proto.Conversation; + public static encode(m: proto.IConversation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Conversation; + public static fromObject(d: { [k: string]: any }): proto.Conversation; + public static toObject(m: proto.Conversation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace Conversation { + + enum EndOfHistoryTransferType { + COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY = 0, + COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY = 1, + COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY = 2 + } + } + + interface IDeviceCapabilities { + chatLockSupportLevel?: (proto.DeviceCapabilities.ChatLockSupportLevel|null); + lidMigration?: (proto.DeviceCapabilities.ILIDMigration|null); + businessBroadcast?: (proto.DeviceCapabilities.IBusinessBroadcast|null); + userHasAvatar?: (proto.DeviceCapabilities.IUserHasAvatar|null); + memberNameTagPrimarySupport?: (proto.DeviceCapabilities.MemberNameTagPrimarySupport|null); + } + + class DeviceCapabilities implements IDeviceCapabilities { + constructor(p?: proto.IDeviceCapabilities); + public chatLockSupportLevel?: (proto.DeviceCapabilities.ChatLockSupportLevel|null); + public lidMigration?: (proto.DeviceCapabilities.ILIDMigration|null); + public businessBroadcast?: (proto.DeviceCapabilities.IBusinessBroadcast|null); + public userHasAvatar?: (proto.DeviceCapabilities.IUserHasAvatar|null); + public memberNameTagPrimarySupport?: (proto.DeviceCapabilities.MemberNameTagPrimarySupport|null); + public static create(properties?: proto.IDeviceCapabilities): proto.DeviceCapabilities; + public static encode(m: proto.IDeviceCapabilities, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceCapabilities; + public static fromObject(d: { [k: string]: any }): proto.DeviceCapabilities; + public static toObject(m: proto.DeviceCapabilities, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace DeviceCapabilities { + + interface IBusinessBroadcast { + importListEnabled?: (boolean|null); + } + + class BusinessBroadcast implements IBusinessBroadcast { + constructor(p?: proto.DeviceCapabilities.IBusinessBroadcast); + public importListEnabled?: (boolean|null); + public static create(properties?: proto.DeviceCapabilities.IBusinessBroadcast): proto.DeviceCapabilities.BusinessBroadcast; + public static encode(m: proto.DeviceCapabilities.IBusinessBroadcast, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceCapabilities.BusinessBroadcast; + public static fromObject(d: { [k: string]: any }): proto.DeviceCapabilities.BusinessBroadcast; + public static toObject(m: proto.DeviceCapabilities.BusinessBroadcast, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum ChatLockSupportLevel { + NONE = 0, + MINIMAL = 1, + FULL = 2 + } + + interface ILIDMigration { + chatDbMigrationTimestamp?: (number|Long|null); + } + + class LIDMigration implements ILIDMigration { + constructor(p?: proto.DeviceCapabilities.ILIDMigration); + public chatDbMigrationTimestamp?: (number|Long|null); + public static create(properties?: proto.DeviceCapabilities.ILIDMigration): proto.DeviceCapabilities.LIDMigration; + public static encode(m: proto.DeviceCapabilities.ILIDMigration, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceCapabilities.LIDMigration; + public static fromObject(d: { [k: string]: any }): proto.DeviceCapabilities.LIDMigration; + public static toObject(m: proto.DeviceCapabilities.LIDMigration, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum MemberNameTagPrimarySupport { + DISABLED = 0, + RECEIVER_ENABLED = 1, + SENDER_ENABLED = 2 + } + + interface IUserHasAvatar { + userHasAvatar?: (boolean|null); + } + + class UserHasAvatar implements IUserHasAvatar { + constructor(p?: proto.DeviceCapabilities.IUserHasAvatar); + public userHasAvatar?: (boolean|null); + public static create(properties?: proto.DeviceCapabilities.IUserHasAvatar): proto.DeviceCapabilities.UserHasAvatar; + public static encode(m: proto.DeviceCapabilities.IUserHasAvatar, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceCapabilities.UserHasAvatar; + public static fromObject(d: { [k: string]: any }): proto.DeviceCapabilities.UserHasAvatar; + public static toObject(m: proto.DeviceCapabilities.UserHasAvatar, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IDeviceConsistencyCodeMessage { + generation?: (number|null); + signature?: (Uint8Array|null); + } + + class DeviceConsistencyCodeMessage implements IDeviceConsistencyCodeMessage { + constructor(p?: proto.IDeviceConsistencyCodeMessage); + public generation?: (number|null); + public signature?: (Uint8Array|null); + public static create(properties?: proto.IDeviceConsistencyCodeMessage): proto.DeviceConsistencyCodeMessage; + public static encode(m: proto.IDeviceConsistencyCodeMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceConsistencyCodeMessage; + public static fromObject(d: { [k: string]: any }): proto.DeviceConsistencyCodeMessage; + public static toObject(m: proto.DeviceConsistencyCodeMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDeviceListMetadata { + senderKeyHash?: (Uint8Array|null); + senderTimestamp?: (number|Long|null); + senderKeyIndexes?: (number[]|null); + senderAccountType?: (proto.ADVEncryptionType|null); + receiverAccountType?: (proto.ADVEncryptionType|null); + recipientKeyHash?: (Uint8Array|null); + recipientTimestamp?: (number|Long|null); + recipientKeyIndexes?: (number[]|null); + } + + class DeviceListMetadata implements IDeviceListMetadata { + constructor(p?: proto.IDeviceListMetadata); + public senderKeyHash?: (Uint8Array|null); + public senderTimestamp?: (number|Long|null); + public senderKeyIndexes: number[]; + public senderAccountType?: (proto.ADVEncryptionType|null); + public receiverAccountType?: (proto.ADVEncryptionType|null); + public recipientKeyHash?: (Uint8Array|null); + public recipientTimestamp?: (number|Long|null); + public recipientKeyIndexes: number[]; + public static create(properties?: proto.IDeviceListMetadata): proto.DeviceListMetadata; + public static encode(m: proto.IDeviceListMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceListMetadata; + public static fromObject(d: { [k: string]: any }): proto.DeviceListMetadata; + public static toObject(m: proto.DeviceListMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDeviceProps { + os?: (string|null); + version?: (proto.DeviceProps.IAppVersion|null); + platformType?: (proto.DeviceProps.PlatformType|null); + requireFullSync?: (boolean|null); + historySyncConfig?: (proto.DeviceProps.IHistorySyncConfig|null); + } + + class DeviceProps implements IDeviceProps { + constructor(p?: proto.IDeviceProps); + public os?: (string|null); + public version?: (proto.DeviceProps.IAppVersion|null); + public platformType?: (proto.DeviceProps.PlatformType|null); + public requireFullSync?: (boolean|null); + public historySyncConfig?: (proto.DeviceProps.IHistorySyncConfig|null); + public static create(properties?: proto.IDeviceProps): proto.DeviceProps; + public static encode(m: proto.IDeviceProps, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceProps; + public static fromObject(d: { [k: string]: any }): proto.DeviceProps; + public static toObject(m: proto.DeviceProps, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace DeviceProps { + + interface IAppVersion { + primary?: (number|null); + secondary?: (number|null); + tertiary?: (number|null); + quaternary?: (number|null); + quinary?: (number|null); + } + + class AppVersion implements IAppVersion { + constructor(p?: proto.DeviceProps.IAppVersion); + public primary?: (number|null); + public secondary?: (number|null); + public tertiary?: (number|null); + public quaternary?: (number|null); + public quinary?: (number|null); + public static create(properties?: proto.DeviceProps.IAppVersion): proto.DeviceProps.AppVersion; + public static encode(m: proto.DeviceProps.IAppVersion, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceProps.AppVersion; + public static fromObject(d: { [k: string]: any }): proto.DeviceProps.AppVersion; + public static toObject(m: proto.DeviceProps.AppVersion, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHistorySyncConfig { + fullSyncDaysLimit?: (number|null); + fullSyncSizeMbLimit?: (number|null); + storageQuotaMb?: (number|null); + inlineInitialPayloadInE2EeMsg?: (boolean|null); + recentSyncDaysLimit?: (number|null); + supportCallLogHistory?: (boolean|null); + supportBotUserAgentChatHistory?: (boolean|null); + supportCagReactionsAndPolls?: (boolean|null); + supportBizHostedMsg?: (boolean|null); + supportRecentSyncChunkMessageCountTuning?: (boolean|null); + supportHostedGroupMsg?: (boolean|null); + supportFbidBotChatHistory?: (boolean|null); + supportAddOnHistorySyncMigration?: (boolean|null); + supportMessageAssociation?: (boolean|null); + supportGroupHistory?: (boolean|null); + onDemandReady?: (boolean|null); + supportGuestChat?: (boolean|null); + completeOnDemandReady?: (boolean|null); + thumbnailSyncDaysLimit?: (number|null); + } + + class HistorySyncConfig implements IHistorySyncConfig { + constructor(p?: proto.DeviceProps.IHistorySyncConfig); + public fullSyncDaysLimit?: (number|null); + public fullSyncSizeMbLimit?: (number|null); + public storageQuotaMb?: (number|null); + public inlineInitialPayloadInE2EeMsg?: (boolean|null); + public recentSyncDaysLimit?: (number|null); + public supportCallLogHistory?: (boolean|null); + public supportBotUserAgentChatHistory?: (boolean|null); + public supportCagReactionsAndPolls?: (boolean|null); + public supportBizHostedMsg?: (boolean|null); + public supportRecentSyncChunkMessageCountTuning?: (boolean|null); + public supportHostedGroupMsg?: (boolean|null); + public supportFbidBotChatHistory?: (boolean|null); + public supportAddOnHistorySyncMigration?: (boolean|null); + public supportMessageAssociation?: (boolean|null); + public supportGroupHistory?: (boolean|null); + public onDemandReady?: (boolean|null); + public supportGuestChat?: (boolean|null); + public completeOnDemandReady?: (boolean|null); + public thumbnailSyncDaysLimit?: (number|null); + public static create(properties?: proto.DeviceProps.IHistorySyncConfig): proto.DeviceProps.HistorySyncConfig; + public static encode(m: proto.DeviceProps.IHistorySyncConfig, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DeviceProps.HistorySyncConfig; + public static fromObject(d: { [k: string]: any }): proto.DeviceProps.HistorySyncConfig; + public static toObject(m: proto.DeviceProps.HistorySyncConfig, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum PlatformType { + UNKNOWN = 0, + CHROME = 1, + FIREFOX = 2, + IE = 3, + OPERA = 4, + SAFARI = 5, + EDGE = 6, + DESKTOP = 7, + IPAD = 8, + ANDROID_TABLET = 9, + OHANA = 10, + ALOHA = 11, + CATALINA = 12, + TCL_TV = 13, + IOS_PHONE = 14, + IOS_CATALYST = 15, + ANDROID_PHONE = 16, + ANDROID_AMBIGUOUS = 17, + WEAR_OS = 18, + AR_WRIST = 19, + AR_DEVICE = 20, + UWP = 21, + VR = 22, + CLOUD_API = 23, + SMARTGLASSES = 24 + } + } + + interface IDisappearingMode { + initiator?: (proto.DisappearingMode.Initiator|null); + trigger?: (proto.DisappearingMode.Trigger|null); + initiatorDeviceJid?: (string|null); + initiatedByMe?: (boolean|null); + } + + class DisappearingMode implements IDisappearingMode { + constructor(p?: proto.IDisappearingMode); + public initiator?: (proto.DisappearingMode.Initiator|null); + public trigger?: (proto.DisappearingMode.Trigger|null); + public initiatorDeviceJid?: (string|null); + public initiatedByMe?: (boolean|null); + public static create(properties?: proto.IDisappearingMode): proto.DisappearingMode; + public static encode(m: proto.IDisappearingMode, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.DisappearingMode; + public static fromObject(d: { [k: string]: any }): proto.DisappearingMode; + public static toObject(m: proto.DisappearingMode, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace DisappearingMode { + + enum Initiator { + CHANGED_IN_CHAT = 0, + INITIATED_BY_ME = 1, + INITIATED_BY_OTHER = 2, + BIZ_UPGRADE_FB_HOSTING = 3 + } + + enum Trigger { + UNKNOWN = 0, + CHAT_SETTING = 1, + ACCOUNT_SETTING = 2, + BULK_CHANGE = 3, + BIZ_SUPPORTS_FB_HOSTING = 4, + UNKNOWN_GROUPS = 5 + } + } + + interface IEmbeddedContent { + embeddedMessage?: (proto.IEmbeddedMessage|null); + embeddedMusic?: (proto.IEmbeddedMusic|null); + } + + class EmbeddedContent implements IEmbeddedContent { + constructor(p?: proto.IEmbeddedContent); + public embeddedMessage?: (proto.IEmbeddedMessage|null); + public embeddedMusic?: (proto.IEmbeddedMusic|null); + public content?: ("embeddedMessage"|"embeddedMusic"); + public static create(properties?: proto.IEmbeddedContent): proto.EmbeddedContent; + public static encode(m: proto.IEmbeddedContent, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.EmbeddedContent; + public static fromObject(d: { [k: string]: any }): proto.EmbeddedContent; + public static toObject(m: proto.EmbeddedContent, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEmbeddedMessage { + stanzaId?: (string|null); + message?: (proto.IMessage|null); + } + + class EmbeddedMessage implements IEmbeddedMessage { + constructor(p?: proto.IEmbeddedMessage); + public stanzaId?: (string|null); + public message?: (proto.IMessage|null); + public static create(properties?: proto.IEmbeddedMessage): proto.EmbeddedMessage; + public static encode(m: proto.IEmbeddedMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.EmbeddedMessage; + public static fromObject(d: { [k: string]: any }): proto.EmbeddedMessage; + public static toObject(m: proto.EmbeddedMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEmbeddedMusic { + musicContentMediaId?: (string|null); + songId?: (string|null); + author?: (string|null); + title?: (string|null); + artworkDirectPath?: (string|null); + artworkSha256?: (Uint8Array|null); + artworkEncSha256?: (Uint8Array|null); + artistAttribution?: (string|null); + countryBlocklist?: (Uint8Array|null); + isExplicit?: (boolean|null); + artworkMediaKey?: (Uint8Array|null); + musicSongStartTimeInMs?: (number|Long|null); + derivedContentStartTimeInMs?: (number|Long|null); + overlapDurationInMs?: (number|Long|null); + } + + class EmbeddedMusic implements IEmbeddedMusic { + constructor(p?: proto.IEmbeddedMusic); + public musicContentMediaId?: (string|null); + public songId?: (string|null); + public author?: (string|null); + public title?: (string|null); + public artworkDirectPath?: (string|null); + public artworkSha256?: (Uint8Array|null); + public artworkEncSha256?: (Uint8Array|null); + public artistAttribution?: (string|null); + public countryBlocklist?: (Uint8Array|null); + public isExplicit?: (boolean|null); + public artworkMediaKey?: (Uint8Array|null); + public musicSongStartTimeInMs?: (number|Long|null); + public derivedContentStartTimeInMs?: (number|Long|null); + public overlapDurationInMs?: (number|Long|null); + public static create(properties?: proto.IEmbeddedMusic): proto.EmbeddedMusic; + public static encode(m: proto.IEmbeddedMusic, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.EmbeddedMusic; + public static fromObject(d: { [k: string]: any }): proto.EmbeddedMusic; + public static toObject(m: proto.EmbeddedMusic, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEncryptedPairingRequest { + encryptedPayload?: (Uint8Array|null); + iv?: (Uint8Array|null); + } + + class EncryptedPairingRequest implements IEncryptedPairingRequest { + constructor(p?: proto.IEncryptedPairingRequest); + public encryptedPayload?: (Uint8Array|null); + public iv?: (Uint8Array|null); + public static create(properties?: proto.IEncryptedPairingRequest): proto.EncryptedPairingRequest; + public static encode(m: proto.IEncryptedPairingRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.EncryptedPairingRequest; + public static fromObject(d: { [k: string]: any }): proto.EncryptedPairingRequest; + public static toObject(m: proto.EncryptedPairingRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEphemeralSetting { + duration?: (number|null); + timestamp?: (number|Long|null); + } + + class EphemeralSetting implements IEphemeralSetting { + constructor(p?: proto.IEphemeralSetting); + public duration?: (number|null); + public timestamp?: (number|Long|null); + public static create(properties?: proto.IEphemeralSetting): proto.EphemeralSetting; + public static encode(m: proto.IEphemeralSetting, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.EphemeralSetting; + public static fromObject(d: { [k: string]: any }): proto.EphemeralSetting; + public static toObject(m: proto.EphemeralSetting, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEventAdditionalMetadata { + isStale?: (boolean|null); + } + + class EventAdditionalMetadata implements IEventAdditionalMetadata { + constructor(p?: proto.IEventAdditionalMetadata); + public isStale?: (boolean|null); + public static create(properties?: proto.IEventAdditionalMetadata): proto.EventAdditionalMetadata; + public static encode(m: proto.IEventAdditionalMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.EventAdditionalMetadata; + public static fromObject(d: { [k: string]: any }): proto.EventAdditionalMetadata; + public static toObject(m: proto.EventAdditionalMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEventResponse { + eventResponseMessageKey?: (proto.IMessageKey|null); + timestampMs?: (number|Long|null); + eventResponseMessage?: (proto.Message.IEventResponseMessage|null); + unread?: (boolean|null); + } + + class EventResponse implements IEventResponse { + constructor(p?: proto.IEventResponse); + public eventResponseMessageKey?: (proto.IMessageKey|null); + public timestampMs?: (number|Long|null); + public eventResponseMessage?: (proto.Message.IEventResponseMessage|null); + public unread?: (boolean|null); + public static create(properties?: proto.IEventResponse): proto.EventResponse; + public static encode(m: proto.IEventResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.EventResponse; + public static fromObject(d: { [k: string]: any }): proto.EventResponse; + public static toObject(m: proto.EventResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IExitCode { + code?: (number|Long|null); + text?: (string|null); + } + + class ExitCode implements IExitCode { + constructor(p?: proto.IExitCode); + public code?: (number|Long|null); + public text?: (string|null); + public static create(properties?: proto.IExitCode): proto.ExitCode; + public static encode(m: proto.IExitCode, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ExitCode; + public static fromObject(d: { [k: string]: any }): proto.ExitCode; + public static toObject(m: proto.ExitCode, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IExternalBlobReference { + mediaKey?: (Uint8Array|null); + directPath?: (string|null); + handle?: (string|null); + fileSizeBytes?: (number|Long|null); + fileSha256?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + } + + class ExternalBlobReference implements IExternalBlobReference { + constructor(p?: proto.IExternalBlobReference); + public mediaKey?: (Uint8Array|null); + public directPath?: (string|null); + public handle?: (string|null); + public fileSizeBytes?: (number|Long|null); + public fileSha256?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public static create(properties?: proto.IExternalBlobReference): proto.ExternalBlobReference; + public static encode(m: proto.IExternalBlobReference, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ExternalBlobReference; + public static fromObject(d: { [k: string]: any }): proto.ExternalBlobReference; + public static toObject(m: proto.ExternalBlobReference, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IField { + minVersion?: (number|null); + maxVersion?: (number|null); + notReportableMinVersion?: (number|null); + isMessage?: (boolean|null); + subfield?: ({ [k: string]: proto.IField }|null); + } + + class Field implements IField { + constructor(p?: proto.IField); + public minVersion?: (number|null); + public maxVersion?: (number|null); + public notReportableMinVersion?: (number|null); + public isMessage?: (boolean|null); + public subfield: { [k: string]: proto.IField }; + public static create(properties?: proto.IField): proto.Field; + public static encode(m: proto.IField, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Field; + public static fromObject(d: { [k: string]: any }): proto.Field; + public static toObject(m: proto.Field, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IForwardedAIBotMessageInfo { + botName?: (string|null); + botJid?: (string|null); + creatorName?: (string|null); + } + + class ForwardedAIBotMessageInfo implements IForwardedAIBotMessageInfo { + constructor(p?: proto.IForwardedAIBotMessageInfo); + public botName?: (string|null); + public botJid?: (string|null); + public creatorName?: (string|null); + public static create(properties?: proto.IForwardedAIBotMessageInfo): proto.ForwardedAIBotMessageInfo; + public static encode(m: proto.IForwardedAIBotMessageInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ForwardedAIBotMessageInfo; + public static fromObject(d: { [k: string]: any }): proto.ForwardedAIBotMessageInfo; + public static toObject(m: proto.ForwardedAIBotMessageInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IGlobalSettings { + lightThemeWallpaper?: (proto.IWallpaperSettings|null); + mediaVisibility?: (proto.MediaVisibility|null); + darkThemeWallpaper?: (proto.IWallpaperSettings|null); + autoDownloadWiFi?: (proto.IAutoDownloadSettings|null); + autoDownloadCellular?: (proto.IAutoDownloadSettings|null); + autoDownloadRoaming?: (proto.IAutoDownloadSettings|null); + showIndividualNotificationsPreview?: (boolean|null); + showGroupNotificationsPreview?: (boolean|null); + disappearingModeDuration?: (number|null); + disappearingModeTimestamp?: (number|Long|null); + avatarUserSettings?: (proto.IAvatarUserSettings|null); + fontSize?: (number|null); + securityNotifications?: (boolean|null); + autoUnarchiveChats?: (boolean|null); + videoQualityMode?: (number|null); + photoQualityMode?: (number|null); + individualNotificationSettings?: (proto.INotificationSettings|null); + groupNotificationSettings?: (proto.INotificationSettings|null); + chatLockSettings?: (proto.IChatLockSettings|null); + chatDbLidMigrationTimestamp?: (number|Long|null); + } + + class GlobalSettings implements IGlobalSettings { + constructor(p?: proto.IGlobalSettings); + public lightThemeWallpaper?: (proto.IWallpaperSettings|null); + public mediaVisibility?: (proto.MediaVisibility|null); + public darkThemeWallpaper?: (proto.IWallpaperSettings|null); + public autoDownloadWiFi?: (proto.IAutoDownloadSettings|null); + public autoDownloadCellular?: (proto.IAutoDownloadSettings|null); + public autoDownloadRoaming?: (proto.IAutoDownloadSettings|null); + public showIndividualNotificationsPreview?: (boolean|null); + public showGroupNotificationsPreview?: (boolean|null); + public disappearingModeDuration?: (number|null); + public disappearingModeTimestamp?: (number|Long|null); + public avatarUserSettings?: (proto.IAvatarUserSettings|null); + public fontSize?: (number|null); + public securityNotifications?: (boolean|null); + public autoUnarchiveChats?: (boolean|null); + public videoQualityMode?: (number|null); + public photoQualityMode?: (number|null); + public individualNotificationSettings?: (proto.INotificationSettings|null); + public groupNotificationSettings?: (proto.INotificationSettings|null); + public chatLockSettings?: (proto.IChatLockSettings|null); + public chatDbLidMigrationTimestamp?: (number|Long|null); + public static create(properties?: proto.IGlobalSettings): proto.GlobalSettings; + public static encode(m: proto.IGlobalSettings, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.GlobalSettings; + public static fromObject(d: { [k: string]: any }): proto.GlobalSettings; + public static toObject(m: proto.GlobalSettings, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IGroupHistoryBundleInfo { + deprecatedMessageHistoryBundle?: (proto.Message.IMessageHistoryBundle|null); + processState?: (proto.GroupHistoryBundleInfo.ProcessState|null); + } + + class GroupHistoryBundleInfo implements IGroupHistoryBundleInfo { + constructor(p?: proto.IGroupHistoryBundleInfo); + public deprecatedMessageHistoryBundle?: (proto.Message.IMessageHistoryBundle|null); + public processState?: (proto.GroupHistoryBundleInfo.ProcessState|null); + public static create(properties?: proto.IGroupHistoryBundleInfo): proto.GroupHistoryBundleInfo; + public static encode(m: proto.IGroupHistoryBundleInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.GroupHistoryBundleInfo; + public static fromObject(d: { [k: string]: any }): proto.GroupHistoryBundleInfo; + public static toObject(m: proto.GroupHistoryBundleInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace GroupHistoryBundleInfo { + + enum ProcessState { + NOT_INJECTED = 0, + INJECTED = 1, + INJECTED_PARTIAL = 2, + INJECTION_FAILED = 3, + INJECTION_FAILED_NO_RETRY = 4 + } + } + + interface IGroupHistoryIndividualMessageInfo { + bundleMessageKey?: (proto.IMessageKey|null); + editedAfterReceivedAsHistory?: (boolean|null); + } + + class GroupHistoryIndividualMessageInfo implements IGroupHistoryIndividualMessageInfo { + constructor(p?: proto.IGroupHistoryIndividualMessageInfo); + public bundleMessageKey?: (proto.IMessageKey|null); + public editedAfterReceivedAsHistory?: (boolean|null); + public static create(properties?: proto.IGroupHistoryIndividualMessageInfo): proto.GroupHistoryIndividualMessageInfo; + public static encode(m: proto.IGroupHistoryIndividualMessageInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.GroupHistoryIndividualMessageInfo; + public static fromObject(d: { [k: string]: any }): proto.GroupHistoryIndividualMessageInfo; + public static toObject(m: proto.GroupHistoryIndividualMessageInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IGroupMention { + groupJid?: (string|null); + groupSubject?: (string|null); + } + + class GroupMention implements IGroupMention { + constructor(p?: proto.IGroupMention); + public groupJid?: (string|null); + public groupSubject?: (string|null); + public static create(properties?: proto.IGroupMention): proto.GroupMention; + public static encode(m: proto.IGroupMention, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.GroupMention; + public static fromObject(d: { [k: string]: any }): proto.GroupMention; + public static toObject(m: proto.GroupMention, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IGroupParticipant { + userJid?: (string|null); + rank?: (proto.GroupParticipant.Rank|null); + memberLabel?: (proto.IMemberLabel|null); + } + + class GroupParticipant implements IGroupParticipant { + constructor(p?: proto.IGroupParticipant); + public userJid: string; + public rank?: (proto.GroupParticipant.Rank|null); + public memberLabel?: (proto.IMemberLabel|null); + public static create(properties?: proto.IGroupParticipant): proto.GroupParticipant; + public static encode(m: proto.IGroupParticipant, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.GroupParticipant; + public static fromObject(d: { [k: string]: any }): proto.GroupParticipant; + public static toObject(m: proto.GroupParticipant, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace GroupParticipant { + + enum Rank { + REGULAR = 0, + ADMIN = 1, + SUPERADMIN = 2 + } + } + + interface IHandshakeMessage { + clientHello?: (proto.HandshakeMessage.IClientHello|null); + serverHello?: (proto.HandshakeMessage.IServerHello|null); + clientFinish?: (proto.HandshakeMessage.IClientFinish|null); + } + + class HandshakeMessage implements IHandshakeMessage { + constructor(p?: proto.IHandshakeMessage); + public clientHello?: (proto.HandshakeMessage.IClientHello|null); + public serverHello?: (proto.HandshakeMessage.IServerHello|null); + public clientFinish?: (proto.HandshakeMessage.IClientFinish|null); + public static create(properties?: proto.IHandshakeMessage): proto.HandshakeMessage; + public static encode(m: proto.IHandshakeMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HandshakeMessage; + public static fromObject(d: { [k: string]: any }): proto.HandshakeMessage; + public static toObject(m: proto.HandshakeMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HandshakeMessage { + + interface IClientFinish { + "static"?: (Uint8Array|null); + payload?: (Uint8Array|null); + extendedCiphertext?: (Uint8Array|null); + } + + class ClientFinish implements IClientFinish { + constructor(p?: proto.HandshakeMessage.IClientFinish); + public static?: (Uint8Array|null); + public payload?: (Uint8Array|null); + public extendedCiphertext?: (Uint8Array|null); + public static create(properties?: proto.HandshakeMessage.IClientFinish): proto.HandshakeMessage.ClientFinish; + public static encode(m: proto.HandshakeMessage.IClientFinish, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HandshakeMessage.ClientFinish; + public static fromObject(d: { [k: string]: any }): proto.HandshakeMessage.ClientFinish; + public static toObject(m: proto.HandshakeMessage.ClientFinish, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IClientHello { + ephemeral?: (Uint8Array|null); + "static"?: (Uint8Array|null); + payload?: (Uint8Array|null); + useExtended?: (boolean|null); + extendedCiphertext?: (Uint8Array|null); + } + + class ClientHello implements IClientHello { + constructor(p?: proto.HandshakeMessage.IClientHello); + public ephemeral?: (Uint8Array|null); + public static?: (Uint8Array|null); + public payload?: (Uint8Array|null); + public useExtended?: (boolean|null); + public extendedCiphertext?: (Uint8Array|null); + public static create(properties?: proto.HandshakeMessage.IClientHello): proto.HandshakeMessage.ClientHello; + public static encode(m: proto.HandshakeMessage.IClientHello, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HandshakeMessage.ClientHello; + public static fromObject(d: { [k: string]: any }): proto.HandshakeMessage.ClientHello; + public static toObject(m: proto.HandshakeMessage.ClientHello, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IServerHello { + ephemeral?: (Uint8Array|null); + "static"?: (Uint8Array|null); + payload?: (Uint8Array|null); + extendedStatic?: (Uint8Array|null); + } + + class ServerHello implements IServerHello { + constructor(p?: proto.HandshakeMessage.IServerHello); + public ephemeral?: (Uint8Array|null); + public static?: (Uint8Array|null); + public payload?: (Uint8Array|null); + public extendedStatic?: (Uint8Array|null); + public static create(properties?: proto.HandshakeMessage.IServerHello): proto.HandshakeMessage.ServerHello; + public static encode(m: proto.HandshakeMessage.IServerHello, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HandshakeMessage.ServerHello; + public static fromObject(d: { [k: string]: any }): proto.HandshakeMessage.ServerHello; + public static toObject(m: proto.HandshakeMessage.ServerHello, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IHistorySync { + syncType?: (proto.HistorySync.HistorySyncType|null); + conversations?: (proto.IConversation[]|null); + statusV3Messages?: (proto.IWebMessageInfo[]|null); + chunkOrder?: (number|null); + progress?: (number|null); + pushnames?: (proto.IPushname[]|null); + globalSettings?: (proto.IGlobalSettings|null); + threadIdUserSecret?: (Uint8Array|null); + threadDsTimeframeOffset?: (number|null); + recentStickers?: (proto.IStickerMetadata[]|null); + pastParticipants?: (proto.IPastParticipants[]|null); + callLogRecords?: (proto.ICallLogRecord[]|null); + aiWaitListState?: (proto.HistorySync.BotAIWaitListState|null); + phoneNumberToLidMappings?: (proto.IPhoneNumberToLIDMapping[]|null); + companionMetaNonce?: (string|null); + shareableChatIdentifierEncryptionKey?: (Uint8Array|null); + accounts?: (proto.IAccount[]|null); + } + + class HistorySync implements IHistorySync { + constructor(p?: proto.IHistorySync); + public syncType: proto.HistorySync.HistorySyncType; + public conversations: proto.IConversation[]; + public statusV3Messages: proto.IWebMessageInfo[]; + public chunkOrder?: (number|null); + public progress?: (number|null); + public pushnames: proto.IPushname[]; + public globalSettings?: (proto.IGlobalSettings|null); + public threadIdUserSecret?: (Uint8Array|null); + public threadDsTimeframeOffset?: (number|null); + public recentStickers: proto.IStickerMetadata[]; + public pastParticipants: proto.IPastParticipants[]; + public callLogRecords: proto.ICallLogRecord[]; + public aiWaitListState?: (proto.HistorySync.BotAIWaitListState|null); + public phoneNumberToLidMappings: proto.IPhoneNumberToLIDMapping[]; + public companionMetaNonce?: (string|null); + public shareableChatIdentifierEncryptionKey?: (Uint8Array|null); + public accounts: proto.IAccount[]; + public static create(properties?: proto.IHistorySync): proto.HistorySync; + public static encode(m: proto.IHistorySync, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HistorySync; + public static fromObject(d: { [k: string]: any }): proto.HistorySync; + public static toObject(m: proto.HistorySync, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HistorySync { + + enum BotAIWaitListState { + IN_WAITLIST = 0, + AI_AVAILABLE = 1 + } + + enum HistorySyncType { + INITIAL_BOOTSTRAP = 0, + INITIAL_STATUS_V3 = 1, + FULL = 2, + RECENT = 3, + PUSH_NAME = 4, + NON_BLOCKING_DATA = 5, + ON_DEMAND = 6 + } + } + + interface IHistorySyncMsg { + message?: (proto.IWebMessageInfo|null); + msgOrderId?: (number|Long|null); + } + + class HistorySyncMsg implements IHistorySyncMsg { + constructor(p?: proto.IHistorySyncMsg); + public message?: (proto.IWebMessageInfo|null); + public msgOrderId?: (number|Long|null); + public static create(properties?: proto.IHistorySyncMsg): proto.HistorySyncMsg; + public static encode(m: proto.IHistorySyncMsg, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HistorySyncMsg; + public static fromObject(d: { [k: string]: any }): proto.HistorySyncMsg; + public static toObject(m: proto.HistorySyncMsg, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHydratedTemplateButton { + index?: (number|null); + quickReplyButton?: (proto.HydratedTemplateButton.IHydratedQuickReplyButton|null); + urlButton?: (proto.HydratedTemplateButton.IHydratedURLButton|null); + callButton?: (proto.HydratedTemplateButton.IHydratedCallButton|null); + } + + class HydratedTemplateButton implements IHydratedTemplateButton { + constructor(p?: proto.IHydratedTemplateButton); + public index?: (number|null); + public quickReplyButton?: (proto.HydratedTemplateButton.IHydratedQuickReplyButton|null); + public urlButton?: (proto.HydratedTemplateButton.IHydratedURLButton|null); + public callButton?: (proto.HydratedTemplateButton.IHydratedCallButton|null); + public hydratedButton?: ("quickReplyButton"|"urlButton"|"callButton"); + public static create(properties?: proto.IHydratedTemplateButton): proto.HydratedTemplateButton; + public static encode(m: proto.IHydratedTemplateButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HydratedTemplateButton; + public static fromObject(d: { [k: string]: any }): proto.HydratedTemplateButton; + public static toObject(m: proto.HydratedTemplateButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HydratedTemplateButton { + + interface IHydratedCallButton { + displayText?: (string|null); + phoneNumber?: (string|null); + } + + class HydratedCallButton implements IHydratedCallButton { + constructor(p?: proto.HydratedTemplateButton.IHydratedCallButton); + public displayText?: (string|null); + public phoneNumber?: (string|null); + public static create(properties?: proto.HydratedTemplateButton.IHydratedCallButton): proto.HydratedTemplateButton.HydratedCallButton; + public static encode(m: proto.HydratedTemplateButton.IHydratedCallButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HydratedTemplateButton.HydratedCallButton; + public static fromObject(d: { [k: string]: any }): proto.HydratedTemplateButton.HydratedCallButton; + public static toObject(m: proto.HydratedTemplateButton.HydratedCallButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHydratedQuickReplyButton { + displayText?: (string|null); + id?: (string|null); + } + + class HydratedQuickReplyButton implements IHydratedQuickReplyButton { + constructor(p?: proto.HydratedTemplateButton.IHydratedQuickReplyButton); + public displayText?: (string|null); + public id?: (string|null); + public static create(properties?: proto.HydratedTemplateButton.IHydratedQuickReplyButton): proto.HydratedTemplateButton.HydratedQuickReplyButton; + public static encode(m: proto.HydratedTemplateButton.IHydratedQuickReplyButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HydratedTemplateButton.HydratedQuickReplyButton; + public static fromObject(d: { [k: string]: any }): proto.HydratedTemplateButton.HydratedQuickReplyButton; + public static toObject(m: proto.HydratedTemplateButton.HydratedQuickReplyButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHydratedURLButton { + displayText?: (string|null); + url?: (string|null); + consentedUsersUrl?: (string|null); + webviewPresentation?: (proto.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType|null); + } + + class HydratedURLButton implements IHydratedURLButton { + constructor(p?: proto.HydratedTemplateButton.IHydratedURLButton); + public displayText?: (string|null); + public url?: (string|null); + public consentedUsersUrl?: (string|null); + public webviewPresentation?: (proto.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType|null); + public static create(properties?: proto.HydratedTemplateButton.IHydratedURLButton): proto.HydratedTemplateButton.HydratedURLButton; + public static encode(m: proto.HydratedTemplateButton.IHydratedURLButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.HydratedTemplateButton.HydratedURLButton; + public static fromObject(d: { [k: string]: any }): proto.HydratedTemplateButton.HydratedURLButton; + public static toObject(m: proto.HydratedTemplateButton.HydratedURLButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HydratedURLButton { + + enum WebviewPresentationType { + FULL = 1, + TALL = 2, + COMPACT = 3 + } + } + } + + interface IIdentityKeyPairStructure { + publicKey?: (Uint8Array|null); + privateKey?: (Uint8Array|null); + } + + class IdentityKeyPairStructure implements IIdentityKeyPairStructure { + constructor(p?: proto.IIdentityKeyPairStructure); + public publicKey?: (Uint8Array|null); + public privateKey?: (Uint8Array|null); + public static create(properties?: proto.IIdentityKeyPairStructure): proto.IdentityKeyPairStructure; + public static encode(m: proto.IIdentityKeyPairStructure, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.IdentityKeyPairStructure; + public static fromObject(d: { [k: string]: any }): proto.IdentityKeyPairStructure; + public static toObject(m: proto.IdentityKeyPairStructure, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IInThreadSurveyMetadata { + tessaSessionId?: (string|null); + simonSessionId?: (string|null); + simonSurveyId?: (string|null); + tessaRootId?: (string|null); + requestId?: (string|null); + tessaEvent?: (string|null); + invitationHeaderText?: (string|null); + invitationBodyText?: (string|null); + invitationCtaText?: (string|null); + invitationCtaUrl?: (string|null); + surveyTitle?: (string|null); + questions?: (proto.InThreadSurveyMetadata.IInThreadSurveyQuestion[]|null); + surveyContinueButtonText?: (string|null); + surveySubmitButtonText?: (string|null); + privacyStatementFull?: (string|null); + privacyStatementParts?: (proto.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart[]|null); + feedbackToastText?: (string|null); + } + + class InThreadSurveyMetadata implements IInThreadSurveyMetadata { + constructor(p?: proto.IInThreadSurveyMetadata); + public tessaSessionId?: (string|null); + public simonSessionId?: (string|null); + public simonSurveyId?: (string|null); + public tessaRootId?: (string|null); + public requestId?: (string|null); + public tessaEvent?: (string|null); + public invitationHeaderText?: (string|null); + public invitationBodyText?: (string|null); + public invitationCtaText?: (string|null); + public invitationCtaUrl?: (string|null); + public surveyTitle?: (string|null); + public questions: proto.InThreadSurveyMetadata.IInThreadSurveyQuestion[]; + public surveyContinueButtonText?: (string|null); + public surveySubmitButtonText?: (string|null); + public privacyStatementFull?: (string|null); + public privacyStatementParts: proto.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart[]; + public feedbackToastText?: (string|null); + public static create(properties?: proto.IInThreadSurveyMetadata): proto.InThreadSurveyMetadata; + public static encode(m: proto.IInThreadSurveyMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.InThreadSurveyMetadata; + public static fromObject(d: { [k: string]: any }): proto.InThreadSurveyMetadata; + public static toObject(m: proto.InThreadSurveyMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace InThreadSurveyMetadata { + + interface IInThreadSurveyOption { + stringValue?: (string|null); + numericValue?: (number|null); + textTranslated?: (string|null); + } + + class InThreadSurveyOption implements IInThreadSurveyOption { + constructor(p?: proto.InThreadSurveyMetadata.IInThreadSurveyOption); + public stringValue?: (string|null); + public numericValue?: (number|null); + public textTranslated?: (string|null); + public static create(properties?: proto.InThreadSurveyMetadata.IInThreadSurveyOption): proto.InThreadSurveyMetadata.InThreadSurveyOption; + public static encode(m: proto.InThreadSurveyMetadata.IInThreadSurveyOption, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.InThreadSurveyMetadata.InThreadSurveyOption; + public static fromObject(d: { [k: string]: any }): proto.InThreadSurveyMetadata.InThreadSurveyOption; + public static toObject(m: proto.InThreadSurveyMetadata.InThreadSurveyOption, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IInThreadSurveyPrivacyStatementPart { + text?: (string|null); + url?: (string|null); + } + + class InThreadSurveyPrivacyStatementPart implements IInThreadSurveyPrivacyStatementPart { + constructor(p?: proto.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart); + public text?: (string|null); + public url?: (string|null); + public static create(properties?: proto.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart): proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart; + public static encode(m: proto.InThreadSurveyMetadata.IInThreadSurveyPrivacyStatementPart, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart; + public static fromObject(d: { [k: string]: any }): proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart; + public static toObject(m: proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IInThreadSurveyQuestion { + questionText?: (string|null); + questionId?: (string|null); + questionOptions?: (proto.InThreadSurveyMetadata.IInThreadSurveyOption[]|null); + } + + class InThreadSurveyQuestion implements IInThreadSurveyQuestion { + constructor(p?: proto.InThreadSurveyMetadata.IInThreadSurveyQuestion); + public questionText?: (string|null); + public questionId?: (string|null); + public questionOptions: proto.InThreadSurveyMetadata.IInThreadSurveyOption[]; + public static create(properties?: proto.InThreadSurveyMetadata.IInThreadSurveyQuestion): proto.InThreadSurveyMetadata.InThreadSurveyQuestion; + public static encode(m: proto.InThreadSurveyMetadata.IInThreadSurveyQuestion, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.InThreadSurveyMetadata.InThreadSurveyQuestion; + public static fromObject(d: { [k: string]: any }): proto.InThreadSurveyMetadata.InThreadSurveyQuestion; + public static toObject(m: proto.InThreadSurveyMetadata.InThreadSurveyQuestion, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IInteractiveAnnotation { + polygonVertices?: (proto.IPoint[]|null); + shouldSkipConfirmation?: (boolean|null); + embeddedContent?: (proto.IEmbeddedContent|null); + statusLinkType?: (proto.InteractiveAnnotation.StatusLinkType|null); + location?: (proto.ILocation|null); + newsletter?: (proto.ContextInfo.IForwardedNewsletterMessageInfo|null); + embeddedAction?: (boolean|null); + tapAction?: (proto.ITapLinkAction|null); + } + + class InteractiveAnnotation implements IInteractiveAnnotation { + constructor(p?: proto.IInteractiveAnnotation); + public polygonVertices: proto.IPoint[]; + public shouldSkipConfirmation?: (boolean|null); + public embeddedContent?: (proto.IEmbeddedContent|null); + public statusLinkType?: (proto.InteractiveAnnotation.StatusLinkType|null); + public location?: (proto.ILocation|null); + public newsletter?: (proto.ContextInfo.IForwardedNewsletterMessageInfo|null); + public embeddedAction?: (boolean|null); + public tapAction?: (proto.ITapLinkAction|null); + public action?: ("location"|"newsletter"|"embeddedAction"|"tapAction"); + public static create(properties?: proto.IInteractiveAnnotation): proto.InteractiveAnnotation; + public static encode(m: proto.IInteractiveAnnotation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.InteractiveAnnotation; + public static fromObject(d: { [k: string]: any }): proto.InteractiveAnnotation; + public static toObject(m: proto.InteractiveAnnotation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace InteractiveAnnotation { + + enum StatusLinkType { + RASTERIZED_LINK_PREVIEW = 1, + RASTERIZED_LINK_TRUNCATED = 2, + RASTERIZED_LINK_FULL_URL = 3 + } + } + + interface IInteractiveMessageAdditionalMetadata { + isGalaxyFlowCompleted?: (boolean|null); + } + + class InteractiveMessageAdditionalMetadata implements IInteractiveMessageAdditionalMetadata { + constructor(p?: proto.IInteractiveMessageAdditionalMetadata); + public isGalaxyFlowCompleted?: (boolean|null); + public static create(properties?: proto.IInteractiveMessageAdditionalMetadata): proto.InteractiveMessageAdditionalMetadata; + public static encode(m: proto.IInteractiveMessageAdditionalMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.InteractiveMessageAdditionalMetadata; + public static fromObject(d: { [k: string]: any }): proto.InteractiveMessageAdditionalMetadata; + public static toObject(m: proto.InteractiveMessageAdditionalMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IKeepInChat { + keepType?: (proto.KeepType|null); + serverTimestamp?: (number|Long|null); + key?: (proto.IMessageKey|null); + deviceJid?: (string|null); + clientTimestampMs?: (number|Long|null); + serverTimestampMs?: (number|Long|null); + } + + class KeepInChat implements IKeepInChat { + constructor(p?: proto.IKeepInChat); + public keepType?: (proto.KeepType|null); + public serverTimestamp?: (number|Long|null); + public key?: (proto.IMessageKey|null); + public deviceJid?: (string|null); + public clientTimestampMs?: (number|Long|null); + public serverTimestampMs?: (number|Long|null); + public static create(properties?: proto.IKeepInChat): proto.KeepInChat; + public static encode(m: proto.IKeepInChat, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.KeepInChat; + public static fromObject(d: { [k: string]: any }): proto.KeepInChat; + public static toObject(m: proto.KeepInChat, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum KeepType { + UNKNOWN = 0, + KEEP_FOR_ALL = 1, + UNDO_KEEP_FOR_ALL = 2 + } + + interface IKeyExchangeMessage { + id?: (number|null); + baseKey?: (Uint8Array|null); + ratchetKey?: (Uint8Array|null); + identityKey?: (Uint8Array|null); + baseKeySignature?: (Uint8Array|null); + } + + class KeyExchangeMessage implements IKeyExchangeMessage { + constructor(p?: proto.IKeyExchangeMessage); + public id?: (number|null); + public baseKey?: (Uint8Array|null); + public ratchetKey?: (Uint8Array|null); + public identityKey?: (Uint8Array|null); + public baseKeySignature?: (Uint8Array|null); + public static create(properties?: proto.IKeyExchangeMessage): proto.KeyExchangeMessage; + public static encode(m: proto.IKeyExchangeMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.KeyExchangeMessage; + public static fromObject(d: { [k: string]: any }): proto.KeyExchangeMessage; + public static toObject(m: proto.KeyExchangeMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IKeyId { + id?: (Uint8Array|null); + } + + class KeyId implements IKeyId { + constructor(p?: proto.IKeyId); + public id?: (Uint8Array|null); + public static create(properties?: proto.IKeyId): proto.KeyId; + public static encode(m: proto.IKeyId, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.KeyId; + public static fromObject(d: { [k: string]: any }): proto.KeyId; + public static toObject(m: proto.KeyId, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILIDMigrationMapping { + pn?: (number|Long|null); + assignedLid?: (number|Long|null); + latestLid?: (number|Long|null); + } + + class LIDMigrationMapping implements ILIDMigrationMapping { + constructor(p?: proto.ILIDMigrationMapping); + public pn: (number|Long); + public assignedLid: (number|Long); + public latestLid?: (number|Long|null); + public static create(properties?: proto.ILIDMigrationMapping): proto.LIDMigrationMapping; + public static encode(m: proto.ILIDMigrationMapping, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.LIDMigrationMapping; + public static fromObject(d: { [k: string]: any }): proto.LIDMigrationMapping; + public static toObject(m: proto.LIDMigrationMapping, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILIDMigrationMappingSyncMessage { + encodedMappingPayload?: (Uint8Array|null); + } + + class LIDMigrationMappingSyncMessage implements ILIDMigrationMappingSyncMessage { + constructor(p?: proto.ILIDMigrationMappingSyncMessage); + public encodedMappingPayload?: (Uint8Array|null); + public static create(properties?: proto.ILIDMigrationMappingSyncMessage): proto.LIDMigrationMappingSyncMessage; + public static encode(m: proto.ILIDMigrationMappingSyncMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.LIDMigrationMappingSyncMessage; + public static fromObject(d: { [k: string]: any }): proto.LIDMigrationMappingSyncMessage; + public static toObject(m: proto.LIDMigrationMappingSyncMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILIDMigrationMappingSyncPayload { + pnToLidMappings?: (proto.ILIDMigrationMapping[]|null); + chatDbMigrationTimestamp?: (number|Long|null); + } + + class LIDMigrationMappingSyncPayload implements ILIDMigrationMappingSyncPayload { + constructor(p?: proto.ILIDMigrationMappingSyncPayload); + public pnToLidMappings: proto.ILIDMigrationMapping[]; + public chatDbMigrationTimestamp?: (number|Long|null); + public static create(properties?: proto.ILIDMigrationMappingSyncPayload): proto.LIDMigrationMappingSyncPayload; + public static encode(m: proto.ILIDMigrationMappingSyncPayload, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.LIDMigrationMappingSyncPayload; + public static fromObject(d: { [k: string]: any }): proto.LIDMigrationMappingSyncPayload; + public static toObject(m: proto.LIDMigrationMappingSyncPayload, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILegacyMessage { + eventResponseMessage?: (proto.Message.IEventResponseMessage|null); + pollVote?: (proto.Message.IPollVoteMessage|null); + } + + class LegacyMessage implements ILegacyMessage { + constructor(p?: proto.ILegacyMessage); + public eventResponseMessage?: (proto.Message.IEventResponseMessage|null); + public pollVote?: (proto.Message.IPollVoteMessage|null); + public static create(properties?: proto.ILegacyMessage): proto.LegacyMessage; + public static encode(m: proto.ILegacyMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.LegacyMessage; + public static fromObject(d: { [k: string]: any }): proto.LegacyMessage; + public static toObject(m: proto.LegacyMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILimitSharing { + sharingLimited?: (boolean|null); + trigger?: (proto.LimitSharing.TriggerType|null); + limitSharingSettingTimestamp?: (number|Long|null); + initiatedByMe?: (boolean|null); + } + + class LimitSharing implements ILimitSharing { + constructor(p?: proto.ILimitSharing); + public sharingLimited?: (boolean|null); + public trigger?: (proto.LimitSharing.TriggerType|null); + public limitSharingSettingTimestamp?: (number|Long|null); + public initiatedByMe?: (boolean|null); + public static create(properties?: proto.ILimitSharing): proto.LimitSharing; + public static encode(m: proto.ILimitSharing, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.LimitSharing; + public static fromObject(d: { [k: string]: any }): proto.LimitSharing; + public static toObject(m: proto.LimitSharing, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace LimitSharing { + + enum TriggerType { + UNKNOWN = 0, + CHAT_SETTING = 1, + BIZ_SUPPORTS_FB_HOSTING = 2, + UNKNOWN_GROUP = 3 + } + } + + interface ILocalizedName { + lg?: (string|null); + lc?: (string|null); + verifiedName?: (string|null); + } + + class LocalizedName implements ILocalizedName { + constructor(p?: proto.ILocalizedName); + public lg?: (string|null); + public lc?: (string|null); + public verifiedName?: (string|null); + public static create(properties?: proto.ILocalizedName): proto.LocalizedName; + public static encode(m: proto.ILocalizedName, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.LocalizedName; + public static fromObject(d: { [k: string]: any }): proto.LocalizedName; + public static toObject(m: proto.LocalizedName, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILocation { + degreesLatitude?: (number|null); + degreesLongitude?: (number|null); + name?: (string|null); + } + + class Location implements ILocation { + constructor(p?: proto.ILocation); + public degreesLatitude?: (number|null); + public degreesLongitude?: (number|null); + public name?: (string|null); + public static create(properties?: proto.ILocation): proto.Location; + public static encode(m: proto.ILocation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Location; + public static fromObject(d: { [k: string]: any }): proto.Location; + public static toObject(m: proto.Location, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMediaData { + localPath?: (string|null); + } + + class MediaData implements IMediaData { + constructor(p?: proto.IMediaData); + public localPath?: (string|null); + public static create(properties?: proto.IMediaData): proto.MediaData; + public static encode(m: proto.IMediaData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MediaData; + public static fromObject(d: { [k: string]: any }): proto.MediaData; + public static toObject(m: proto.MediaData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMediaNotifyMessage { + expressPathUrl?: (string|null); + fileEncSha256?: (Uint8Array|null); + fileLength?: (number|Long|null); + } + + class MediaNotifyMessage implements IMediaNotifyMessage { + constructor(p?: proto.IMediaNotifyMessage); + public expressPathUrl?: (string|null); + public fileEncSha256?: (Uint8Array|null); + public fileLength?: (number|Long|null); + public static create(properties?: proto.IMediaNotifyMessage): proto.MediaNotifyMessage; + public static encode(m: proto.IMediaNotifyMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MediaNotifyMessage; + public static fromObject(d: { [k: string]: any }): proto.MediaNotifyMessage; + public static toObject(m: proto.MediaNotifyMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMediaRetryNotification { + stanzaId?: (string|null); + directPath?: (string|null); + result?: (proto.MediaRetryNotification.ResultType|null); + messageSecret?: (Uint8Array|null); + } + + class MediaRetryNotification implements IMediaRetryNotification { + constructor(p?: proto.IMediaRetryNotification); + public stanzaId?: (string|null); + public directPath?: (string|null); + public result?: (proto.MediaRetryNotification.ResultType|null); + public messageSecret?: (Uint8Array|null); + public static create(properties?: proto.IMediaRetryNotification): proto.MediaRetryNotification; + public static encode(m: proto.IMediaRetryNotification, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MediaRetryNotification; + public static fromObject(d: { [k: string]: any }): proto.MediaRetryNotification; + public static toObject(m: proto.MediaRetryNotification, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MediaRetryNotification { + + enum ResultType { + GENERAL_ERROR = 0, + SUCCESS = 1, + NOT_FOUND = 2, + DECRYPTION_ERROR = 3 + } + } + + enum MediaVisibility { + DEFAULT = 0, + OFF = 1, + ON = 2 + } + + interface IMemberLabel { + label?: (string|null); + labelTimestamp?: (number|Long|null); + } + + class MemberLabel implements IMemberLabel { + constructor(p?: proto.IMemberLabel); + public label?: (string|null); + public labelTimestamp?: (number|Long|null); + public static create(properties?: proto.IMemberLabel): proto.MemberLabel; + public static encode(m: proto.IMemberLabel, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MemberLabel; + public static fromObject(d: { [k: string]: any }): proto.MemberLabel; + public static toObject(m: proto.MemberLabel, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMessage { + conversation?: (string|null); + senderKeyDistributionMessage?: (proto.Message.ISenderKeyDistributionMessage|null); + imageMessage?: (proto.Message.IImageMessage|null); + contactMessage?: (proto.Message.IContactMessage|null); + locationMessage?: (proto.Message.ILocationMessage|null); + extendedTextMessage?: (proto.Message.IExtendedTextMessage|null); + documentMessage?: (proto.Message.IDocumentMessage|null); + audioMessage?: (proto.Message.IAudioMessage|null); + videoMessage?: (proto.Message.IVideoMessage|null); + call?: (proto.Message.ICall|null); + chat?: (proto.Message.IChat|null); + protocolMessage?: (proto.Message.IProtocolMessage|null); + contactsArrayMessage?: (proto.Message.IContactsArrayMessage|null); + highlyStructuredMessage?: (proto.Message.IHighlyStructuredMessage|null); + fastRatchetKeySenderKeyDistributionMessage?: (proto.Message.ISenderKeyDistributionMessage|null); + sendPaymentMessage?: (proto.Message.ISendPaymentMessage|null); + liveLocationMessage?: (proto.Message.ILiveLocationMessage|null); + requestPaymentMessage?: (proto.Message.IRequestPaymentMessage|null); + declinePaymentRequestMessage?: (proto.Message.IDeclinePaymentRequestMessage|null); + cancelPaymentRequestMessage?: (proto.Message.ICancelPaymentRequestMessage|null); + templateMessage?: (proto.Message.ITemplateMessage|null); + stickerMessage?: (proto.Message.IStickerMessage|null); + groupInviteMessage?: (proto.Message.IGroupInviteMessage|null); + templateButtonReplyMessage?: (proto.Message.ITemplateButtonReplyMessage|null); + productMessage?: (proto.Message.IProductMessage|null); + deviceSentMessage?: (proto.Message.IDeviceSentMessage|null); + messageContextInfo?: (proto.IMessageContextInfo|null); + listMessage?: (proto.Message.IListMessage|null); + viewOnceMessage?: (proto.Message.IFutureProofMessage|null); + orderMessage?: (proto.Message.IOrderMessage|null); + listResponseMessage?: (proto.Message.IListResponseMessage|null); + ephemeralMessage?: (proto.Message.IFutureProofMessage|null); + invoiceMessage?: (proto.Message.IInvoiceMessage|null); + buttonsMessage?: (proto.Message.IButtonsMessage|null); + buttonsResponseMessage?: (proto.Message.IButtonsResponseMessage|null); + paymentInviteMessage?: (proto.Message.IPaymentInviteMessage|null); + interactiveMessage?: (proto.Message.IInteractiveMessage|null); + reactionMessage?: (proto.Message.IReactionMessage|null); + stickerSyncRmrMessage?: (proto.Message.IStickerSyncRMRMessage|null); + interactiveResponseMessage?: (proto.Message.IInteractiveResponseMessage|null); + pollCreationMessage?: (proto.Message.IPollCreationMessage|null); + pollUpdateMessage?: (proto.Message.IPollUpdateMessage|null); + keepInChatMessage?: (proto.Message.IKeepInChatMessage|null); + documentWithCaptionMessage?: (proto.Message.IFutureProofMessage|null); + requestPhoneNumberMessage?: (proto.Message.IRequestPhoneNumberMessage|null); + viewOnceMessageV2?: (proto.Message.IFutureProofMessage|null); + encReactionMessage?: (proto.Message.IEncReactionMessage|null); + editedMessage?: (proto.Message.IFutureProofMessage|null); + viewOnceMessageV2Extension?: (proto.Message.IFutureProofMessage|null); + pollCreationMessageV2?: (proto.Message.IPollCreationMessage|null); + scheduledCallCreationMessage?: (proto.Message.IScheduledCallCreationMessage|null); + groupMentionedMessage?: (proto.Message.IFutureProofMessage|null); + pinInChatMessage?: (proto.Message.IPinInChatMessage|null); + pollCreationMessageV3?: (proto.Message.IPollCreationMessage|null); + scheduledCallEditMessage?: (proto.Message.IScheduledCallEditMessage|null); + ptvMessage?: (proto.Message.IVideoMessage|null); + botInvokeMessage?: (proto.Message.IFutureProofMessage|null); + callLogMesssage?: (proto.Message.ICallLogMessage|null); + messageHistoryBundle?: (proto.Message.IMessageHistoryBundle|null); + encCommentMessage?: (proto.Message.IEncCommentMessage|null); + bcallMessage?: (proto.Message.IBCallMessage|null); + lottieStickerMessage?: (proto.Message.IFutureProofMessage|null); + eventMessage?: (proto.Message.IEventMessage|null); + encEventResponseMessage?: (proto.Message.IEncEventResponseMessage|null); + commentMessage?: (proto.Message.ICommentMessage|null); + newsletterAdminInviteMessage?: (proto.Message.INewsletterAdminInviteMessage|null); + placeholderMessage?: (proto.Message.IPlaceholderMessage|null); + secretEncryptedMessage?: (proto.Message.ISecretEncryptedMessage|null); + albumMessage?: (proto.Message.IAlbumMessage|null); + eventCoverImage?: (proto.Message.IFutureProofMessage|null); + stickerPackMessage?: (proto.Message.IStickerPackMessage|null); + statusMentionMessage?: (proto.Message.IFutureProofMessage|null); + pollResultSnapshotMessage?: (proto.Message.IPollResultSnapshotMessage|null); + pollCreationOptionImageMessage?: (proto.Message.IFutureProofMessage|null); + associatedChildMessage?: (proto.Message.IFutureProofMessage|null); + groupStatusMentionMessage?: (proto.Message.IFutureProofMessage|null); + pollCreationMessageV4?: (proto.Message.IFutureProofMessage|null); + statusAddYours?: (proto.Message.IFutureProofMessage|null); + groupStatusMessage?: (proto.Message.IFutureProofMessage|null); + richResponseMessage?: (proto.IAIRichResponseMessage|null); + statusNotificationMessage?: (proto.Message.IStatusNotificationMessage|null); + limitSharingMessage?: (proto.Message.IFutureProofMessage|null); + botTaskMessage?: (proto.Message.IFutureProofMessage|null); + questionMessage?: (proto.Message.IFutureProofMessage|null); + messageHistoryNotice?: (proto.Message.IMessageHistoryNotice|null); + groupStatusMessageV2?: (proto.Message.IFutureProofMessage|null); + botForwardedMessage?: (proto.Message.IFutureProofMessage|null); + statusQuestionAnswerMessage?: (proto.Message.IStatusQuestionAnswerMessage|null); + questionReplyMessage?: (proto.Message.IFutureProofMessage|null); + questionResponseMessage?: (proto.Message.IQuestionResponseMessage|null); + statusQuotedMessage?: (proto.Message.IStatusQuotedMessage|null); + statusStickerInteractionMessage?: (proto.Message.IStatusStickerInteractionMessage|null); + pollCreationMessageV5?: (proto.Message.IPollCreationMessage|null); + newsletterFollowerInviteMessageV2?: (proto.Message.INewsletterFollowerInviteMessage|null); + pollResultSnapshotMessageV3?: (proto.Message.IPollResultSnapshotMessage|null); + } + + class Message implements IMessage { + constructor(p?: proto.IMessage); + public conversation?: (string|null); + public senderKeyDistributionMessage?: (proto.Message.ISenderKeyDistributionMessage|null); + public imageMessage?: (proto.Message.IImageMessage|null); + public contactMessage?: (proto.Message.IContactMessage|null); + public locationMessage?: (proto.Message.ILocationMessage|null); + public extendedTextMessage?: (proto.Message.IExtendedTextMessage|null); + public documentMessage?: (proto.Message.IDocumentMessage|null); + public audioMessage?: (proto.Message.IAudioMessage|null); + public videoMessage?: (proto.Message.IVideoMessage|null); + public call?: (proto.Message.ICall|null); + public chat?: (proto.Message.IChat|null); + public protocolMessage?: (proto.Message.IProtocolMessage|null); + public contactsArrayMessage?: (proto.Message.IContactsArrayMessage|null); + public highlyStructuredMessage?: (proto.Message.IHighlyStructuredMessage|null); + public fastRatchetKeySenderKeyDistributionMessage?: (proto.Message.ISenderKeyDistributionMessage|null); + public sendPaymentMessage?: (proto.Message.ISendPaymentMessage|null); + public liveLocationMessage?: (proto.Message.ILiveLocationMessage|null); + public requestPaymentMessage?: (proto.Message.IRequestPaymentMessage|null); + public declinePaymentRequestMessage?: (proto.Message.IDeclinePaymentRequestMessage|null); + public cancelPaymentRequestMessage?: (proto.Message.ICancelPaymentRequestMessage|null); + public templateMessage?: (proto.Message.ITemplateMessage|null); + public stickerMessage?: (proto.Message.IStickerMessage|null); + public groupInviteMessage?: (proto.Message.IGroupInviteMessage|null); + public templateButtonReplyMessage?: (proto.Message.ITemplateButtonReplyMessage|null); + public productMessage?: (proto.Message.IProductMessage|null); + public deviceSentMessage?: (proto.Message.IDeviceSentMessage|null); + public messageContextInfo?: (proto.IMessageContextInfo|null); + public listMessage?: (proto.Message.IListMessage|null); + public viewOnceMessage?: (proto.Message.IFutureProofMessage|null); + public orderMessage?: (proto.Message.IOrderMessage|null); + public listResponseMessage?: (proto.Message.IListResponseMessage|null); + public ephemeralMessage?: (proto.Message.IFutureProofMessage|null); + public invoiceMessage?: (proto.Message.IInvoiceMessage|null); + public buttonsMessage?: (proto.Message.IButtonsMessage|null); + public buttonsResponseMessage?: (proto.Message.IButtonsResponseMessage|null); + public paymentInviteMessage?: (proto.Message.IPaymentInviteMessage|null); + public interactiveMessage?: (proto.Message.IInteractiveMessage|null); + public reactionMessage?: (proto.Message.IReactionMessage|null); + public stickerSyncRmrMessage?: (proto.Message.IStickerSyncRMRMessage|null); + public interactiveResponseMessage?: (proto.Message.IInteractiveResponseMessage|null); + public pollCreationMessage?: (proto.Message.IPollCreationMessage|null); + public pollUpdateMessage?: (proto.Message.IPollUpdateMessage|null); + public keepInChatMessage?: (proto.Message.IKeepInChatMessage|null); + public documentWithCaptionMessage?: (proto.Message.IFutureProofMessage|null); + public requestPhoneNumberMessage?: (proto.Message.IRequestPhoneNumberMessage|null); + public viewOnceMessageV2?: (proto.Message.IFutureProofMessage|null); + public encReactionMessage?: (proto.Message.IEncReactionMessage|null); + public editedMessage?: (proto.Message.IFutureProofMessage|null); + public viewOnceMessageV2Extension?: (proto.Message.IFutureProofMessage|null); + public pollCreationMessageV2?: (proto.Message.IPollCreationMessage|null); + public scheduledCallCreationMessage?: (proto.Message.IScheduledCallCreationMessage|null); + public groupMentionedMessage?: (proto.Message.IFutureProofMessage|null); + public pinInChatMessage?: (proto.Message.IPinInChatMessage|null); + public pollCreationMessageV3?: (proto.Message.IPollCreationMessage|null); + public scheduledCallEditMessage?: (proto.Message.IScheduledCallEditMessage|null); + public ptvMessage?: (proto.Message.IVideoMessage|null); + public botInvokeMessage?: (proto.Message.IFutureProofMessage|null); + public callLogMesssage?: (proto.Message.ICallLogMessage|null); + public messageHistoryBundle?: (proto.Message.IMessageHistoryBundle|null); + public encCommentMessage?: (proto.Message.IEncCommentMessage|null); + public bcallMessage?: (proto.Message.IBCallMessage|null); + public lottieStickerMessage?: (proto.Message.IFutureProofMessage|null); + public eventMessage?: (proto.Message.IEventMessage|null); + public encEventResponseMessage?: (proto.Message.IEncEventResponseMessage|null); + public commentMessage?: (proto.Message.ICommentMessage|null); + public newsletterAdminInviteMessage?: (proto.Message.INewsletterAdminInviteMessage|null); + public placeholderMessage?: (proto.Message.IPlaceholderMessage|null); + public secretEncryptedMessage?: (proto.Message.ISecretEncryptedMessage|null); + public albumMessage?: (proto.Message.IAlbumMessage|null); + public eventCoverImage?: (proto.Message.IFutureProofMessage|null); + public stickerPackMessage?: (proto.Message.IStickerPackMessage|null); + public statusMentionMessage?: (proto.Message.IFutureProofMessage|null); + public pollResultSnapshotMessage?: (proto.Message.IPollResultSnapshotMessage|null); + public pollCreationOptionImageMessage?: (proto.Message.IFutureProofMessage|null); + public associatedChildMessage?: (proto.Message.IFutureProofMessage|null); + public groupStatusMentionMessage?: (proto.Message.IFutureProofMessage|null); + public pollCreationMessageV4?: (proto.Message.IFutureProofMessage|null); + public statusAddYours?: (proto.Message.IFutureProofMessage|null); + public groupStatusMessage?: (proto.Message.IFutureProofMessage|null); + public richResponseMessage?: (proto.IAIRichResponseMessage|null); + public statusNotificationMessage?: (proto.Message.IStatusNotificationMessage|null); + public limitSharingMessage?: (proto.Message.IFutureProofMessage|null); + public botTaskMessage?: (proto.Message.IFutureProofMessage|null); + public questionMessage?: (proto.Message.IFutureProofMessage|null); + public messageHistoryNotice?: (proto.Message.IMessageHistoryNotice|null); + public groupStatusMessageV2?: (proto.Message.IFutureProofMessage|null); + public botForwardedMessage?: (proto.Message.IFutureProofMessage|null); + public statusQuestionAnswerMessage?: (proto.Message.IStatusQuestionAnswerMessage|null); + public questionReplyMessage?: (proto.Message.IFutureProofMessage|null); + public questionResponseMessage?: (proto.Message.IQuestionResponseMessage|null); + public statusQuotedMessage?: (proto.Message.IStatusQuotedMessage|null); + public statusStickerInteractionMessage?: (proto.Message.IStatusStickerInteractionMessage|null); + public pollCreationMessageV5?: (proto.Message.IPollCreationMessage|null); + public newsletterFollowerInviteMessageV2?: (proto.Message.INewsletterFollowerInviteMessage|null); + public pollResultSnapshotMessageV3?: (proto.Message.IPollResultSnapshotMessage|null); + public static create(properties?: proto.IMessage): proto.Message; + public static encode(m: proto.IMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message; + public static fromObject(d: { [k: string]: any }): proto.Message; + public static toObject(m: proto.Message, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace Message { + + interface IAlbumMessage { + expectedImageCount?: (number|null); + expectedVideoCount?: (number|null); + contextInfo?: (proto.IContextInfo|null); + } + + class AlbumMessage implements IAlbumMessage { + constructor(p?: proto.Message.IAlbumMessage); + public expectedImageCount?: (number|null); + public expectedVideoCount?: (number|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.IAlbumMessage): proto.Message.AlbumMessage; + public static encode(m: proto.Message.IAlbumMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AlbumMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.AlbumMessage; + public static toObject(m: proto.Message.AlbumMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAppStateFatalExceptionNotification { + collectionNames?: (string[]|null); + timestamp?: (number|Long|null); + } + + class AppStateFatalExceptionNotification implements IAppStateFatalExceptionNotification { + constructor(p?: proto.Message.IAppStateFatalExceptionNotification); + public collectionNames: string[]; + public timestamp?: (number|Long|null); + public static create(properties?: proto.Message.IAppStateFatalExceptionNotification): proto.Message.AppStateFatalExceptionNotification; + public static encode(m: proto.Message.IAppStateFatalExceptionNotification, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AppStateFatalExceptionNotification; + public static fromObject(d: { [k: string]: any }): proto.Message.AppStateFatalExceptionNotification; + public static toObject(m: proto.Message.AppStateFatalExceptionNotification, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAppStateSyncKey { + keyId?: (proto.Message.IAppStateSyncKeyId|null); + keyData?: (proto.Message.IAppStateSyncKeyData|null); + } + + class AppStateSyncKey implements IAppStateSyncKey { + constructor(p?: proto.Message.IAppStateSyncKey); + public keyId?: (proto.Message.IAppStateSyncKeyId|null); + public keyData?: (proto.Message.IAppStateSyncKeyData|null); + public static create(properties?: proto.Message.IAppStateSyncKey): proto.Message.AppStateSyncKey; + public static encode(m: proto.Message.IAppStateSyncKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AppStateSyncKey; + public static fromObject(d: { [k: string]: any }): proto.Message.AppStateSyncKey; + public static toObject(m: proto.Message.AppStateSyncKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAppStateSyncKeyData { + keyData?: (Uint8Array|null); + fingerprint?: (proto.Message.IAppStateSyncKeyFingerprint|null); + timestamp?: (number|Long|null); + } + + class AppStateSyncKeyData implements IAppStateSyncKeyData { + constructor(p?: proto.Message.IAppStateSyncKeyData); + public keyData?: (Uint8Array|null); + public fingerprint?: (proto.Message.IAppStateSyncKeyFingerprint|null); + public timestamp?: (number|Long|null); + public static create(properties?: proto.Message.IAppStateSyncKeyData): proto.Message.AppStateSyncKeyData; + public static encode(m: proto.Message.IAppStateSyncKeyData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AppStateSyncKeyData; + public static fromObject(d: { [k: string]: any }): proto.Message.AppStateSyncKeyData; + public static toObject(m: proto.Message.AppStateSyncKeyData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAppStateSyncKeyFingerprint { + rawId?: (number|null); + currentIndex?: (number|null); + deviceIndexes?: (number[]|null); + } + + class AppStateSyncKeyFingerprint implements IAppStateSyncKeyFingerprint { + constructor(p?: proto.Message.IAppStateSyncKeyFingerprint); + public rawId?: (number|null); + public currentIndex?: (number|null); + public deviceIndexes: number[]; + public static create(properties?: proto.Message.IAppStateSyncKeyFingerprint): proto.Message.AppStateSyncKeyFingerprint; + public static encode(m: proto.Message.IAppStateSyncKeyFingerprint, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AppStateSyncKeyFingerprint; + public static fromObject(d: { [k: string]: any }): proto.Message.AppStateSyncKeyFingerprint; + public static toObject(m: proto.Message.AppStateSyncKeyFingerprint, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAppStateSyncKeyId { + keyId?: (Uint8Array|null); + } + + class AppStateSyncKeyId implements IAppStateSyncKeyId { + constructor(p?: proto.Message.IAppStateSyncKeyId); + public keyId?: (Uint8Array|null); + public static create(properties?: proto.Message.IAppStateSyncKeyId): proto.Message.AppStateSyncKeyId; + public static encode(m: proto.Message.IAppStateSyncKeyId, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AppStateSyncKeyId; + public static fromObject(d: { [k: string]: any }): proto.Message.AppStateSyncKeyId; + public static toObject(m: proto.Message.AppStateSyncKeyId, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAppStateSyncKeyRequest { + keyIds?: (proto.Message.IAppStateSyncKeyId[]|null); + } + + class AppStateSyncKeyRequest implements IAppStateSyncKeyRequest { + constructor(p?: proto.Message.IAppStateSyncKeyRequest); + public keyIds: proto.Message.IAppStateSyncKeyId[]; + public static create(properties?: proto.Message.IAppStateSyncKeyRequest): proto.Message.AppStateSyncKeyRequest; + public static encode(m: proto.Message.IAppStateSyncKeyRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AppStateSyncKeyRequest; + public static fromObject(d: { [k: string]: any }): proto.Message.AppStateSyncKeyRequest; + public static toObject(m: proto.Message.AppStateSyncKeyRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAppStateSyncKeyShare { + keys?: (proto.Message.IAppStateSyncKey[]|null); + } + + class AppStateSyncKeyShare implements IAppStateSyncKeyShare { + constructor(p?: proto.Message.IAppStateSyncKeyShare); + public keys: proto.Message.IAppStateSyncKey[]; + public static create(properties?: proto.Message.IAppStateSyncKeyShare): proto.Message.AppStateSyncKeyShare; + public static encode(m: proto.Message.IAppStateSyncKeyShare, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AppStateSyncKeyShare; + public static fromObject(d: { [k: string]: any }): proto.Message.AppStateSyncKeyShare; + public static toObject(m: proto.Message.AppStateSyncKeyShare, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAudioMessage { + url?: (string|null); + mimetype?: (string|null); + fileSha256?: (Uint8Array|null); + fileLength?: (number|Long|null); + seconds?: (number|null); + ptt?: (boolean|null); + mediaKey?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + directPath?: (string|null); + mediaKeyTimestamp?: (number|Long|null); + contextInfo?: (proto.IContextInfo|null); + streamingSidecar?: (Uint8Array|null); + waveform?: (Uint8Array|null); + backgroundArgb?: (number|null); + viewOnce?: (boolean|null); + accessibilityLabel?: (string|null); + mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + } + + class AudioMessage implements IAudioMessage { + constructor(p?: proto.Message.IAudioMessage); + public url?: (string|null); + public mimetype?: (string|null); + public fileSha256?: (Uint8Array|null); + public fileLength?: (number|Long|null); + public seconds?: (number|null); + public ptt?: (boolean|null); + public mediaKey?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public directPath?: (string|null); + public mediaKeyTimestamp?: (number|Long|null); + public contextInfo?: (proto.IContextInfo|null); + public streamingSidecar?: (Uint8Array|null); + public waveform?: (Uint8Array|null); + public backgroundArgb?: (number|null); + public viewOnce?: (boolean|null); + public accessibilityLabel?: (string|null); + public mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + public static create(properties?: proto.Message.IAudioMessage): proto.Message.AudioMessage; + public static encode(m: proto.Message.IAudioMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.AudioMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.AudioMessage; + public static toObject(m: proto.Message.AudioMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBCallMessage { + sessionId?: (string|null); + mediaType?: (proto.Message.BCallMessage.MediaType|null); + masterKey?: (Uint8Array|null); + caption?: (string|null); + } + + class BCallMessage implements IBCallMessage { + constructor(p?: proto.Message.IBCallMessage); + public sessionId?: (string|null); + public mediaType?: (proto.Message.BCallMessage.MediaType|null); + public masterKey?: (Uint8Array|null); + public caption?: (string|null); + public static create(properties?: proto.Message.IBCallMessage): proto.Message.BCallMessage; + public static encode(m: proto.Message.IBCallMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.BCallMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.BCallMessage; + public static toObject(m: proto.Message.BCallMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace BCallMessage { + + enum MediaType { + UNKNOWN = 0, + AUDIO = 1, + VIDEO = 2 + } + } + + interface IButtonsMessage { + contentText?: (string|null); + footerText?: (string|null); + contextInfo?: (proto.IContextInfo|null); + buttons?: (proto.Message.ButtonsMessage.IButton[]|null); + headerType?: (proto.Message.ButtonsMessage.HeaderType|null); + text?: (string|null); + documentMessage?: (proto.Message.IDocumentMessage|null); + imageMessage?: (proto.Message.IImageMessage|null); + videoMessage?: (proto.Message.IVideoMessage|null); + locationMessage?: (proto.Message.ILocationMessage|null); + } + + class ButtonsMessage implements IButtonsMessage { + constructor(p?: proto.Message.IButtonsMessage); + public contentText?: (string|null); + public footerText?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public buttons: proto.Message.ButtonsMessage.IButton[]; + public headerType?: (proto.Message.ButtonsMessage.HeaderType|null); + public text?: (string|null); + public documentMessage?: (proto.Message.IDocumentMessage|null); + public imageMessage?: (proto.Message.IImageMessage|null); + public videoMessage?: (proto.Message.IVideoMessage|null); + public locationMessage?: (proto.Message.ILocationMessage|null); + public header?: ("text"|"documentMessage"|"imageMessage"|"videoMessage"|"locationMessage"); + public static create(properties?: proto.Message.IButtonsMessage): proto.Message.ButtonsMessage; + public static encode(m: proto.Message.IButtonsMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ButtonsMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ButtonsMessage; + public static toObject(m: proto.Message.ButtonsMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ButtonsMessage { + + interface IButton { + buttonId?: (string|null); + buttonText?: (proto.Message.ButtonsMessage.Button.IButtonText|null); + type?: (proto.Message.ButtonsMessage.Button.Type|null); + nativeFlowInfo?: (proto.Message.ButtonsMessage.Button.INativeFlowInfo|null); + } + + class Button implements IButton { + constructor(p?: proto.Message.ButtonsMessage.IButton); + public buttonId?: (string|null); + public buttonText?: (proto.Message.ButtonsMessage.Button.IButtonText|null); + public type?: (proto.Message.ButtonsMessage.Button.Type|null); + public nativeFlowInfo?: (proto.Message.ButtonsMessage.Button.INativeFlowInfo|null); + public static create(properties?: proto.Message.ButtonsMessage.IButton): proto.Message.ButtonsMessage.Button; + public static encode(m: proto.Message.ButtonsMessage.IButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ButtonsMessage.Button; + public static fromObject(d: { [k: string]: any }): proto.Message.ButtonsMessage.Button; + public static toObject(m: proto.Message.ButtonsMessage.Button, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace Button { + + interface IButtonText { + displayText?: (string|null); + } + + class ButtonText implements IButtonText { + constructor(p?: proto.Message.ButtonsMessage.Button.IButtonText); + public displayText?: (string|null); + public static create(properties?: proto.Message.ButtonsMessage.Button.IButtonText): proto.Message.ButtonsMessage.Button.ButtonText; + public static encode(m: proto.Message.ButtonsMessage.Button.IButtonText, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ButtonsMessage.Button.ButtonText; + public static fromObject(d: { [k: string]: any }): proto.Message.ButtonsMessage.Button.ButtonText; + public static toObject(m: proto.Message.ButtonsMessage.Button.ButtonText, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface INativeFlowInfo { + name?: (string|null); + paramsJson?: (string|null); + } + + class NativeFlowInfo implements INativeFlowInfo { + constructor(p?: proto.Message.ButtonsMessage.Button.INativeFlowInfo); + public name?: (string|null); + public paramsJson?: (string|null); + public static create(properties?: proto.Message.ButtonsMessage.Button.INativeFlowInfo): proto.Message.ButtonsMessage.Button.NativeFlowInfo; + public static encode(m: proto.Message.ButtonsMessage.Button.INativeFlowInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ButtonsMessage.Button.NativeFlowInfo; + public static fromObject(d: { [k: string]: any }): proto.Message.ButtonsMessage.Button.NativeFlowInfo; + public static toObject(m: proto.Message.ButtonsMessage.Button.NativeFlowInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum Type { + UNKNOWN = 0, + RESPONSE = 1, + NATIVE_FLOW = 2 + } + } + + enum HeaderType { + UNKNOWN = 0, + EMPTY = 1, + TEXT = 2, + DOCUMENT = 3, + IMAGE = 4, + VIDEO = 5, + LOCATION = 6 + } + } + + interface IButtonsResponseMessage { + selectedButtonId?: (string|null); + contextInfo?: (proto.IContextInfo|null); + type?: (proto.Message.ButtonsResponseMessage.Type|null); + selectedDisplayText?: (string|null); + } + + class ButtonsResponseMessage implements IButtonsResponseMessage { + constructor(p?: proto.Message.IButtonsResponseMessage); + public selectedButtonId?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public type?: (proto.Message.ButtonsResponseMessage.Type|null); + public selectedDisplayText?: (string|null); + public response?: "selectedDisplayText"; + public static create(properties?: proto.Message.IButtonsResponseMessage): proto.Message.ButtonsResponseMessage; + public static encode(m: proto.Message.IButtonsResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ButtonsResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ButtonsResponseMessage; + public static toObject(m: proto.Message.ButtonsResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ButtonsResponseMessage { + + enum Type { + UNKNOWN = 0, + DISPLAY_TEXT = 1 + } + } + + interface ICall { + callKey?: (Uint8Array|null); + conversionSource?: (string|null); + conversionData?: (Uint8Array|null); + conversionDelaySeconds?: (number|null); + ctwaSignals?: (string|null); + ctwaPayload?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + nativeFlowCallButtonPayload?: (string|null); + deeplinkPayload?: (string|null); + } + + class Call implements ICall { + constructor(p?: proto.Message.ICall); + public callKey?: (Uint8Array|null); + public conversionSource?: (string|null); + public conversionData?: (Uint8Array|null); + public conversionDelaySeconds?: (number|null); + public ctwaSignals?: (string|null); + public ctwaPayload?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public nativeFlowCallButtonPayload?: (string|null); + public deeplinkPayload?: (string|null); + public static create(properties?: proto.Message.ICall): proto.Message.Call; + public static encode(m: proto.Message.ICall, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.Call; + public static fromObject(d: { [k: string]: any }): proto.Message.Call; + public static toObject(m: proto.Message.Call, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICallLogMessage { + isVideo?: (boolean|null); + callOutcome?: (proto.Message.CallLogMessage.CallOutcome|null); + durationSecs?: (number|Long|null); + callType?: (proto.Message.CallLogMessage.CallType|null); + participants?: (proto.Message.CallLogMessage.ICallParticipant[]|null); + } + + class CallLogMessage implements ICallLogMessage { + constructor(p?: proto.Message.ICallLogMessage); + public isVideo?: (boolean|null); + public callOutcome?: (proto.Message.CallLogMessage.CallOutcome|null); + public durationSecs?: (number|Long|null); + public callType?: (proto.Message.CallLogMessage.CallType|null); + public participants: proto.Message.CallLogMessage.ICallParticipant[]; + public static create(properties?: proto.Message.ICallLogMessage): proto.Message.CallLogMessage; + public static encode(m: proto.Message.ICallLogMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.CallLogMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.CallLogMessage; + public static toObject(m: proto.Message.CallLogMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace CallLogMessage { + + enum CallOutcome { + CONNECTED = 0, + MISSED = 1, + FAILED = 2, + REJECTED = 3, + ACCEPTED_ELSEWHERE = 4, + ONGOING = 5, + SILENCED_BY_DND = 6, + SILENCED_UNKNOWN_CALLER = 7 + } + + interface ICallParticipant { + jid?: (string|null); + callOutcome?: (proto.Message.CallLogMessage.CallOutcome|null); + } + + class CallParticipant implements ICallParticipant { + constructor(p?: proto.Message.CallLogMessage.ICallParticipant); + public jid?: (string|null); + public callOutcome?: (proto.Message.CallLogMessage.CallOutcome|null); + public static create(properties?: proto.Message.CallLogMessage.ICallParticipant): proto.Message.CallLogMessage.CallParticipant; + public static encode(m: proto.Message.CallLogMessage.ICallParticipant, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.CallLogMessage.CallParticipant; + public static fromObject(d: { [k: string]: any }): proto.Message.CallLogMessage.CallParticipant; + public static toObject(m: proto.Message.CallLogMessage.CallParticipant, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum CallType { + REGULAR = 0, + SCHEDULED_CALL = 1, + VOICE_CHAT = 2 + } + } + + interface ICancelPaymentRequestMessage { + key?: (proto.IMessageKey|null); + } + + class CancelPaymentRequestMessage implements ICancelPaymentRequestMessage { + constructor(p?: proto.Message.ICancelPaymentRequestMessage); + public key?: (proto.IMessageKey|null); + public static create(properties?: proto.Message.ICancelPaymentRequestMessage): proto.Message.CancelPaymentRequestMessage; + public static encode(m: proto.Message.ICancelPaymentRequestMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.CancelPaymentRequestMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.CancelPaymentRequestMessage; + public static toObject(m: proto.Message.CancelPaymentRequestMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IChat { + displayName?: (string|null); + id?: (string|null); + } + + class Chat implements IChat { + constructor(p?: proto.Message.IChat); + public displayName?: (string|null); + public id?: (string|null); + public static create(properties?: proto.Message.IChat): proto.Message.Chat; + public static encode(m: proto.Message.IChat, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.Chat; + public static fromObject(d: { [k: string]: any }): proto.Message.Chat; + public static toObject(m: proto.Message.Chat, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICloudAPIThreadControlNotification { + status?: (proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControl|null); + senderNotificationTimestampMs?: (number|Long|null); + consumerLid?: (string|null); + consumerPhoneNumber?: (string|null); + notificationContent?: (proto.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent|null); + shouldSuppressNotification?: (boolean|null); + } + + class CloudAPIThreadControlNotification implements ICloudAPIThreadControlNotification { + constructor(p?: proto.Message.ICloudAPIThreadControlNotification); + public status?: (proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControl|null); + public senderNotificationTimestampMs?: (number|Long|null); + public consumerLid?: (string|null); + public consumerPhoneNumber?: (string|null); + public notificationContent?: (proto.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent|null); + public shouldSuppressNotification?: (boolean|null); + public static create(properties?: proto.Message.ICloudAPIThreadControlNotification): proto.Message.CloudAPIThreadControlNotification; + public static encode(m: proto.Message.ICloudAPIThreadControlNotification, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.CloudAPIThreadControlNotification; + public static fromObject(d: { [k: string]: any }): proto.Message.CloudAPIThreadControlNotification; + public static toObject(m: proto.Message.CloudAPIThreadControlNotification, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace CloudAPIThreadControlNotification { + + enum CloudAPIThreadControl { + UNKNOWN = 0, + CONTROL_PASSED = 1, + CONTROL_TAKEN = 2 + } + + interface ICloudAPIThreadControlNotificationContent { + handoffNotificationText?: (string|null); + extraJson?: (string|null); + } + + class CloudAPIThreadControlNotificationContent implements ICloudAPIThreadControlNotificationContent { + constructor(p?: proto.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent); + public handoffNotificationText?: (string|null); + public extraJson?: (string|null); + public static create(properties?: proto.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent): proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent; + public static encode(m: proto.Message.CloudAPIThreadControlNotification.ICloudAPIThreadControlNotificationContent, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent; + public static fromObject(d: { [k: string]: any }): proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent; + public static toObject(m: proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface ICommentMessage { + message?: (proto.IMessage|null); + targetMessageKey?: (proto.IMessageKey|null); + } + + class CommentMessage implements ICommentMessage { + constructor(p?: proto.Message.ICommentMessage); + public message?: (proto.IMessage|null); + public targetMessageKey?: (proto.IMessageKey|null); + public static create(properties?: proto.Message.ICommentMessage): proto.Message.CommentMessage; + public static encode(m: proto.Message.ICommentMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.CommentMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.CommentMessage; + public static toObject(m: proto.Message.CommentMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IContactMessage { + displayName?: (string|null); + vcard?: (string|null); + contextInfo?: (proto.IContextInfo|null); + } + + class ContactMessage implements IContactMessage { + constructor(p?: proto.Message.IContactMessage); + public displayName?: (string|null); + public vcard?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.IContactMessage): proto.Message.ContactMessage; + public static encode(m: proto.Message.IContactMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ContactMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ContactMessage; + public static toObject(m: proto.Message.ContactMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IContactsArrayMessage { + displayName?: (string|null); + contacts?: (proto.Message.IContactMessage[]|null); + contextInfo?: (proto.IContextInfo|null); + } + + class ContactsArrayMessage implements IContactsArrayMessage { + constructor(p?: proto.Message.IContactsArrayMessage); + public displayName?: (string|null); + public contacts: proto.Message.IContactMessage[]; + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.IContactsArrayMessage): proto.Message.ContactsArrayMessage; + public static encode(m: proto.Message.IContactsArrayMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ContactsArrayMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ContactsArrayMessage; + public static toObject(m: proto.Message.ContactsArrayMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDeclinePaymentRequestMessage { + key?: (proto.IMessageKey|null); + } + + class DeclinePaymentRequestMessage implements IDeclinePaymentRequestMessage { + constructor(p?: proto.Message.IDeclinePaymentRequestMessage); + public key?: (proto.IMessageKey|null); + public static create(properties?: proto.Message.IDeclinePaymentRequestMessage): proto.Message.DeclinePaymentRequestMessage; + public static encode(m: proto.Message.IDeclinePaymentRequestMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.DeclinePaymentRequestMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.DeclinePaymentRequestMessage; + public static toObject(m: proto.Message.DeclinePaymentRequestMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDeviceSentMessage { + destinationJid?: (string|null); + message?: (proto.IMessage|null); + phash?: (string|null); + } + + class DeviceSentMessage implements IDeviceSentMessage { + constructor(p?: proto.Message.IDeviceSentMessage); + public destinationJid?: (string|null); + public message?: (proto.IMessage|null); + public phash?: (string|null); + public static create(properties?: proto.Message.IDeviceSentMessage): proto.Message.DeviceSentMessage; + public static encode(m: proto.Message.IDeviceSentMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.DeviceSentMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.DeviceSentMessage; + public static toObject(m: proto.Message.DeviceSentMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDocumentMessage { + url?: (string|null); + mimetype?: (string|null); + title?: (string|null); + fileSha256?: (Uint8Array|null); + fileLength?: (number|Long|null); + pageCount?: (number|null); + mediaKey?: (Uint8Array|null); + fileName?: (string|null); + fileEncSha256?: (Uint8Array|null); + directPath?: (string|null); + mediaKeyTimestamp?: (number|Long|null); + contactVcard?: (boolean|null); + thumbnailDirectPath?: (string|null); + thumbnailSha256?: (Uint8Array|null); + thumbnailEncSha256?: (Uint8Array|null); + jpegThumbnail?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + thumbnailHeight?: (number|null); + thumbnailWidth?: (number|null); + caption?: (string|null); + accessibilityLabel?: (string|null); + mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + } + + class DocumentMessage implements IDocumentMessage { + constructor(p?: proto.Message.IDocumentMessage); + public url?: (string|null); + public mimetype?: (string|null); + public title?: (string|null); + public fileSha256?: (Uint8Array|null); + public fileLength?: (number|Long|null); + public pageCount?: (number|null); + public mediaKey?: (Uint8Array|null); + public fileName?: (string|null); + public fileEncSha256?: (Uint8Array|null); + public directPath?: (string|null); + public mediaKeyTimestamp?: (number|Long|null); + public contactVcard?: (boolean|null); + public thumbnailDirectPath?: (string|null); + public thumbnailSha256?: (Uint8Array|null); + public thumbnailEncSha256?: (Uint8Array|null); + public jpegThumbnail?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public thumbnailHeight?: (number|null); + public thumbnailWidth?: (number|null); + public caption?: (string|null); + public accessibilityLabel?: (string|null); + public mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + public static create(properties?: proto.Message.IDocumentMessage): proto.Message.DocumentMessage; + public static encode(m: proto.Message.IDocumentMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.DocumentMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.DocumentMessage; + public static toObject(m: proto.Message.DocumentMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEncCommentMessage { + targetMessageKey?: (proto.IMessageKey|null); + encPayload?: (Uint8Array|null); + encIv?: (Uint8Array|null); + } + + class EncCommentMessage implements IEncCommentMessage { + constructor(p?: proto.Message.IEncCommentMessage); + public targetMessageKey?: (proto.IMessageKey|null); + public encPayload?: (Uint8Array|null); + public encIv?: (Uint8Array|null); + public static create(properties?: proto.Message.IEncCommentMessage): proto.Message.EncCommentMessage; + public static encode(m: proto.Message.IEncCommentMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.EncCommentMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.EncCommentMessage; + public static toObject(m: proto.Message.EncCommentMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEncEventResponseMessage { + eventCreationMessageKey?: (proto.IMessageKey|null); + encPayload?: (Uint8Array|null); + encIv?: (Uint8Array|null); + } + + class EncEventResponseMessage implements IEncEventResponseMessage { + constructor(p?: proto.Message.IEncEventResponseMessage); + public eventCreationMessageKey?: (proto.IMessageKey|null); + public encPayload?: (Uint8Array|null); + public encIv?: (Uint8Array|null); + public static create(properties?: proto.Message.IEncEventResponseMessage): proto.Message.EncEventResponseMessage; + public static encode(m: proto.Message.IEncEventResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.EncEventResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.EncEventResponseMessage; + public static toObject(m: proto.Message.EncEventResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEncReactionMessage { + targetMessageKey?: (proto.IMessageKey|null); + encPayload?: (Uint8Array|null); + encIv?: (Uint8Array|null); + } + + class EncReactionMessage implements IEncReactionMessage { + constructor(p?: proto.Message.IEncReactionMessage); + public targetMessageKey?: (proto.IMessageKey|null); + public encPayload?: (Uint8Array|null); + public encIv?: (Uint8Array|null); + public static create(properties?: proto.Message.IEncReactionMessage): proto.Message.EncReactionMessage; + public static encode(m: proto.Message.IEncReactionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.EncReactionMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.EncReactionMessage; + public static toObject(m: proto.Message.EncReactionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEventMessage { + contextInfo?: (proto.IContextInfo|null); + isCanceled?: (boolean|null); + name?: (string|null); + description?: (string|null); + location?: (proto.Message.ILocationMessage|null); + joinLink?: (string|null); + startTime?: (number|Long|null); + endTime?: (number|Long|null); + extraGuestsAllowed?: (boolean|null); + isScheduleCall?: (boolean|null); + hasReminder?: (boolean|null); + reminderOffsetSec?: (number|Long|null); + } + + class EventMessage implements IEventMessage { + constructor(p?: proto.Message.IEventMessage); + public contextInfo?: (proto.IContextInfo|null); + public isCanceled?: (boolean|null); + public name?: (string|null); + public description?: (string|null); + public location?: (proto.Message.ILocationMessage|null); + public joinLink?: (string|null); + public startTime?: (number|Long|null); + public endTime?: (number|Long|null); + public extraGuestsAllowed?: (boolean|null); + public isScheduleCall?: (boolean|null); + public hasReminder?: (boolean|null); + public reminderOffsetSec?: (number|Long|null); + public static create(properties?: proto.Message.IEventMessage): proto.Message.EventMessage; + public static encode(m: proto.Message.IEventMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.EventMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.EventMessage; + public static toObject(m: proto.Message.EventMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IEventResponseMessage { + response?: (proto.Message.EventResponseMessage.EventResponseType|null); + timestampMs?: (number|Long|null); + extraGuestCount?: (number|null); + } + + class EventResponseMessage implements IEventResponseMessage { + constructor(p?: proto.Message.IEventResponseMessage); + public response?: (proto.Message.EventResponseMessage.EventResponseType|null); + public timestampMs?: (number|Long|null); + public extraGuestCount?: (number|null); + public static create(properties?: proto.Message.IEventResponseMessage): proto.Message.EventResponseMessage; + public static encode(m: proto.Message.IEventResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.EventResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.EventResponseMessage; + public static toObject(m: proto.Message.EventResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace EventResponseMessage { + + enum EventResponseType { + UNKNOWN = 0, + GOING = 1, + NOT_GOING = 2, + MAYBE = 3 + } + } + + interface IExtendedTextMessage { + text?: (string|null); + matchedText?: (string|null); + description?: (string|null); + title?: (string|null); + textArgb?: (number|null); + backgroundArgb?: (number|null); + font?: (proto.Message.ExtendedTextMessage.FontType|null); + previewType?: (proto.Message.ExtendedTextMessage.PreviewType|null); + jpegThumbnail?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + doNotPlayInline?: (boolean|null); + thumbnailDirectPath?: (string|null); + thumbnailSha256?: (Uint8Array|null); + thumbnailEncSha256?: (Uint8Array|null); + mediaKey?: (Uint8Array|null); + mediaKeyTimestamp?: (number|Long|null); + thumbnailHeight?: (number|null); + thumbnailWidth?: (number|null); + inviteLinkGroupType?: (proto.Message.ExtendedTextMessage.InviteLinkGroupType|null); + inviteLinkParentGroupSubjectV2?: (string|null); + inviteLinkParentGroupThumbnailV2?: (Uint8Array|null); + inviteLinkGroupTypeV2?: (proto.Message.ExtendedTextMessage.InviteLinkGroupType|null); + viewOnce?: (boolean|null); + videoHeight?: (number|null); + videoWidth?: (number|null); + faviconMMSMetadata?: (proto.Message.IMMSThumbnailMetadata|null); + linkPreviewMetadata?: (proto.Message.ILinkPreviewMetadata|null); + paymentLinkMetadata?: (proto.Message.IPaymentLinkMetadata|null); + endCardTiles?: (proto.Message.IVideoEndCard[]|null); + videoContentUrl?: (string|null); + musicMetadata?: (proto.IEmbeddedMusic|null); + paymentExtendedMetadata?: (proto.Message.IPaymentExtendedMetadata|null); + } + + class ExtendedTextMessage implements IExtendedTextMessage { + constructor(p?: proto.Message.IExtendedTextMessage); + public text?: (string|null); + public matchedText?: (string|null); + public description?: (string|null); + public title?: (string|null); + public textArgb?: (number|null); + public backgroundArgb?: (number|null); + public font?: (proto.Message.ExtendedTextMessage.FontType|null); + public previewType?: (proto.Message.ExtendedTextMessage.PreviewType|null); + public jpegThumbnail?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public doNotPlayInline?: (boolean|null); + public thumbnailDirectPath?: (string|null); + public thumbnailSha256?: (Uint8Array|null); + public thumbnailEncSha256?: (Uint8Array|null); + public mediaKey?: (Uint8Array|null); + public mediaKeyTimestamp?: (number|Long|null); + public thumbnailHeight?: (number|null); + public thumbnailWidth?: (number|null); + public inviteLinkGroupType?: (proto.Message.ExtendedTextMessage.InviteLinkGroupType|null); + public inviteLinkParentGroupSubjectV2?: (string|null); + public inviteLinkParentGroupThumbnailV2?: (Uint8Array|null); + public inviteLinkGroupTypeV2?: (proto.Message.ExtendedTextMessage.InviteLinkGroupType|null); + public viewOnce?: (boolean|null); + public videoHeight?: (number|null); + public videoWidth?: (number|null); + public faviconMMSMetadata?: (proto.Message.IMMSThumbnailMetadata|null); + public linkPreviewMetadata?: (proto.Message.ILinkPreviewMetadata|null); + public paymentLinkMetadata?: (proto.Message.IPaymentLinkMetadata|null); + public endCardTiles: proto.Message.IVideoEndCard[]; + public videoContentUrl?: (string|null); + public musicMetadata?: (proto.IEmbeddedMusic|null); + public paymentExtendedMetadata?: (proto.Message.IPaymentExtendedMetadata|null); + public static create(properties?: proto.Message.IExtendedTextMessage): proto.Message.ExtendedTextMessage; + public static encode(m: proto.Message.IExtendedTextMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ExtendedTextMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ExtendedTextMessage; + public static toObject(m: proto.Message.ExtendedTextMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ExtendedTextMessage { + + enum FontType { + SYSTEM = 0, + SYSTEM_TEXT = 1, + FB_SCRIPT = 2, + SYSTEM_BOLD = 6, + MORNINGBREEZE_REGULAR = 7, + CALISTOGA_REGULAR = 8, + EXO2_EXTRABOLD = 9, + COURIERPRIME_BOLD = 10 + } + + enum InviteLinkGroupType { + DEFAULT = 0, + PARENT = 1, + SUB = 2, + DEFAULT_SUB = 3 + } + + enum PreviewType { + NONE = 0, + VIDEO = 1, + PLACEHOLDER = 4, + IMAGE = 5, + PAYMENT_LINKS = 6, + PROFILE = 7 + } + } + + interface IFullHistorySyncOnDemandRequestMetadata { + requestId?: (string|null); + } + + class FullHistorySyncOnDemandRequestMetadata implements IFullHistorySyncOnDemandRequestMetadata { + constructor(p?: proto.Message.IFullHistorySyncOnDemandRequestMetadata); + public requestId?: (string|null); + public static create(properties?: proto.Message.IFullHistorySyncOnDemandRequestMetadata): proto.Message.FullHistorySyncOnDemandRequestMetadata; + public static encode(m: proto.Message.IFullHistorySyncOnDemandRequestMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.FullHistorySyncOnDemandRequestMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.FullHistorySyncOnDemandRequestMetadata; + public static toObject(m: proto.Message.FullHistorySyncOnDemandRequestMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IFutureProofMessage { + message?: (proto.IMessage|null); + } + + class FutureProofMessage implements IFutureProofMessage { + constructor(p?: proto.Message.IFutureProofMessage); + public message?: (proto.IMessage|null); + public static create(properties?: proto.Message.IFutureProofMessage): proto.Message.FutureProofMessage; + public static encode(m: proto.Message.IFutureProofMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.FutureProofMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.FutureProofMessage; + public static toObject(m: proto.Message.FutureProofMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IGroupInviteMessage { + groupJid?: (string|null); + inviteCode?: (string|null); + inviteExpiration?: (number|Long|null); + groupName?: (string|null); + jpegThumbnail?: (Uint8Array|null); + caption?: (string|null); + contextInfo?: (proto.IContextInfo|null); + groupType?: (proto.Message.GroupInviteMessage.GroupType|null); + } + + class GroupInviteMessage implements IGroupInviteMessage { + constructor(p?: proto.Message.IGroupInviteMessage); + public groupJid?: (string|null); + public inviteCode?: (string|null); + public inviteExpiration?: (number|Long|null); + public groupName?: (string|null); + public jpegThumbnail?: (Uint8Array|null); + public caption?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public groupType?: (proto.Message.GroupInviteMessage.GroupType|null); + public static create(properties?: proto.Message.IGroupInviteMessage): proto.Message.GroupInviteMessage; + public static encode(m: proto.Message.IGroupInviteMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.GroupInviteMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.GroupInviteMessage; + public static toObject(m: proto.Message.GroupInviteMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace GroupInviteMessage { + + enum GroupType { + DEFAULT = 0, + PARENT = 1 + } + } + + interface IHighlyStructuredMessage { + namespace?: (string|null); + elementName?: (string|null); + params?: (string[]|null); + fallbackLg?: (string|null); + fallbackLc?: (string|null); + localizableParams?: (proto.Message.HighlyStructuredMessage.IHSMLocalizableParameter[]|null); + deterministicLg?: (string|null); + deterministicLc?: (string|null); + hydratedHsm?: (proto.Message.ITemplateMessage|null); + } + + class HighlyStructuredMessage implements IHighlyStructuredMessage { + constructor(p?: proto.Message.IHighlyStructuredMessage); + public namespace?: (string|null); + public elementName?: (string|null); + public params: string[]; + public fallbackLg?: (string|null); + public fallbackLc?: (string|null); + public localizableParams: proto.Message.HighlyStructuredMessage.IHSMLocalizableParameter[]; + public deterministicLg?: (string|null); + public deterministicLc?: (string|null); + public hydratedHsm?: (proto.Message.ITemplateMessage|null); + public static create(properties?: proto.Message.IHighlyStructuredMessage): proto.Message.HighlyStructuredMessage; + public static encode(m: proto.Message.IHighlyStructuredMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HighlyStructuredMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.HighlyStructuredMessage; + public static toObject(m: proto.Message.HighlyStructuredMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HighlyStructuredMessage { + + interface IHSMLocalizableParameter { + "default"?: (string|null); + currency?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency|null); + dateTime?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime|null); + } + + class HSMLocalizableParameter implements IHSMLocalizableParameter { + constructor(p?: proto.Message.HighlyStructuredMessage.IHSMLocalizableParameter); + public default?: (string|null); + public currency?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency|null); + public dateTime?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime|null); + public paramOneof?: ("currency"|"dateTime"); + public static create(properties?: proto.Message.HighlyStructuredMessage.IHSMLocalizableParameter): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter; + public static encode(m: proto.Message.HighlyStructuredMessage.IHSMLocalizableParameter, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter; + public static fromObject(d: { [k: string]: any }): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter; + public static toObject(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HSMLocalizableParameter { + + interface IHSMCurrency { + currencyCode?: (string|null); + amount1000?: (number|Long|null); + } + + class HSMCurrency implements IHSMCurrency { + constructor(p?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency); + public currencyCode?: (string|null); + public amount1000?: (number|Long|null); + public static create(properties?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency; + public static encode(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMCurrency, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency; + public static fromObject(d: { [k: string]: any }): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency; + public static toObject(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHSMDateTime { + component?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent|null); + unixEpoch?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch|null); + } + + class HSMDateTime implements IHSMDateTime { + constructor(p?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime); + public component?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent|null); + public unixEpoch?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch|null); + public datetimeOneof?: ("component"|"unixEpoch"); + public static create(properties?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime; + public static encode(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.IHSMDateTime, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime; + public static fromObject(d: { [k: string]: any }): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime; + public static toObject(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HSMDateTime { + + interface IHSMDateTimeComponent { + dayOfWeek?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType|null); + year?: (number|null); + month?: (number|null); + dayOfMonth?: (number|null); + hour?: (number|null); + minute?: (number|null); + calendar?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType|null); + } + + class HSMDateTimeComponent implements IHSMDateTimeComponent { + constructor(p?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent); + public dayOfWeek?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType|null); + public year?: (number|null); + public month?: (number|null); + public dayOfMonth?: (number|null); + public hour?: (number|null); + public minute?: (number|null); + public calendar?: (proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType|null); + public static create(properties?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent; + public static encode(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeComponent, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent; + public static fromObject(d: { [k: string]: any }): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent; + public static toObject(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace HSMDateTimeComponent { + + enum CalendarType { + GREGORIAN = 1, + SOLAR_HIJRI = 2 + } + + enum DayOfWeekType { + MONDAY = 1, + TUESDAY = 2, + WEDNESDAY = 3, + THURSDAY = 4, + FRIDAY = 5, + SATURDAY = 6, + SUNDAY = 7 + } + } + + interface IHSMDateTimeUnixEpoch { + timestamp?: (number|Long|null); + } + + class HSMDateTimeUnixEpoch implements IHSMDateTimeUnixEpoch { + constructor(p?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch); + public timestamp?: (number|Long|null); + public static create(properties?: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch; + public static encode(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.IHSMDateTimeUnixEpoch, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch; + public static fromObject(d: { [k: string]: any }): proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch; + public static toObject(m: proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + } + } + + interface IHistorySyncMessageAccessStatus { + completeAccessGranted?: (boolean|null); + } + + class HistorySyncMessageAccessStatus implements IHistorySyncMessageAccessStatus { + constructor(p?: proto.Message.IHistorySyncMessageAccessStatus); + public completeAccessGranted?: (boolean|null); + public static create(properties?: proto.Message.IHistorySyncMessageAccessStatus): proto.Message.HistorySyncMessageAccessStatus; + public static encode(m: proto.Message.IHistorySyncMessageAccessStatus, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HistorySyncMessageAccessStatus; + public static fromObject(d: { [k: string]: any }): proto.Message.HistorySyncMessageAccessStatus; + public static toObject(m: proto.Message.HistorySyncMessageAccessStatus, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHistorySyncNotification { + fileSha256?: (Uint8Array|null); + fileLength?: (number|Long|null); + mediaKey?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + directPath?: (string|null); + syncType?: (proto.Message.HistorySyncType|null); + chunkOrder?: (number|null); + originalMessageId?: (string|null); + progress?: (number|null); + oldestMsgInChunkTimestampSec?: (number|Long|null); + initialHistBootstrapInlinePayload?: (Uint8Array|null); + peerDataRequestSessionId?: (string|null); + fullHistorySyncOnDemandRequestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null); + encHandle?: (string|null); + messageAccessStatus?: (proto.Message.IHistorySyncMessageAccessStatus|null); + } + + class HistorySyncNotification implements IHistorySyncNotification { + constructor(p?: proto.Message.IHistorySyncNotification); + public fileSha256?: (Uint8Array|null); + public fileLength?: (number|Long|null); + public mediaKey?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public directPath?: (string|null); + public syncType?: (proto.Message.HistorySyncType|null); + public chunkOrder?: (number|null); + public originalMessageId?: (string|null); + public progress?: (number|null); + public oldestMsgInChunkTimestampSec?: (number|Long|null); + public initialHistBootstrapInlinePayload?: (Uint8Array|null); + public peerDataRequestSessionId?: (string|null); + public fullHistorySyncOnDemandRequestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null); + public encHandle?: (string|null); + public messageAccessStatus?: (proto.Message.IHistorySyncMessageAccessStatus|null); + public static create(properties?: proto.Message.IHistorySyncNotification): proto.Message.HistorySyncNotification; + public static encode(m: proto.Message.IHistorySyncNotification, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.HistorySyncNotification; + public static fromObject(d: { [k: string]: any }): proto.Message.HistorySyncNotification; + public static toObject(m: proto.Message.HistorySyncNotification, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum HistorySyncType { + INITIAL_BOOTSTRAP = 0, + INITIAL_STATUS_V3 = 1, + FULL = 2, + RECENT = 3, + PUSH_NAME = 4, + NON_BLOCKING_DATA = 5, + ON_DEMAND = 6, + NO_HISTORY = 7, + MESSAGE_ACCESS_STATUS = 8 + } + + interface IImageMessage { + url?: (string|null); + mimetype?: (string|null); + caption?: (string|null); + fileSha256?: (Uint8Array|null); + fileLength?: (number|Long|null); + height?: (number|null); + width?: (number|null); + mediaKey?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + interactiveAnnotations?: (proto.IInteractiveAnnotation[]|null); + directPath?: (string|null); + mediaKeyTimestamp?: (number|Long|null); + jpegThumbnail?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + firstScanSidecar?: (Uint8Array|null); + firstScanLength?: (number|null); + experimentGroupId?: (number|null); + scansSidecar?: (Uint8Array|null); + scanLengths?: (number[]|null); + midQualityFileSha256?: (Uint8Array|null); + midQualityFileEncSha256?: (Uint8Array|null); + viewOnce?: (boolean|null); + thumbnailDirectPath?: (string|null); + thumbnailSha256?: (Uint8Array|null); + thumbnailEncSha256?: (Uint8Array|null); + staticUrl?: (string|null); + annotations?: (proto.IInteractiveAnnotation[]|null); + imageSourceType?: (proto.Message.ImageMessage.ImageSourceType|null); + accessibilityLabel?: (string|null); + mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + qrUrl?: (string|null); + } + + class ImageMessage implements IImageMessage { + constructor(p?: proto.Message.IImageMessage); + public url?: (string|null); + public mimetype?: (string|null); + public caption?: (string|null); + public fileSha256?: (Uint8Array|null); + public fileLength?: (number|Long|null); + public height?: (number|null); + public width?: (number|null); + public mediaKey?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public interactiveAnnotations: proto.IInteractiveAnnotation[]; + public directPath?: (string|null); + public mediaKeyTimestamp?: (number|Long|null); + public jpegThumbnail?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public firstScanSidecar?: (Uint8Array|null); + public firstScanLength?: (number|null); + public experimentGroupId?: (number|null); + public scansSidecar?: (Uint8Array|null); + public scanLengths: number[]; + public midQualityFileSha256?: (Uint8Array|null); + public midQualityFileEncSha256?: (Uint8Array|null); + public viewOnce?: (boolean|null); + public thumbnailDirectPath?: (string|null); + public thumbnailSha256?: (Uint8Array|null); + public thumbnailEncSha256?: (Uint8Array|null); + public staticUrl?: (string|null); + public annotations: proto.IInteractiveAnnotation[]; + public imageSourceType?: (proto.Message.ImageMessage.ImageSourceType|null); + public accessibilityLabel?: (string|null); + public mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + public qrUrl?: (string|null); + public static create(properties?: proto.Message.IImageMessage): proto.Message.ImageMessage; + public static encode(m: proto.Message.IImageMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ImageMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ImageMessage; + public static toObject(m: proto.Message.ImageMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ImageMessage { + + enum ImageSourceType { + USER_IMAGE = 0, + AI_GENERATED = 1, + AI_MODIFIED = 2, + RASTERIZED_TEXT_STATUS = 3 + } + } + + interface IInitialSecurityNotificationSettingSync { + securityNotificationEnabled?: (boolean|null); + } + + class InitialSecurityNotificationSettingSync implements IInitialSecurityNotificationSettingSync { + constructor(p?: proto.Message.IInitialSecurityNotificationSettingSync); + public securityNotificationEnabled?: (boolean|null); + public static create(properties?: proto.Message.IInitialSecurityNotificationSettingSync): proto.Message.InitialSecurityNotificationSettingSync; + public static encode(m: proto.Message.IInitialSecurityNotificationSettingSync, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InitialSecurityNotificationSettingSync; + public static fromObject(d: { [k: string]: any }): proto.Message.InitialSecurityNotificationSettingSync; + public static toObject(m: proto.Message.InitialSecurityNotificationSettingSync, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IInteractiveMessage { + header?: (proto.Message.InteractiveMessage.IHeader|null); + body?: (proto.Message.InteractiveMessage.IBody|null); + footer?: (proto.Message.InteractiveMessage.IFooter|null); + contextInfo?: (proto.IContextInfo|null); + urlTrackingMap?: (proto.IUrlTrackingMap|null); + shopStorefrontMessage?: (proto.Message.InteractiveMessage.IShopMessage|null); + collectionMessage?: (proto.Message.InteractiveMessage.ICollectionMessage|null); + nativeFlowMessage?: (proto.Message.InteractiveMessage.INativeFlowMessage|null); + carouselMessage?: (proto.Message.InteractiveMessage.ICarouselMessage|null); + } + + class InteractiveMessage implements IInteractiveMessage { + constructor(p?: proto.Message.IInteractiveMessage); + public header?: (proto.Message.InteractiveMessage.IHeader|null); + public body?: (proto.Message.InteractiveMessage.IBody|null); + public footer?: (proto.Message.InteractiveMessage.IFooter|null); + public contextInfo?: (proto.IContextInfo|null); + public urlTrackingMap?: (proto.IUrlTrackingMap|null); + public shopStorefrontMessage?: (proto.Message.InteractiveMessage.IShopMessage|null); + public collectionMessage?: (proto.Message.InteractiveMessage.ICollectionMessage|null); + public nativeFlowMessage?: (proto.Message.InteractiveMessage.INativeFlowMessage|null); + public carouselMessage?: (proto.Message.InteractiveMessage.ICarouselMessage|null); + public interactiveMessage?: ("shopStorefrontMessage"|"collectionMessage"|"nativeFlowMessage"|"carouselMessage"); + public static create(properties?: proto.Message.IInteractiveMessage): proto.Message.InteractiveMessage; + public static encode(m: proto.Message.IInteractiveMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage; + public static toObject(m: proto.Message.InteractiveMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace InteractiveMessage { + + interface IBody { + text?: (string|null); + } + + class Body implements IBody { + constructor(p?: proto.Message.InteractiveMessage.IBody); + public text?: (string|null); + public static create(properties?: proto.Message.InteractiveMessage.IBody): proto.Message.InteractiveMessage.Body; + public static encode(m: proto.Message.InteractiveMessage.IBody, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.Body; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.Body; + public static toObject(m: proto.Message.InteractiveMessage.Body, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICarouselMessage { + cards?: (proto.Message.IInteractiveMessage[]|null); + messageVersion?: (number|null); + carouselCardType?: (proto.Message.InteractiveMessage.CarouselMessage.CarouselCardType|null); + } + + class CarouselMessage implements ICarouselMessage { + constructor(p?: proto.Message.InteractiveMessage.ICarouselMessage); + public cards: proto.Message.IInteractiveMessage[]; + public messageVersion?: (number|null); + public carouselCardType?: (proto.Message.InteractiveMessage.CarouselMessage.CarouselCardType|null); + public static create(properties?: proto.Message.InteractiveMessage.ICarouselMessage): proto.Message.InteractiveMessage.CarouselMessage; + public static encode(m: proto.Message.InteractiveMessage.ICarouselMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.CarouselMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.CarouselMessage; + public static toObject(m: proto.Message.InteractiveMessage.CarouselMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace CarouselMessage { + + enum CarouselCardType { + UNKNOWN = 0, + HSCROLL_CARDS = 1, + ALBUM_IMAGE = 2 + } + } + + interface ICollectionMessage { + bizJid?: (string|null); + id?: (string|null); + messageVersion?: (number|null); + } + + class CollectionMessage implements ICollectionMessage { + constructor(p?: proto.Message.InteractiveMessage.ICollectionMessage); + public bizJid?: (string|null); + public id?: (string|null); + public messageVersion?: (number|null); + public static create(properties?: proto.Message.InteractiveMessage.ICollectionMessage): proto.Message.InteractiveMessage.CollectionMessage; + public static encode(m: proto.Message.InteractiveMessage.ICollectionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.CollectionMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.CollectionMessage; + public static toObject(m: proto.Message.InteractiveMessage.CollectionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IFooter { + text?: (string|null); + hasMediaAttachment?: (boolean|null); + audioMessage?: (proto.Message.IAudioMessage|null); + } + + class Footer implements IFooter { + constructor(p?: proto.Message.InteractiveMessage.IFooter); + public text?: (string|null); + public hasMediaAttachment?: (boolean|null); + public audioMessage?: (proto.Message.IAudioMessage|null); + public media?: "audioMessage"; + public static create(properties?: proto.Message.InteractiveMessage.IFooter): proto.Message.InteractiveMessage.Footer; + public static encode(m: proto.Message.InteractiveMessage.IFooter, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.Footer; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.Footer; + public static toObject(m: proto.Message.InteractiveMessage.Footer, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHeader { + title?: (string|null); + subtitle?: (string|null); + hasMediaAttachment?: (boolean|null); + documentMessage?: (proto.Message.IDocumentMessage|null); + imageMessage?: (proto.Message.IImageMessage|null); + jpegThumbnail?: (Uint8Array|null); + videoMessage?: (proto.Message.IVideoMessage|null); + locationMessage?: (proto.Message.ILocationMessage|null); + productMessage?: (proto.Message.IProductMessage|null); + } + + class Header implements IHeader { + constructor(p?: proto.Message.InteractiveMessage.IHeader); + public title?: (string|null); + public subtitle?: (string|null); + public hasMediaAttachment?: (boolean|null); + public documentMessage?: (proto.Message.IDocumentMessage|null); + public imageMessage?: (proto.Message.IImageMessage|null); + public jpegThumbnail?: (Uint8Array|null); + public videoMessage?: (proto.Message.IVideoMessage|null); + public locationMessage?: (proto.Message.ILocationMessage|null); + public productMessage?: (proto.Message.IProductMessage|null); + public media?: ("documentMessage"|"imageMessage"|"jpegThumbnail"|"videoMessage"|"locationMessage"|"productMessage"); + public static create(properties?: proto.Message.InteractiveMessage.IHeader): proto.Message.InteractiveMessage.Header; + public static encode(m: proto.Message.InteractiveMessage.IHeader, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.Header; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.Header; + public static toObject(m: proto.Message.InteractiveMessage.Header, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface INativeFlowMessage { + buttons?: (proto.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton[]|null); + messageParamsJson?: (string|null); + messageVersion?: (number|null); + } + + class NativeFlowMessage implements INativeFlowMessage { + constructor(p?: proto.Message.InteractiveMessage.INativeFlowMessage); + public buttons: proto.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton[]; + public messageParamsJson?: (string|null); + public messageVersion?: (number|null); + public static create(properties?: proto.Message.InteractiveMessage.INativeFlowMessage): proto.Message.InteractiveMessage.NativeFlowMessage; + public static encode(m: proto.Message.InteractiveMessage.INativeFlowMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.NativeFlowMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.NativeFlowMessage; + public static toObject(m: proto.Message.InteractiveMessage.NativeFlowMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace NativeFlowMessage { + + interface INativeFlowButton { + name?: (string|null); + buttonParamsJson?: (string|null); + } + + class NativeFlowButton implements INativeFlowButton { + constructor(p?: proto.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton); + public name?: (string|null); + public buttonParamsJson?: (string|null); + public static create(properties?: proto.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton): proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton; + public static encode(m: proto.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton; + public static toObject(m: proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IShopMessage { + id?: (string|null); + surface?: (proto.Message.InteractiveMessage.ShopMessage.Surface|null); + messageVersion?: (number|null); + } + + class ShopMessage implements IShopMessage { + constructor(p?: proto.Message.InteractiveMessage.IShopMessage); + public id?: (string|null); + public surface?: (proto.Message.InteractiveMessage.ShopMessage.Surface|null); + public messageVersion?: (number|null); + public static create(properties?: proto.Message.InteractiveMessage.IShopMessage): proto.Message.InteractiveMessage.ShopMessage; + public static encode(m: proto.Message.InteractiveMessage.IShopMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveMessage.ShopMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveMessage.ShopMessage; + public static toObject(m: proto.Message.InteractiveMessage.ShopMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ShopMessage { + + enum Surface { + UNKNOWN_SURFACE = 0, + FB = 1, + IG = 2, + WA = 3 + } + } + } + + interface IInteractiveResponseMessage { + body?: (proto.Message.InteractiveResponseMessage.IBody|null); + contextInfo?: (proto.IContextInfo|null); + nativeFlowResponseMessage?: (proto.Message.InteractiveResponseMessage.INativeFlowResponseMessage|null); + } + + class InteractiveResponseMessage implements IInteractiveResponseMessage { + constructor(p?: proto.Message.IInteractiveResponseMessage); + public body?: (proto.Message.InteractiveResponseMessage.IBody|null); + public contextInfo?: (proto.IContextInfo|null); + public nativeFlowResponseMessage?: (proto.Message.InteractiveResponseMessage.INativeFlowResponseMessage|null); + public interactiveResponseMessage?: "nativeFlowResponseMessage"; + public static create(properties?: proto.Message.IInteractiveResponseMessage): proto.Message.InteractiveResponseMessage; + public static encode(m: proto.Message.IInteractiveResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveResponseMessage; + public static toObject(m: proto.Message.InteractiveResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace InteractiveResponseMessage { + + interface IBody { + text?: (string|null); + format?: (proto.Message.InteractiveResponseMessage.Body.Format|null); + } + + class Body implements IBody { + constructor(p?: proto.Message.InteractiveResponseMessage.IBody); + public text?: (string|null); + public format?: (proto.Message.InteractiveResponseMessage.Body.Format|null); + public static create(properties?: proto.Message.InteractiveResponseMessage.IBody): proto.Message.InteractiveResponseMessage.Body; + public static encode(m: proto.Message.InteractiveResponseMessage.IBody, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveResponseMessage.Body; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveResponseMessage.Body; + public static toObject(m: proto.Message.InteractiveResponseMessage.Body, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace Body { + + enum Format { + DEFAULT = 0, + EXTENSIONS_1 = 1 + } + } + + interface INativeFlowResponseMessage { + name?: (string|null); + paramsJson?: (string|null); + version?: (number|null); + } + + class NativeFlowResponseMessage implements INativeFlowResponseMessage { + constructor(p?: proto.Message.InteractiveResponseMessage.INativeFlowResponseMessage); + public name?: (string|null); + public paramsJson?: (string|null); + public version?: (number|null); + public static create(properties?: proto.Message.InteractiveResponseMessage.INativeFlowResponseMessage): proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage; + public static encode(m: proto.Message.InteractiveResponseMessage.INativeFlowResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage; + public static toObject(m: proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IInvoiceMessage { + note?: (string|null); + token?: (string|null); + attachmentType?: (proto.Message.InvoiceMessage.AttachmentType|null); + attachmentMimetype?: (string|null); + attachmentMediaKey?: (Uint8Array|null); + attachmentMediaKeyTimestamp?: (number|Long|null); + attachmentFileSha256?: (Uint8Array|null); + attachmentFileEncSha256?: (Uint8Array|null); + attachmentDirectPath?: (string|null); + attachmentJpegThumbnail?: (Uint8Array|null); + } + + class InvoiceMessage implements IInvoiceMessage { + constructor(p?: proto.Message.IInvoiceMessage); + public note?: (string|null); + public token?: (string|null); + public attachmentType?: (proto.Message.InvoiceMessage.AttachmentType|null); + public attachmentMimetype?: (string|null); + public attachmentMediaKey?: (Uint8Array|null); + public attachmentMediaKeyTimestamp?: (number|Long|null); + public attachmentFileSha256?: (Uint8Array|null); + public attachmentFileEncSha256?: (Uint8Array|null); + public attachmentDirectPath?: (string|null); + public attachmentJpegThumbnail?: (Uint8Array|null); + public static create(properties?: proto.Message.IInvoiceMessage): proto.Message.InvoiceMessage; + public static encode(m: proto.Message.IInvoiceMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.InvoiceMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.InvoiceMessage; + public static toObject(m: proto.Message.InvoiceMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace InvoiceMessage { + + enum AttachmentType { + IMAGE = 0, + PDF = 1 + } + } + + interface IKeepInChatMessage { + key?: (proto.IMessageKey|null); + keepType?: (proto.KeepType|null); + timestampMs?: (number|Long|null); + } + + class KeepInChatMessage implements IKeepInChatMessage { + constructor(p?: proto.Message.IKeepInChatMessage); + public key?: (proto.IMessageKey|null); + public keepType?: (proto.KeepType|null); + public timestampMs?: (number|Long|null); + public static create(properties?: proto.Message.IKeepInChatMessage): proto.Message.KeepInChatMessage; + public static encode(m: proto.Message.IKeepInChatMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.KeepInChatMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.KeepInChatMessage; + public static toObject(m: proto.Message.KeepInChatMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILinkPreviewMetadata { + paymentLinkMetadata?: (proto.Message.IPaymentLinkMetadata|null); + urlMetadata?: (proto.Message.IURLMetadata|null); + fbExperimentId?: (number|null); + linkMediaDuration?: (number|null); + socialMediaPostType?: (proto.Message.LinkPreviewMetadata.SocialMediaPostType|null); + linkInlineVideoMuted?: (boolean|null); + videoContentUrl?: (string|null); + musicMetadata?: (proto.IEmbeddedMusic|null); + videoContentCaption?: (string|null); + } + + class LinkPreviewMetadata implements ILinkPreviewMetadata { + constructor(p?: proto.Message.ILinkPreviewMetadata); + public paymentLinkMetadata?: (proto.Message.IPaymentLinkMetadata|null); + public urlMetadata?: (proto.Message.IURLMetadata|null); + public fbExperimentId?: (number|null); + public linkMediaDuration?: (number|null); + public socialMediaPostType?: (proto.Message.LinkPreviewMetadata.SocialMediaPostType|null); + public linkInlineVideoMuted?: (boolean|null); + public videoContentUrl?: (string|null); + public musicMetadata?: (proto.IEmbeddedMusic|null); + public videoContentCaption?: (string|null); + public static create(properties?: proto.Message.ILinkPreviewMetadata): proto.Message.LinkPreviewMetadata; + public static encode(m: proto.Message.ILinkPreviewMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.LinkPreviewMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.LinkPreviewMetadata; + public static toObject(m: proto.Message.LinkPreviewMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace LinkPreviewMetadata { + + enum SocialMediaPostType { + NONE = 0, + REEL = 1, + LIVE_VIDEO = 2, + LONG_VIDEO = 3, + SINGLE_IMAGE = 4, + CAROUSEL = 5 + } + } + + interface IListMessage { + title?: (string|null); + description?: (string|null); + buttonText?: (string|null); + listType?: (proto.Message.ListMessage.ListType|null); + sections?: (proto.Message.ListMessage.ISection[]|null); + productListInfo?: (proto.Message.ListMessage.IProductListInfo|null); + footerText?: (string|null); + contextInfo?: (proto.IContextInfo|null); + } + + class ListMessage implements IListMessage { + constructor(p?: proto.Message.IListMessage); + public title?: (string|null); + public description?: (string|null); + public buttonText?: (string|null); + public listType?: (proto.Message.ListMessage.ListType|null); + public sections: proto.Message.ListMessage.ISection[]; + public productListInfo?: (proto.Message.ListMessage.IProductListInfo|null); + public footerText?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.IListMessage): proto.Message.ListMessage; + public static encode(m: proto.Message.IListMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ListMessage; + public static toObject(m: proto.Message.ListMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ListMessage { + + enum ListType { + UNKNOWN = 0, + SINGLE_SELECT = 1, + PRODUCT_LIST = 2 + } + + interface IProduct { + productId?: (string|null); + } + + class Product implements IProduct { + constructor(p?: proto.Message.ListMessage.IProduct); + public productId?: (string|null); + public static create(properties?: proto.Message.ListMessage.IProduct): proto.Message.ListMessage.Product; + public static encode(m: proto.Message.ListMessage.IProduct, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListMessage.Product; + public static fromObject(d: { [k: string]: any }): proto.Message.ListMessage.Product; + public static toObject(m: proto.Message.ListMessage.Product, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IProductListHeaderImage { + productId?: (string|null); + jpegThumbnail?: (Uint8Array|null); + } + + class ProductListHeaderImage implements IProductListHeaderImage { + constructor(p?: proto.Message.ListMessage.IProductListHeaderImage); + public productId?: (string|null); + public jpegThumbnail?: (Uint8Array|null); + public static create(properties?: proto.Message.ListMessage.IProductListHeaderImage): proto.Message.ListMessage.ProductListHeaderImage; + public static encode(m: proto.Message.ListMessage.IProductListHeaderImage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListMessage.ProductListHeaderImage; + public static fromObject(d: { [k: string]: any }): proto.Message.ListMessage.ProductListHeaderImage; + public static toObject(m: proto.Message.ListMessage.ProductListHeaderImage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IProductListInfo { + productSections?: (proto.Message.ListMessage.IProductSection[]|null); + headerImage?: (proto.Message.ListMessage.IProductListHeaderImage|null); + businessOwnerJid?: (string|null); + } + + class ProductListInfo implements IProductListInfo { + constructor(p?: proto.Message.ListMessage.IProductListInfo); + public productSections: proto.Message.ListMessage.IProductSection[]; + public headerImage?: (proto.Message.ListMessage.IProductListHeaderImage|null); + public businessOwnerJid?: (string|null); + public static create(properties?: proto.Message.ListMessage.IProductListInfo): proto.Message.ListMessage.ProductListInfo; + public static encode(m: proto.Message.ListMessage.IProductListInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListMessage.ProductListInfo; + public static fromObject(d: { [k: string]: any }): proto.Message.ListMessage.ProductListInfo; + public static toObject(m: proto.Message.ListMessage.ProductListInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IProductSection { + title?: (string|null); + products?: (proto.Message.ListMessage.IProduct[]|null); + } + + class ProductSection implements IProductSection { + constructor(p?: proto.Message.ListMessage.IProductSection); + public title?: (string|null); + public products: proto.Message.ListMessage.IProduct[]; + public static create(properties?: proto.Message.ListMessage.IProductSection): proto.Message.ListMessage.ProductSection; + public static encode(m: proto.Message.ListMessage.IProductSection, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListMessage.ProductSection; + public static fromObject(d: { [k: string]: any }): proto.Message.ListMessage.ProductSection; + public static toObject(m: proto.Message.ListMessage.ProductSection, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRow { + title?: (string|null); + description?: (string|null); + rowId?: (string|null); + } + + class Row implements IRow { + constructor(p?: proto.Message.ListMessage.IRow); + public title?: (string|null); + public description?: (string|null); + public rowId?: (string|null); + public static create(properties?: proto.Message.ListMessage.IRow): proto.Message.ListMessage.Row; + public static encode(m: proto.Message.ListMessage.IRow, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListMessage.Row; + public static fromObject(d: { [k: string]: any }): proto.Message.ListMessage.Row; + public static toObject(m: proto.Message.ListMessage.Row, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISection { + title?: (string|null); + rows?: (proto.Message.ListMessage.IRow[]|null); + } + + class Section implements ISection { + constructor(p?: proto.Message.ListMessage.ISection); + public title?: (string|null); + public rows: proto.Message.ListMessage.IRow[]; + public static create(properties?: proto.Message.ListMessage.ISection): proto.Message.ListMessage.Section; + public static encode(m: proto.Message.ListMessage.ISection, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListMessage.Section; + public static fromObject(d: { [k: string]: any }): proto.Message.ListMessage.Section; + public static toObject(m: proto.Message.ListMessage.Section, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IListResponseMessage { + title?: (string|null); + listType?: (proto.Message.ListResponseMessage.ListType|null); + singleSelectReply?: (proto.Message.ListResponseMessage.ISingleSelectReply|null); + contextInfo?: (proto.IContextInfo|null); + description?: (string|null); + } + + class ListResponseMessage implements IListResponseMessage { + constructor(p?: proto.Message.IListResponseMessage); + public title?: (string|null); + public listType?: (proto.Message.ListResponseMessage.ListType|null); + public singleSelectReply?: (proto.Message.ListResponseMessage.ISingleSelectReply|null); + public contextInfo?: (proto.IContextInfo|null); + public description?: (string|null); + public static create(properties?: proto.Message.IListResponseMessage): proto.Message.ListResponseMessage; + public static encode(m: proto.Message.IListResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ListResponseMessage; + public static toObject(m: proto.Message.ListResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ListResponseMessage { + + enum ListType { + UNKNOWN = 0, + SINGLE_SELECT = 1 + } + + interface ISingleSelectReply { + selectedRowId?: (string|null); + } + + class SingleSelectReply implements ISingleSelectReply { + constructor(p?: proto.Message.ListResponseMessage.ISingleSelectReply); + public selectedRowId?: (string|null); + public static create(properties?: proto.Message.ListResponseMessage.ISingleSelectReply): proto.Message.ListResponseMessage.SingleSelectReply; + public static encode(m: proto.Message.ListResponseMessage.ISingleSelectReply, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ListResponseMessage.SingleSelectReply; + public static fromObject(d: { [k: string]: any }): proto.Message.ListResponseMessage.SingleSelectReply; + public static toObject(m: proto.Message.ListResponseMessage.SingleSelectReply, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface ILiveLocationMessage { + degreesLatitude?: (number|null); + degreesLongitude?: (number|null); + accuracyInMeters?: (number|null); + speedInMps?: (number|null); + degreesClockwiseFromMagneticNorth?: (number|null); + caption?: (string|null); + sequenceNumber?: (number|Long|null); + timeOffset?: (number|null); + jpegThumbnail?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + } + + class LiveLocationMessage implements ILiveLocationMessage { + constructor(p?: proto.Message.ILiveLocationMessage); + public degreesLatitude?: (number|null); + public degreesLongitude?: (number|null); + public accuracyInMeters?: (number|null); + public speedInMps?: (number|null); + public degreesClockwiseFromMagneticNorth?: (number|null); + public caption?: (string|null); + public sequenceNumber?: (number|Long|null); + public timeOffset?: (number|null); + public jpegThumbnail?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.ILiveLocationMessage): proto.Message.LiveLocationMessage; + public static encode(m: proto.Message.ILiveLocationMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.LiveLocationMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.LiveLocationMessage; + public static toObject(m: proto.Message.LiveLocationMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILocationMessage { + degreesLatitude?: (number|null); + degreesLongitude?: (number|null); + name?: (string|null); + address?: (string|null); + url?: (string|null); + isLive?: (boolean|null); + accuracyInMeters?: (number|null); + speedInMps?: (number|null); + degreesClockwiseFromMagneticNorth?: (number|null); + comment?: (string|null); + jpegThumbnail?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + } + + class LocationMessage implements ILocationMessage { + constructor(p?: proto.Message.ILocationMessage); + public degreesLatitude?: (number|null); + public degreesLongitude?: (number|null); + public name?: (string|null); + public address?: (string|null); + public url?: (string|null); + public isLive?: (boolean|null); + public accuracyInMeters?: (number|null); + public speedInMps?: (number|null); + public degreesClockwiseFromMagneticNorth?: (number|null); + public comment?: (string|null); + public jpegThumbnail?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.ILocationMessage): proto.Message.LocationMessage; + public static encode(m: proto.Message.ILocationMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.LocationMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.LocationMessage; + public static toObject(m: proto.Message.LocationMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMMSThumbnailMetadata { + thumbnailDirectPath?: (string|null); + thumbnailSha256?: (Uint8Array|null); + thumbnailEncSha256?: (Uint8Array|null); + mediaKey?: (Uint8Array|null); + mediaKeyTimestamp?: (number|Long|null); + thumbnailHeight?: (number|null); + thumbnailWidth?: (number|null); + mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + } + + class MMSThumbnailMetadata implements IMMSThumbnailMetadata { + constructor(p?: proto.Message.IMMSThumbnailMetadata); + public thumbnailDirectPath?: (string|null); + public thumbnailSha256?: (Uint8Array|null); + public thumbnailEncSha256?: (Uint8Array|null); + public mediaKey?: (Uint8Array|null); + public mediaKeyTimestamp?: (number|Long|null); + public thumbnailHeight?: (number|null); + public thumbnailWidth?: (number|null); + public mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + public static create(properties?: proto.Message.IMMSThumbnailMetadata): proto.Message.MMSThumbnailMetadata; + public static encode(m: proto.Message.IMMSThumbnailMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.MMSThumbnailMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.MMSThumbnailMetadata; + public static toObject(m: proto.Message.MMSThumbnailMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum MediaKeyDomain { + UNSET = 0, + E2EE_CHAT = 1, + STATUS = 2, + CAPI = 3, + BOT = 4 + } + + interface IMessageHistoryBundle { + mimetype?: (string|null); + fileSha256?: (Uint8Array|null); + mediaKey?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + directPath?: (string|null); + mediaKeyTimestamp?: (number|Long|null); + contextInfo?: (proto.IContextInfo|null); + messageHistoryMetadata?: (proto.Message.IMessageHistoryMetadata|null); + } + + class MessageHistoryBundle implements IMessageHistoryBundle { + constructor(p?: proto.Message.IMessageHistoryBundle); + public mimetype?: (string|null); + public fileSha256?: (Uint8Array|null); + public mediaKey?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public directPath?: (string|null); + public mediaKeyTimestamp?: (number|Long|null); + public contextInfo?: (proto.IContextInfo|null); + public messageHistoryMetadata?: (proto.Message.IMessageHistoryMetadata|null); + public static create(properties?: proto.Message.IMessageHistoryBundle): proto.Message.MessageHistoryBundle; + public static encode(m: proto.Message.IMessageHistoryBundle, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.MessageHistoryBundle; + public static fromObject(d: { [k: string]: any }): proto.Message.MessageHistoryBundle; + public static toObject(m: proto.Message.MessageHistoryBundle, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMessageHistoryMetadata { + historyReceivers?: (string[]|null); + oldestMessageTimestamp?: (number|Long|null); + messageCount?: (number|Long|null); + } + + class MessageHistoryMetadata implements IMessageHistoryMetadata { + constructor(p?: proto.Message.IMessageHistoryMetadata); + public historyReceivers: string[]; + public oldestMessageTimestamp?: (number|Long|null); + public messageCount?: (number|Long|null); + public static create(properties?: proto.Message.IMessageHistoryMetadata): proto.Message.MessageHistoryMetadata; + public static encode(m: proto.Message.IMessageHistoryMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.MessageHistoryMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.MessageHistoryMetadata; + public static toObject(m: proto.Message.MessageHistoryMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMessageHistoryNotice { + contextInfo?: (proto.IContextInfo|null); + messageHistoryMetadata?: (proto.Message.IMessageHistoryMetadata|null); + } + + class MessageHistoryNotice implements IMessageHistoryNotice { + constructor(p?: proto.Message.IMessageHistoryNotice); + public contextInfo?: (proto.IContextInfo|null); + public messageHistoryMetadata?: (proto.Message.IMessageHistoryMetadata|null); + public static create(properties?: proto.Message.IMessageHistoryNotice): proto.Message.MessageHistoryNotice; + public static encode(m: proto.Message.IMessageHistoryNotice, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.MessageHistoryNotice; + public static fromObject(d: { [k: string]: any }): proto.Message.MessageHistoryNotice; + public static toObject(m: proto.Message.MessageHistoryNotice, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface INewsletterAdminInviteMessage { + newsletterJid?: (string|null); + newsletterName?: (string|null); + jpegThumbnail?: (Uint8Array|null); + caption?: (string|null); + inviteExpiration?: (number|Long|null); + contextInfo?: (proto.IContextInfo|null); + } + + class NewsletterAdminInviteMessage implements INewsletterAdminInviteMessage { + constructor(p?: proto.Message.INewsletterAdminInviteMessage); + public newsletterJid?: (string|null); + public newsletterName?: (string|null); + public jpegThumbnail?: (Uint8Array|null); + public caption?: (string|null); + public inviteExpiration?: (number|Long|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.INewsletterAdminInviteMessage): proto.Message.NewsletterAdminInviteMessage; + public static encode(m: proto.Message.INewsletterAdminInviteMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.NewsletterAdminInviteMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.NewsletterAdminInviteMessage; + public static toObject(m: proto.Message.NewsletterAdminInviteMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface INewsletterFollowerInviteMessage { + newsletterJid?: (string|null); + newsletterName?: (string|null); + jpegThumbnail?: (Uint8Array|null); + caption?: (string|null); + contextInfo?: (proto.IContextInfo|null); + } + + class NewsletterFollowerInviteMessage implements INewsletterFollowerInviteMessage { + constructor(p?: proto.Message.INewsletterFollowerInviteMessage); + public newsletterJid?: (string|null); + public newsletterName?: (string|null); + public jpegThumbnail?: (Uint8Array|null); + public caption?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.INewsletterFollowerInviteMessage): proto.Message.NewsletterFollowerInviteMessage; + public static encode(m: proto.Message.INewsletterFollowerInviteMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.NewsletterFollowerInviteMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.NewsletterFollowerInviteMessage; + public static toObject(m: proto.Message.NewsletterFollowerInviteMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IOrderMessage { + orderId?: (string|null); + thumbnail?: (Uint8Array|null); + itemCount?: (number|null); + status?: (proto.Message.OrderMessage.OrderStatus|null); + surface?: (proto.Message.OrderMessage.OrderSurface|null); + message?: (string|null); + orderTitle?: (string|null); + sellerJid?: (string|null); + token?: (string|null); + totalAmount1000?: (number|Long|null); + totalCurrencyCode?: (string|null); + contextInfo?: (proto.IContextInfo|null); + messageVersion?: (number|null); + orderRequestMessageId?: (proto.IMessageKey|null); + catalogType?: (string|null); + } + + class OrderMessage implements IOrderMessage { + constructor(p?: proto.Message.IOrderMessage); + public orderId?: (string|null); + public thumbnail?: (Uint8Array|null); + public itemCount?: (number|null); + public status?: (proto.Message.OrderMessage.OrderStatus|null); + public surface?: (proto.Message.OrderMessage.OrderSurface|null); + public message?: (string|null); + public orderTitle?: (string|null); + public sellerJid?: (string|null); + public token?: (string|null); + public totalAmount1000?: (number|Long|null); + public totalCurrencyCode?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public messageVersion?: (number|null); + public orderRequestMessageId?: (proto.IMessageKey|null); + public catalogType?: (string|null); + public static create(properties?: proto.Message.IOrderMessage): proto.Message.OrderMessage; + public static encode(m: proto.Message.IOrderMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.OrderMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.OrderMessage; + public static toObject(m: proto.Message.OrderMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace OrderMessage { + + enum OrderStatus { + INQUIRY = 1, + ACCEPTED = 2, + DECLINED = 3 + } + + enum OrderSurface { + CATALOG = 1 + } + } + + interface IPaymentExtendedMetadata { + type?: (number|null); + platform?: (string|null); + messageParamsJson?: (string|null); + } + + class PaymentExtendedMetadata implements IPaymentExtendedMetadata { + constructor(p?: proto.Message.IPaymentExtendedMetadata); + public type?: (number|null); + public platform?: (string|null); + public messageParamsJson?: (string|null); + public static create(properties?: proto.Message.IPaymentExtendedMetadata): proto.Message.PaymentExtendedMetadata; + public static encode(m: proto.Message.IPaymentExtendedMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PaymentExtendedMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.PaymentExtendedMetadata; + public static toObject(m: proto.Message.PaymentExtendedMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPaymentInviteMessage { + serviceType?: (proto.Message.PaymentInviteMessage.ServiceType|null); + expiryTimestamp?: (number|Long|null); + } + + class PaymentInviteMessage implements IPaymentInviteMessage { + constructor(p?: proto.Message.IPaymentInviteMessage); + public serviceType?: (proto.Message.PaymentInviteMessage.ServiceType|null); + public expiryTimestamp?: (number|Long|null); + public static create(properties?: proto.Message.IPaymentInviteMessage): proto.Message.PaymentInviteMessage; + public static encode(m: proto.Message.IPaymentInviteMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PaymentInviteMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PaymentInviteMessage; + public static toObject(m: proto.Message.PaymentInviteMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PaymentInviteMessage { + + enum ServiceType { + UNKNOWN = 0, + FBPAY = 1, + NOVI = 2, + UPI = 3 + } + } + + interface IPaymentLinkMetadata { + button?: (proto.Message.PaymentLinkMetadata.IPaymentLinkButton|null); + header?: (proto.Message.PaymentLinkMetadata.IPaymentLinkHeader|null); + provider?: (proto.Message.PaymentLinkMetadata.IPaymentLinkProvider|null); + } + + class PaymentLinkMetadata implements IPaymentLinkMetadata { + constructor(p?: proto.Message.IPaymentLinkMetadata); + public button?: (proto.Message.PaymentLinkMetadata.IPaymentLinkButton|null); + public header?: (proto.Message.PaymentLinkMetadata.IPaymentLinkHeader|null); + public provider?: (proto.Message.PaymentLinkMetadata.IPaymentLinkProvider|null); + public static create(properties?: proto.Message.IPaymentLinkMetadata): proto.Message.PaymentLinkMetadata; + public static encode(m: proto.Message.IPaymentLinkMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PaymentLinkMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.PaymentLinkMetadata; + public static toObject(m: proto.Message.PaymentLinkMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PaymentLinkMetadata { + + interface IPaymentLinkButton { + displayText?: (string|null); + } + + class PaymentLinkButton implements IPaymentLinkButton { + constructor(p?: proto.Message.PaymentLinkMetadata.IPaymentLinkButton); + public displayText?: (string|null); + public static create(properties?: proto.Message.PaymentLinkMetadata.IPaymentLinkButton): proto.Message.PaymentLinkMetadata.PaymentLinkButton; + public static encode(m: proto.Message.PaymentLinkMetadata.IPaymentLinkButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PaymentLinkMetadata.PaymentLinkButton; + public static fromObject(d: { [k: string]: any }): proto.Message.PaymentLinkMetadata.PaymentLinkButton; + public static toObject(m: proto.Message.PaymentLinkMetadata.PaymentLinkButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPaymentLinkHeader { + headerType?: (proto.Message.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType|null); + } + + class PaymentLinkHeader implements IPaymentLinkHeader { + constructor(p?: proto.Message.PaymentLinkMetadata.IPaymentLinkHeader); + public headerType?: (proto.Message.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType|null); + public static create(properties?: proto.Message.PaymentLinkMetadata.IPaymentLinkHeader): proto.Message.PaymentLinkMetadata.PaymentLinkHeader; + public static encode(m: proto.Message.PaymentLinkMetadata.IPaymentLinkHeader, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PaymentLinkMetadata.PaymentLinkHeader; + public static fromObject(d: { [k: string]: any }): proto.Message.PaymentLinkMetadata.PaymentLinkHeader; + public static toObject(m: proto.Message.PaymentLinkMetadata.PaymentLinkHeader, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PaymentLinkHeader { + + enum PaymentLinkHeaderType { + LINK_PREVIEW = 0, + ORDER = 1 + } + } + + interface IPaymentLinkProvider { + paramsJson?: (string|null); + } + + class PaymentLinkProvider implements IPaymentLinkProvider { + constructor(p?: proto.Message.PaymentLinkMetadata.IPaymentLinkProvider); + public paramsJson?: (string|null); + public static create(properties?: proto.Message.PaymentLinkMetadata.IPaymentLinkProvider): proto.Message.PaymentLinkMetadata.PaymentLinkProvider; + public static encode(m: proto.Message.PaymentLinkMetadata.IPaymentLinkProvider, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PaymentLinkMetadata.PaymentLinkProvider; + public static fromObject(d: { [k: string]: any }): proto.Message.PaymentLinkMetadata.PaymentLinkProvider; + public static toObject(m: proto.Message.PaymentLinkMetadata.PaymentLinkProvider, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IPeerDataOperationRequestMessage { + peerDataOperationRequestType?: (proto.Message.PeerDataOperationRequestType|null); + requestStickerReupload?: (proto.Message.PeerDataOperationRequestMessage.IRequestStickerReupload[]|null); + requestUrlPreview?: (proto.Message.PeerDataOperationRequestMessage.IRequestUrlPreview[]|null); + historySyncOnDemandRequest?: (proto.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest|null); + placeholderMessageResendRequest?: (proto.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest[]|null); + fullHistorySyncOnDemandRequest?: (proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest|null); + syncdCollectionFatalRecoveryRequest?: (proto.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest|null); + historySyncChunkRetryRequest?: (proto.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest|null); + galaxyFlowAction?: (proto.Message.PeerDataOperationRequestMessage.IGalaxyFlowAction|null); + } + + class PeerDataOperationRequestMessage implements IPeerDataOperationRequestMessage { + constructor(p?: proto.Message.IPeerDataOperationRequestMessage); + public peerDataOperationRequestType?: (proto.Message.PeerDataOperationRequestType|null); + public requestStickerReupload: proto.Message.PeerDataOperationRequestMessage.IRequestStickerReupload[]; + public requestUrlPreview: proto.Message.PeerDataOperationRequestMessage.IRequestUrlPreview[]; + public historySyncOnDemandRequest?: (proto.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest|null); + public placeholderMessageResendRequest: proto.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest[]; + public fullHistorySyncOnDemandRequest?: (proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest|null); + public syncdCollectionFatalRecoveryRequest?: (proto.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest|null); + public historySyncChunkRetryRequest?: (proto.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest|null); + public galaxyFlowAction?: (proto.Message.PeerDataOperationRequestMessage.IGalaxyFlowAction|null); + public static create(properties?: proto.Message.IPeerDataOperationRequestMessage): proto.Message.PeerDataOperationRequestMessage; + public static encode(m: proto.Message.IPeerDataOperationRequestMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PeerDataOperationRequestMessage { + + interface IFullHistorySyncOnDemandRequest { + requestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null); + historySyncConfig?: (proto.DeviceProps.IHistorySyncConfig|null); + } + + class FullHistorySyncOnDemandRequest implements IFullHistorySyncOnDemandRequest { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest); + public requestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null); + public historySyncConfig?: (proto.DeviceProps.IHistorySyncConfig|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest): proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IGalaxyFlowAction { + type?: (proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType|null); + flowId?: (string|null); + stanzaId?: (string|null); + } + + class GalaxyFlowAction implements IGalaxyFlowAction { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.IGalaxyFlowAction); + public type?: (proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType|null); + public flowId?: (string|null); + public stanzaId?: (string|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IGalaxyFlowAction): proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.IGalaxyFlowAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace GalaxyFlowAction { + + enum GalaxyFlowActionType { + NOTIFY_LAUNCH = 1 + } + } + + interface IHistorySyncChunkRetryRequest { + syncType?: (proto.Message.HistorySyncType|null); + chunkOrder?: (number|null); + chunkNotificationId?: (string|null); + regenerateChunk?: (boolean|null); + } + + class HistorySyncChunkRetryRequest implements IHistorySyncChunkRetryRequest { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest); + public syncType?: (proto.Message.HistorySyncType|null); + public chunkOrder?: (number|null); + public chunkNotificationId?: (string|null); + public regenerateChunk?: (boolean|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest): proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.IHistorySyncChunkRetryRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHistorySyncOnDemandRequest { + chatJid?: (string|null); + oldestMsgId?: (string|null); + oldestMsgFromMe?: (boolean|null); + onDemandMsgCount?: (number|null); + oldestMsgTimestampMs?: (number|Long|null); + accountLid?: (string|null); + } + + class HistorySyncOnDemandRequest implements IHistorySyncOnDemandRequest { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest); + public chatJid?: (string|null); + public oldestMsgId?: (string|null); + public oldestMsgFromMe?: (boolean|null); + public onDemandMsgCount?: (number|null); + public oldestMsgTimestampMs?: (number|Long|null); + public accountLid?: (string|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest): proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.IHistorySyncOnDemandRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPlaceholderMessageResendRequest { + messageKey?: (proto.IMessageKey|null); + } + + class PlaceholderMessageResendRequest implements IPlaceholderMessageResendRequest { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest); + public messageKey?: (proto.IMessageKey|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest): proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.IPlaceholderMessageResendRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRequestStickerReupload { + fileSha256?: (string|null); + } + + class RequestStickerReupload implements IRequestStickerReupload { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.IRequestStickerReupload); + public fileSha256?: (string|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IRequestStickerReupload): proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.IRequestStickerReupload, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRequestUrlPreview { + url?: (string|null); + includeHqThumbnail?: (boolean|null); + } + + class RequestUrlPreview implements IRequestUrlPreview { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.IRequestUrlPreview); + public url?: (string|null); + public includeHqThumbnail?: (boolean|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IRequestUrlPreview): proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.IRequestUrlPreview, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncDCollectionFatalRecoveryRequest { + collectionName?: (string|null); + timestamp?: (number|Long|null); + } + + class SyncDCollectionFatalRecoveryRequest implements ISyncDCollectionFatalRecoveryRequest { + constructor(p?: proto.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest); + public collectionName?: (string|null); + public timestamp?: (number|Long|null); + public static create(properties?: proto.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest): proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest; + public static encode(m: proto.Message.PeerDataOperationRequestMessage.ISyncDCollectionFatalRecoveryRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest; + public static toObject(m: proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IPeerDataOperationRequestResponseMessage { + peerDataOperationRequestType?: (proto.Message.PeerDataOperationRequestType|null); + stanzaId?: (string|null); + peerDataOperationResult?: (proto.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult[]|null); + } + + class PeerDataOperationRequestResponseMessage implements IPeerDataOperationRequestResponseMessage { + constructor(p?: proto.Message.IPeerDataOperationRequestResponseMessage); + public peerDataOperationRequestType?: (proto.Message.PeerDataOperationRequestType|null); + public stanzaId?: (string|null); + public peerDataOperationResult: proto.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult[]; + public static create(properties?: proto.Message.IPeerDataOperationRequestResponseMessage): proto.Message.PeerDataOperationRequestResponseMessage; + public static encode(m: proto.Message.IPeerDataOperationRequestResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PeerDataOperationRequestResponseMessage { + + interface IPeerDataOperationResult { + mediaUploadResult?: (proto.MediaRetryNotification.ResultType|null); + stickerMessage?: (proto.Message.IStickerMessage|null); + linkPreviewResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse|null); + placeholderMessageResendResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse|null); + waffleNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse|null); + fullHistorySyncOnDemandRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse|null); + companionMetaNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse|null); + syncdSnapshotFatalRecoveryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse|null); + companionCanonicalUserNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse|null); + historySyncChunkRetryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse|null); + } + + class PeerDataOperationResult implements IPeerDataOperationResult { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult); + public mediaUploadResult?: (proto.MediaRetryNotification.ResultType|null); + public stickerMessage?: (proto.Message.IStickerMessage|null); + public linkPreviewResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse|null); + public placeholderMessageResendResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse|null); + public waffleNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse|null); + public fullHistorySyncOnDemandRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse|null); + public companionMetaNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse|null); + public syncdSnapshotFatalRecoveryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse|null); + public companionCanonicalUserNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse|null); + public historySyncChunkRetryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PeerDataOperationResult { + + interface ICompanionCanonicalUserNonceFetchResponse { + nonce?: (string|null); + waFbid?: (string|null); + forceRefresh?: (boolean|null); + } + + class CompanionCanonicalUserNonceFetchResponse implements ICompanionCanonicalUserNonceFetchResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse); + public nonce?: (string|null); + public waFbid?: (string|null); + public forceRefresh?: (boolean|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICompanionMetaNonceFetchResponse { + nonce?: (string|null); + } + + class CompanionMetaNonceFetchResponse implements ICompanionMetaNonceFetchResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse); + public nonce?: (string|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionMetaNonceFetchResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IFullHistorySyncOnDemandRequestResponse { + requestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null); + responseCode?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode|null); + } + + class FullHistorySyncOnDemandRequestResponse implements IFullHistorySyncOnDemandRequestResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse); + public requestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null); + public responseCode?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFullHistorySyncOnDemandRequestResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum FullHistorySyncOnDemandResponseCode { + REQUEST_SUCCESS = 0, + REQUEST_TIME_EXPIRED = 1, + DECLINED_SHARING_HISTORY = 2, + GENERIC_ERROR = 3, + ERROR_REQUEST_ON_NON_SMB_PRIMARY = 4, + ERROR_HOSTED_DEVICE_NOT_CONNECTED = 5, + ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET = 6 + } + + interface IHistorySyncChunkRetryResponse { + syncType?: (proto.Message.HistorySyncType|null); + chunkOrder?: (number|null); + requestId?: (string|null); + responseCode?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode|null); + canRecover?: (boolean|null); + } + + class HistorySyncChunkRetryResponse implements IHistorySyncChunkRetryResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse); + public syncType?: (proto.Message.HistorySyncType|null); + public chunkOrder?: (number|null); + public requestId?: (string|null); + public responseCode?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode|null); + public canRecover?: (boolean|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum HistorySyncChunkRetryResponseCode { + GENERATION_ERROR = 1, + CHUNK_CONSUMED = 2, + TIMEOUT = 3, + SESSION_EXHAUSTED = 4, + CHUNK_EXHAUSTED = 5, + DUPLICATED_REQUEST = 6 + } + + interface ILinkPreviewResponse { + url?: (string|null); + title?: (string|null); + description?: (string|null); + thumbData?: (Uint8Array|null); + matchText?: (string|null); + previewType?: (string|null); + hqThumbnail?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail|null); + previewMetadata?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata|null); + } + + class LinkPreviewResponse implements ILinkPreviewResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse); + public url?: (string|null); + public title?: (string|null); + public description?: (string|null); + public thumbData?: (Uint8Array|null); + public matchText?: (string|null); + public previewType?: (string|null); + public hqThumbnail?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail|null); + public previewMetadata?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ILinkPreviewResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace LinkPreviewResponse { + + interface ILinkPreviewHighQualityThumbnail { + directPath?: (string|null); + thumbHash?: (string|null); + encThumbHash?: (string|null); + mediaKey?: (Uint8Array|null); + mediaKeyTimestampMs?: (number|Long|null); + thumbWidth?: (number|null); + thumbHeight?: (number|null); + } + + class LinkPreviewHighQualityThumbnail implements ILinkPreviewHighQualityThumbnail { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail); + public directPath?: (string|null); + public thumbHash?: (string|null); + public encThumbHash?: (string|null); + public mediaKey?: (Uint8Array|null); + public mediaKeyTimestampMs?: (number|Long|null); + public thumbWidth?: (number|null); + public thumbHeight?: (number|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.ILinkPreviewHighQualityThumbnail, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPaymentLinkPreviewMetadata { + isBusinessVerified?: (boolean|null); + providerName?: (string|null); + } + + class PaymentLinkPreviewMetadata implements IPaymentLinkPreviewMetadata { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata); + public isBusinessVerified?: (boolean|null); + public providerName?: (string|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.IPaymentLinkPreviewMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IPlaceholderMessageResendResponse { + webMessageInfoBytes?: (Uint8Array|null); + } + + class PlaceholderMessageResendResponse implements IPlaceholderMessageResendResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse); + public webMessageInfoBytes?: (Uint8Array|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IPlaceholderMessageResendResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncDSnapshotFatalRecoveryResponse { + collectionSnapshot?: (Uint8Array|null); + isCompressed?: (boolean|null); + } + + class SyncDSnapshotFatalRecoveryResponse implements ISyncDSnapshotFatalRecoveryResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse); + public collectionSnapshot?: (Uint8Array|null); + public isCompressed?: (boolean|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IWaffleNonceFetchResponse { + nonce?: (string|null); + waEntFbid?: (string|null); + } + + class WaffleNonceFetchResponse implements IWaffleNonceFetchResponse { + constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse); + public nonce?: (string|null); + public waEntFbid?: (string|null); + public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse; + public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IWaffleNonceFetchResponse, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse; + public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse; + public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + } + + enum PeerDataOperationRequestType { + UPLOAD_STICKER = 0, + SEND_RECENT_STICKER_BOOTSTRAP = 1, + GENERATE_LINK_PREVIEW = 2, + HISTORY_SYNC_ON_DEMAND = 3, + PLACEHOLDER_MESSAGE_RESEND = 4, + WAFFLE_LINKING_NONCE_FETCH = 5, + FULL_HISTORY_SYNC_ON_DEMAND = 6, + COMPANION_META_NONCE_FETCH = 7, + COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY = 8, + COMPANION_CANONICAL_USER_NONCE_FETCH = 9, + HISTORY_SYNC_CHUNK_RETRY = 10, + GALAXY_FLOW_ACTION = 11 + } + + interface IPinInChatMessage { + key?: (proto.IMessageKey|null); + type?: (proto.Message.PinInChatMessage.Type|null); + senderTimestampMs?: (number|Long|null); + } + + class PinInChatMessage implements IPinInChatMessage { + constructor(p?: proto.Message.IPinInChatMessage); + public key?: (proto.IMessageKey|null); + public type?: (proto.Message.PinInChatMessage.Type|null); + public senderTimestampMs?: (number|Long|null); + public static create(properties?: proto.Message.IPinInChatMessage): proto.Message.PinInChatMessage; + public static encode(m: proto.Message.IPinInChatMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PinInChatMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PinInChatMessage; + public static toObject(m: proto.Message.PinInChatMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PinInChatMessage { + + enum Type { + UNKNOWN_TYPE = 0, + PIN_FOR_ALL = 1, + UNPIN_FOR_ALL = 2 + } + } + + interface IPlaceholderMessage { + type?: (proto.Message.PlaceholderMessage.PlaceholderType|null); + } + + class PlaceholderMessage implements IPlaceholderMessage { + constructor(p?: proto.Message.IPlaceholderMessage); + public type?: (proto.Message.PlaceholderMessage.PlaceholderType|null); + public static create(properties?: proto.Message.IPlaceholderMessage): proto.Message.PlaceholderMessage; + public static encode(m: proto.Message.IPlaceholderMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PlaceholderMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PlaceholderMessage; + public static toObject(m: proto.Message.PlaceholderMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PlaceholderMessage { + + enum PlaceholderType { + MASK_LINKED_DEVICES = 0 + } + } + + enum PollContentType { + UNKNOWN = 0, + TEXT = 1, + IMAGE = 2 + } + + interface IPollCreationMessage { + encKey?: (Uint8Array|null); + name?: (string|null); + options?: (proto.Message.PollCreationMessage.IOption[]|null); + selectableOptionsCount?: (number|null); + contextInfo?: (proto.IContextInfo|null); + pollContentType?: (proto.Message.PollContentType|null); + pollType?: (proto.Message.PollType|null); + correctAnswer?: (proto.Message.PollCreationMessage.IOption|null); + } + + class PollCreationMessage implements IPollCreationMessage { + constructor(p?: proto.Message.IPollCreationMessage); + public encKey?: (Uint8Array|null); + public name?: (string|null); + public options: proto.Message.PollCreationMessage.IOption[]; + public selectableOptionsCount?: (number|null); + public contextInfo?: (proto.IContextInfo|null); + public pollContentType?: (proto.Message.PollContentType|null); + public pollType?: (proto.Message.PollType|null); + public correctAnswer?: (proto.Message.PollCreationMessage.IOption|null); + public static create(properties?: proto.Message.IPollCreationMessage): proto.Message.PollCreationMessage; + public static encode(m: proto.Message.IPollCreationMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollCreationMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PollCreationMessage; + public static toObject(m: proto.Message.PollCreationMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PollCreationMessage { + + interface IOption { + optionName?: (string|null); + optionHash?: (string|null); + } + + class Option implements IOption { + constructor(p?: proto.Message.PollCreationMessage.IOption); + public optionName?: (string|null); + public optionHash?: (string|null); + public static create(properties?: proto.Message.PollCreationMessage.IOption): proto.Message.PollCreationMessage.Option; + public static encode(m: proto.Message.PollCreationMessage.IOption, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollCreationMessage.Option; + public static fromObject(d: { [k: string]: any }): proto.Message.PollCreationMessage.Option; + public static toObject(m: proto.Message.PollCreationMessage.Option, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IPollEncValue { + encPayload?: (Uint8Array|null); + encIv?: (Uint8Array|null); + } + + class PollEncValue implements IPollEncValue { + constructor(p?: proto.Message.IPollEncValue); + public encPayload?: (Uint8Array|null); + public encIv?: (Uint8Array|null); + public static create(properties?: proto.Message.IPollEncValue): proto.Message.PollEncValue; + public static encode(m: proto.Message.IPollEncValue, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollEncValue; + public static fromObject(d: { [k: string]: any }): proto.Message.PollEncValue; + public static toObject(m: proto.Message.PollEncValue, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPollResultSnapshotMessage { + name?: (string|null); + pollVotes?: (proto.Message.PollResultSnapshotMessage.IPollVote[]|null); + contextInfo?: (proto.IContextInfo|null); + pollType?: (proto.Message.PollType|null); + } + + class PollResultSnapshotMessage implements IPollResultSnapshotMessage { + constructor(p?: proto.Message.IPollResultSnapshotMessage); + public name?: (string|null); + public pollVotes: proto.Message.PollResultSnapshotMessage.IPollVote[]; + public contextInfo?: (proto.IContextInfo|null); + public pollType?: (proto.Message.PollType|null); + public static create(properties?: proto.Message.IPollResultSnapshotMessage): proto.Message.PollResultSnapshotMessage; + public static encode(m: proto.Message.IPollResultSnapshotMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollResultSnapshotMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PollResultSnapshotMessage; + public static toObject(m: proto.Message.PollResultSnapshotMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PollResultSnapshotMessage { + + interface IPollVote { + optionName?: (string|null); + optionVoteCount?: (number|Long|null); + } + + class PollVote implements IPollVote { + constructor(p?: proto.Message.PollResultSnapshotMessage.IPollVote); + public optionName?: (string|null); + public optionVoteCount?: (number|Long|null); + public static create(properties?: proto.Message.PollResultSnapshotMessage.IPollVote): proto.Message.PollResultSnapshotMessage.PollVote; + public static encode(m: proto.Message.PollResultSnapshotMessage.IPollVote, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollResultSnapshotMessage.PollVote; + public static fromObject(d: { [k: string]: any }): proto.Message.PollResultSnapshotMessage.PollVote; + public static toObject(m: proto.Message.PollResultSnapshotMessage.PollVote, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + enum PollType { + POLL = 0, + QUIZ = 1 + } + + interface IPollUpdateMessage { + pollCreationMessageKey?: (proto.IMessageKey|null); + vote?: (proto.Message.IPollEncValue|null); + metadata?: (proto.Message.IPollUpdateMessageMetadata|null); + senderTimestampMs?: (number|Long|null); + } + + class PollUpdateMessage implements IPollUpdateMessage { + constructor(p?: proto.Message.IPollUpdateMessage); + public pollCreationMessageKey?: (proto.IMessageKey|null); + public vote?: (proto.Message.IPollEncValue|null); + public metadata?: (proto.Message.IPollUpdateMessageMetadata|null); + public senderTimestampMs?: (number|Long|null); + public static create(properties?: proto.Message.IPollUpdateMessage): proto.Message.PollUpdateMessage; + public static encode(m: proto.Message.IPollUpdateMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollUpdateMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PollUpdateMessage; + public static toObject(m: proto.Message.PollUpdateMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPollUpdateMessageMetadata { + } + + class PollUpdateMessageMetadata implements IPollUpdateMessageMetadata { + constructor(p?: proto.Message.IPollUpdateMessageMetadata); + public static create(properties?: proto.Message.IPollUpdateMessageMetadata): proto.Message.PollUpdateMessageMetadata; + public static encode(m: proto.Message.IPollUpdateMessageMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollUpdateMessageMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.PollUpdateMessageMetadata; + public static toObject(m: proto.Message.PollUpdateMessageMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPollVoteMessage { + selectedOptions?: (Uint8Array[]|null); + } + + class PollVoteMessage implements IPollVoteMessage { + constructor(p?: proto.Message.IPollVoteMessage); + public selectedOptions: Uint8Array[]; + public static create(properties?: proto.Message.IPollVoteMessage): proto.Message.PollVoteMessage; + public static encode(m: proto.Message.IPollVoteMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PollVoteMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.PollVoteMessage; + public static toObject(m: proto.Message.PollVoteMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IProductMessage { + product?: (proto.Message.ProductMessage.IProductSnapshot|null); + businessOwnerJid?: (string|null); + catalog?: (proto.Message.ProductMessage.ICatalogSnapshot|null); + body?: (string|null); + footer?: (string|null); + contextInfo?: (proto.IContextInfo|null); + } + + class ProductMessage implements IProductMessage { + constructor(p?: proto.Message.IProductMessage); + public product?: (proto.Message.ProductMessage.IProductSnapshot|null); + public businessOwnerJid?: (string|null); + public catalog?: (proto.Message.ProductMessage.ICatalogSnapshot|null); + public body?: (string|null); + public footer?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.IProductMessage): proto.Message.ProductMessage; + public static encode(m: proto.Message.IProductMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ProductMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ProductMessage; + public static toObject(m: proto.Message.ProductMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ProductMessage { + + interface ICatalogSnapshot { + catalogImage?: (proto.Message.IImageMessage|null); + title?: (string|null); + description?: (string|null); + } + + class CatalogSnapshot implements ICatalogSnapshot { + constructor(p?: proto.Message.ProductMessage.ICatalogSnapshot); + public catalogImage?: (proto.Message.IImageMessage|null); + public title?: (string|null); + public description?: (string|null); + public static create(properties?: proto.Message.ProductMessage.ICatalogSnapshot): proto.Message.ProductMessage.CatalogSnapshot; + public static encode(m: proto.Message.ProductMessage.ICatalogSnapshot, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ProductMessage.CatalogSnapshot; + public static fromObject(d: { [k: string]: any }): proto.Message.ProductMessage.CatalogSnapshot; + public static toObject(m: proto.Message.ProductMessage.CatalogSnapshot, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IProductSnapshot { + productImage?: (proto.Message.IImageMessage|null); + productId?: (string|null); + title?: (string|null); + description?: (string|null); + currencyCode?: (string|null); + priceAmount1000?: (number|Long|null); + retailerId?: (string|null); + url?: (string|null); + productImageCount?: (number|null); + firstImageId?: (string|null); + salePriceAmount1000?: (number|Long|null); + signedUrl?: (string|null); + } + + class ProductSnapshot implements IProductSnapshot { + constructor(p?: proto.Message.ProductMessage.IProductSnapshot); + public productImage?: (proto.Message.IImageMessage|null); + public productId?: (string|null); + public title?: (string|null); + public description?: (string|null); + public currencyCode?: (string|null); + public priceAmount1000?: (number|Long|null); + public retailerId?: (string|null); + public url?: (string|null); + public productImageCount?: (number|null); + public firstImageId?: (string|null); + public salePriceAmount1000?: (number|Long|null); + public signedUrl?: (string|null); + public static create(properties?: proto.Message.ProductMessage.IProductSnapshot): proto.Message.ProductMessage.ProductSnapshot; + public static encode(m: proto.Message.ProductMessage.IProductSnapshot, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ProductMessage.ProductSnapshot; + public static fromObject(d: { [k: string]: any }): proto.Message.ProductMessage.ProductSnapshot; + public static toObject(m: proto.Message.ProductMessage.ProductSnapshot, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IProtocolMessage { + key?: (proto.IMessageKey|null); + type?: (proto.Message.ProtocolMessage.Type|null); + ephemeralExpiration?: (number|null); + ephemeralSettingTimestamp?: (number|Long|null); + historySyncNotification?: (proto.Message.IHistorySyncNotification|null); + appStateSyncKeyShare?: (proto.Message.IAppStateSyncKeyShare|null); + appStateSyncKeyRequest?: (proto.Message.IAppStateSyncKeyRequest|null); + initialSecurityNotificationSettingSync?: (proto.Message.IInitialSecurityNotificationSettingSync|null); + appStateFatalExceptionNotification?: (proto.Message.IAppStateFatalExceptionNotification|null); + disappearingMode?: (proto.IDisappearingMode|null); + editedMessage?: (proto.IMessage|null); + timestampMs?: (number|Long|null); + peerDataOperationRequestMessage?: (proto.Message.IPeerDataOperationRequestMessage|null); + peerDataOperationRequestResponseMessage?: (proto.Message.IPeerDataOperationRequestResponseMessage|null); + botFeedbackMessage?: (proto.IBotFeedbackMessage|null); + invokerJid?: (string|null); + requestWelcomeMessageMetadata?: (proto.Message.IRequestWelcomeMessageMetadata|null); + mediaNotifyMessage?: (proto.IMediaNotifyMessage|null); + cloudApiThreadControlNotification?: (proto.Message.ICloudAPIThreadControlNotification|null); + lidMigrationMappingSyncMessage?: (proto.ILIDMigrationMappingSyncMessage|null); + limitSharing?: (proto.ILimitSharing|null); + aiPsiMetadata?: (Uint8Array|null); + aiQueryFanout?: (proto.IAIQueryFanout|null); + memberLabel?: (proto.IMemberLabel|null); + } + + class ProtocolMessage implements IProtocolMessage { + constructor(p?: proto.Message.IProtocolMessage); + public key?: (proto.IMessageKey|null); + public type?: (proto.Message.ProtocolMessage.Type|null); + public ephemeralExpiration?: (number|null); + public ephemeralSettingTimestamp?: (number|Long|null); + public historySyncNotification?: (proto.Message.IHistorySyncNotification|null); + public appStateSyncKeyShare?: (proto.Message.IAppStateSyncKeyShare|null); + public appStateSyncKeyRequest?: (proto.Message.IAppStateSyncKeyRequest|null); + public initialSecurityNotificationSettingSync?: (proto.Message.IInitialSecurityNotificationSettingSync|null); + public appStateFatalExceptionNotification?: (proto.Message.IAppStateFatalExceptionNotification|null); + public disappearingMode?: (proto.IDisappearingMode|null); + public editedMessage?: (proto.IMessage|null); + public timestampMs?: (number|Long|null); + public peerDataOperationRequestMessage?: (proto.Message.IPeerDataOperationRequestMessage|null); + public peerDataOperationRequestResponseMessage?: (proto.Message.IPeerDataOperationRequestResponseMessage|null); + public botFeedbackMessage?: (proto.IBotFeedbackMessage|null); + public invokerJid?: (string|null); + public requestWelcomeMessageMetadata?: (proto.Message.IRequestWelcomeMessageMetadata|null); + public mediaNotifyMessage?: (proto.IMediaNotifyMessage|null); + public cloudApiThreadControlNotification?: (proto.Message.ICloudAPIThreadControlNotification|null); + public lidMigrationMappingSyncMessage?: (proto.ILIDMigrationMappingSyncMessage|null); + public limitSharing?: (proto.ILimitSharing|null); + public aiPsiMetadata?: (Uint8Array|null); + public aiQueryFanout?: (proto.IAIQueryFanout|null); + public memberLabel?: (proto.IMemberLabel|null); + public static create(properties?: proto.Message.IProtocolMessage): proto.Message.ProtocolMessage; + public static encode(m: proto.Message.IProtocolMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ProtocolMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ProtocolMessage; + public static toObject(m: proto.Message.ProtocolMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ProtocolMessage { + + enum Type { + REVOKE = 0, + EPHEMERAL_SETTING = 3, + EPHEMERAL_SYNC_RESPONSE = 4, + HISTORY_SYNC_NOTIFICATION = 5, + APP_STATE_SYNC_KEY_SHARE = 6, + APP_STATE_SYNC_KEY_REQUEST = 7, + MSG_FANOUT_BACKFILL_REQUEST = 8, + INITIAL_SECURITY_NOTIFICATION_SETTING_SYNC = 9, + APP_STATE_FATAL_EXCEPTION_NOTIFICATION = 10, + SHARE_PHONE_NUMBER = 11, + MESSAGE_EDIT = 14, + PEER_DATA_OPERATION_REQUEST_MESSAGE = 16, + PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE = 17, + REQUEST_WELCOME_MESSAGE = 18, + BOT_FEEDBACK_MESSAGE = 19, + MEDIA_NOTIFY_MESSAGE = 20, + CLOUD_API_THREAD_CONTROL_NOTIFICATION = 21, + LID_MIGRATION_MAPPING_SYNC = 22, + REMINDER_MESSAGE = 23, + BOT_MEMU_ONBOARDING_MESSAGE = 24, + STATUS_MENTION_MESSAGE = 25, + STOP_GENERATION_MESSAGE = 26, + LIMIT_SHARING = 27, + AI_PSI_METADATA = 28, + AI_QUERY_FANOUT = 29, + GROUP_MEMBER_LABEL_CHANGE = 30 + } + } + + interface IQuestionResponseMessage { + key?: (proto.IMessageKey|null); + text?: (string|null); + } + + class QuestionResponseMessage implements IQuestionResponseMessage { + constructor(p?: proto.Message.IQuestionResponseMessage); + public key?: (proto.IMessageKey|null); + public text?: (string|null); + public static create(properties?: proto.Message.IQuestionResponseMessage): proto.Message.QuestionResponseMessage; + public static encode(m: proto.Message.IQuestionResponseMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.QuestionResponseMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.QuestionResponseMessage; + public static toObject(m: proto.Message.QuestionResponseMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IReactionMessage { + key?: (proto.IMessageKey|null); + text?: (string|null); + groupingKey?: (string|null); + senderTimestampMs?: (number|Long|null); + } + + class ReactionMessage implements IReactionMessage { + constructor(p?: proto.Message.IReactionMessage); + public key?: (proto.IMessageKey|null); + public text?: (string|null); + public groupingKey?: (string|null); + public senderTimestampMs?: (number|Long|null); + public static create(properties?: proto.Message.IReactionMessage): proto.Message.ReactionMessage; + public static encode(m: proto.Message.IReactionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ReactionMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ReactionMessage; + public static toObject(m: proto.Message.ReactionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRequestPaymentMessage { + noteMessage?: (proto.IMessage|null); + currencyCodeIso4217?: (string|null); + amount1000?: (number|Long|null); + requestFrom?: (string|null); + expiryTimestamp?: (number|Long|null); + amount?: (proto.IMoney|null); + background?: (proto.IPaymentBackground|null); + } + + class RequestPaymentMessage implements IRequestPaymentMessage { + constructor(p?: proto.Message.IRequestPaymentMessage); + public noteMessage?: (proto.IMessage|null); + public currencyCodeIso4217?: (string|null); + public amount1000?: (number|Long|null); + public requestFrom?: (string|null); + public expiryTimestamp?: (number|Long|null); + public amount?: (proto.IMoney|null); + public background?: (proto.IPaymentBackground|null); + public static create(properties?: proto.Message.IRequestPaymentMessage): proto.Message.RequestPaymentMessage; + public static encode(m: proto.Message.IRequestPaymentMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.RequestPaymentMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.RequestPaymentMessage; + public static toObject(m: proto.Message.RequestPaymentMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRequestPhoneNumberMessage { + contextInfo?: (proto.IContextInfo|null); + } + + class RequestPhoneNumberMessage implements IRequestPhoneNumberMessage { + constructor(p?: proto.Message.IRequestPhoneNumberMessage); + public contextInfo?: (proto.IContextInfo|null); + public static create(properties?: proto.Message.IRequestPhoneNumberMessage): proto.Message.RequestPhoneNumberMessage; + public static encode(m: proto.Message.IRequestPhoneNumberMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.RequestPhoneNumberMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.RequestPhoneNumberMessage; + public static toObject(m: proto.Message.RequestPhoneNumberMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRequestWelcomeMessageMetadata { + localChatState?: (proto.Message.RequestWelcomeMessageMetadata.LocalChatState|null); + } + + class RequestWelcomeMessageMetadata implements IRequestWelcomeMessageMetadata { + constructor(p?: proto.Message.IRequestWelcomeMessageMetadata); + public localChatState?: (proto.Message.RequestWelcomeMessageMetadata.LocalChatState|null); + public static create(properties?: proto.Message.IRequestWelcomeMessageMetadata): proto.Message.RequestWelcomeMessageMetadata; + public static encode(m: proto.Message.IRequestWelcomeMessageMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.RequestWelcomeMessageMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.RequestWelcomeMessageMetadata; + public static toObject(m: proto.Message.RequestWelcomeMessageMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace RequestWelcomeMessageMetadata { + + enum LocalChatState { + EMPTY = 0, + NON_EMPTY = 1 + } + } + + interface IScheduledCallCreationMessage { + scheduledTimestampMs?: (number|Long|null); + callType?: (proto.Message.ScheduledCallCreationMessage.CallType|null); + title?: (string|null); + } + + class ScheduledCallCreationMessage implements IScheduledCallCreationMessage { + constructor(p?: proto.Message.IScheduledCallCreationMessage); + public scheduledTimestampMs?: (number|Long|null); + public callType?: (proto.Message.ScheduledCallCreationMessage.CallType|null); + public title?: (string|null); + public static create(properties?: proto.Message.IScheduledCallCreationMessage): proto.Message.ScheduledCallCreationMessage; + public static encode(m: proto.Message.IScheduledCallCreationMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ScheduledCallCreationMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ScheduledCallCreationMessage; + public static toObject(m: proto.Message.ScheduledCallCreationMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ScheduledCallCreationMessage { + + enum CallType { + UNKNOWN = 0, + VOICE = 1, + VIDEO = 2 + } + } + + interface IScheduledCallEditMessage { + key?: (proto.IMessageKey|null); + editType?: (proto.Message.ScheduledCallEditMessage.EditType|null); + } + + class ScheduledCallEditMessage implements IScheduledCallEditMessage { + constructor(p?: proto.Message.IScheduledCallEditMessage); + public key?: (proto.IMessageKey|null); + public editType?: (proto.Message.ScheduledCallEditMessage.EditType|null); + public static create(properties?: proto.Message.IScheduledCallEditMessage): proto.Message.ScheduledCallEditMessage; + public static encode(m: proto.Message.IScheduledCallEditMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ScheduledCallEditMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.ScheduledCallEditMessage; + public static toObject(m: proto.Message.ScheduledCallEditMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ScheduledCallEditMessage { + + enum EditType { + UNKNOWN = 0, + CANCEL = 1 + } + } + + interface ISecretEncryptedMessage { + targetMessageKey?: (proto.IMessageKey|null); + encPayload?: (Uint8Array|null); + encIv?: (Uint8Array|null); + secretEncType?: (proto.Message.SecretEncryptedMessage.SecretEncType|null); + } + + class SecretEncryptedMessage implements ISecretEncryptedMessage { + constructor(p?: proto.Message.ISecretEncryptedMessage); + public targetMessageKey?: (proto.IMessageKey|null); + public encPayload?: (Uint8Array|null); + public encIv?: (Uint8Array|null); + public secretEncType?: (proto.Message.SecretEncryptedMessage.SecretEncType|null); + public static create(properties?: proto.Message.ISecretEncryptedMessage): proto.Message.SecretEncryptedMessage; + public static encode(m: proto.Message.ISecretEncryptedMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.SecretEncryptedMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.SecretEncryptedMessage; + public static toObject(m: proto.Message.SecretEncryptedMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace SecretEncryptedMessage { + + enum SecretEncType { + UNKNOWN = 0, + EVENT_EDIT = 1, + MESSAGE_EDIT = 2 + } + } + + interface ISendPaymentMessage { + noteMessage?: (proto.IMessage|null); + requestMessageKey?: (proto.IMessageKey|null); + background?: (proto.IPaymentBackground|null); + transactionData?: (string|null); + } + + class SendPaymentMessage implements ISendPaymentMessage { + constructor(p?: proto.Message.ISendPaymentMessage); + public noteMessage?: (proto.IMessage|null); + public requestMessageKey?: (proto.IMessageKey|null); + public background?: (proto.IPaymentBackground|null); + public transactionData?: (string|null); + public static create(properties?: proto.Message.ISendPaymentMessage): proto.Message.SendPaymentMessage; + public static encode(m: proto.Message.ISendPaymentMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.SendPaymentMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.SendPaymentMessage; + public static toObject(m: proto.Message.SendPaymentMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISenderKeyDistributionMessage { + groupId?: (string|null); + axolotlSenderKeyDistributionMessage?: (Uint8Array|null); + } + + class SenderKeyDistributionMessage implements ISenderKeyDistributionMessage { + constructor(p?: proto.Message.ISenderKeyDistributionMessage); + public groupId?: (string|null); + public axolotlSenderKeyDistributionMessage?: (Uint8Array|null); + public static create(properties?: proto.Message.ISenderKeyDistributionMessage): proto.Message.SenderKeyDistributionMessage; + public static encode(m: proto.Message.ISenderKeyDistributionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.SenderKeyDistributionMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.SenderKeyDistributionMessage; + public static toObject(m: proto.Message.SenderKeyDistributionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStatusNotificationMessage { + responseMessageKey?: (proto.IMessageKey|null); + originalMessageKey?: (proto.IMessageKey|null); + type?: (proto.Message.StatusNotificationMessage.StatusNotificationType|null); + } + + class StatusNotificationMessage implements IStatusNotificationMessage { + constructor(p?: proto.Message.IStatusNotificationMessage); + public responseMessageKey?: (proto.IMessageKey|null); + public originalMessageKey?: (proto.IMessageKey|null); + public type?: (proto.Message.StatusNotificationMessage.StatusNotificationType|null); + public static create(properties?: proto.Message.IStatusNotificationMessage): proto.Message.StatusNotificationMessage; + public static encode(m: proto.Message.IStatusNotificationMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StatusNotificationMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.StatusNotificationMessage; + public static toObject(m: proto.Message.StatusNotificationMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StatusNotificationMessage { + + enum StatusNotificationType { + UNKNOWN = 0, + STATUS_ADD_YOURS = 1, + STATUS_RESHARE = 2, + STATUS_QUESTION_ANSWER_RESHARE = 3 + } + } + + interface IStatusQuestionAnswerMessage { + key?: (proto.IMessageKey|null); + text?: (string|null); + } + + class StatusQuestionAnswerMessage implements IStatusQuestionAnswerMessage { + constructor(p?: proto.Message.IStatusQuestionAnswerMessage); + public key?: (proto.IMessageKey|null); + public text?: (string|null); + public static create(properties?: proto.Message.IStatusQuestionAnswerMessage): proto.Message.StatusQuestionAnswerMessage; + public static encode(m: proto.Message.IStatusQuestionAnswerMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StatusQuestionAnswerMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.StatusQuestionAnswerMessage; + public static toObject(m: proto.Message.StatusQuestionAnswerMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStatusQuotedMessage { + type?: (proto.Message.StatusQuotedMessage.StatusQuotedMessageType|null); + text?: (string|null); + thumbnail?: (Uint8Array|null); + originalStatusId?: (proto.IMessageKey|null); + } + + class StatusQuotedMessage implements IStatusQuotedMessage { + constructor(p?: proto.Message.IStatusQuotedMessage); + public type?: (proto.Message.StatusQuotedMessage.StatusQuotedMessageType|null); + public text?: (string|null); + public thumbnail?: (Uint8Array|null); + public originalStatusId?: (proto.IMessageKey|null); + public static create(properties?: proto.Message.IStatusQuotedMessage): proto.Message.StatusQuotedMessage; + public static encode(m: proto.Message.IStatusQuotedMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StatusQuotedMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.StatusQuotedMessage; + public static toObject(m: proto.Message.StatusQuotedMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StatusQuotedMessage { + + enum StatusQuotedMessageType { + QUESTION_ANSWER = 1 + } + } + + interface IStatusStickerInteractionMessage { + key?: (proto.IMessageKey|null); + stickerKey?: (string|null); + type?: (proto.Message.StatusStickerInteractionMessage.StatusStickerType|null); + } + + class StatusStickerInteractionMessage implements IStatusStickerInteractionMessage { + constructor(p?: proto.Message.IStatusStickerInteractionMessage); + public key?: (proto.IMessageKey|null); + public stickerKey?: (string|null); + public type?: (proto.Message.StatusStickerInteractionMessage.StatusStickerType|null); + public static create(properties?: proto.Message.IStatusStickerInteractionMessage): proto.Message.StatusStickerInteractionMessage; + public static encode(m: proto.Message.IStatusStickerInteractionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StatusStickerInteractionMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.StatusStickerInteractionMessage; + public static toObject(m: proto.Message.StatusStickerInteractionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StatusStickerInteractionMessage { + + enum StatusStickerType { + UNKNOWN = 0, + REACTION = 1 + } + } + + interface IStickerMessage { + url?: (string|null); + fileSha256?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + mediaKey?: (Uint8Array|null); + mimetype?: (string|null); + height?: (number|null); + width?: (number|null); + directPath?: (string|null); + fileLength?: (number|Long|null); + mediaKeyTimestamp?: (number|Long|null); + firstFrameLength?: (number|null); + firstFrameSidecar?: (Uint8Array|null); + isAnimated?: (boolean|null); + pngThumbnail?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + stickerSentTs?: (number|Long|null); + isAvatar?: (boolean|null); + isAiSticker?: (boolean|null); + isLottie?: (boolean|null); + accessibilityLabel?: (string|null); + mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + } + + class StickerMessage implements IStickerMessage { + constructor(p?: proto.Message.IStickerMessage); + public url?: (string|null); + public fileSha256?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public mediaKey?: (Uint8Array|null); + public mimetype?: (string|null); + public height?: (number|null); + public width?: (number|null); + public directPath?: (string|null); + public fileLength?: (number|Long|null); + public mediaKeyTimestamp?: (number|Long|null); + public firstFrameLength?: (number|null); + public firstFrameSidecar?: (Uint8Array|null); + public isAnimated?: (boolean|null); + public pngThumbnail?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public stickerSentTs?: (number|Long|null); + public isAvatar?: (boolean|null); + public isAiSticker?: (boolean|null); + public isLottie?: (boolean|null); + public accessibilityLabel?: (string|null); + public mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + public static create(properties?: proto.Message.IStickerMessage): proto.Message.StickerMessage; + public static encode(m: proto.Message.IStickerMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StickerMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.StickerMessage; + public static toObject(m: proto.Message.StickerMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStickerPackMessage { + stickerPackId?: (string|null); + name?: (string|null); + publisher?: (string|null); + stickers?: (proto.Message.StickerPackMessage.ISticker[]|null); + fileLength?: (number|Long|null); + fileSha256?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + mediaKey?: (Uint8Array|null); + directPath?: (string|null); + caption?: (string|null); + contextInfo?: (proto.IContextInfo|null); + packDescription?: (string|null); + mediaKeyTimestamp?: (number|Long|null); + trayIconFileName?: (string|null); + thumbnailDirectPath?: (string|null); + thumbnailSha256?: (Uint8Array|null); + thumbnailEncSha256?: (Uint8Array|null); + thumbnailHeight?: (number|null); + thumbnailWidth?: (number|null); + imageDataHash?: (string|null); + stickerPackSize?: (number|Long|null); + stickerPackOrigin?: (proto.Message.StickerPackMessage.StickerPackOrigin|null); + } + + class StickerPackMessage implements IStickerPackMessage { + constructor(p?: proto.Message.IStickerPackMessage); + public stickerPackId?: (string|null); + public name?: (string|null); + public publisher?: (string|null); + public stickers: proto.Message.StickerPackMessage.ISticker[]; + public fileLength?: (number|Long|null); + public fileSha256?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public mediaKey?: (Uint8Array|null); + public directPath?: (string|null); + public caption?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public packDescription?: (string|null); + public mediaKeyTimestamp?: (number|Long|null); + public trayIconFileName?: (string|null); + public thumbnailDirectPath?: (string|null); + public thumbnailSha256?: (Uint8Array|null); + public thumbnailEncSha256?: (Uint8Array|null); + public thumbnailHeight?: (number|null); + public thumbnailWidth?: (number|null); + public imageDataHash?: (string|null); + public stickerPackSize?: (number|Long|null); + public stickerPackOrigin?: (proto.Message.StickerPackMessage.StickerPackOrigin|null); + public static create(properties?: proto.Message.IStickerPackMessage): proto.Message.StickerPackMessage; + public static encode(m: proto.Message.IStickerPackMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StickerPackMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.StickerPackMessage; + public static toObject(m: proto.Message.StickerPackMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StickerPackMessage { + + interface ISticker { + fileName?: (string|null); + isAnimated?: (boolean|null); + emojis?: (string[]|null); + accessibilityLabel?: (string|null); + isLottie?: (boolean|null); + mimetype?: (string|null); + } + + class Sticker implements ISticker { + constructor(p?: proto.Message.StickerPackMessage.ISticker); + public fileName?: (string|null); + public isAnimated?: (boolean|null); + public emojis: string[]; + public accessibilityLabel?: (string|null); + public isLottie?: (boolean|null); + public mimetype?: (string|null); + public static create(properties?: proto.Message.StickerPackMessage.ISticker): proto.Message.StickerPackMessage.Sticker; + public static encode(m: proto.Message.StickerPackMessage.ISticker, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StickerPackMessage.Sticker; + public static fromObject(d: { [k: string]: any }): proto.Message.StickerPackMessage.Sticker; + public static toObject(m: proto.Message.StickerPackMessage.Sticker, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum StickerPackOrigin { + FIRST_PARTY = 0, + THIRD_PARTY = 1, + USER_CREATED = 2 + } + } + + interface IStickerSyncRMRMessage { + filehash?: (string[]|null); + rmrSource?: (string|null); + requestTimestamp?: (number|Long|null); + } + + class StickerSyncRMRMessage implements IStickerSyncRMRMessage { + constructor(p?: proto.Message.IStickerSyncRMRMessage); + public filehash: string[]; + public rmrSource?: (string|null); + public requestTimestamp?: (number|Long|null); + public static create(properties?: proto.Message.IStickerSyncRMRMessage): proto.Message.StickerSyncRMRMessage; + public static encode(m: proto.Message.IStickerSyncRMRMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.StickerSyncRMRMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.StickerSyncRMRMessage; + public static toObject(m: proto.Message.StickerSyncRMRMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ITemplateButtonReplyMessage { + selectedId?: (string|null); + selectedDisplayText?: (string|null); + contextInfo?: (proto.IContextInfo|null); + selectedIndex?: (number|null); + selectedCarouselCardIndex?: (number|null); + } + + class TemplateButtonReplyMessage implements ITemplateButtonReplyMessage { + constructor(p?: proto.Message.ITemplateButtonReplyMessage); + public selectedId?: (string|null); + public selectedDisplayText?: (string|null); + public contextInfo?: (proto.IContextInfo|null); + public selectedIndex?: (number|null); + public selectedCarouselCardIndex?: (number|null); + public static create(properties?: proto.Message.ITemplateButtonReplyMessage): proto.Message.TemplateButtonReplyMessage; + public static encode(m: proto.Message.ITemplateButtonReplyMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.TemplateButtonReplyMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.TemplateButtonReplyMessage; + public static toObject(m: proto.Message.TemplateButtonReplyMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ITemplateMessage { + contextInfo?: (proto.IContextInfo|null); + hydratedTemplate?: (proto.Message.TemplateMessage.IHydratedFourRowTemplate|null); + templateId?: (string|null); + fourRowTemplate?: (proto.Message.TemplateMessage.IFourRowTemplate|null); + hydratedFourRowTemplate?: (proto.Message.TemplateMessage.IHydratedFourRowTemplate|null); + interactiveMessageTemplate?: (proto.Message.IInteractiveMessage|null); + } + + class TemplateMessage implements ITemplateMessage { + constructor(p?: proto.Message.ITemplateMessage); + public contextInfo?: (proto.IContextInfo|null); + public hydratedTemplate?: (proto.Message.TemplateMessage.IHydratedFourRowTemplate|null); + public templateId?: (string|null); + public fourRowTemplate?: (proto.Message.TemplateMessage.IFourRowTemplate|null); + public hydratedFourRowTemplate?: (proto.Message.TemplateMessage.IHydratedFourRowTemplate|null); + public interactiveMessageTemplate?: (proto.Message.IInteractiveMessage|null); + public format?: ("fourRowTemplate"|"hydratedFourRowTemplate"|"interactiveMessageTemplate"); + public static create(properties?: proto.Message.ITemplateMessage): proto.Message.TemplateMessage; + public static encode(m: proto.Message.ITemplateMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.TemplateMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.TemplateMessage; + public static toObject(m: proto.Message.TemplateMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace TemplateMessage { + + interface IFourRowTemplate { + content?: (proto.Message.IHighlyStructuredMessage|null); + footer?: (proto.Message.IHighlyStructuredMessage|null); + buttons?: (proto.ITemplateButton[]|null); + documentMessage?: (proto.Message.IDocumentMessage|null); + highlyStructuredMessage?: (proto.Message.IHighlyStructuredMessage|null); + imageMessage?: (proto.Message.IImageMessage|null); + videoMessage?: (proto.Message.IVideoMessage|null); + locationMessage?: (proto.Message.ILocationMessage|null); + } + + class FourRowTemplate implements IFourRowTemplate { + constructor(p?: proto.Message.TemplateMessage.IFourRowTemplate); + public content?: (proto.Message.IHighlyStructuredMessage|null); + public footer?: (proto.Message.IHighlyStructuredMessage|null); + public buttons: proto.ITemplateButton[]; + public documentMessage?: (proto.Message.IDocumentMessage|null); + public highlyStructuredMessage?: (proto.Message.IHighlyStructuredMessage|null); + public imageMessage?: (proto.Message.IImageMessage|null); + public videoMessage?: (proto.Message.IVideoMessage|null); + public locationMessage?: (proto.Message.ILocationMessage|null); + public title?: ("documentMessage"|"highlyStructuredMessage"|"imageMessage"|"videoMessage"|"locationMessage"); + public static create(properties?: proto.Message.TemplateMessage.IFourRowTemplate): proto.Message.TemplateMessage.FourRowTemplate; + public static encode(m: proto.Message.TemplateMessage.IFourRowTemplate, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.TemplateMessage.FourRowTemplate; + public static fromObject(d: { [k: string]: any }): proto.Message.TemplateMessage.FourRowTemplate; + public static toObject(m: proto.Message.TemplateMessage.FourRowTemplate, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IHydratedFourRowTemplate { + hydratedContentText?: (string|null); + hydratedFooterText?: (string|null); + hydratedButtons?: (proto.IHydratedTemplateButton[]|null); + templateId?: (string|null); + maskLinkedDevices?: (boolean|null); + documentMessage?: (proto.Message.IDocumentMessage|null); + hydratedTitleText?: (string|null); + imageMessage?: (proto.Message.IImageMessage|null); + videoMessage?: (proto.Message.IVideoMessage|null); + locationMessage?: (proto.Message.ILocationMessage|null); + } + + class HydratedFourRowTemplate implements IHydratedFourRowTemplate { + constructor(p?: proto.Message.TemplateMessage.IHydratedFourRowTemplate); + public hydratedContentText?: (string|null); + public hydratedFooterText?: (string|null); + public hydratedButtons: proto.IHydratedTemplateButton[]; + public templateId?: (string|null); + public maskLinkedDevices?: (boolean|null); + public documentMessage?: (proto.Message.IDocumentMessage|null); + public hydratedTitleText?: (string|null); + public imageMessage?: (proto.Message.IImageMessage|null); + public videoMessage?: (proto.Message.IVideoMessage|null); + public locationMessage?: (proto.Message.ILocationMessage|null); + public title?: ("documentMessage"|"hydratedTitleText"|"imageMessage"|"videoMessage"|"locationMessage"); + public static create(properties?: proto.Message.TemplateMessage.IHydratedFourRowTemplate): proto.Message.TemplateMessage.HydratedFourRowTemplate; + public static encode(m: proto.Message.TemplateMessage.IHydratedFourRowTemplate, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.TemplateMessage.HydratedFourRowTemplate; + public static fromObject(d: { [k: string]: any }): proto.Message.TemplateMessage.HydratedFourRowTemplate; + public static toObject(m: proto.Message.TemplateMessage.HydratedFourRowTemplate, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IURLMetadata { + fbExperimentId?: (number|null); + } + + class URLMetadata implements IURLMetadata { + constructor(p?: proto.Message.IURLMetadata); + public fbExperimentId?: (number|null); + public static create(properties?: proto.Message.IURLMetadata): proto.Message.URLMetadata; + public static encode(m: proto.Message.IURLMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.URLMetadata; + public static fromObject(d: { [k: string]: any }): proto.Message.URLMetadata; + public static toObject(m: proto.Message.URLMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IVideoEndCard { + username?: (string|null); + caption?: (string|null); + thumbnailImageUrl?: (string|null); + profilePictureUrl?: (string|null); + } + + class VideoEndCard implements IVideoEndCard { + constructor(p?: proto.Message.IVideoEndCard); + public username: string; + public caption: string; + public thumbnailImageUrl: string; + public profilePictureUrl: string; + public static create(properties?: proto.Message.IVideoEndCard): proto.Message.VideoEndCard; + public static encode(m: proto.Message.IVideoEndCard, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.VideoEndCard; + public static fromObject(d: { [k: string]: any }): proto.Message.VideoEndCard; + public static toObject(m: proto.Message.VideoEndCard, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IVideoMessage { + url?: (string|null); + mimetype?: (string|null); + fileSha256?: (Uint8Array|null); + fileLength?: (number|Long|null); + seconds?: (number|null); + mediaKey?: (Uint8Array|null); + caption?: (string|null); + gifPlayback?: (boolean|null); + height?: (number|null); + width?: (number|null); + fileEncSha256?: (Uint8Array|null); + interactiveAnnotations?: (proto.IInteractiveAnnotation[]|null); + directPath?: (string|null); + mediaKeyTimestamp?: (number|Long|null); + jpegThumbnail?: (Uint8Array|null); + contextInfo?: (proto.IContextInfo|null); + streamingSidecar?: (Uint8Array|null); + gifAttribution?: (proto.Message.VideoMessage.Attribution|null); + viewOnce?: (boolean|null); + thumbnailDirectPath?: (string|null); + thumbnailSha256?: (Uint8Array|null); + thumbnailEncSha256?: (Uint8Array|null); + staticUrl?: (string|null); + annotations?: (proto.IInteractiveAnnotation[]|null); + accessibilityLabel?: (string|null); + processedVideos?: (proto.IProcessedVideo[]|null); + externalShareFullVideoDurationInSeconds?: (number|null); + motionPhotoPresentationOffsetMs?: (number|Long|null); + metadataUrl?: (string|null); + videoSourceType?: (proto.Message.VideoMessage.VideoSourceType|null); + mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + } + + class VideoMessage implements IVideoMessage { + constructor(p?: proto.Message.IVideoMessage); + public url?: (string|null); + public mimetype?: (string|null); + public fileSha256?: (Uint8Array|null); + public fileLength?: (number|Long|null); + public seconds?: (number|null); + public mediaKey?: (Uint8Array|null); + public caption?: (string|null); + public gifPlayback?: (boolean|null); + public height?: (number|null); + public width?: (number|null); + public fileEncSha256?: (Uint8Array|null); + public interactiveAnnotations: proto.IInteractiveAnnotation[]; + public directPath?: (string|null); + public mediaKeyTimestamp?: (number|Long|null); + public jpegThumbnail?: (Uint8Array|null); + public contextInfo?: (proto.IContextInfo|null); + public streamingSidecar?: (Uint8Array|null); + public gifAttribution?: (proto.Message.VideoMessage.Attribution|null); + public viewOnce?: (boolean|null); + public thumbnailDirectPath?: (string|null); + public thumbnailSha256?: (Uint8Array|null); + public thumbnailEncSha256?: (Uint8Array|null); + public staticUrl?: (string|null); + public annotations: proto.IInteractiveAnnotation[]; + public accessibilityLabel?: (string|null); + public processedVideos: proto.IProcessedVideo[]; + public externalShareFullVideoDurationInSeconds?: (number|null); + public motionPhotoPresentationOffsetMs?: (number|Long|null); + public metadataUrl?: (string|null); + public videoSourceType?: (proto.Message.VideoMessage.VideoSourceType|null); + public mediaKeyDomain?: (proto.Message.MediaKeyDomain|null); + public static create(properties?: proto.Message.IVideoMessage): proto.Message.VideoMessage; + public static encode(m: proto.Message.IVideoMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.VideoMessage; + public static fromObject(d: { [k: string]: any }): proto.Message.VideoMessage; + public static toObject(m: proto.Message.VideoMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace VideoMessage { + + enum Attribution { + NONE = 0, + GIPHY = 1, + TENOR = 2, + KLIPY = 3 + } + + enum VideoSourceType { + USER_VIDEO = 0, + AI_GENERATED = 1 + } + } + } + + interface IMessageAddOn { + messageAddOnType?: (proto.MessageAddOn.MessageAddOnType|null); + messageAddOn?: (proto.IMessage|null); + senderTimestampMs?: (number|Long|null); + serverTimestampMs?: (number|Long|null); + status?: (proto.WebMessageInfo.Status|null); + addOnContextInfo?: (proto.IMessageAddOnContextInfo|null); + messageAddOnKey?: (proto.IMessageKey|null); + legacyMessage?: (proto.ILegacyMessage|null); + } + + class MessageAddOn implements IMessageAddOn { + constructor(p?: proto.IMessageAddOn); + public messageAddOnType?: (proto.MessageAddOn.MessageAddOnType|null); + public messageAddOn?: (proto.IMessage|null); + public senderTimestampMs?: (number|Long|null); + public serverTimestampMs?: (number|Long|null); + public status?: (proto.WebMessageInfo.Status|null); + public addOnContextInfo?: (proto.IMessageAddOnContextInfo|null); + public messageAddOnKey?: (proto.IMessageKey|null); + public legacyMessage?: (proto.ILegacyMessage|null); + public static create(properties?: proto.IMessageAddOn): proto.MessageAddOn; + public static encode(m: proto.IMessageAddOn, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MessageAddOn; + public static fromObject(d: { [k: string]: any }): proto.MessageAddOn; + public static toObject(m: proto.MessageAddOn, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MessageAddOn { + + enum MessageAddOnType { + UNDEFINED = 0, + REACTION = 1, + EVENT_RESPONSE = 2, + POLL_UPDATE = 3, + PIN_IN_CHAT = 4 + } + } + + interface IMessageAddOnContextInfo { + messageAddOnDurationInSecs?: (number|null); + messageAddOnExpiryType?: (proto.MessageContextInfo.MessageAddonExpiryType|null); + } + + class MessageAddOnContextInfo implements IMessageAddOnContextInfo { + constructor(p?: proto.IMessageAddOnContextInfo); + public messageAddOnDurationInSecs?: (number|null); + public messageAddOnExpiryType?: (proto.MessageContextInfo.MessageAddonExpiryType|null); + public static create(properties?: proto.IMessageAddOnContextInfo): proto.MessageAddOnContextInfo; + public static encode(m: proto.IMessageAddOnContextInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MessageAddOnContextInfo; + public static fromObject(d: { [k: string]: any }): proto.MessageAddOnContextInfo; + public static toObject(m: proto.MessageAddOnContextInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMessageAssociation { + associationType?: (proto.MessageAssociation.AssociationType|null); + parentMessageKey?: (proto.IMessageKey|null); + messageIndex?: (number|null); + } + + class MessageAssociation implements IMessageAssociation { + constructor(p?: proto.IMessageAssociation); + public associationType?: (proto.MessageAssociation.AssociationType|null); + public parentMessageKey?: (proto.IMessageKey|null); + public messageIndex?: (number|null); + public static create(properties?: proto.IMessageAssociation): proto.MessageAssociation; + public static encode(m: proto.IMessageAssociation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MessageAssociation; + public static fromObject(d: { [k: string]: any }): proto.MessageAssociation; + public static toObject(m: proto.MessageAssociation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MessageAssociation { + + enum AssociationType { + UNKNOWN = 0, + MEDIA_ALBUM = 1, + BOT_PLUGIN = 2, + EVENT_COVER_IMAGE = 3, + STATUS_POLL = 4, + HD_VIDEO_DUAL_UPLOAD = 5, + STATUS_EXTERNAL_RESHARE = 6, + MEDIA_POLL = 7, + STATUS_ADD_YOURS = 8, + STATUS_NOTIFICATION = 9, + HD_IMAGE_DUAL_UPLOAD = 10, + STICKER_ANNOTATION = 11, + MOTION_PHOTO = 12, + STATUS_LINK_ACTION = 13, + VIEW_ALL_REPLIES = 14, + STATUS_ADD_YOURS_AI_IMAGINE = 15, + STATUS_QUESTION = 16, + STATUS_ADD_YOURS_DIWALI = 17, + STATUS_REACTION = 18, + HEVC_VIDEO_DUAL_UPLOAD = 19 + } + } + + interface IMessageContextInfo { + deviceListMetadata?: (proto.IDeviceListMetadata|null); + deviceListMetadataVersion?: (number|null); + messageSecret?: (Uint8Array|null); + paddingBytes?: (Uint8Array|null); + messageAddOnDurationInSecs?: (number|null); + botMessageSecret?: (Uint8Array|null); + botMetadata?: (proto.IBotMetadata|null); + reportingTokenVersion?: (number|null); + messageAddOnExpiryType?: (proto.MessageContextInfo.MessageAddonExpiryType|null); + messageAssociation?: (proto.IMessageAssociation|null); + capiCreatedGroup?: (boolean|null); + supportPayload?: (string|null); + limitSharing?: (proto.ILimitSharing|null); + limitSharingV2?: (proto.ILimitSharing|null); + threadId?: (proto.IThreadID[]|null); + weblinkRenderConfig?: (proto.WebLinkRenderConfig|null); + } + + class MessageContextInfo implements IMessageContextInfo { + constructor(p?: proto.IMessageContextInfo); + public deviceListMetadata?: (proto.IDeviceListMetadata|null); + public deviceListMetadataVersion?: (number|null); + public messageSecret?: (Uint8Array|null); + public paddingBytes?: (Uint8Array|null); + public messageAddOnDurationInSecs?: (number|null); + public botMessageSecret?: (Uint8Array|null); + public botMetadata?: (proto.IBotMetadata|null); + public reportingTokenVersion?: (number|null); + public messageAddOnExpiryType?: (proto.MessageContextInfo.MessageAddonExpiryType|null); + public messageAssociation?: (proto.IMessageAssociation|null); + public capiCreatedGroup?: (boolean|null); + public supportPayload?: (string|null); + public limitSharing?: (proto.ILimitSharing|null); + public limitSharingV2?: (proto.ILimitSharing|null); + public threadId: proto.IThreadID[]; + public weblinkRenderConfig?: (proto.WebLinkRenderConfig|null); + public static create(properties?: proto.IMessageContextInfo): proto.MessageContextInfo; + public static encode(m: proto.IMessageContextInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MessageContextInfo; + public static fromObject(d: { [k: string]: any }): proto.MessageContextInfo; + public static toObject(m: proto.MessageContextInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MessageContextInfo { + + enum MessageAddonExpiryType { + STATIC = 1, + DEPENDENT_ON_PARENT = 2 + } + } + + interface IMessageKey { + remoteJid?: (string|null); + fromMe?: (boolean|null); + id?: (string|null); + participant?: (string|null); + } + + class MessageKey implements IMessageKey { + constructor(p?: proto.IMessageKey); + public remoteJid?: (string|null); + public fromMe?: (boolean|null); + public id?: (string|null); + public participant?: (string|null); + public static create(properties?: proto.IMessageKey): proto.MessageKey; + public static encode(m: proto.IMessageKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MessageKey; + public static fromObject(d: { [k: string]: any }): proto.MessageKey; + public static toObject(m: proto.MessageKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMessageSecretMessage { + version?: (number|null); + encIv?: (Uint8Array|null); + encPayload?: (Uint8Array|null); + } + + class MessageSecretMessage implements IMessageSecretMessage { + constructor(p?: proto.IMessageSecretMessage); + public version?: (number|null); + public encIv?: (Uint8Array|null); + public encPayload?: (Uint8Array|null); + public static create(properties?: proto.IMessageSecretMessage): proto.MessageSecretMessage; + public static encode(m: proto.IMessageSecretMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MessageSecretMessage; + public static fromObject(d: { [k: string]: any }): proto.MessageSecretMessage; + public static toObject(m: proto.MessageSecretMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMoney { + value?: (number|Long|null); + offset?: (number|null); + currencyCode?: (string|null); + } + + class Money implements IMoney { + constructor(p?: proto.IMoney); + public value?: (number|Long|null); + public offset?: (number|null); + public currencyCode?: (string|null); + public static create(properties?: proto.IMoney): proto.Money; + public static encode(m: proto.IMoney, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Money; + public static fromObject(d: { [k: string]: any }): proto.Money; + public static toObject(m: proto.Money, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMsgOpaqueData { + body?: (string|null); + caption?: (string|null); + lng?: (number|null); + isLive?: (boolean|null); + lat?: (number|null); + paymentAmount1000?: (number|null); + paymentNoteMsgBody?: (string|null); + matchedText?: (string|null); + title?: (string|null); + description?: (string|null); + futureproofBuffer?: (Uint8Array|null); + clientUrl?: (string|null); + loc?: (string|null); + pollName?: (string|null); + pollOptions?: (proto.MsgOpaqueData.IPollOption[]|null); + pollSelectableOptionsCount?: (number|null); + messageSecret?: (Uint8Array|null); + originalSelfAuthor?: (string|null); + senderTimestampMs?: (number|Long|null); + pollUpdateParentKey?: (string|null); + encPollVote?: (proto.IPollEncValue|null); + isSentCagPollCreation?: (boolean|null); + pollContentType?: (proto.MsgOpaqueData.PollContentType|null); + pollType?: (proto.MsgOpaqueData.PollType|null); + correctOptionIndex?: (number|null); + pollVotesSnapshot?: (proto.MsgOpaqueData.IPollVotesSnapshot|null); + encReactionTargetMessageKey?: (string|null); + encReactionEncPayload?: (Uint8Array|null); + encReactionEncIv?: (Uint8Array|null); + botMessageSecret?: (Uint8Array|null); + targetMessageKey?: (string|null); + encPayload?: (Uint8Array|null); + encIv?: (Uint8Array|null); + eventName?: (string|null); + isEventCanceled?: (boolean|null); + eventDescription?: (string|null); + eventJoinLink?: (string|null); + eventStartTime?: (number|Long|null); + eventLocation?: (proto.MsgOpaqueData.IEventLocation|null); + eventEndTime?: (number|Long|null); + eventIsScheduledCall?: (boolean|null); + eventExtraGuestsAllowed?: (boolean|null); + plainProtobufBytes?: (Uint8Array|null); + } + + class MsgOpaqueData implements IMsgOpaqueData { + constructor(p?: proto.IMsgOpaqueData); + public body?: (string|null); + public caption?: (string|null); + public lng?: (number|null); + public isLive?: (boolean|null); + public lat?: (number|null); + public paymentAmount1000?: (number|null); + public paymentNoteMsgBody?: (string|null); + public matchedText?: (string|null); + public title?: (string|null); + public description?: (string|null); + public futureproofBuffer?: (Uint8Array|null); + public clientUrl?: (string|null); + public loc?: (string|null); + public pollName?: (string|null); + public pollOptions: proto.MsgOpaqueData.IPollOption[]; + public pollSelectableOptionsCount?: (number|null); + public messageSecret?: (Uint8Array|null); + public originalSelfAuthor?: (string|null); + public senderTimestampMs?: (number|Long|null); + public pollUpdateParentKey?: (string|null); + public encPollVote?: (proto.IPollEncValue|null); + public isSentCagPollCreation?: (boolean|null); + public pollContentType?: (proto.MsgOpaqueData.PollContentType|null); + public pollType?: (proto.MsgOpaqueData.PollType|null); + public correctOptionIndex?: (number|null); + public pollVotesSnapshot?: (proto.MsgOpaqueData.IPollVotesSnapshot|null); + public encReactionTargetMessageKey?: (string|null); + public encReactionEncPayload?: (Uint8Array|null); + public encReactionEncIv?: (Uint8Array|null); + public botMessageSecret?: (Uint8Array|null); + public targetMessageKey?: (string|null); + public encPayload?: (Uint8Array|null); + public encIv?: (Uint8Array|null); + public eventName?: (string|null); + public isEventCanceled?: (boolean|null); + public eventDescription?: (string|null); + public eventJoinLink?: (string|null); + public eventStartTime?: (number|Long|null); + public eventLocation?: (proto.MsgOpaqueData.IEventLocation|null); + public eventEndTime?: (number|Long|null); + public eventIsScheduledCall?: (boolean|null); + public eventExtraGuestsAllowed?: (boolean|null); + public plainProtobufBytes?: (Uint8Array|null); + public static create(properties?: proto.IMsgOpaqueData): proto.MsgOpaqueData; + public static encode(m: proto.IMsgOpaqueData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MsgOpaqueData; + public static fromObject(d: { [k: string]: any }): proto.MsgOpaqueData; + public static toObject(m: proto.MsgOpaqueData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MsgOpaqueData { + + interface IEventLocation { + degreesLatitude?: (number|null); + degreesLongitude?: (number|null); + name?: (string|null); + address?: (string|null); + url?: (string|null); + jpegThumbnail?: (Uint8Array|null); + } + + class EventLocation implements IEventLocation { + constructor(p?: proto.MsgOpaqueData.IEventLocation); + public degreesLatitude?: (number|null); + public degreesLongitude?: (number|null); + public name?: (string|null); + public address?: (string|null); + public url?: (string|null); + public jpegThumbnail?: (Uint8Array|null); + public static create(properties?: proto.MsgOpaqueData.IEventLocation): proto.MsgOpaqueData.EventLocation; + public static encode(m: proto.MsgOpaqueData.IEventLocation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MsgOpaqueData.EventLocation; + public static fromObject(d: { [k: string]: any }): proto.MsgOpaqueData.EventLocation; + public static toObject(m: proto.MsgOpaqueData.EventLocation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum PollContentType { + UNKNOWN = 0, + TEXT = 1, + IMAGE = 2 + } + + interface IPollOption { + name?: (string|null); + hash?: (string|null); + } + + class PollOption implements IPollOption { + constructor(p?: proto.MsgOpaqueData.IPollOption); + public name?: (string|null); + public hash?: (string|null); + public static create(properties?: proto.MsgOpaqueData.IPollOption): proto.MsgOpaqueData.PollOption; + public static encode(m: proto.MsgOpaqueData.IPollOption, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MsgOpaqueData.PollOption; + public static fromObject(d: { [k: string]: any }): proto.MsgOpaqueData.PollOption; + public static toObject(m: proto.MsgOpaqueData.PollOption, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum PollType { + POLL = 0, + QUIZ = 1 + } + + interface IPollVoteSnapshot { + option?: (proto.MsgOpaqueData.IPollOption|null); + optionVoteCount?: (number|null); + } + + class PollVoteSnapshot implements IPollVoteSnapshot { + constructor(p?: proto.MsgOpaqueData.IPollVoteSnapshot); + public option?: (proto.MsgOpaqueData.IPollOption|null); + public optionVoteCount?: (number|null); + public static create(properties?: proto.MsgOpaqueData.IPollVoteSnapshot): proto.MsgOpaqueData.PollVoteSnapshot; + public static encode(m: proto.MsgOpaqueData.IPollVoteSnapshot, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MsgOpaqueData.PollVoteSnapshot; + public static fromObject(d: { [k: string]: any }): proto.MsgOpaqueData.PollVoteSnapshot; + public static toObject(m: proto.MsgOpaqueData.PollVoteSnapshot, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPollVotesSnapshot { + pollVotes?: (proto.MsgOpaqueData.IPollVoteSnapshot[]|null); + } + + class PollVotesSnapshot implements IPollVotesSnapshot { + constructor(p?: proto.MsgOpaqueData.IPollVotesSnapshot); + public pollVotes: proto.MsgOpaqueData.IPollVoteSnapshot[]; + public static create(properties?: proto.MsgOpaqueData.IPollVotesSnapshot): proto.MsgOpaqueData.PollVotesSnapshot; + public static encode(m: proto.MsgOpaqueData.IPollVotesSnapshot, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MsgOpaqueData.PollVotesSnapshot; + public static fromObject(d: { [k: string]: any }): proto.MsgOpaqueData.PollVotesSnapshot; + public static toObject(m: proto.MsgOpaqueData.PollVotesSnapshot, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IMsgRowOpaqueData { + currentMsg?: (proto.IMsgOpaqueData|null); + quotedMsg?: (proto.IMsgOpaqueData|null); + } + + class MsgRowOpaqueData implements IMsgRowOpaqueData { + constructor(p?: proto.IMsgRowOpaqueData); + public currentMsg?: (proto.IMsgOpaqueData|null); + public quotedMsg?: (proto.IMsgOpaqueData|null); + public static create(properties?: proto.IMsgRowOpaqueData): proto.MsgRowOpaqueData; + public static encode(m: proto.IMsgRowOpaqueData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.MsgRowOpaqueData; + public static fromObject(d: { [k: string]: any }): proto.MsgRowOpaqueData; + public static toObject(m: proto.MsgRowOpaqueData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum MutationProps { + STAR_ACTION = 2, + CONTACT_ACTION = 3, + MUTE_ACTION = 4, + PIN_ACTION = 5, + SECURITY_NOTIFICATION_SETTING = 6, + PUSH_NAME_SETTING = 7, + QUICK_REPLY_ACTION = 8, + RECENT_EMOJI_WEIGHTS_ACTION = 11, + LABEL_MESSAGE_ACTION = 13, + LABEL_EDIT_ACTION = 14, + LABEL_ASSOCIATION_ACTION = 15, + LOCALE_SETTING = 16, + ARCHIVE_CHAT_ACTION = 17, + DELETE_MESSAGE_FOR_ME_ACTION = 18, + KEY_EXPIRATION = 19, + MARK_CHAT_AS_READ_ACTION = 20, + CLEAR_CHAT_ACTION = 21, + DELETE_CHAT_ACTION = 22, + UNARCHIVE_CHATS_SETTING = 23, + PRIMARY_FEATURE = 24, + ANDROID_UNSUPPORTED_ACTIONS = 26, + AGENT_ACTION = 27, + SUBSCRIPTION_ACTION = 28, + USER_STATUS_MUTE_ACTION = 29, + TIME_FORMAT_ACTION = 30, + NUX_ACTION = 31, + PRIMARY_VERSION_ACTION = 32, + STICKER_ACTION = 33, + REMOVE_RECENT_STICKER_ACTION = 34, + CHAT_ASSIGNMENT = 35, + CHAT_ASSIGNMENT_OPENED_STATUS = 36, + PN_FOR_LID_CHAT_ACTION = 37, + MARKETING_MESSAGE_ACTION = 38, + MARKETING_MESSAGE_BROADCAST_ACTION = 39, + EXTERNAL_WEB_BETA_ACTION = 40, + PRIVACY_SETTING_RELAY_ALL_CALLS = 41, + CALL_LOG_ACTION = 42, + UGC_BOT = 43, + STATUS_PRIVACY = 44, + BOT_WELCOME_REQUEST_ACTION = 45, + DELETE_INDIVIDUAL_CALL_LOG = 46, + LABEL_REORDERING_ACTION = 47, + PAYMENT_INFO_ACTION = 48, + CUSTOM_PAYMENT_METHODS_ACTION = 49, + LOCK_CHAT_ACTION = 50, + CHAT_LOCK_SETTINGS = 51, + WAMO_USER_IDENTIFIER_ACTION = 52, + PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION = 53, + DEVICE_CAPABILITIES = 54, + NOTE_EDIT_ACTION = 55, + FAVORITES_ACTION = 56, + MERCHANT_PAYMENT_PARTNER_ACTION = 57, + WAFFLE_ACCOUNT_LINK_STATE_ACTION = 58, + USERNAME_CHAT_START_MODE = 59, + NOTIFICATION_ACTIVITY_SETTING_ACTION = 60, + LID_CONTACT_ACTION = 61, + CTWA_PER_CUSTOMER_DATA_SHARING_ACTION = 62, + PAYMENT_TOS_ACTION = 63, + PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION = 64, + BUSINESS_BROADCAST_ASSOCIATION_ACTION = 65, + DETECTED_OUTCOMES_STATUS_ACTION = 66, + MAIBA_AI_FEATURES_CONTROL_ACTION = 68, + BUSINESS_BROADCAST_LIST_ACTION = 69, + MUSIC_USER_ID_ACTION = 70, + STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION = 71, + AVATAR_UPDATED_ACTION = 72, + GALAXY_FLOW_ACTION = 73, + PRIVATE_PROCESSING_SETTING_ACTION = 74, + NEWSLETTER_SAVED_INTERESTS_ACTION = 75, + AI_THREAD_RENAME_ACTION = 76, + INTERACTIVE_MESSAGE_ACTION = 77, + SHARE_OWN_PN = 10001, + BUSINESS_BROADCAST_ACTION = 10002 + } + + interface INoiseCertificate { + details?: (Uint8Array|null); + signature?: (Uint8Array|null); + } + + class NoiseCertificate implements INoiseCertificate { + constructor(p?: proto.INoiseCertificate); + public details?: (Uint8Array|null); + public signature?: (Uint8Array|null); + public static create(properties?: proto.INoiseCertificate): proto.NoiseCertificate; + public static encode(m: proto.INoiseCertificate, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.NoiseCertificate; + public static fromObject(d: { [k: string]: any }): proto.NoiseCertificate; + public static toObject(m: proto.NoiseCertificate, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace NoiseCertificate { + + interface IDetails { + serial?: (number|null); + issuer?: (string|null); + expires?: (number|Long|null); + subject?: (string|null); + key?: (Uint8Array|null); + } + + class Details implements IDetails { + constructor(p?: proto.NoiseCertificate.IDetails); + public serial?: (number|null); + public issuer?: (string|null); + public expires?: (number|Long|null); + public subject?: (string|null); + public key?: (Uint8Array|null); + public static create(properties?: proto.NoiseCertificate.IDetails): proto.NoiseCertificate.Details; + public static encode(m: proto.NoiseCertificate.IDetails, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.NoiseCertificate.Details; + public static fromObject(d: { [k: string]: any }): proto.NoiseCertificate.Details; + public static toObject(m: proto.NoiseCertificate.Details, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface INotificationMessageInfo { + key?: (proto.IMessageKey|null); + message?: (proto.IMessage|null); + messageTimestamp?: (number|Long|null); + participant?: (string|null); + } + + class NotificationMessageInfo implements INotificationMessageInfo { + constructor(p?: proto.INotificationMessageInfo); + public key?: (proto.IMessageKey|null); + public message?: (proto.IMessage|null); + public messageTimestamp?: (number|Long|null); + public participant?: (string|null); + public static create(properties?: proto.INotificationMessageInfo): proto.NotificationMessageInfo; + public static encode(m: proto.INotificationMessageInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.NotificationMessageInfo; + public static fromObject(d: { [k: string]: any }): proto.NotificationMessageInfo; + public static toObject(m: proto.NotificationMessageInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface INotificationSettings { + messageVibrate?: (string|null); + messagePopup?: (string|null); + messageLight?: (string|null); + lowPriorityNotifications?: (boolean|null); + reactionsMuted?: (boolean|null); + callVibrate?: (string|null); + } + + class NotificationSettings implements INotificationSettings { + constructor(p?: proto.INotificationSettings); + public messageVibrate?: (string|null); + public messagePopup?: (string|null); + public messageLight?: (string|null); + public lowPriorityNotifications?: (boolean|null); + public reactionsMuted?: (boolean|null); + public callVibrate?: (string|null); + public static create(properties?: proto.INotificationSettings): proto.NotificationSettings; + public static encode(m: proto.INotificationSettings, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.NotificationSettings; + public static fromObject(d: { [k: string]: any }): proto.NotificationSettings; + public static toObject(m: proto.NotificationSettings, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPairingRequest { + companionPublicKey?: (Uint8Array|null); + companionIdentityKey?: (Uint8Array|null); + advSecret?: (Uint8Array|null); + } + + class PairingRequest implements IPairingRequest { + constructor(p?: proto.IPairingRequest); + public companionPublicKey?: (Uint8Array|null); + public companionIdentityKey?: (Uint8Array|null); + public advSecret?: (Uint8Array|null); + public static create(properties?: proto.IPairingRequest): proto.PairingRequest; + public static encode(m: proto.IPairingRequest, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PairingRequest; + public static fromObject(d: { [k: string]: any }): proto.PairingRequest; + public static toObject(m: proto.PairingRequest, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPastParticipant { + userJid?: (string|null); + leaveReason?: (proto.PastParticipant.LeaveReason|null); + leaveTs?: (number|Long|null); + } + + class PastParticipant implements IPastParticipant { + constructor(p?: proto.IPastParticipant); + public userJid?: (string|null); + public leaveReason?: (proto.PastParticipant.LeaveReason|null); + public leaveTs?: (number|Long|null); + public static create(properties?: proto.IPastParticipant): proto.PastParticipant; + public static encode(m: proto.IPastParticipant, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PastParticipant; + public static fromObject(d: { [k: string]: any }): proto.PastParticipant; + public static toObject(m: proto.PastParticipant, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PastParticipant { + + enum LeaveReason { + LEFT = 0, + REMOVED = 1 + } + } + + interface IPastParticipants { + groupJid?: (string|null); + pastParticipants?: (proto.IPastParticipant[]|null); + } + + class PastParticipants implements IPastParticipants { + constructor(p?: proto.IPastParticipants); + public groupJid?: (string|null); + public pastParticipants: proto.IPastParticipant[]; + public static create(properties?: proto.IPastParticipants): proto.PastParticipants; + public static encode(m: proto.IPastParticipants, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PastParticipants; + public static fromObject(d: { [k: string]: any }): proto.PastParticipants; + public static toObject(m: proto.PastParticipants, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPatchDebugData { + currentLthash?: (Uint8Array|null); + newLthash?: (Uint8Array|null); + patchVersion?: (Uint8Array|null); + collectionName?: (Uint8Array|null); + firstFourBytesFromAHashOfSnapshotMacKey?: (Uint8Array|null); + newLthashSubtract?: (Uint8Array|null); + numberAdd?: (number|null); + numberRemove?: (number|null); + numberOverride?: (number|null); + senderPlatform?: (proto.PatchDebugData.Platform|null); + isSenderPrimary?: (boolean|null); + } + + class PatchDebugData implements IPatchDebugData { + constructor(p?: proto.IPatchDebugData); + public currentLthash?: (Uint8Array|null); + public newLthash?: (Uint8Array|null); + public patchVersion?: (Uint8Array|null); + public collectionName?: (Uint8Array|null); + public firstFourBytesFromAHashOfSnapshotMacKey?: (Uint8Array|null); + public newLthashSubtract?: (Uint8Array|null); + public numberAdd?: (number|null); + public numberRemove?: (number|null); + public numberOverride?: (number|null); + public senderPlatform?: (proto.PatchDebugData.Platform|null); + public isSenderPrimary?: (boolean|null); + public static create(properties?: proto.IPatchDebugData): proto.PatchDebugData; + public static encode(m: proto.IPatchDebugData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PatchDebugData; + public static fromObject(d: { [k: string]: any }): proto.PatchDebugData; + public static toObject(m: proto.PatchDebugData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PatchDebugData { + + enum Platform { + ANDROID = 0, + SMBA = 1, + IPHONE = 2, + SMBI = 3, + WEB = 4, + UWP = 5, + DARWIN = 6, + IPAD = 7, + WEAROS = 8, + WASG = 9, + WEARM = 10, + CAPI = 11 + } + } + + interface IPaymentBackground { + id?: (string|null); + fileLength?: (number|Long|null); + width?: (number|null); + height?: (number|null); + mimetype?: (string|null); + placeholderArgb?: (number|null); + textArgb?: (number|null); + subtextArgb?: (number|null); + mediaData?: (proto.PaymentBackground.IMediaData|null); + type?: (proto.PaymentBackground.Type|null); + } + + class PaymentBackground implements IPaymentBackground { + constructor(p?: proto.IPaymentBackground); + public id?: (string|null); + public fileLength?: (number|Long|null); + public width?: (number|null); + public height?: (number|null); + public mimetype?: (string|null); + public placeholderArgb?: (number|null); + public textArgb?: (number|null); + public subtextArgb?: (number|null); + public mediaData?: (proto.PaymentBackground.IMediaData|null); + public type?: (proto.PaymentBackground.Type|null); + public static create(properties?: proto.IPaymentBackground): proto.PaymentBackground; + public static encode(m: proto.IPaymentBackground, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PaymentBackground; + public static fromObject(d: { [k: string]: any }): proto.PaymentBackground; + public static toObject(m: proto.PaymentBackground, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PaymentBackground { + + interface IMediaData { + mediaKey?: (Uint8Array|null); + mediaKeyTimestamp?: (number|Long|null); + fileSha256?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + directPath?: (string|null); + } + + class MediaData implements IMediaData { + constructor(p?: proto.PaymentBackground.IMediaData); + public mediaKey?: (Uint8Array|null); + public mediaKeyTimestamp?: (number|Long|null); + public fileSha256?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public directPath?: (string|null); + public static create(properties?: proto.PaymentBackground.IMediaData): proto.PaymentBackground.MediaData; + public static encode(m: proto.PaymentBackground.IMediaData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PaymentBackground.MediaData; + public static fromObject(d: { [k: string]: any }): proto.PaymentBackground.MediaData; + public static toObject(m: proto.PaymentBackground.MediaData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum Type { + UNKNOWN = 0, + DEFAULT = 1 + } + } + + interface IPaymentInfo { + currencyDeprecated?: (proto.PaymentInfo.Currency|null); + amount1000?: (number|Long|null); + receiverJid?: (string|null); + status?: (proto.PaymentInfo.Status|null); + transactionTimestamp?: (number|Long|null); + requestMessageKey?: (proto.IMessageKey|null); + expiryTimestamp?: (number|Long|null); + futureproofed?: (boolean|null); + currency?: (string|null); + txnStatus?: (proto.PaymentInfo.TxnStatus|null); + useNoviFiatFormat?: (boolean|null); + primaryAmount?: (proto.IMoney|null); + exchangeAmount?: (proto.IMoney|null); + } + + class PaymentInfo implements IPaymentInfo { + constructor(p?: proto.IPaymentInfo); + public currencyDeprecated?: (proto.PaymentInfo.Currency|null); + public amount1000?: (number|Long|null); + public receiverJid?: (string|null); + public status?: (proto.PaymentInfo.Status|null); + public transactionTimestamp?: (number|Long|null); + public requestMessageKey?: (proto.IMessageKey|null); + public expiryTimestamp?: (number|Long|null); + public futureproofed?: (boolean|null); + public currency?: (string|null); + public txnStatus?: (proto.PaymentInfo.TxnStatus|null); + public useNoviFiatFormat?: (boolean|null); + public primaryAmount?: (proto.IMoney|null); + public exchangeAmount?: (proto.IMoney|null); + public static create(properties?: proto.IPaymentInfo): proto.PaymentInfo; + public static encode(m: proto.IPaymentInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PaymentInfo; + public static fromObject(d: { [k: string]: any }): proto.PaymentInfo; + public static toObject(m: proto.PaymentInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PaymentInfo { + + enum Currency { + UNKNOWN_CURRENCY = 0, + INR = 1 + } + + enum Status { + UNKNOWN_STATUS = 0, + PROCESSING = 1, + SENT = 2, + NEED_TO_ACCEPT = 3, + COMPLETE = 4, + COULD_NOT_COMPLETE = 5, + REFUNDED = 6, + EXPIRED = 7, + REJECTED = 8, + CANCELLED = 9, + WAITING_FOR_PAYER = 10, + WAITING = 11 + } + + enum TxnStatus { + UNKNOWN = 0, + PENDING_SETUP = 1, + PENDING_RECEIVER_SETUP = 2, + INIT = 3, + SUCCESS = 4, + COMPLETED = 5, + FAILED = 6, + FAILED_RISK = 7, + FAILED_PROCESSING = 8, + FAILED_RECEIVER_PROCESSING = 9, + FAILED_DA = 10, + FAILED_DA_FINAL = 11, + REFUNDED_TXN = 12, + REFUND_FAILED = 13, + REFUND_FAILED_PROCESSING = 14, + REFUND_FAILED_DA = 15, + EXPIRED_TXN = 16, + AUTH_CANCELED = 17, + AUTH_CANCEL_FAILED_PROCESSING = 18, + AUTH_CANCEL_FAILED = 19, + COLLECT_INIT = 20, + COLLECT_SUCCESS = 21, + COLLECT_FAILED = 22, + COLLECT_FAILED_RISK = 23, + COLLECT_REJECTED = 24, + COLLECT_EXPIRED = 25, + COLLECT_CANCELED = 26, + COLLECT_CANCELLING = 27, + IN_REVIEW = 28, + REVERSAL_SUCCESS = 29, + REVERSAL_PENDING = 30, + REFUND_PENDING = 31 + } + } + + interface IPhoneNumberToLIDMapping { + pnJid?: (string|null); + lidJid?: (string|null); + } + + class PhoneNumberToLIDMapping implements IPhoneNumberToLIDMapping { + constructor(p?: proto.IPhoneNumberToLIDMapping); + public pnJid?: (string|null); + public lidJid?: (string|null); + public static create(properties?: proto.IPhoneNumberToLIDMapping): proto.PhoneNumberToLIDMapping; + public static encode(m: proto.IPhoneNumberToLIDMapping, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PhoneNumberToLIDMapping; + public static fromObject(d: { [k: string]: any }): proto.PhoneNumberToLIDMapping; + public static toObject(m: proto.PhoneNumberToLIDMapping, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPhotoChange { + oldPhoto?: (Uint8Array|null); + newPhoto?: (Uint8Array|null); + newPhotoId?: (number|null); + } + + class PhotoChange implements IPhotoChange { + constructor(p?: proto.IPhotoChange); + public oldPhoto?: (Uint8Array|null); + public newPhoto?: (Uint8Array|null); + public newPhotoId?: (number|null); + public static create(properties?: proto.IPhotoChange): proto.PhotoChange; + public static encode(m: proto.IPhotoChange, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PhotoChange; + public static fromObject(d: { [k: string]: any }): proto.PhotoChange; + public static toObject(m: proto.PhotoChange, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPinInChat { + type?: (proto.PinInChat.Type|null); + key?: (proto.IMessageKey|null); + senderTimestampMs?: (number|Long|null); + serverTimestampMs?: (number|Long|null); + messageAddOnContextInfo?: (proto.IMessageAddOnContextInfo|null); + } + + class PinInChat implements IPinInChat { + constructor(p?: proto.IPinInChat); + public type?: (proto.PinInChat.Type|null); + public key?: (proto.IMessageKey|null); + public senderTimestampMs?: (number|Long|null); + public serverTimestampMs?: (number|Long|null); + public messageAddOnContextInfo?: (proto.IMessageAddOnContextInfo|null); + public static create(properties?: proto.IPinInChat): proto.PinInChat; + public static encode(m: proto.IPinInChat, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PinInChat; + public static fromObject(d: { [k: string]: any }): proto.PinInChat; + public static toObject(m: proto.PinInChat, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PinInChat { + + enum Type { + UNKNOWN_TYPE = 0, + PIN_FOR_ALL = 1, + UNPIN_FOR_ALL = 2 + } + } + + interface IPoint { + xDeprecated?: (number|null); + yDeprecated?: (number|null); + x?: (number|null); + y?: (number|null); + } + + class Point implements IPoint { + constructor(p?: proto.IPoint); + public xDeprecated?: (number|null); + public yDeprecated?: (number|null); + public x?: (number|null); + public y?: (number|null); + public static create(properties?: proto.IPoint): proto.Point; + public static encode(m: proto.IPoint, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Point; + public static fromObject(d: { [k: string]: any }): proto.Point; + public static toObject(m: proto.Point, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPollAdditionalMetadata { + pollInvalidated?: (boolean|null); + } + + class PollAdditionalMetadata implements IPollAdditionalMetadata { + constructor(p?: proto.IPollAdditionalMetadata); + public pollInvalidated?: (boolean|null); + public static create(properties?: proto.IPollAdditionalMetadata): proto.PollAdditionalMetadata; + public static encode(m: proto.IPollAdditionalMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PollAdditionalMetadata; + public static fromObject(d: { [k: string]: any }): proto.PollAdditionalMetadata; + public static toObject(m: proto.PollAdditionalMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPollEncValue { + encPayload?: (Uint8Array|null); + encIv?: (Uint8Array|null); + } + + class PollEncValue implements IPollEncValue { + constructor(p?: proto.IPollEncValue); + public encPayload?: (Uint8Array|null); + public encIv?: (Uint8Array|null); + public static create(properties?: proto.IPollEncValue): proto.PollEncValue; + public static encode(m: proto.IPollEncValue, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PollEncValue; + public static fromObject(d: { [k: string]: any }): proto.PollEncValue; + public static toObject(m: proto.PollEncValue, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPollUpdate { + pollUpdateMessageKey?: (proto.IMessageKey|null); + vote?: (proto.Message.IPollVoteMessage|null); + senderTimestampMs?: (number|Long|null); + serverTimestampMs?: (number|Long|null); + unread?: (boolean|null); + } + + class PollUpdate implements IPollUpdate { + constructor(p?: proto.IPollUpdate); + public pollUpdateMessageKey?: (proto.IMessageKey|null); + public vote?: (proto.Message.IPollVoteMessage|null); + public senderTimestampMs?: (number|Long|null); + public serverTimestampMs?: (number|Long|null); + public unread?: (boolean|null); + public static create(properties?: proto.IPollUpdate): proto.PollUpdate; + public static encode(m: proto.IPollUpdate, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PollUpdate; + public static fromObject(d: { [k: string]: any }): proto.PollUpdate; + public static toObject(m: proto.PollUpdate, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPreKeyRecordStructure { + id?: (number|null); + publicKey?: (Uint8Array|null); + privateKey?: (Uint8Array|null); + } + + class PreKeyRecordStructure implements IPreKeyRecordStructure { + constructor(p?: proto.IPreKeyRecordStructure); + public id?: (number|null); + public publicKey?: (Uint8Array|null); + public privateKey?: (Uint8Array|null); + public static create(properties?: proto.IPreKeyRecordStructure): proto.PreKeyRecordStructure; + public static encode(m: proto.IPreKeyRecordStructure, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PreKeyRecordStructure; + public static fromObject(d: { [k: string]: any }): proto.PreKeyRecordStructure; + public static toObject(m: proto.PreKeyRecordStructure, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPreKeySignalMessage { + registrationId?: (number|null); + preKeyId?: (number|null); + signedPreKeyId?: (number|null); + baseKey?: (Uint8Array|null); + identityKey?: (Uint8Array|null); + message?: (Uint8Array|null); + } + + class PreKeySignalMessage implements IPreKeySignalMessage { + constructor(p?: proto.IPreKeySignalMessage); + public registrationId?: (number|null); + public preKeyId?: (number|null); + public signedPreKeyId?: (number|null); + public baseKey?: (Uint8Array|null); + public identityKey?: (Uint8Array|null); + public message?: (Uint8Array|null); + public static create(properties?: proto.IPreKeySignalMessage): proto.PreKeySignalMessage; + public static encode(m: proto.IPreKeySignalMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PreKeySignalMessage; + public static fromObject(d: { [k: string]: any }): proto.PreKeySignalMessage; + public static toObject(m: proto.PreKeySignalMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPremiumMessageInfo { + serverCampaignId?: (string|null); + } + + class PremiumMessageInfo implements IPremiumMessageInfo { + constructor(p?: proto.IPremiumMessageInfo); + public serverCampaignId?: (string|null); + public static create(properties?: proto.IPremiumMessageInfo): proto.PremiumMessageInfo; + public static encode(m: proto.IPremiumMessageInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PremiumMessageInfo; + public static fromObject(d: { [k: string]: any }): proto.PremiumMessageInfo; + public static toObject(m: proto.PremiumMessageInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPrimaryEphemeralIdentity { + publicKey?: (Uint8Array|null); + nonce?: (Uint8Array|null); + } + + class PrimaryEphemeralIdentity implements IPrimaryEphemeralIdentity { + constructor(p?: proto.IPrimaryEphemeralIdentity); + public publicKey?: (Uint8Array|null); + public nonce?: (Uint8Array|null); + public static create(properties?: proto.IPrimaryEphemeralIdentity): proto.PrimaryEphemeralIdentity; + public static encode(m: proto.IPrimaryEphemeralIdentity, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.PrimaryEphemeralIdentity; + public static fromObject(d: { [k: string]: any }): proto.PrimaryEphemeralIdentity; + public static toObject(m: proto.PrimaryEphemeralIdentity, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum PrivacySystemMessage { + E2EE_MSG = 1, + NE2EE_SELF = 2, + NE2EE_OTHER = 3 + } + + interface IProcessedVideo { + directPath?: (string|null); + fileSha256?: (Uint8Array|null); + height?: (number|null); + width?: (number|null); + fileLength?: (number|Long|null); + bitrate?: (number|null); + quality?: (proto.ProcessedVideo.VideoQuality|null); + capabilities?: (string[]|null); + } + + class ProcessedVideo implements IProcessedVideo { + constructor(p?: proto.IProcessedVideo); + public directPath?: (string|null); + public fileSha256?: (Uint8Array|null); + public height?: (number|null); + public width?: (number|null); + public fileLength?: (number|Long|null); + public bitrate?: (number|null); + public quality?: (proto.ProcessedVideo.VideoQuality|null); + public capabilities: string[]; + public static create(properties?: proto.IProcessedVideo): proto.ProcessedVideo; + public static encode(m: proto.IProcessedVideo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ProcessedVideo; + public static fromObject(d: { [k: string]: any }): proto.ProcessedVideo; + public static toObject(m: proto.ProcessedVideo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ProcessedVideo { + + enum VideoQuality { + UNDEFINED = 0, + LOW = 1, + MID = 2, + HIGH = 3 + } + } + + interface IProloguePayload { + companionEphemeralIdentity?: (Uint8Array|null); + commitment?: (proto.ICompanionCommitment|null); + } + + class ProloguePayload implements IProloguePayload { + constructor(p?: proto.IProloguePayload); + public companionEphemeralIdentity?: (Uint8Array|null); + public commitment?: (proto.ICompanionCommitment|null); + public static create(properties?: proto.IProloguePayload): proto.ProloguePayload; + public static encode(m: proto.IProloguePayload, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ProloguePayload; + public static fromObject(d: { [k: string]: any }): proto.ProloguePayload; + public static toObject(m: proto.ProloguePayload, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPushname { + id?: (string|null); + pushname?: (string|null); + } + + class Pushname implements IPushname { + constructor(p?: proto.IPushname); + public id?: (string|null); + public pushname?: (string|null); + public static create(properties?: proto.IPushname): proto.Pushname; + public static encode(m: proto.IPushname, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Pushname; + public static fromObject(d: { [k: string]: any }): proto.Pushname; + public static toObject(m: proto.Pushname, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IQuarantinedMessage { + originalData?: (Uint8Array|null); + extractedText?: (string|null); + } + + class QuarantinedMessage implements IQuarantinedMessage { + constructor(p?: proto.IQuarantinedMessage); + public originalData?: (Uint8Array|null); + public extractedText?: (string|null); + public static create(properties?: proto.IQuarantinedMessage): proto.QuarantinedMessage; + public static encode(m: proto.IQuarantinedMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.QuarantinedMessage; + public static fromObject(d: { [k: string]: any }): proto.QuarantinedMessage; + public static toObject(m: proto.QuarantinedMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IReaction { + key?: (proto.IMessageKey|null); + text?: (string|null); + groupingKey?: (string|null); + senderTimestampMs?: (number|Long|null); + unread?: (boolean|null); + } + + class Reaction implements IReaction { + constructor(p?: proto.IReaction); + public key?: (proto.IMessageKey|null); + public text?: (string|null); + public groupingKey?: (string|null); + public senderTimestampMs?: (number|Long|null); + public unread?: (boolean|null); + public static create(properties?: proto.IReaction): proto.Reaction; + public static encode(m: proto.IReaction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Reaction; + public static fromObject(d: { [k: string]: any }): proto.Reaction; + public static toObject(m: proto.Reaction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRecentEmojiWeight { + emoji?: (string|null); + weight?: (number|null); + } + + class RecentEmojiWeight implements IRecentEmojiWeight { + constructor(p?: proto.IRecentEmojiWeight); + public emoji?: (string|null); + public weight?: (number|null); + public static create(properties?: proto.IRecentEmojiWeight): proto.RecentEmojiWeight; + public static encode(m: proto.IRecentEmojiWeight, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.RecentEmojiWeight; + public static fromObject(d: { [k: string]: any }): proto.RecentEmojiWeight; + public static toObject(m: proto.RecentEmojiWeight, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRecordStructure { + currentSession?: (proto.ISessionStructure|null); + previousSessions?: (proto.ISessionStructure[]|null); + } + + class RecordStructure implements IRecordStructure { + constructor(p?: proto.IRecordStructure); + public currentSession?: (proto.ISessionStructure|null); + public previousSessions: proto.ISessionStructure[]; + public static create(properties?: proto.IRecordStructure): proto.RecordStructure; + public static encode(m: proto.IRecordStructure, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.RecordStructure; + public static fromObject(d: { [k: string]: any }): proto.RecordStructure; + public static toObject(m: proto.RecordStructure, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IReportable { + minVersion?: (number|null); + maxVersion?: (number|null); + notReportableMinVersion?: (number|null); + never?: (boolean|null); + } + + class Reportable implements IReportable { + constructor(p?: proto.IReportable); + public minVersion?: (number|null); + public maxVersion?: (number|null); + public notReportableMinVersion?: (number|null); + public never?: (boolean|null); + public static create(properties?: proto.IReportable): proto.Reportable; + public static encode(m: proto.IReportable, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Reportable; + public static fromObject(d: { [k: string]: any }): proto.Reportable; + public static toObject(m: proto.Reportable, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IReportingTokenInfo { + reportingTag?: (Uint8Array|null); + } + + class ReportingTokenInfo implements IReportingTokenInfo { + constructor(p?: proto.IReportingTokenInfo); + public reportingTag?: (Uint8Array|null); + public static create(properties?: proto.IReportingTokenInfo): proto.ReportingTokenInfo; + public static encode(m: proto.IReportingTokenInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ReportingTokenInfo; + public static fromObject(d: { [k: string]: any }): proto.ReportingTokenInfo; + public static toObject(m: proto.ReportingTokenInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISenderKeyDistributionMessage { + id?: (number|null); + iteration?: (number|null); + chainKey?: (Uint8Array|null); + signingKey?: (Uint8Array|null); + } + + class SenderKeyDistributionMessage implements ISenderKeyDistributionMessage { + constructor(p?: proto.ISenderKeyDistributionMessage); + public id?: (number|null); + public iteration?: (number|null); + public chainKey?: (Uint8Array|null); + public signingKey?: (Uint8Array|null); + public static create(properties?: proto.ISenderKeyDistributionMessage): proto.SenderKeyDistributionMessage; + public static encode(m: proto.ISenderKeyDistributionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SenderKeyDistributionMessage; + public static fromObject(d: { [k: string]: any }): proto.SenderKeyDistributionMessage; + public static toObject(m: proto.SenderKeyDistributionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISenderKeyMessage { + id?: (number|null); + iteration?: (number|null); + ciphertext?: (Uint8Array|null); + } + + class SenderKeyMessage implements ISenderKeyMessage { + constructor(p?: proto.ISenderKeyMessage); + public id?: (number|null); + public iteration?: (number|null); + public ciphertext?: (Uint8Array|null); + public static create(properties?: proto.ISenderKeyMessage): proto.SenderKeyMessage; + public static encode(m: proto.ISenderKeyMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SenderKeyMessage; + public static fromObject(d: { [k: string]: any }): proto.SenderKeyMessage; + public static toObject(m: proto.SenderKeyMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISenderKeyRecordStructure { + senderKeyStates?: (proto.ISenderKeyStateStructure[]|null); + } + + class SenderKeyRecordStructure implements ISenderKeyRecordStructure { + constructor(p?: proto.ISenderKeyRecordStructure); + public senderKeyStates: proto.ISenderKeyStateStructure[]; + public static create(properties?: proto.ISenderKeyRecordStructure): proto.SenderKeyRecordStructure; + public static encode(m: proto.ISenderKeyRecordStructure, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SenderKeyRecordStructure; + public static fromObject(d: { [k: string]: any }): proto.SenderKeyRecordStructure; + public static toObject(m: proto.SenderKeyRecordStructure, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISenderKeyStateStructure { + senderKeyId?: (number|null); + senderChainKey?: (proto.SenderKeyStateStructure.ISenderChainKey|null); + senderSigningKey?: (proto.SenderKeyStateStructure.ISenderSigningKey|null); + senderMessageKeys?: (proto.SenderKeyStateStructure.ISenderMessageKey[]|null); + } + + class SenderKeyStateStructure implements ISenderKeyStateStructure { + constructor(p?: proto.ISenderKeyStateStructure); + public senderKeyId?: (number|null); + public senderChainKey?: (proto.SenderKeyStateStructure.ISenderChainKey|null); + public senderSigningKey?: (proto.SenderKeyStateStructure.ISenderSigningKey|null); + public senderMessageKeys: proto.SenderKeyStateStructure.ISenderMessageKey[]; + public static create(properties?: proto.ISenderKeyStateStructure): proto.SenderKeyStateStructure; + public static encode(m: proto.ISenderKeyStateStructure, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SenderKeyStateStructure; + public static fromObject(d: { [k: string]: any }): proto.SenderKeyStateStructure; + public static toObject(m: proto.SenderKeyStateStructure, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace SenderKeyStateStructure { + + interface ISenderChainKey { + iteration?: (number|null); + seed?: (Uint8Array|null); + } + + class SenderChainKey implements ISenderChainKey { + constructor(p?: proto.SenderKeyStateStructure.ISenderChainKey); + public iteration?: (number|null); + public seed?: (Uint8Array|null); + public static create(properties?: proto.SenderKeyStateStructure.ISenderChainKey): proto.SenderKeyStateStructure.SenderChainKey; + public static encode(m: proto.SenderKeyStateStructure.ISenderChainKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SenderKeyStateStructure.SenderChainKey; + public static fromObject(d: { [k: string]: any }): proto.SenderKeyStateStructure.SenderChainKey; + public static toObject(m: proto.SenderKeyStateStructure.SenderChainKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISenderMessageKey { + iteration?: (number|null); + seed?: (Uint8Array|null); + } + + class SenderMessageKey implements ISenderMessageKey { + constructor(p?: proto.SenderKeyStateStructure.ISenderMessageKey); + public iteration?: (number|null); + public seed?: (Uint8Array|null); + public static create(properties?: proto.SenderKeyStateStructure.ISenderMessageKey): proto.SenderKeyStateStructure.SenderMessageKey; + public static encode(m: proto.SenderKeyStateStructure.ISenderMessageKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SenderKeyStateStructure.SenderMessageKey; + public static fromObject(d: { [k: string]: any }): proto.SenderKeyStateStructure.SenderMessageKey; + public static toObject(m: proto.SenderKeyStateStructure.SenderMessageKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISenderSigningKey { + "public"?: (Uint8Array|null); + "private"?: (Uint8Array|null); + } + + class SenderSigningKey implements ISenderSigningKey { + constructor(p?: proto.SenderKeyStateStructure.ISenderSigningKey); + public public?: (Uint8Array|null); + public private?: (Uint8Array|null); + public static create(properties?: proto.SenderKeyStateStructure.ISenderSigningKey): proto.SenderKeyStateStructure.SenderSigningKey; + public static encode(m: proto.SenderKeyStateStructure.ISenderSigningKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SenderKeyStateStructure.SenderSigningKey; + public static fromObject(d: { [k: string]: any }): proto.SenderKeyStateStructure.SenderSigningKey; + public static toObject(m: proto.SenderKeyStateStructure.SenderSigningKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IServerErrorReceipt { + stanzaId?: (string|null); + } + + class ServerErrorReceipt implements IServerErrorReceipt { + constructor(p?: proto.IServerErrorReceipt); + public stanzaId?: (string|null); + public static create(properties?: proto.IServerErrorReceipt): proto.ServerErrorReceipt; + public static encode(m: proto.IServerErrorReceipt, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ServerErrorReceipt; + public static fromObject(d: { [k: string]: any }): proto.ServerErrorReceipt; + public static toObject(m: proto.ServerErrorReceipt, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISessionStructure { + sessionVersion?: (number|null); + localIdentityPublic?: (Uint8Array|null); + remoteIdentityPublic?: (Uint8Array|null); + rootKey?: (Uint8Array|null); + previousCounter?: (number|null); + senderChain?: (proto.SessionStructure.IChain|null); + receiverChains?: (proto.SessionStructure.IChain[]|null); + pendingKeyExchange?: (proto.SessionStructure.IPendingKeyExchange|null); + pendingPreKey?: (proto.SessionStructure.IPendingPreKey|null); + remoteRegistrationId?: (number|null); + localRegistrationId?: (number|null); + needsRefresh?: (boolean|null); + aliceBaseKey?: (Uint8Array|null); + } + + class SessionStructure implements ISessionStructure { + constructor(p?: proto.ISessionStructure); + public sessionVersion?: (number|null); + public localIdentityPublic?: (Uint8Array|null); + public remoteIdentityPublic?: (Uint8Array|null); + public rootKey?: (Uint8Array|null); + public previousCounter?: (number|null); + public senderChain?: (proto.SessionStructure.IChain|null); + public receiverChains: proto.SessionStructure.IChain[]; + public pendingKeyExchange?: (proto.SessionStructure.IPendingKeyExchange|null); + public pendingPreKey?: (proto.SessionStructure.IPendingPreKey|null); + public remoteRegistrationId?: (number|null); + public localRegistrationId?: (number|null); + public needsRefresh?: (boolean|null); + public aliceBaseKey?: (Uint8Array|null); + public static create(properties?: proto.ISessionStructure): proto.SessionStructure; + public static encode(m: proto.ISessionStructure, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SessionStructure; + public static fromObject(d: { [k: string]: any }): proto.SessionStructure; + public static toObject(m: proto.SessionStructure, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace SessionStructure { + + interface IChain { + senderRatchetKey?: (Uint8Array|null); + senderRatchetKeyPrivate?: (Uint8Array|null); + chainKey?: (proto.SessionStructure.Chain.IChainKey|null); + messageKeys?: (proto.SessionStructure.Chain.IMessageKey[]|null); + } + + class Chain implements IChain { + constructor(p?: proto.SessionStructure.IChain); + public senderRatchetKey?: (Uint8Array|null); + public senderRatchetKeyPrivate?: (Uint8Array|null); + public chainKey?: (proto.SessionStructure.Chain.IChainKey|null); + public messageKeys: proto.SessionStructure.Chain.IMessageKey[]; + public static create(properties?: proto.SessionStructure.IChain): proto.SessionStructure.Chain; + public static encode(m: proto.SessionStructure.IChain, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SessionStructure.Chain; + public static fromObject(d: { [k: string]: any }): proto.SessionStructure.Chain; + public static toObject(m: proto.SessionStructure.Chain, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace Chain { + + interface IChainKey { + index?: (number|null); + key?: (Uint8Array|null); + } + + class ChainKey implements IChainKey { + constructor(p?: proto.SessionStructure.Chain.IChainKey); + public index?: (number|null); + public key?: (Uint8Array|null); + public static create(properties?: proto.SessionStructure.Chain.IChainKey): proto.SessionStructure.Chain.ChainKey; + public static encode(m: proto.SessionStructure.Chain.IChainKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SessionStructure.Chain.ChainKey; + public static fromObject(d: { [k: string]: any }): proto.SessionStructure.Chain.ChainKey; + public static toObject(m: proto.SessionStructure.Chain.ChainKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMessageKey { + index?: (number|null); + cipherKey?: (Uint8Array|null); + macKey?: (Uint8Array|null); + iv?: (Uint8Array|null); + } + + class MessageKey implements IMessageKey { + constructor(p?: proto.SessionStructure.Chain.IMessageKey); + public index?: (number|null); + public cipherKey?: (Uint8Array|null); + public macKey?: (Uint8Array|null); + public iv?: (Uint8Array|null); + public static create(properties?: proto.SessionStructure.Chain.IMessageKey): proto.SessionStructure.Chain.MessageKey; + public static encode(m: proto.SessionStructure.Chain.IMessageKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SessionStructure.Chain.MessageKey; + public static fromObject(d: { [k: string]: any }): proto.SessionStructure.Chain.MessageKey; + public static toObject(m: proto.SessionStructure.Chain.MessageKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IPendingKeyExchange { + sequence?: (number|null); + localBaseKey?: (Uint8Array|null); + localBaseKeyPrivate?: (Uint8Array|null); + localRatchetKey?: (Uint8Array|null); + localRatchetKeyPrivate?: (Uint8Array|null); + localIdentityKey?: (Uint8Array|null); + localIdentityKeyPrivate?: (Uint8Array|null); + } + + class PendingKeyExchange implements IPendingKeyExchange { + constructor(p?: proto.SessionStructure.IPendingKeyExchange); + public sequence?: (number|null); + public localBaseKey?: (Uint8Array|null); + public localBaseKeyPrivate?: (Uint8Array|null); + public localRatchetKey?: (Uint8Array|null); + public localRatchetKeyPrivate?: (Uint8Array|null); + public localIdentityKey?: (Uint8Array|null); + public localIdentityKeyPrivate?: (Uint8Array|null); + public static create(properties?: proto.SessionStructure.IPendingKeyExchange): proto.SessionStructure.PendingKeyExchange; + public static encode(m: proto.SessionStructure.IPendingKeyExchange, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SessionStructure.PendingKeyExchange; + public static fromObject(d: { [k: string]: any }): proto.SessionStructure.PendingKeyExchange; + public static toObject(m: proto.SessionStructure.PendingKeyExchange, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPendingPreKey { + preKeyId?: (number|null); + signedPreKeyId?: (number|null); + baseKey?: (Uint8Array|null); + } + + class PendingPreKey implements IPendingPreKey { + constructor(p?: proto.SessionStructure.IPendingPreKey); + public preKeyId?: (number|null); + public signedPreKeyId?: (number|null); + public baseKey?: (Uint8Array|null); + public static create(properties?: proto.SessionStructure.IPendingPreKey): proto.SessionStructure.PendingPreKey; + public static encode(m: proto.SessionStructure.IPendingPreKey, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SessionStructure.PendingPreKey; + public static fromObject(d: { [k: string]: any }): proto.SessionStructure.PendingPreKey; + public static toObject(m: proto.SessionStructure.PendingPreKey, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface ISessionTransparencyMetadata { + disclaimerText?: (string|null); + hcaId?: (string|null); + sessionTransparencyType?: (proto.SessionTransparencyType|null); + } + + class SessionTransparencyMetadata implements ISessionTransparencyMetadata { + constructor(p?: proto.ISessionTransparencyMetadata); + public disclaimerText?: (string|null); + public hcaId?: (string|null); + public sessionTransparencyType?: (proto.SessionTransparencyType|null); + public static create(properties?: proto.ISessionTransparencyMetadata): proto.SessionTransparencyMetadata; + public static encode(m: proto.ISessionTransparencyMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SessionTransparencyMetadata; + public static fromObject(d: { [k: string]: any }): proto.SessionTransparencyMetadata; + public static toObject(m: proto.SessionTransparencyMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum SessionTransparencyType { + UNKNOWN_TYPE = 0, + NY_AI_SAFETY_DISCLAIMER = 1 + } + + interface ISignalMessage { + ratchetKey?: (Uint8Array|null); + counter?: (number|null); + previousCounter?: (number|null); + ciphertext?: (Uint8Array|null); + } + + class SignalMessage implements ISignalMessage { + constructor(p?: proto.ISignalMessage); + public ratchetKey?: (Uint8Array|null); + public counter?: (number|null); + public previousCounter?: (number|null); + public ciphertext?: (Uint8Array|null); + public static create(properties?: proto.ISignalMessage): proto.SignalMessage; + public static encode(m: proto.ISignalMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SignalMessage; + public static fromObject(d: { [k: string]: any }): proto.SignalMessage; + public static toObject(m: proto.SignalMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISignedPreKeyRecordStructure { + id?: (number|null); + publicKey?: (Uint8Array|null); + privateKey?: (Uint8Array|null); + signature?: (Uint8Array|null); + timestamp?: (number|Long|null); + } + + class SignedPreKeyRecordStructure implements ISignedPreKeyRecordStructure { + constructor(p?: proto.ISignedPreKeyRecordStructure); + public id?: (number|null); + public publicKey?: (Uint8Array|null); + public privateKey?: (Uint8Array|null); + public signature?: (Uint8Array|null); + public timestamp?: (number|Long|null); + public static create(properties?: proto.ISignedPreKeyRecordStructure): proto.SignedPreKeyRecordStructure; + public static encode(m: proto.ISignedPreKeyRecordStructure, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SignedPreKeyRecordStructure; + public static fromObject(d: { [k: string]: any }): proto.SignedPreKeyRecordStructure; + public static toObject(m: proto.SignedPreKeyRecordStructure, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStatusAttribution { + type?: (proto.StatusAttribution.Type|null); + actionUrl?: (string|null); + statusReshare?: (proto.StatusAttribution.IStatusReshare|null); + externalShare?: (proto.StatusAttribution.IExternalShare|null); + music?: (proto.StatusAttribution.IMusic|null); + groupStatus?: (proto.StatusAttribution.IGroupStatus|null); + rlAttribution?: (proto.StatusAttribution.IRLAttribution|null); + aiCreatedAttribution?: (proto.StatusAttribution.IAiCreatedAttribution|null); + } + + class StatusAttribution implements IStatusAttribution { + constructor(p?: proto.IStatusAttribution); + public type?: (proto.StatusAttribution.Type|null); + public actionUrl?: (string|null); + public statusReshare?: (proto.StatusAttribution.IStatusReshare|null); + public externalShare?: (proto.StatusAttribution.IExternalShare|null); + public music?: (proto.StatusAttribution.IMusic|null); + public groupStatus?: (proto.StatusAttribution.IGroupStatus|null); + public rlAttribution?: (proto.StatusAttribution.IRLAttribution|null); + public aiCreatedAttribution?: (proto.StatusAttribution.IAiCreatedAttribution|null); + public attributionData?: ("statusReshare"|"externalShare"|"music"|"groupStatus"|"rlAttribution"|"aiCreatedAttribution"); + public static create(properties?: proto.IStatusAttribution): proto.StatusAttribution; + public static encode(m: proto.IStatusAttribution, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution; + public static toObject(m: proto.StatusAttribution, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StatusAttribution { + + interface IAiCreatedAttribution { + source?: (proto.StatusAttribution.AiCreatedAttribution.Source|null); + } + + class AiCreatedAttribution implements IAiCreatedAttribution { + constructor(p?: proto.StatusAttribution.IAiCreatedAttribution); + public source?: (proto.StatusAttribution.AiCreatedAttribution.Source|null); + public static create(properties?: proto.StatusAttribution.IAiCreatedAttribution): proto.StatusAttribution.AiCreatedAttribution; + public static encode(m: proto.StatusAttribution.IAiCreatedAttribution, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution.AiCreatedAttribution; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution.AiCreatedAttribution; + public static toObject(m: proto.StatusAttribution.AiCreatedAttribution, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AiCreatedAttribution { + + enum Source { + UNKNOWN = 0, + STATUS_MIMICRY = 1 + } + } + + interface IExternalShare { + actionUrl?: (string|null); + source?: (proto.StatusAttribution.ExternalShare.Source|null); + duration?: (number|null); + actionFallbackUrl?: (string|null); + } + + class ExternalShare implements IExternalShare { + constructor(p?: proto.StatusAttribution.IExternalShare); + public actionUrl?: (string|null); + public source?: (proto.StatusAttribution.ExternalShare.Source|null); + public duration?: (number|null); + public actionFallbackUrl?: (string|null); + public static create(properties?: proto.StatusAttribution.IExternalShare): proto.StatusAttribution.ExternalShare; + public static encode(m: proto.StatusAttribution.IExternalShare, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution.ExternalShare; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution.ExternalShare; + public static toObject(m: proto.StatusAttribution.ExternalShare, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ExternalShare { + + enum Source { + UNKNOWN = 0, + INSTAGRAM = 1, + FACEBOOK = 2, + MESSENGER = 3, + SPOTIFY = 4, + YOUTUBE = 5, + PINTEREST = 6, + THREADS = 7, + APPLE_MUSIC = 8, + SHARECHAT = 9, + GOOGLE_PHOTOS = 10 + } + } + + interface IGroupStatus { + authorJid?: (string|null); + } + + class GroupStatus implements IGroupStatus { + constructor(p?: proto.StatusAttribution.IGroupStatus); + public authorJid?: (string|null); + public static create(properties?: proto.StatusAttribution.IGroupStatus): proto.StatusAttribution.GroupStatus; + public static encode(m: proto.StatusAttribution.IGroupStatus, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution.GroupStatus; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution.GroupStatus; + public static toObject(m: proto.StatusAttribution.GroupStatus, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMusic { + authorName?: (string|null); + songId?: (string|null); + title?: (string|null); + author?: (string|null); + artistAttribution?: (string|null); + isExplicit?: (boolean|null); + } + + class Music implements IMusic { + constructor(p?: proto.StatusAttribution.IMusic); + public authorName?: (string|null); + public songId?: (string|null); + public title?: (string|null); + public author?: (string|null); + public artistAttribution?: (string|null); + public isExplicit?: (boolean|null); + public static create(properties?: proto.StatusAttribution.IMusic): proto.StatusAttribution.Music; + public static encode(m: proto.StatusAttribution.IMusic, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution.Music; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution.Music; + public static toObject(m: proto.StatusAttribution.Music, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRLAttribution { + source?: (proto.StatusAttribution.RLAttribution.Source|null); + } + + class RLAttribution implements IRLAttribution { + constructor(p?: proto.StatusAttribution.IRLAttribution); + public source?: (proto.StatusAttribution.RLAttribution.Source|null); + public static create(properties?: proto.StatusAttribution.IRLAttribution): proto.StatusAttribution.RLAttribution; + public static encode(m: proto.StatusAttribution.IRLAttribution, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution.RLAttribution; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution.RLAttribution; + public static toObject(m: proto.StatusAttribution.RLAttribution, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace RLAttribution { + + enum Source { + UNKNOWN = 0, + RAY_BAN_META_GLASSES = 1, + OAKLEY_META_GLASSES = 2, + HYPERNOVA_GLASSES = 3 + } + } + + interface IStatusReshare { + source?: (proto.StatusAttribution.StatusReshare.Source|null); + metadata?: (proto.StatusAttribution.StatusReshare.IMetadata|null); + } + + class StatusReshare implements IStatusReshare { + constructor(p?: proto.StatusAttribution.IStatusReshare); + public source?: (proto.StatusAttribution.StatusReshare.Source|null); + public metadata?: (proto.StatusAttribution.StatusReshare.IMetadata|null); + public static create(properties?: proto.StatusAttribution.IStatusReshare): proto.StatusAttribution.StatusReshare; + public static encode(m: proto.StatusAttribution.IStatusReshare, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution.StatusReshare; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution.StatusReshare; + public static toObject(m: proto.StatusAttribution.StatusReshare, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StatusReshare { + + interface IMetadata { + duration?: (number|null); + channelJid?: (string|null); + channelMessageId?: (number|null); + hasMultipleReshares?: (boolean|null); + } + + class Metadata implements IMetadata { + constructor(p?: proto.StatusAttribution.StatusReshare.IMetadata); + public duration?: (number|null); + public channelJid?: (string|null); + public channelMessageId?: (number|null); + public hasMultipleReshares?: (boolean|null); + public static create(properties?: proto.StatusAttribution.StatusReshare.IMetadata): proto.StatusAttribution.StatusReshare.Metadata; + public static encode(m: proto.StatusAttribution.StatusReshare.IMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusAttribution.StatusReshare.Metadata; + public static fromObject(d: { [k: string]: any }): proto.StatusAttribution.StatusReshare.Metadata; + public static toObject(m: proto.StatusAttribution.StatusReshare.Metadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + enum Source { + UNKNOWN = 0, + INTERNAL_RESHARE = 1, + MENTION_RESHARE = 2, + CHANNEL_RESHARE = 3, + FORWARD = 4 + } + } + + enum Type { + UNKNOWN = 0, + RESHARE = 1, + EXTERNAL_SHARE = 2, + MUSIC = 3, + STATUS_MENTION = 4, + GROUP_STATUS = 5, + RL_ATTRIBUTION = 6, + AI_CREATED = 7, + LAYOUTS = 8 + } + } + + interface IStatusMentionMessage { + quotedStatus?: (proto.IMessage|null); + } + + class StatusMentionMessage implements IStatusMentionMessage { + constructor(p?: proto.IStatusMentionMessage); + public quotedStatus?: (proto.IMessage|null); + public static create(properties?: proto.IStatusMentionMessage): proto.StatusMentionMessage; + public static encode(m: proto.IStatusMentionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusMentionMessage; + public static fromObject(d: { [k: string]: any }): proto.StatusMentionMessage; + public static toObject(m: proto.StatusMentionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStatusPSA { + campaignId?: (number|Long|null); + campaignExpirationTimestamp?: (number|Long|null); + } + + class StatusPSA implements IStatusPSA { + constructor(p?: proto.IStatusPSA); + public campaignId: (number|Long); + public campaignExpirationTimestamp?: (number|Long|null); + public static create(properties?: proto.IStatusPSA): proto.StatusPSA; + public static encode(m: proto.IStatusPSA, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StatusPSA; + public static fromObject(d: { [k: string]: any }): proto.StatusPSA; + public static toObject(m: proto.StatusPSA, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStickerMetadata { + url?: (string|null); + fileSha256?: (Uint8Array|null); + fileEncSha256?: (Uint8Array|null); + mediaKey?: (Uint8Array|null); + mimetype?: (string|null); + height?: (number|null); + width?: (number|null); + directPath?: (string|null); + fileLength?: (number|Long|null); + weight?: (number|null); + lastStickerSentTs?: (number|Long|null); + isLottie?: (boolean|null); + imageHash?: (string|null); + isAvatarSticker?: (boolean|null); + } + + class StickerMetadata implements IStickerMetadata { + constructor(p?: proto.IStickerMetadata); + public url?: (string|null); + public fileSha256?: (Uint8Array|null); + public fileEncSha256?: (Uint8Array|null); + public mediaKey?: (Uint8Array|null); + public mimetype?: (string|null); + public height?: (number|null); + public width?: (number|null); + public directPath?: (string|null); + public fileLength?: (number|Long|null); + public weight?: (number|null); + public lastStickerSentTs?: (number|Long|null); + public isLottie?: (boolean|null); + public imageHash?: (string|null); + public isAvatarSticker?: (boolean|null); + public static create(properties?: proto.IStickerMetadata): proto.StickerMetadata; + public static encode(m: proto.IStickerMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.StickerMetadata; + public static fromObject(d: { [k: string]: any }): proto.StickerMetadata; + public static toObject(m: proto.StickerMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncActionData { + index?: (Uint8Array|null); + value?: (proto.ISyncActionValue|null); + padding?: (Uint8Array|null); + version?: (number|null); + } + + class SyncActionData implements ISyncActionData { + constructor(p?: proto.ISyncActionData); + public index?: (Uint8Array|null); + public value?: (proto.ISyncActionValue|null); + public padding?: (Uint8Array|null); + public version?: (number|null); + public static create(properties?: proto.ISyncActionData): proto.SyncActionData; + public static encode(m: proto.ISyncActionData, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionData; + public static fromObject(d: { [k: string]: any }): proto.SyncActionData; + public static toObject(m: proto.SyncActionData, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncActionValue { + timestamp?: (number|Long|null); + starAction?: (proto.SyncActionValue.IStarAction|null); + contactAction?: (proto.SyncActionValue.IContactAction|null); + muteAction?: (proto.SyncActionValue.IMuteAction|null); + pinAction?: (proto.SyncActionValue.IPinAction|null); + pushNameSetting?: (proto.SyncActionValue.IPushNameSetting|null); + quickReplyAction?: (proto.SyncActionValue.IQuickReplyAction|null); + recentEmojiWeightsAction?: (proto.SyncActionValue.IRecentEmojiWeightsAction|null); + labelEditAction?: (proto.SyncActionValue.ILabelEditAction|null); + labelAssociationAction?: (proto.SyncActionValue.ILabelAssociationAction|null); + localeSetting?: (proto.SyncActionValue.ILocaleSetting|null); + archiveChatAction?: (proto.SyncActionValue.IArchiveChatAction|null); + deleteMessageForMeAction?: (proto.SyncActionValue.IDeleteMessageForMeAction|null); + keyExpiration?: (proto.SyncActionValue.IKeyExpiration|null); + markChatAsReadAction?: (proto.SyncActionValue.IMarkChatAsReadAction|null); + clearChatAction?: (proto.SyncActionValue.IClearChatAction|null); + deleteChatAction?: (proto.SyncActionValue.IDeleteChatAction|null); + unarchiveChatsSetting?: (proto.SyncActionValue.IUnarchiveChatsSetting|null); + primaryFeature?: (proto.SyncActionValue.IPrimaryFeature|null); + androidUnsupportedActions?: (proto.SyncActionValue.IAndroidUnsupportedActions|null); + agentAction?: (proto.SyncActionValue.IAgentAction|null); + subscriptionAction?: (proto.SyncActionValue.ISubscriptionAction|null); + userStatusMuteAction?: (proto.SyncActionValue.IUserStatusMuteAction|null); + timeFormatAction?: (proto.SyncActionValue.ITimeFormatAction|null); + nuxAction?: (proto.SyncActionValue.INuxAction|null); + primaryVersionAction?: (proto.SyncActionValue.IPrimaryVersionAction|null); + stickerAction?: (proto.SyncActionValue.IStickerAction|null); + removeRecentStickerAction?: (proto.SyncActionValue.IRemoveRecentStickerAction|null); + chatAssignment?: (proto.SyncActionValue.IChatAssignmentAction|null); + chatAssignmentOpenedStatus?: (proto.SyncActionValue.IChatAssignmentOpenedStatusAction|null); + pnForLidChatAction?: (proto.SyncActionValue.IPnForLidChatAction|null); + marketingMessageAction?: (proto.SyncActionValue.IMarketingMessageAction|null); + marketingMessageBroadcastAction?: (proto.SyncActionValue.IMarketingMessageBroadcastAction|null); + externalWebBetaAction?: (proto.SyncActionValue.IExternalWebBetaAction|null); + privacySettingRelayAllCalls?: (proto.SyncActionValue.IPrivacySettingRelayAllCalls|null); + callLogAction?: (proto.SyncActionValue.ICallLogAction|null); + ugcBot?: (proto.SyncActionValue.IUGCBot|null); + statusPrivacy?: (proto.SyncActionValue.IStatusPrivacyAction|null); + botWelcomeRequestAction?: (proto.SyncActionValue.IBotWelcomeRequestAction|null); + deleteIndividualCallLog?: (proto.SyncActionValue.IDeleteIndividualCallLogAction|null); + labelReorderingAction?: (proto.SyncActionValue.ILabelReorderingAction|null); + paymentInfoAction?: (proto.SyncActionValue.IPaymentInfoAction|null); + customPaymentMethodsAction?: (proto.SyncActionValue.ICustomPaymentMethodsAction|null); + lockChatAction?: (proto.SyncActionValue.ILockChatAction|null); + chatLockSettings?: (proto.IChatLockSettings|null); + wamoUserIdentifierAction?: (proto.SyncActionValue.IWamoUserIdentifierAction|null); + privacySettingDisableLinkPreviewsAction?: (proto.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction|null); + deviceCapabilities?: (proto.IDeviceCapabilities|null); + noteEditAction?: (proto.SyncActionValue.INoteEditAction|null); + favoritesAction?: (proto.SyncActionValue.IFavoritesAction|null); + merchantPaymentPartnerAction?: (proto.SyncActionValue.IMerchantPaymentPartnerAction|null); + waffleAccountLinkStateAction?: (proto.SyncActionValue.IWaffleAccountLinkStateAction|null); + usernameChatStartMode?: (proto.SyncActionValue.IUsernameChatStartModeAction|null); + notificationActivitySettingAction?: (proto.SyncActionValue.INotificationActivitySettingAction|null); + lidContactAction?: (proto.SyncActionValue.ILidContactAction|null); + ctwaPerCustomerDataSharingAction?: (proto.SyncActionValue.ICtwaPerCustomerDataSharingAction|null); + paymentTosAction?: (proto.SyncActionValue.IPaymentTosAction|null); + privacySettingChannelsPersonalisedRecommendationAction?: (proto.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction|null); + businessBroadcastAssociationAction?: (proto.SyncActionValue.IBusinessBroadcastAssociationAction|null); + detectedOutcomesStatusAction?: (proto.SyncActionValue.IDetectedOutcomesStatusAction|null); + maibaAiFeaturesControlAction?: (proto.SyncActionValue.IMaibaAIFeaturesControlAction|null); + businessBroadcastListAction?: (proto.SyncActionValue.IBusinessBroadcastListAction|null); + musicUserIdAction?: (proto.SyncActionValue.IMusicUserIdAction|null); + statusPostOptInNotificationPreferencesAction?: (proto.SyncActionValue.IStatusPostOptInNotificationPreferencesAction|null); + avatarUpdatedAction?: (proto.SyncActionValue.IAvatarUpdatedAction|null); + privateProcessingSettingAction?: (proto.SyncActionValue.IPrivateProcessingSettingAction|null); + newsletterSavedInterestsAction?: (proto.SyncActionValue.INewsletterSavedInterestsAction|null); + aiThreadRenameAction?: (proto.SyncActionValue.IAiThreadRenameAction|null); + interactiveMessageAction?: (proto.SyncActionValue.IInteractiveMessageAction|null); + } + + class SyncActionValue implements ISyncActionValue { + constructor(p?: proto.ISyncActionValue); + public timestamp?: (number|Long|null); + public starAction?: (proto.SyncActionValue.IStarAction|null); + public contactAction?: (proto.SyncActionValue.IContactAction|null); + public muteAction?: (proto.SyncActionValue.IMuteAction|null); + public pinAction?: (proto.SyncActionValue.IPinAction|null); + public pushNameSetting?: (proto.SyncActionValue.IPushNameSetting|null); + public quickReplyAction?: (proto.SyncActionValue.IQuickReplyAction|null); + public recentEmojiWeightsAction?: (proto.SyncActionValue.IRecentEmojiWeightsAction|null); + public labelEditAction?: (proto.SyncActionValue.ILabelEditAction|null); + public labelAssociationAction?: (proto.SyncActionValue.ILabelAssociationAction|null); + public localeSetting?: (proto.SyncActionValue.ILocaleSetting|null); + public archiveChatAction?: (proto.SyncActionValue.IArchiveChatAction|null); + public deleteMessageForMeAction?: (proto.SyncActionValue.IDeleteMessageForMeAction|null); + public keyExpiration?: (proto.SyncActionValue.IKeyExpiration|null); + public markChatAsReadAction?: (proto.SyncActionValue.IMarkChatAsReadAction|null); + public clearChatAction?: (proto.SyncActionValue.IClearChatAction|null); + public deleteChatAction?: (proto.SyncActionValue.IDeleteChatAction|null); + public unarchiveChatsSetting?: (proto.SyncActionValue.IUnarchiveChatsSetting|null); + public primaryFeature?: (proto.SyncActionValue.IPrimaryFeature|null); + public androidUnsupportedActions?: (proto.SyncActionValue.IAndroidUnsupportedActions|null); + public agentAction?: (proto.SyncActionValue.IAgentAction|null); + public subscriptionAction?: (proto.SyncActionValue.ISubscriptionAction|null); + public userStatusMuteAction?: (proto.SyncActionValue.IUserStatusMuteAction|null); + public timeFormatAction?: (proto.SyncActionValue.ITimeFormatAction|null); + public nuxAction?: (proto.SyncActionValue.INuxAction|null); + public primaryVersionAction?: (proto.SyncActionValue.IPrimaryVersionAction|null); + public stickerAction?: (proto.SyncActionValue.IStickerAction|null); + public removeRecentStickerAction?: (proto.SyncActionValue.IRemoveRecentStickerAction|null); + public chatAssignment?: (proto.SyncActionValue.IChatAssignmentAction|null); + public chatAssignmentOpenedStatus?: (proto.SyncActionValue.IChatAssignmentOpenedStatusAction|null); + public pnForLidChatAction?: (proto.SyncActionValue.IPnForLidChatAction|null); + public marketingMessageAction?: (proto.SyncActionValue.IMarketingMessageAction|null); + public marketingMessageBroadcastAction?: (proto.SyncActionValue.IMarketingMessageBroadcastAction|null); + public externalWebBetaAction?: (proto.SyncActionValue.IExternalWebBetaAction|null); + public privacySettingRelayAllCalls?: (proto.SyncActionValue.IPrivacySettingRelayAllCalls|null); + public callLogAction?: (proto.SyncActionValue.ICallLogAction|null); + public ugcBot?: (proto.SyncActionValue.IUGCBot|null); + public statusPrivacy?: (proto.SyncActionValue.IStatusPrivacyAction|null); + public botWelcomeRequestAction?: (proto.SyncActionValue.IBotWelcomeRequestAction|null); + public deleteIndividualCallLog?: (proto.SyncActionValue.IDeleteIndividualCallLogAction|null); + public labelReorderingAction?: (proto.SyncActionValue.ILabelReorderingAction|null); + public paymentInfoAction?: (proto.SyncActionValue.IPaymentInfoAction|null); + public customPaymentMethodsAction?: (proto.SyncActionValue.ICustomPaymentMethodsAction|null); + public lockChatAction?: (proto.SyncActionValue.ILockChatAction|null); + public chatLockSettings?: (proto.IChatLockSettings|null); + public wamoUserIdentifierAction?: (proto.SyncActionValue.IWamoUserIdentifierAction|null); + public privacySettingDisableLinkPreviewsAction?: (proto.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction|null); + public deviceCapabilities?: (proto.IDeviceCapabilities|null); + public noteEditAction?: (proto.SyncActionValue.INoteEditAction|null); + public favoritesAction?: (proto.SyncActionValue.IFavoritesAction|null); + public merchantPaymentPartnerAction?: (proto.SyncActionValue.IMerchantPaymentPartnerAction|null); + public waffleAccountLinkStateAction?: (proto.SyncActionValue.IWaffleAccountLinkStateAction|null); + public usernameChatStartMode?: (proto.SyncActionValue.IUsernameChatStartModeAction|null); + public notificationActivitySettingAction?: (proto.SyncActionValue.INotificationActivitySettingAction|null); + public lidContactAction?: (proto.SyncActionValue.ILidContactAction|null); + public ctwaPerCustomerDataSharingAction?: (proto.SyncActionValue.ICtwaPerCustomerDataSharingAction|null); + public paymentTosAction?: (proto.SyncActionValue.IPaymentTosAction|null); + public privacySettingChannelsPersonalisedRecommendationAction?: (proto.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction|null); + public businessBroadcastAssociationAction?: (proto.SyncActionValue.IBusinessBroadcastAssociationAction|null); + public detectedOutcomesStatusAction?: (proto.SyncActionValue.IDetectedOutcomesStatusAction|null); + public maibaAiFeaturesControlAction?: (proto.SyncActionValue.IMaibaAIFeaturesControlAction|null); + public businessBroadcastListAction?: (proto.SyncActionValue.IBusinessBroadcastListAction|null); + public musicUserIdAction?: (proto.SyncActionValue.IMusicUserIdAction|null); + public statusPostOptInNotificationPreferencesAction?: (proto.SyncActionValue.IStatusPostOptInNotificationPreferencesAction|null); + public avatarUpdatedAction?: (proto.SyncActionValue.IAvatarUpdatedAction|null); + public privateProcessingSettingAction?: (proto.SyncActionValue.IPrivateProcessingSettingAction|null); + public newsletterSavedInterestsAction?: (proto.SyncActionValue.INewsletterSavedInterestsAction|null); + public aiThreadRenameAction?: (proto.SyncActionValue.IAiThreadRenameAction|null); + public interactiveMessageAction?: (proto.SyncActionValue.IInteractiveMessageAction|null); + public static create(properties?: proto.ISyncActionValue): proto.SyncActionValue; + public static encode(m: proto.ISyncActionValue, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue; + public static toObject(m: proto.SyncActionValue, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace SyncActionValue { + + interface IAgentAction { + name?: (string|null); + deviceID?: (number|null); + isDeleted?: (boolean|null); + } + + class AgentAction implements IAgentAction { + constructor(p?: proto.SyncActionValue.IAgentAction); + public name?: (string|null); + public deviceID?: (number|null); + public isDeleted?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IAgentAction): proto.SyncActionValue.AgentAction; + public static encode(m: proto.SyncActionValue.IAgentAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.AgentAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.AgentAction; + public static toObject(m: proto.SyncActionValue.AgentAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAiThreadRenameAction { + newTitle?: (string|null); + } + + class AiThreadRenameAction implements IAiThreadRenameAction { + constructor(p?: proto.SyncActionValue.IAiThreadRenameAction); + public newTitle?: (string|null); + public static create(properties?: proto.SyncActionValue.IAiThreadRenameAction): proto.SyncActionValue.AiThreadRenameAction; + public static encode(m: proto.SyncActionValue.IAiThreadRenameAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.AiThreadRenameAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.AiThreadRenameAction; + public static toObject(m: proto.SyncActionValue.AiThreadRenameAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAndroidUnsupportedActions { + allowed?: (boolean|null); + } + + class AndroidUnsupportedActions implements IAndroidUnsupportedActions { + constructor(p?: proto.SyncActionValue.IAndroidUnsupportedActions); + public allowed?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IAndroidUnsupportedActions): proto.SyncActionValue.AndroidUnsupportedActions; + public static encode(m: proto.SyncActionValue.IAndroidUnsupportedActions, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.AndroidUnsupportedActions; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.AndroidUnsupportedActions; + public static toObject(m: proto.SyncActionValue.AndroidUnsupportedActions, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IArchiveChatAction { + archived?: (boolean|null); + messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + } + + class ArchiveChatAction implements IArchiveChatAction { + constructor(p?: proto.SyncActionValue.IArchiveChatAction); + public archived?: (boolean|null); + public messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + public static create(properties?: proto.SyncActionValue.IArchiveChatAction): proto.SyncActionValue.ArchiveChatAction; + public static encode(m: proto.SyncActionValue.IArchiveChatAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.ArchiveChatAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.ArchiveChatAction; + public static toObject(m: proto.SyncActionValue.ArchiveChatAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IAvatarUpdatedAction { + eventType?: (proto.SyncActionValue.AvatarUpdatedAction.AvatarEventType|null); + recentAvatarStickers?: (proto.SyncActionValue.IStickerAction[]|null); + } + + class AvatarUpdatedAction implements IAvatarUpdatedAction { + constructor(p?: proto.SyncActionValue.IAvatarUpdatedAction); + public eventType?: (proto.SyncActionValue.AvatarUpdatedAction.AvatarEventType|null); + public recentAvatarStickers: proto.SyncActionValue.IStickerAction[]; + public static create(properties?: proto.SyncActionValue.IAvatarUpdatedAction): proto.SyncActionValue.AvatarUpdatedAction; + public static encode(m: proto.SyncActionValue.IAvatarUpdatedAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.AvatarUpdatedAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.AvatarUpdatedAction; + public static toObject(m: proto.SyncActionValue.AvatarUpdatedAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace AvatarUpdatedAction { + + enum AvatarEventType { + UPDATED = 0, + CREATED = 1, + DELETED = 2 + } + } + + interface IBotWelcomeRequestAction { + isSent?: (boolean|null); + } + + class BotWelcomeRequestAction implements IBotWelcomeRequestAction { + constructor(p?: proto.SyncActionValue.IBotWelcomeRequestAction); + public isSent?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IBotWelcomeRequestAction): proto.SyncActionValue.BotWelcomeRequestAction; + public static encode(m: proto.SyncActionValue.IBotWelcomeRequestAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.BotWelcomeRequestAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.BotWelcomeRequestAction; + public static toObject(m: proto.SyncActionValue.BotWelcomeRequestAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBroadcastListParticipant { + lidJid?: (string|null); + pnJid?: (string|null); + } + + class BroadcastListParticipant implements IBroadcastListParticipant { + constructor(p?: proto.SyncActionValue.IBroadcastListParticipant); + public lidJid: string; + public pnJid?: (string|null); + public static create(properties?: proto.SyncActionValue.IBroadcastListParticipant): proto.SyncActionValue.BroadcastListParticipant; + public static encode(m: proto.SyncActionValue.IBroadcastListParticipant, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.BroadcastListParticipant; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.BroadcastListParticipant; + public static toObject(m: proto.SyncActionValue.BroadcastListParticipant, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBusinessBroadcastAssociationAction { + deleted?: (boolean|null); + } + + class BusinessBroadcastAssociationAction implements IBusinessBroadcastAssociationAction { + constructor(p?: proto.SyncActionValue.IBusinessBroadcastAssociationAction); + public deleted?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IBusinessBroadcastAssociationAction): proto.SyncActionValue.BusinessBroadcastAssociationAction; + public static encode(m: proto.SyncActionValue.IBusinessBroadcastAssociationAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.BusinessBroadcastAssociationAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.BusinessBroadcastAssociationAction; + public static toObject(m: proto.SyncActionValue.BusinessBroadcastAssociationAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IBusinessBroadcastListAction { + deleted?: (boolean|null); + participants?: (proto.SyncActionValue.IBroadcastListParticipant[]|null); + listName?: (string|null); + } + + class BusinessBroadcastListAction implements IBusinessBroadcastListAction { + constructor(p?: proto.SyncActionValue.IBusinessBroadcastListAction); + public deleted?: (boolean|null); + public participants: proto.SyncActionValue.IBroadcastListParticipant[]; + public listName?: (string|null); + public static create(properties?: proto.SyncActionValue.IBusinessBroadcastListAction): proto.SyncActionValue.BusinessBroadcastListAction; + public static encode(m: proto.SyncActionValue.IBusinessBroadcastListAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.BusinessBroadcastListAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.BusinessBroadcastListAction; + public static toObject(m: proto.SyncActionValue.BusinessBroadcastListAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICallLogAction { + callLogRecord?: (proto.ICallLogRecord|null); + } + + class CallLogAction implements ICallLogAction { + constructor(p?: proto.SyncActionValue.ICallLogAction); + public callLogRecord?: (proto.ICallLogRecord|null); + public static create(properties?: proto.SyncActionValue.ICallLogAction): proto.SyncActionValue.CallLogAction; + public static encode(m: proto.SyncActionValue.ICallLogAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.CallLogAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.CallLogAction; + public static toObject(m: proto.SyncActionValue.CallLogAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IChatAssignmentAction { + deviceAgentID?: (string|null); + } + + class ChatAssignmentAction implements IChatAssignmentAction { + constructor(p?: proto.SyncActionValue.IChatAssignmentAction); + public deviceAgentID?: (string|null); + public static create(properties?: proto.SyncActionValue.IChatAssignmentAction): proto.SyncActionValue.ChatAssignmentAction; + public static encode(m: proto.SyncActionValue.IChatAssignmentAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.ChatAssignmentAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.ChatAssignmentAction; + public static toObject(m: proto.SyncActionValue.ChatAssignmentAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IChatAssignmentOpenedStatusAction { + chatOpened?: (boolean|null); + } + + class ChatAssignmentOpenedStatusAction implements IChatAssignmentOpenedStatusAction { + constructor(p?: proto.SyncActionValue.IChatAssignmentOpenedStatusAction); + public chatOpened?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IChatAssignmentOpenedStatusAction): proto.SyncActionValue.ChatAssignmentOpenedStatusAction; + public static encode(m: proto.SyncActionValue.IChatAssignmentOpenedStatusAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.ChatAssignmentOpenedStatusAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.ChatAssignmentOpenedStatusAction; + public static toObject(m: proto.SyncActionValue.ChatAssignmentOpenedStatusAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IClearChatAction { + messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + } + + class ClearChatAction implements IClearChatAction { + constructor(p?: proto.SyncActionValue.IClearChatAction); + public messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + public static create(properties?: proto.SyncActionValue.IClearChatAction): proto.SyncActionValue.ClearChatAction; + public static encode(m: proto.SyncActionValue.IClearChatAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.ClearChatAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.ClearChatAction; + public static toObject(m: proto.SyncActionValue.ClearChatAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IContactAction { + fullName?: (string|null); + firstName?: (string|null); + lidJid?: (string|null); + saveOnPrimaryAddressbook?: (boolean|null); + pnJid?: (string|null); + username?: (string|null); + } + + class ContactAction implements IContactAction { + constructor(p?: proto.SyncActionValue.IContactAction); + public fullName?: (string|null); + public firstName?: (string|null); + public lidJid?: (string|null); + public saveOnPrimaryAddressbook?: (boolean|null); + public pnJid?: (string|null); + public username?: (string|null); + public static create(properties?: proto.SyncActionValue.IContactAction): proto.SyncActionValue.ContactAction; + public static encode(m: proto.SyncActionValue.IContactAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.ContactAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.ContactAction; + public static toObject(m: proto.SyncActionValue.ContactAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICtwaPerCustomerDataSharingAction { + isCtwaPerCustomerDataSharingEnabled?: (boolean|null); + } + + class CtwaPerCustomerDataSharingAction implements ICtwaPerCustomerDataSharingAction { + constructor(p?: proto.SyncActionValue.ICtwaPerCustomerDataSharingAction); + public isCtwaPerCustomerDataSharingEnabled?: (boolean|null); + public static create(properties?: proto.SyncActionValue.ICtwaPerCustomerDataSharingAction): proto.SyncActionValue.CtwaPerCustomerDataSharingAction; + public static encode(m: proto.SyncActionValue.ICtwaPerCustomerDataSharingAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.CtwaPerCustomerDataSharingAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.CtwaPerCustomerDataSharingAction; + public static toObject(m: proto.SyncActionValue.CtwaPerCustomerDataSharingAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICustomPaymentMethod { + credentialId?: (string|null); + country?: (string|null); + type?: (string|null); + metadata?: (proto.SyncActionValue.ICustomPaymentMethodMetadata[]|null); + } + + class CustomPaymentMethod implements ICustomPaymentMethod { + constructor(p?: proto.SyncActionValue.ICustomPaymentMethod); + public credentialId: string; + public country: string; + public type: string; + public metadata: proto.SyncActionValue.ICustomPaymentMethodMetadata[]; + public static create(properties?: proto.SyncActionValue.ICustomPaymentMethod): proto.SyncActionValue.CustomPaymentMethod; + public static encode(m: proto.SyncActionValue.ICustomPaymentMethod, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.CustomPaymentMethod; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.CustomPaymentMethod; + public static toObject(m: proto.SyncActionValue.CustomPaymentMethod, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICustomPaymentMethodMetadata { + key?: (string|null); + value?: (string|null); + } + + class CustomPaymentMethodMetadata implements ICustomPaymentMethodMetadata { + constructor(p?: proto.SyncActionValue.ICustomPaymentMethodMetadata); + public key: string; + public value: string; + public static create(properties?: proto.SyncActionValue.ICustomPaymentMethodMetadata): proto.SyncActionValue.CustomPaymentMethodMetadata; + public static encode(m: proto.SyncActionValue.ICustomPaymentMethodMetadata, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.CustomPaymentMethodMetadata; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.CustomPaymentMethodMetadata; + public static toObject(m: proto.SyncActionValue.CustomPaymentMethodMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ICustomPaymentMethodsAction { + customPaymentMethods?: (proto.SyncActionValue.ICustomPaymentMethod[]|null); + } + + class CustomPaymentMethodsAction implements ICustomPaymentMethodsAction { + constructor(p?: proto.SyncActionValue.ICustomPaymentMethodsAction); + public customPaymentMethods: proto.SyncActionValue.ICustomPaymentMethod[]; + public static create(properties?: proto.SyncActionValue.ICustomPaymentMethodsAction): proto.SyncActionValue.CustomPaymentMethodsAction; + public static encode(m: proto.SyncActionValue.ICustomPaymentMethodsAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.CustomPaymentMethodsAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.CustomPaymentMethodsAction; + public static toObject(m: proto.SyncActionValue.CustomPaymentMethodsAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDeleteChatAction { + messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + } + + class DeleteChatAction implements IDeleteChatAction { + constructor(p?: proto.SyncActionValue.IDeleteChatAction); + public messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + public static create(properties?: proto.SyncActionValue.IDeleteChatAction): proto.SyncActionValue.DeleteChatAction; + public static encode(m: proto.SyncActionValue.IDeleteChatAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.DeleteChatAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.DeleteChatAction; + public static toObject(m: proto.SyncActionValue.DeleteChatAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDeleteIndividualCallLogAction { + peerJid?: (string|null); + isIncoming?: (boolean|null); + } + + class DeleteIndividualCallLogAction implements IDeleteIndividualCallLogAction { + constructor(p?: proto.SyncActionValue.IDeleteIndividualCallLogAction); + public peerJid?: (string|null); + public isIncoming?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IDeleteIndividualCallLogAction): proto.SyncActionValue.DeleteIndividualCallLogAction; + public static encode(m: proto.SyncActionValue.IDeleteIndividualCallLogAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.DeleteIndividualCallLogAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.DeleteIndividualCallLogAction; + public static toObject(m: proto.SyncActionValue.DeleteIndividualCallLogAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDeleteMessageForMeAction { + deleteMedia?: (boolean|null); + messageTimestamp?: (number|Long|null); + } + + class DeleteMessageForMeAction implements IDeleteMessageForMeAction { + constructor(p?: proto.SyncActionValue.IDeleteMessageForMeAction); + public deleteMedia?: (boolean|null); + public messageTimestamp?: (number|Long|null); + public static create(properties?: proto.SyncActionValue.IDeleteMessageForMeAction): proto.SyncActionValue.DeleteMessageForMeAction; + public static encode(m: proto.SyncActionValue.IDeleteMessageForMeAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.DeleteMessageForMeAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.DeleteMessageForMeAction; + public static toObject(m: proto.SyncActionValue.DeleteMessageForMeAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IDetectedOutcomesStatusAction { + isEnabled?: (boolean|null); + } + + class DetectedOutcomesStatusAction implements IDetectedOutcomesStatusAction { + constructor(p?: proto.SyncActionValue.IDetectedOutcomesStatusAction); + public isEnabled?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IDetectedOutcomesStatusAction): proto.SyncActionValue.DetectedOutcomesStatusAction; + public static encode(m: proto.SyncActionValue.IDetectedOutcomesStatusAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.DetectedOutcomesStatusAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.DetectedOutcomesStatusAction; + public static toObject(m: proto.SyncActionValue.DetectedOutcomesStatusAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IExternalWebBetaAction { + isOptIn?: (boolean|null); + } + + class ExternalWebBetaAction implements IExternalWebBetaAction { + constructor(p?: proto.SyncActionValue.IExternalWebBetaAction); + public isOptIn?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IExternalWebBetaAction): proto.SyncActionValue.ExternalWebBetaAction; + public static encode(m: proto.SyncActionValue.IExternalWebBetaAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.ExternalWebBetaAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.ExternalWebBetaAction; + public static toObject(m: proto.SyncActionValue.ExternalWebBetaAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IFavoritesAction { + favorites?: (proto.SyncActionValue.FavoritesAction.IFavorite[]|null); + } + + class FavoritesAction implements IFavoritesAction { + constructor(p?: proto.SyncActionValue.IFavoritesAction); + public favorites: proto.SyncActionValue.FavoritesAction.IFavorite[]; + public static create(properties?: proto.SyncActionValue.IFavoritesAction): proto.SyncActionValue.FavoritesAction; + public static encode(m: proto.SyncActionValue.IFavoritesAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.FavoritesAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.FavoritesAction; + public static toObject(m: proto.SyncActionValue.FavoritesAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace FavoritesAction { + + interface IFavorite { + id?: (string|null); + } + + class Favorite implements IFavorite { + constructor(p?: proto.SyncActionValue.FavoritesAction.IFavorite); + public id?: (string|null); + public static create(properties?: proto.SyncActionValue.FavoritesAction.IFavorite): proto.SyncActionValue.FavoritesAction.Favorite; + public static encode(m: proto.SyncActionValue.FavoritesAction.IFavorite, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.FavoritesAction.Favorite; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.FavoritesAction.Favorite; + public static toObject(m: proto.SyncActionValue.FavoritesAction.Favorite, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IInteractiveMessageAction { + type?: (proto.SyncActionValue.InteractiveMessageAction.InteractiveMessageActionMode|null); + } + + class InteractiveMessageAction implements IInteractiveMessageAction { + constructor(p?: proto.SyncActionValue.IInteractiveMessageAction); + public type: proto.SyncActionValue.InteractiveMessageAction.InteractiveMessageActionMode; + public static create(properties?: proto.SyncActionValue.IInteractiveMessageAction): proto.SyncActionValue.InteractiveMessageAction; + public static encode(m: proto.SyncActionValue.IInteractiveMessageAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.InteractiveMessageAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.InteractiveMessageAction; + public static toObject(m: proto.SyncActionValue.InteractiveMessageAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace InteractiveMessageAction { + + enum InteractiveMessageActionMode { + DISABLE_CTA = 1 + } + } + + interface IKeyExpiration { + expiredKeyEpoch?: (number|null); + } + + class KeyExpiration implements IKeyExpiration { + constructor(p?: proto.SyncActionValue.IKeyExpiration); + public expiredKeyEpoch?: (number|null); + public static create(properties?: proto.SyncActionValue.IKeyExpiration): proto.SyncActionValue.KeyExpiration; + public static encode(m: proto.SyncActionValue.IKeyExpiration, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.KeyExpiration; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.KeyExpiration; + public static toObject(m: proto.SyncActionValue.KeyExpiration, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILabelAssociationAction { + labeled?: (boolean|null); + } + + class LabelAssociationAction implements ILabelAssociationAction { + constructor(p?: proto.SyncActionValue.ILabelAssociationAction); + public labeled?: (boolean|null); + public static create(properties?: proto.SyncActionValue.ILabelAssociationAction): proto.SyncActionValue.LabelAssociationAction; + public static encode(m: proto.SyncActionValue.ILabelAssociationAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.LabelAssociationAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.LabelAssociationAction; + public static toObject(m: proto.SyncActionValue.LabelAssociationAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILabelEditAction { + name?: (string|null); + color?: (number|null); + predefinedId?: (number|null); + deleted?: (boolean|null); + orderIndex?: (number|null); + isActive?: (boolean|null); + type?: (proto.SyncActionValue.LabelEditAction.ListType|null); + isImmutable?: (boolean|null); + muteEndTimeMs?: (number|Long|null); + } + + class LabelEditAction implements ILabelEditAction { + constructor(p?: proto.SyncActionValue.ILabelEditAction); + public name?: (string|null); + public color?: (number|null); + public predefinedId?: (number|null); + public deleted?: (boolean|null); + public orderIndex?: (number|null); + public isActive?: (boolean|null); + public type?: (proto.SyncActionValue.LabelEditAction.ListType|null); + public isImmutable?: (boolean|null); + public muteEndTimeMs?: (number|Long|null); + public static create(properties?: proto.SyncActionValue.ILabelEditAction): proto.SyncActionValue.LabelEditAction; + public static encode(m: proto.SyncActionValue.ILabelEditAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.LabelEditAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.LabelEditAction; + public static toObject(m: proto.SyncActionValue.LabelEditAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace LabelEditAction { + + enum ListType { + NONE = 0, + UNREAD = 1, + GROUPS = 2, + FAVORITES = 3, + PREDEFINED = 4, + CUSTOM = 5, + COMMUNITY = 6, + SERVER_ASSIGNED = 7, + DRAFTED = 8, + AI_HANDOFF = 9 + } + } + + interface ILabelReorderingAction { + sortedLabelIds?: (number[]|null); + } + + class LabelReorderingAction implements ILabelReorderingAction { + constructor(p?: proto.SyncActionValue.ILabelReorderingAction); + public sortedLabelIds: number[]; + public static create(properties?: proto.SyncActionValue.ILabelReorderingAction): proto.SyncActionValue.LabelReorderingAction; + public static encode(m: proto.SyncActionValue.ILabelReorderingAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.LabelReorderingAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.LabelReorderingAction; + public static toObject(m: proto.SyncActionValue.LabelReorderingAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILidContactAction { + fullName?: (string|null); + firstName?: (string|null); + username?: (string|null); + } + + class LidContactAction implements ILidContactAction { + constructor(p?: proto.SyncActionValue.ILidContactAction); + public fullName?: (string|null); + public firstName?: (string|null); + public username?: (string|null); + public static create(properties?: proto.SyncActionValue.ILidContactAction): proto.SyncActionValue.LidContactAction; + public static encode(m: proto.SyncActionValue.ILidContactAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.LidContactAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.LidContactAction; + public static toObject(m: proto.SyncActionValue.LidContactAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILocaleSetting { + locale?: (string|null); + } + + class LocaleSetting implements ILocaleSetting { + constructor(p?: proto.SyncActionValue.ILocaleSetting); + public locale?: (string|null); + public static create(properties?: proto.SyncActionValue.ILocaleSetting): proto.SyncActionValue.LocaleSetting; + public static encode(m: proto.SyncActionValue.ILocaleSetting, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.LocaleSetting; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.LocaleSetting; + public static toObject(m: proto.SyncActionValue.LocaleSetting, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ILockChatAction { + locked?: (boolean|null); + } + + class LockChatAction implements ILockChatAction { + constructor(p?: proto.SyncActionValue.ILockChatAction); + public locked?: (boolean|null); + public static create(properties?: proto.SyncActionValue.ILockChatAction): proto.SyncActionValue.LockChatAction; + public static encode(m: proto.SyncActionValue.ILockChatAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.LockChatAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.LockChatAction; + public static toObject(m: proto.SyncActionValue.LockChatAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMaibaAIFeaturesControlAction { + aiFeatureStatus?: (proto.SyncActionValue.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus|null); + } + + class MaibaAIFeaturesControlAction implements IMaibaAIFeaturesControlAction { + constructor(p?: proto.SyncActionValue.IMaibaAIFeaturesControlAction); + public aiFeatureStatus?: (proto.SyncActionValue.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus|null); + public static create(properties?: proto.SyncActionValue.IMaibaAIFeaturesControlAction): proto.SyncActionValue.MaibaAIFeaturesControlAction; + public static encode(m: proto.SyncActionValue.IMaibaAIFeaturesControlAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.MaibaAIFeaturesControlAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.MaibaAIFeaturesControlAction; + public static toObject(m: proto.SyncActionValue.MaibaAIFeaturesControlAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MaibaAIFeaturesControlAction { + + enum MaibaAIFeatureStatus { + ENABLED = 0, + ENABLED_HAS_LEARNING = 1, + DISABLED = 2 + } + } + + interface IMarkChatAsReadAction { + read?: (boolean|null); + messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + } + + class MarkChatAsReadAction implements IMarkChatAsReadAction { + constructor(p?: proto.SyncActionValue.IMarkChatAsReadAction); + public read?: (boolean|null); + public messageRange?: (proto.SyncActionValue.ISyncActionMessageRange|null); + public static create(properties?: proto.SyncActionValue.IMarkChatAsReadAction): proto.SyncActionValue.MarkChatAsReadAction; + public static encode(m: proto.SyncActionValue.IMarkChatAsReadAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.MarkChatAsReadAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.MarkChatAsReadAction; + public static toObject(m: proto.SyncActionValue.MarkChatAsReadAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMarketingMessageAction { + name?: (string|null); + message?: (string|null); + type?: (proto.SyncActionValue.MarketingMessageAction.MarketingMessagePrototypeType|null); + createdAt?: (number|Long|null); + lastSentAt?: (number|Long|null); + isDeleted?: (boolean|null); + mediaId?: (string|null); + } + + class MarketingMessageAction implements IMarketingMessageAction { + constructor(p?: proto.SyncActionValue.IMarketingMessageAction); + public name?: (string|null); + public message?: (string|null); + public type?: (proto.SyncActionValue.MarketingMessageAction.MarketingMessagePrototypeType|null); + public createdAt?: (number|Long|null); + public lastSentAt?: (number|Long|null); + public isDeleted?: (boolean|null); + public mediaId?: (string|null); + public static create(properties?: proto.SyncActionValue.IMarketingMessageAction): proto.SyncActionValue.MarketingMessageAction; + public static encode(m: proto.SyncActionValue.IMarketingMessageAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.MarketingMessageAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.MarketingMessageAction; + public static toObject(m: proto.SyncActionValue.MarketingMessageAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MarketingMessageAction { + + enum MarketingMessagePrototypeType { + PERSONALIZED = 0 + } + } + + interface IMarketingMessageBroadcastAction { + repliedCount?: (number|null); + } + + class MarketingMessageBroadcastAction implements IMarketingMessageBroadcastAction { + constructor(p?: proto.SyncActionValue.IMarketingMessageBroadcastAction); + public repliedCount?: (number|null); + public static create(properties?: proto.SyncActionValue.IMarketingMessageBroadcastAction): proto.SyncActionValue.MarketingMessageBroadcastAction; + public static encode(m: proto.SyncActionValue.IMarketingMessageBroadcastAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.MarketingMessageBroadcastAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.MarketingMessageBroadcastAction; + public static toObject(m: proto.SyncActionValue.MarketingMessageBroadcastAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMerchantPaymentPartnerAction { + status?: (proto.SyncActionValue.MerchantPaymentPartnerAction.Status|null); + country?: (string|null); + gatewayName?: (string|null); + credentialId?: (string|null); + } + + class MerchantPaymentPartnerAction implements IMerchantPaymentPartnerAction { + constructor(p?: proto.SyncActionValue.IMerchantPaymentPartnerAction); + public status: proto.SyncActionValue.MerchantPaymentPartnerAction.Status; + public country: string; + public gatewayName?: (string|null); + public credentialId?: (string|null); + public static create(properties?: proto.SyncActionValue.IMerchantPaymentPartnerAction): proto.SyncActionValue.MerchantPaymentPartnerAction; + public static encode(m: proto.SyncActionValue.IMerchantPaymentPartnerAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.MerchantPaymentPartnerAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.MerchantPaymentPartnerAction; + public static toObject(m: proto.SyncActionValue.MerchantPaymentPartnerAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace MerchantPaymentPartnerAction { + + enum Status { + ACTIVE = 0, + INACTIVE = 1 + } + } + + interface IMusicUserIdAction { + musicUserId?: (string|null); + musicUserIdMap?: ({ [k: string]: string }|null); + } + + class MusicUserIdAction implements IMusicUserIdAction { + constructor(p?: proto.SyncActionValue.IMusicUserIdAction); + public musicUserId?: (string|null); + public musicUserIdMap: { [k: string]: string }; + public static create(properties?: proto.SyncActionValue.IMusicUserIdAction): proto.SyncActionValue.MusicUserIdAction; + public static encode(m: proto.SyncActionValue.IMusicUserIdAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.MusicUserIdAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.MusicUserIdAction; + public static toObject(m: proto.SyncActionValue.MusicUserIdAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IMuteAction { + muted?: (boolean|null); + muteEndTimestamp?: (number|Long|null); + autoMuted?: (boolean|null); + } + + class MuteAction implements IMuteAction { + constructor(p?: proto.SyncActionValue.IMuteAction); + public muted?: (boolean|null); + public muteEndTimestamp?: (number|Long|null); + public autoMuted?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IMuteAction): proto.SyncActionValue.MuteAction; + public static encode(m: proto.SyncActionValue.IMuteAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.MuteAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.MuteAction; + public static toObject(m: proto.SyncActionValue.MuteAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface INewsletterSavedInterestsAction { + newsletterSavedInterests?: (string|null); + } + + class NewsletterSavedInterestsAction implements INewsletterSavedInterestsAction { + constructor(p?: proto.SyncActionValue.INewsletterSavedInterestsAction); + public newsletterSavedInterests?: (string|null); + public static create(properties?: proto.SyncActionValue.INewsletterSavedInterestsAction): proto.SyncActionValue.NewsletterSavedInterestsAction; + public static encode(m: proto.SyncActionValue.INewsletterSavedInterestsAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.NewsletterSavedInterestsAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.NewsletterSavedInterestsAction; + public static toObject(m: proto.SyncActionValue.NewsletterSavedInterestsAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface INoteEditAction { + type?: (proto.SyncActionValue.NoteEditAction.NoteType|null); + chatJid?: (string|null); + createdAt?: (number|Long|null); + deleted?: (boolean|null); + unstructuredContent?: (string|null); + } + + class NoteEditAction implements INoteEditAction { + constructor(p?: proto.SyncActionValue.INoteEditAction); + public type?: (proto.SyncActionValue.NoteEditAction.NoteType|null); + public chatJid?: (string|null); + public createdAt?: (number|Long|null); + public deleted?: (boolean|null); + public unstructuredContent?: (string|null); + public static create(properties?: proto.SyncActionValue.INoteEditAction): proto.SyncActionValue.NoteEditAction; + public static encode(m: proto.SyncActionValue.INoteEditAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.NoteEditAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.NoteEditAction; + public static toObject(m: proto.SyncActionValue.NoteEditAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace NoteEditAction { + + enum NoteType { + UNSTRUCTURED = 1, + STRUCTURED = 2 + } + } + + interface INotificationActivitySettingAction { + notificationActivitySetting?: (proto.SyncActionValue.NotificationActivitySettingAction.NotificationActivitySetting|null); + } + + class NotificationActivitySettingAction implements INotificationActivitySettingAction { + constructor(p?: proto.SyncActionValue.INotificationActivitySettingAction); + public notificationActivitySetting?: (proto.SyncActionValue.NotificationActivitySettingAction.NotificationActivitySetting|null); + public static create(properties?: proto.SyncActionValue.INotificationActivitySettingAction): proto.SyncActionValue.NotificationActivitySettingAction; + public static encode(m: proto.SyncActionValue.INotificationActivitySettingAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.NotificationActivitySettingAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.NotificationActivitySettingAction; + public static toObject(m: proto.SyncActionValue.NotificationActivitySettingAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace NotificationActivitySettingAction { + + enum NotificationActivitySetting { + DEFAULT_ALL_MESSAGES = 0, + ALL_MESSAGES = 1, + HIGHLIGHTS = 2, + DEFAULT_HIGHLIGHTS = 3 + } + } + + interface INuxAction { + acknowledged?: (boolean|null); + } + + class NuxAction implements INuxAction { + constructor(p?: proto.SyncActionValue.INuxAction); + public acknowledged?: (boolean|null); + public static create(properties?: proto.SyncActionValue.INuxAction): proto.SyncActionValue.NuxAction; + public static encode(m: proto.SyncActionValue.INuxAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.NuxAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.NuxAction; + public static toObject(m: proto.SyncActionValue.NuxAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPaymentInfoAction { + cpi?: (string|null); + } + + class PaymentInfoAction implements IPaymentInfoAction { + constructor(p?: proto.SyncActionValue.IPaymentInfoAction); + public cpi?: (string|null); + public static create(properties?: proto.SyncActionValue.IPaymentInfoAction): proto.SyncActionValue.PaymentInfoAction; + public static encode(m: proto.SyncActionValue.IPaymentInfoAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PaymentInfoAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PaymentInfoAction; + public static toObject(m: proto.SyncActionValue.PaymentInfoAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPaymentTosAction { + paymentNotice?: (proto.SyncActionValue.PaymentTosAction.PaymentNotice|null); + accepted?: (boolean|null); + } + + class PaymentTosAction implements IPaymentTosAction { + constructor(p?: proto.SyncActionValue.IPaymentTosAction); + public paymentNotice: proto.SyncActionValue.PaymentTosAction.PaymentNotice; + public accepted: boolean; + public static create(properties?: proto.SyncActionValue.IPaymentTosAction): proto.SyncActionValue.PaymentTosAction; + public static encode(m: proto.SyncActionValue.IPaymentTosAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PaymentTosAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PaymentTosAction; + public static toObject(m: proto.SyncActionValue.PaymentTosAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PaymentTosAction { + + enum PaymentNotice { + BR_PAY_PRIVACY_POLICY = 0 + } + } + + interface IPinAction { + pinned?: (boolean|null); + } + + class PinAction implements IPinAction { + constructor(p?: proto.SyncActionValue.IPinAction); + public pinned?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IPinAction): proto.SyncActionValue.PinAction; + public static encode(m: proto.SyncActionValue.IPinAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PinAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PinAction; + public static toObject(m: proto.SyncActionValue.PinAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPnForLidChatAction { + pnJid?: (string|null); + } + + class PnForLidChatAction implements IPnForLidChatAction { + constructor(p?: proto.SyncActionValue.IPnForLidChatAction); + public pnJid?: (string|null); + public static create(properties?: proto.SyncActionValue.IPnForLidChatAction): proto.SyncActionValue.PnForLidChatAction; + public static encode(m: proto.SyncActionValue.IPnForLidChatAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PnForLidChatAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PnForLidChatAction; + public static toObject(m: proto.SyncActionValue.PnForLidChatAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPrimaryFeature { + flags?: (string[]|null); + } + + class PrimaryFeature implements IPrimaryFeature { + constructor(p?: proto.SyncActionValue.IPrimaryFeature); + public flags: string[]; + public static create(properties?: proto.SyncActionValue.IPrimaryFeature): proto.SyncActionValue.PrimaryFeature; + public static encode(m: proto.SyncActionValue.IPrimaryFeature, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PrimaryFeature; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PrimaryFeature; + public static toObject(m: proto.SyncActionValue.PrimaryFeature, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPrimaryVersionAction { + version?: (string|null); + } + + class PrimaryVersionAction implements IPrimaryVersionAction { + constructor(p?: proto.SyncActionValue.IPrimaryVersionAction); + public version?: (string|null); + public static create(properties?: proto.SyncActionValue.IPrimaryVersionAction): proto.SyncActionValue.PrimaryVersionAction; + public static encode(m: proto.SyncActionValue.IPrimaryVersionAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PrimaryVersionAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PrimaryVersionAction; + public static toObject(m: proto.SyncActionValue.PrimaryVersionAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPrivacySettingChannelsPersonalisedRecommendationAction { + isUserOptedOut?: (boolean|null); + } + + class PrivacySettingChannelsPersonalisedRecommendationAction implements IPrivacySettingChannelsPersonalisedRecommendationAction { + constructor(p?: proto.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction); + public isUserOptedOut?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction): proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction; + public static encode(m: proto.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction; + public static toObject(m: proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPrivacySettingDisableLinkPreviewsAction { + isPreviewsDisabled?: (boolean|null); + } + + class PrivacySettingDisableLinkPreviewsAction implements IPrivacySettingDisableLinkPreviewsAction { + constructor(p?: proto.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction); + public isPreviewsDisabled?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction): proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction; + public static encode(m: proto.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction; + public static toObject(m: proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPrivacySettingRelayAllCalls { + isEnabled?: (boolean|null); + } + + class PrivacySettingRelayAllCalls implements IPrivacySettingRelayAllCalls { + constructor(p?: proto.SyncActionValue.IPrivacySettingRelayAllCalls); + public isEnabled?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IPrivacySettingRelayAllCalls): proto.SyncActionValue.PrivacySettingRelayAllCalls; + public static encode(m: proto.SyncActionValue.IPrivacySettingRelayAllCalls, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PrivacySettingRelayAllCalls; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PrivacySettingRelayAllCalls; + public static toObject(m: proto.SyncActionValue.PrivacySettingRelayAllCalls, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IPrivateProcessingSettingAction { + privateProcessingStatus?: (proto.SyncActionValue.PrivateProcessingSettingAction.PrivateProcessingStatus|null); + } + + class PrivateProcessingSettingAction implements IPrivateProcessingSettingAction { + constructor(p?: proto.SyncActionValue.IPrivateProcessingSettingAction); + public privateProcessingStatus?: (proto.SyncActionValue.PrivateProcessingSettingAction.PrivateProcessingStatus|null); + public static create(properties?: proto.SyncActionValue.IPrivateProcessingSettingAction): proto.SyncActionValue.PrivateProcessingSettingAction; + public static encode(m: proto.SyncActionValue.IPrivateProcessingSettingAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PrivateProcessingSettingAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PrivateProcessingSettingAction; + public static toObject(m: proto.SyncActionValue.PrivateProcessingSettingAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace PrivateProcessingSettingAction { + + enum PrivateProcessingStatus { + UNDEFINED = 0, + ENABLED = 1, + DISABLED = 2 + } + } + + interface IPushNameSetting { + name?: (string|null); + } + + class PushNameSetting implements IPushNameSetting { + constructor(p?: proto.SyncActionValue.IPushNameSetting); + public name?: (string|null); + public static create(properties?: proto.SyncActionValue.IPushNameSetting): proto.SyncActionValue.PushNameSetting; + public static encode(m: proto.SyncActionValue.IPushNameSetting, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.PushNameSetting; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.PushNameSetting; + public static toObject(m: proto.SyncActionValue.PushNameSetting, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IQuickReplyAction { + shortcut?: (string|null); + message?: (string|null); + keywords?: (string[]|null); + count?: (number|null); + deleted?: (boolean|null); + } + + class QuickReplyAction implements IQuickReplyAction { + constructor(p?: proto.SyncActionValue.IQuickReplyAction); + public shortcut?: (string|null); + public message?: (string|null); + public keywords: string[]; + public count?: (number|null); + public deleted?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IQuickReplyAction): proto.SyncActionValue.QuickReplyAction; + public static encode(m: proto.SyncActionValue.IQuickReplyAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.QuickReplyAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.QuickReplyAction; + public static toObject(m: proto.SyncActionValue.QuickReplyAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRecentEmojiWeightsAction { + weights?: (proto.IRecentEmojiWeight[]|null); + } + + class RecentEmojiWeightsAction implements IRecentEmojiWeightsAction { + constructor(p?: proto.SyncActionValue.IRecentEmojiWeightsAction); + public weights: proto.IRecentEmojiWeight[]; + public static create(properties?: proto.SyncActionValue.IRecentEmojiWeightsAction): proto.SyncActionValue.RecentEmojiWeightsAction; + public static encode(m: proto.SyncActionValue.IRecentEmojiWeightsAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.RecentEmojiWeightsAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.RecentEmojiWeightsAction; + public static toObject(m: proto.SyncActionValue.RecentEmojiWeightsAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IRemoveRecentStickerAction { + lastStickerSentTs?: (number|Long|null); + } + + class RemoveRecentStickerAction implements IRemoveRecentStickerAction { + constructor(p?: proto.SyncActionValue.IRemoveRecentStickerAction); + public lastStickerSentTs?: (number|Long|null); + public static create(properties?: proto.SyncActionValue.IRemoveRecentStickerAction): proto.SyncActionValue.RemoveRecentStickerAction; + public static encode(m: proto.SyncActionValue.IRemoveRecentStickerAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.RemoveRecentStickerAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.RemoveRecentStickerAction; + public static toObject(m: proto.SyncActionValue.RemoveRecentStickerAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStarAction { + starred?: (boolean|null); + } + + class StarAction implements IStarAction { + constructor(p?: proto.SyncActionValue.IStarAction); + public starred?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IStarAction): proto.SyncActionValue.StarAction; + public static encode(m: proto.SyncActionValue.IStarAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.StarAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.StarAction; + public static toObject(m: proto.SyncActionValue.StarAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStatusPostOptInNotificationPreferencesAction { + enabled?: (boolean|null); + } + + class StatusPostOptInNotificationPreferencesAction implements IStatusPostOptInNotificationPreferencesAction { + constructor(p?: proto.SyncActionValue.IStatusPostOptInNotificationPreferencesAction); + public enabled?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IStatusPostOptInNotificationPreferencesAction): proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction; + public static encode(m: proto.SyncActionValue.IStatusPostOptInNotificationPreferencesAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction; + public static toObject(m: proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IStatusPrivacyAction { + mode?: (proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode|null); + userJid?: (string[]|null); + } + + class StatusPrivacyAction implements IStatusPrivacyAction { + constructor(p?: proto.SyncActionValue.IStatusPrivacyAction); + public mode?: (proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode|null); + public userJid: string[]; + public static create(properties?: proto.SyncActionValue.IStatusPrivacyAction): proto.SyncActionValue.StatusPrivacyAction; + public static encode(m: proto.SyncActionValue.IStatusPrivacyAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.StatusPrivacyAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.StatusPrivacyAction; + public static toObject(m: proto.SyncActionValue.StatusPrivacyAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace StatusPrivacyAction { + + enum StatusDistributionMode { + ALLOW_LIST = 0, + DENY_LIST = 1, + CONTACTS = 2, + CLOSE_FRIENDS = 3 + } + } + + interface IStickerAction { + url?: (string|null); + fileEncSha256?: (Uint8Array|null); + mediaKey?: (Uint8Array|null); + mimetype?: (string|null); + height?: (number|null); + width?: (number|null); + directPath?: (string|null); + fileLength?: (number|Long|null); + isFavorite?: (boolean|null); + deviceIdHint?: (number|null); + isLottie?: (boolean|null); + imageHash?: (string|null); + isAvatarSticker?: (boolean|null); + } + + class StickerAction implements IStickerAction { + constructor(p?: proto.SyncActionValue.IStickerAction); + public url?: (string|null); + public fileEncSha256?: (Uint8Array|null); + public mediaKey?: (Uint8Array|null); + public mimetype?: (string|null); + public height?: (number|null); + public width?: (number|null); + public directPath?: (string|null); + public fileLength?: (number|Long|null); + public isFavorite?: (boolean|null); + public deviceIdHint?: (number|null); + public isLottie?: (boolean|null); + public imageHash?: (string|null); + public isAvatarSticker?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IStickerAction): proto.SyncActionValue.StickerAction; + public static encode(m: proto.SyncActionValue.IStickerAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.StickerAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.StickerAction; + public static toObject(m: proto.SyncActionValue.StickerAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISubscriptionAction { + isDeactivated?: (boolean|null); + isAutoRenewing?: (boolean|null); + expirationDate?: (number|Long|null); + } + + class SubscriptionAction implements ISubscriptionAction { + constructor(p?: proto.SyncActionValue.ISubscriptionAction); + public isDeactivated?: (boolean|null); + public isAutoRenewing?: (boolean|null); + public expirationDate?: (number|Long|null); + public static create(properties?: proto.SyncActionValue.ISubscriptionAction): proto.SyncActionValue.SubscriptionAction; + public static encode(m: proto.SyncActionValue.ISubscriptionAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.SubscriptionAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.SubscriptionAction; + public static toObject(m: proto.SyncActionValue.SubscriptionAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncActionMessage { + key?: (proto.IMessageKey|null); + timestamp?: (number|Long|null); + } + + class SyncActionMessage implements ISyncActionMessage { + constructor(p?: proto.SyncActionValue.ISyncActionMessage); + public key?: (proto.IMessageKey|null); + public timestamp?: (number|Long|null); + public static create(properties?: proto.SyncActionValue.ISyncActionMessage): proto.SyncActionValue.SyncActionMessage; + public static encode(m: proto.SyncActionValue.ISyncActionMessage, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.SyncActionMessage; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.SyncActionMessage; + public static toObject(m: proto.SyncActionValue.SyncActionMessage, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncActionMessageRange { + lastMessageTimestamp?: (number|Long|null); + lastSystemMessageTimestamp?: (number|Long|null); + messages?: (proto.SyncActionValue.ISyncActionMessage[]|null); + } + + class SyncActionMessageRange implements ISyncActionMessageRange { + constructor(p?: proto.SyncActionValue.ISyncActionMessageRange); + public lastMessageTimestamp?: (number|Long|null); + public lastSystemMessageTimestamp?: (number|Long|null); + public messages: proto.SyncActionValue.ISyncActionMessage[]; + public static create(properties?: proto.SyncActionValue.ISyncActionMessageRange): proto.SyncActionValue.SyncActionMessageRange; + public static encode(m: proto.SyncActionValue.ISyncActionMessageRange, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.SyncActionMessageRange; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.SyncActionMessageRange; + public static toObject(m: proto.SyncActionValue.SyncActionMessageRange, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ITimeFormatAction { + isTwentyFourHourFormatEnabled?: (boolean|null); + } + + class TimeFormatAction implements ITimeFormatAction { + constructor(p?: proto.SyncActionValue.ITimeFormatAction); + public isTwentyFourHourFormatEnabled?: (boolean|null); + public static create(properties?: proto.SyncActionValue.ITimeFormatAction): proto.SyncActionValue.TimeFormatAction; + public static encode(m: proto.SyncActionValue.ITimeFormatAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.TimeFormatAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.TimeFormatAction; + public static toObject(m: proto.SyncActionValue.TimeFormatAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IUGCBot { + definition?: (Uint8Array|null); + } + + class UGCBot implements IUGCBot { + constructor(p?: proto.SyncActionValue.IUGCBot); + public definition?: (Uint8Array|null); + public static create(properties?: proto.SyncActionValue.IUGCBot): proto.SyncActionValue.UGCBot; + public static encode(m: proto.SyncActionValue.IUGCBot, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.UGCBot; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.UGCBot; + public static toObject(m: proto.SyncActionValue.UGCBot, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IUnarchiveChatsSetting { + unarchiveChats?: (boolean|null); + } + + class UnarchiveChatsSetting implements IUnarchiveChatsSetting { + constructor(p?: proto.SyncActionValue.IUnarchiveChatsSetting); + public unarchiveChats?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IUnarchiveChatsSetting): proto.SyncActionValue.UnarchiveChatsSetting; + public static encode(m: proto.SyncActionValue.IUnarchiveChatsSetting, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.UnarchiveChatsSetting; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.UnarchiveChatsSetting; + public static toObject(m: proto.SyncActionValue.UnarchiveChatsSetting, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IUserStatusMuteAction { + muted?: (boolean|null); + } + + class UserStatusMuteAction implements IUserStatusMuteAction { + constructor(p?: proto.SyncActionValue.IUserStatusMuteAction); + public muted?: (boolean|null); + public static create(properties?: proto.SyncActionValue.IUserStatusMuteAction): proto.SyncActionValue.UserStatusMuteAction; + public static encode(m: proto.SyncActionValue.IUserStatusMuteAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.UserStatusMuteAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.UserStatusMuteAction; + public static toObject(m: proto.SyncActionValue.UserStatusMuteAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IUsernameChatStartModeAction { + chatStartMode?: (proto.SyncActionValue.UsernameChatStartModeAction.ChatStartMode|null); + } + + class UsernameChatStartModeAction implements IUsernameChatStartModeAction { + constructor(p?: proto.SyncActionValue.IUsernameChatStartModeAction); + public chatStartMode?: (proto.SyncActionValue.UsernameChatStartModeAction.ChatStartMode|null); + public static create(properties?: proto.SyncActionValue.IUsernameChatStartModeAction): proto.SyncActionValue.UsernameChatStartModeAction; + public static encode(m: proto.SyncActionValue.IUsernameChatStartModeAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.UsernameChatStartModeAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.UsernameChatStartModeAction; + public static toObject(m: proto.SyncActionValue.UsernameChatStartModeAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace UsernameChatStartModeAction { + + enum ChatStartMode { + LID = 1, + PN = 2 + } + } + + interface IWaffleAccountLinkStateAction { + linkState?: (proto.SyncActionValue.WaffleAccountLinkStateAction.AccountLinkState|null); + } + + class WaffleAccountLinkStateAction implements IWaffleAccountLinkStateAction { + constructor(p?: proto.SyncActionValue.IWaffleAccountLinkStateAction); + public linkState?: (proto.SyncActionValue.WaffleAccountLinkStateAction.AccountLinkState|null); + public static create(properties?: proto.SyncActionValue.IWaffleAccountLinkStateAction): proto.SyncActionValue.WaffleAccountLinkStateAction; + public static encode(m: proto.SyncActionValue.IWaffleAccountLinkStateAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.WaffleAccountLinkStateAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.WaffleAccountLinkStateAction; + public static toObject(m: proto.SyncActionValue.WaffleAccountLinkStateAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace WaffleAccountLinkStateAction { + + enum AccountLinkState { + ACTIVE = 0, + PAUSED = 1, + UNLINKED = 2 + } + } + + interface IWamoUserIdentifierAction { + identifier?: (string|null); + } + + class WamoUserIdentifierAction implements IWamoUserIdentifierAction { + constructor(p?: proto.SyncActionValue.IWamoUserIdentifierAction); + public identifier?: (string|null); + public static create(properties?: proto.SyncActionValue.IWamoUserIdentifierAction): proto.SyncActionValue.WamoUserIdentifierAction; + public static encode(m: proto.SyncActionValue.IWamoUserIdentifierAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.WamoUserIdentifierAction; + public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.WamoUserIdentifierAction; + public static toObject(m: proto.SyncActionValue.WamoUserIdentifierAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface ISyncdIndex { + blob?: (Uint8Array|null); + } + + class SyncdIndex implements ISyncdIndex { + constructor(p?: proto.ISyncdIndex); + public blob?: (Uint8Array|null); + public static create(properties?: proto.ISyncdIndex): proto.SyncdIndex; + public static encode(m: proto.ISyncdIndex, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdIndex; + public static fromObject(d: { [k: string]: any }): proto.SyncdIndex; + public static toObject(m: proto.SyncdIndex, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncdMutation { + operation?: (proto.SyncdMutation.SyncdOperation|null); + record?: (proto.ISyncdRecord|null); + } + + class SyncdMutation implements ISyncdMutation { + constructor(p?: proto.ISyncdMutation); + public operation?: (proto.SyncdMutation.SyncdOperation|null); + public record?: (proto.ISyncdRecord|null); + public static create(properties?: proto.ISyncdMutation): proto.SyncdMutation; + public static encode(m: proto.ISyncdMutation, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdMutation; + public static fromObject(d: { [k: string]: any }): proto.SyncdMutation; + public static toObject(m: proto.SyncdMutation, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace SyncdMutation { + + enum SyncdOperation { + SET = 0, + REMOVE = 1 + } + } + + interface ISyncdMutations { + mutations?: (proto.ISyncdMutation[]|null); + } + + class SyncdMutations implements ISyncdMutations { + constructor(p?: proto.ISyncdMutations); + public mutations: proto.ISyncdMutation[]; + public static create(properties?: proto.ISyncdMutations): proto.SyncdMutations; + public static encode(m: proto.ISyncdMutations, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdMutations; + public static fromObject(d: { [k: string]: any }): proto.SyncdMutations; + public static toObject(m: proto.SyncdMutations, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncdPatch { + version?: (proto.ISyncdVersion|null); + mutations?: (proto.ISyncdMutation[]|null); + externalMutations?: (proto.IExternalBlobReference|null); + snapshotMac?: (Uint8Array|null); + patchMac?: (Uint8Array|null); + keyId?: (proto.IKeyId|null); + exitCode?: (proto.IExitCode|null); + deviceIndex?: (number|null); + clientDebugData?: (Uint8Array|null); + } + + class SyncdPatch implements ISyncdPatch { + constructor(p?: proto.ISyncdPatch); + public version?: (proto.ISyncdVersion|null); + public mutations: proto.ISyncdMutation[]; + public externalMutations?: (proto.IExternalBlobReference|null); + public snapshotMac?: (Uint8Array|null); + public patchMac?: (Uint8Array|null); + public keyId?: (proto.IKeyId|null); + public exitCode?: (proto.IExitCode|null); + public deviceIndex?: (number|null); + public clientDebugData?: (Uint8Array|null); + public static create(properties?: proto.ISyncdPatch): proto.SyncdPatch; + public static encode(m: proto.ISyncdPatch, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdPatch; + public static fromObject(d: { [k: string]: any }): proto.SyncdPatch; + public static toObject(m: proto.SyncdPatch, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncdRecord { + index?: (proto.ISyncdIndex|null); + value?: (proto.ISyncdValue|null); + keyId?: (proto.IKeyId|null); + } + + class SyncdRecord implements ISyncdRecord { + constructor(p?: proto.ISyncdRecord); + public index?: (proto.ISyncdIndex|null); + public value?: (proto.ISyncdValue|null); + public keyId?: (proto.IKeyId|null); + public static create(properties?: proto.ISyncdRecord): proto.SyncdRecord; + public static encode(m: proto.ISyncdRecord, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdRecord; + public static fromObject(d: { [k: string]: any }): proto.SyncdRecord; + public static toObject(m: proto.SyncdRecord, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncdSnapshot { + version?: (proto.ISyncdVersion|null); + records?: (proto.ISyncdRecord[]|null); + mac?: (Uint8Array|null); + keyId?: (proto.IKeyId|null); + } + + class SyncdSnapshot implements ISyncdSnapshot { + constructor(p?: proto.ISyncdSnapshot); + public version?: (proto.ISyncdVersion|null); + public records: proto.ISyncdRecord[]; + public mac?: (Uint8Array|null); + public keyId?: (proto.IKeyId|null); + public static create(properties?: proto.ISyncdSnapshot): proto.SyncdSnapshot; + public static encode(m: proto.ISyncdSnapshot, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdSnapshot; + public static fromObject(d: { [k: string]: any }): proto.SyncdSnapshot; + public static toObject(m: proto.SyncdSnapshot, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncdValue { + blob?: (Uint8Array|null); + } + + class SyncdValue implements ISyncdValue { + constructor(p?: proto.ISyncdValue); + public blob?: (Uint8Array|null); + public static create(properties?: proto.ISyncdValue): proto.SyncdValue; + public static encode(m: proto.ISyncdValue, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdValue; + public static fromObject(d: { [k: string]: any }): proto.SyncdValue; + public static toObject(m: proto.SyncdValue, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ISyncdVersion { + version?: (number|Long|null); + } + + class SyncdVersion implements ISyncdVersion { + constructor(p?: proto.ISyncdVersion); + public version?: (number|Long|null); + public static create(properties?: proto.ISyncdVersion): proto.SyncdVersion; + public static encode(m: proto.ISyncdVersion, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncdVersion; + public static fromObject(d: { [k: string]: any }): proto.SyncdVersion; + public static toObject(m: proto.SyncdVersion, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ITapLinkAction { + title?: (string|null); + tapUrl?: (string|null); + } + + class TapLinkAction implements ITapLinkAction { + constructor(p?: proto.ITapLinkAction); + public title?: (string|null); + public tapUrl?: (string|null); + public static create(properties?: proto.ITapLinkAction): proto.TapLinkAction; + public static encode(m: proto.ITapLinkAction, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.TapLinkAction; + public static fromObject(d: { [k: string]: any }): proto.TapLinkAction; + public static toObject(m: proto.TapLinkAction, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface ITemplateButton { + index?: (number|null); + quickReplyButton?: (proto.TemplateButton.IQuickReplyButton|null); + urlButton?: (proto.TemplateButton.IURLButton|null); + callButton?: (proto.TemplateButton.ICallButton|null); + } + + class TemplateButton implements ITemplateButton { + constructor(p?: proto.ITemplateButton); + public index?: (number|null); + public quickReplyButton?: (proto.TemplateButton.IQuickReplyButton|null); + public urlButton?: (proto.TemplateButton.IURLButton|null); + public callButton?: (proto.TemplateButton.ICallButton|null); + public button?: ("quickReplyButton"|"urlButton"|"callButton"); + public static create(properties?: proto.ITemplateButton): proto.TemplateButton; + public static encode(m: proto.ITemplateButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.TemplateButton; + public static fromObject(d: { [k: string]: any }): proto.TemplateButton; + public static toObject(m: proto.TemplateButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace TemplateButton { + + interface ICallButton { + displayText?: (proto.Message.IHighlyStructuredMessage|null); + phoneNumber?: (proto.Message.IHighlyStructuredMessage|null); + } + + class CallButton implements ICallButton { + constructor(p?: proto.TemplateButton.ICallButton); + public displayText?: (proto.Message.IHighlyStructuredMessage|null); + public phoneNumber?: (proto.Message.IHighlyStructuredMessage|null); + public static create(properties?: proto.TemplateButton.ICallButton): proto.TemplateButton.CallButton; + public static encode(m: proto.TemplateButton.ICallButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.TemplateButton.CallButton; + public static fromObject(d: { [k: string]: any }): proto.TemplateButton.CallButton; + public static toObject(m: proto.TemplateButton.CallButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IQuickReplyButton { + displayText?: (proto.Message.IHighlyStructuredMessage|null); + id?: (string|null); + } + + class QuickReplyButton implements IQuickReplyButton { + constructor(p?: proto.TemplateButton.IQuickReplyButton); + public displayText?: (proto.Message.IHighlyStructuredMessage|null); + public id?: (string|null); + public static create(properties?: proto.TemplateButton.IQuickReplyButton): proto.TemplateButton.QuickReplyButton; + public static encode(m: proto.TemplateButton.IQuickReplyButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.TemplateButton.QuickReplyButton; + public static fromObject(d: { [k: string]: any }): proto.TemplateButton.QuickReplyButton; + public static toObject(m: proto.TemplateButton.QuickReplyButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IURLButton { + displayText?: (proto.Message.IHighlyStructuredMessage|null); + url?: (proto.Message.IHighlyStructuredMessage|null); + } + + class URLButton implements IURLButton { + constructor(p?: proto.TemplateButton.IURLButton); + public displayText?: (proto.Message.IHighlyStructuredMessage|null); + public url?: (proto.Message.IHighlyStructuredMessage|null); + public static create(properties?: proto.TemplateButton.IURLButton): proto.TemplateButton.URLButton; + public static encode(m: proto.TemplateButton.IURLButton, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.TemplateButton.URLButton; + public static fromObject(d: { [k: string]: any }): proto.TemplateButton.URLButton; + public static toObject(m: proto.TemplateButton.URLButton, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IThreadID { + threadType?: (proto.ThreadID.ThreadType|null); + threadKey?: (proto.IMessageKey|null); + } + + class ThreadID implements IThreadID { + constructor(p?: proto.IThreadID); + public threadType?: (proto.ThreadID.ThreadType|null); + public threadKey?: (proto.IMessageKey|null); + public static create(properties?: proto.IThreadID): proto.ThreadID; + public static encode(m: proto.IThreadID, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.ThreadID; + public static fromObject(d: { [k: string]: any }): proto.ThreadID; + public static toObject(m: proto.ThreadID, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace ThreadID { + + enum ThreadType { + UNKNOWN = 0, + VIEW_REPLIES = 1, + AI_THREAD = 2 + } + } + + interface IUrlTrackingMap { + urlTrackingMapElements?: (proto.UrlTrackingMap.IUrlTrackingMapElement[]|null); + } + + class UrlTrackingMap implements IUrlTrackingMap { + constructor(p?: proto.IUrlTrackingMap); + public urlTrackingMapElements: proto.UrlTrackingMap.IUrlTrackingMapElement[]; + public static create(properties?: proto.IUrlTrackingMap): proto.UrlTrackingMap; + public static encode(m: proto.IUrlTrackingMap, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.UrlTrackingMap; + public static fromObject(d: { [k: string]: any }): proto.UrlTrackingMap; + public static toObject(m: proto.UrlTrackingMap, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace UrlTrackingMap { + + interface IUrlTrackingMapElement { + originalUrl?: (string|null); + unconsentedUsersUrl?: (string|null); + consentedUsersUrl?: (string|null); + cardIndex?: (number|null); + } + + class UrlTrackingMapElement implements IUrlTrackingMapElement { + constructor(p?: proto.UrlTrackingMap.IUrlTrackingMapElement); + public originalUrl?: (string|null); + public unconsentedUsersUrl?: (string|null); + public consentedUsersUrl?: (string|null); + public cardIndex?: (number|null); + public static create(properties?: proto.UrlTrackingMap.IUrlTrackingMapElement): proto.UrlTrackingMap.UrlTrackingMapElement; + public static encode(m: proto.UrlTrackingMap.IUrlTrackingMapElement, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.UrlTrackingMap.UrlTrackingMapElement; + public static fromObject(d: { [k: string]: any }): proto.UrlTrackingMap.UrlTrackingMapElement; + public static toObject(m: proto.UrlTrackingMap.UrlTrackingMapElement, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IUserPassword { + encoding?: (proto.UserPassword.Encoding|null); + transformer?: (proto.UserPassword.Transformer|null); + transformerArg?: (proto.UserPassword.ITransformerArg[]|null); + transformedData?: (Uint8Array|null); + } + + class UserPassword implements IUserPassword { + constructor(p?: proto.IUserPassword); + public encoding?: (proto.UserPassword.Encoding|null); + public transformer?: (proto.UserPassword.Transformer|null); + public transformerArg: proto.UserPassword.ITransformerArg[]; + public transformedData?: (Uint8Array|null); + public static create(properties?: proto.IUserPassword): proto.UserPassword; + public static encode(m: proto.IUserPassword, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.UserPassword; + public static fromObject(d: { [k: string]: any }): proto.UserPassword; + public static toObject(m: proto.UserPassword, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace UserPassword { + + enum Encoding { + UTF8 = 0, + UTF8_BROKEN = 1 + } + + enum Transformer { + NONE = 0, + PBKDF2_HMAC_SHA512 = 1, + PBKDF2_HMAC_SHA384 = 2 + } + + interface ITransformerArg { + key?: (string|null); + value?: (proto.UserPassword.TransformerArg.IValue|null); + } + + class TransformerArg implements ITransformerArg { + constructor(p?: proto.UserPassword.ITransformerArg); + public key?: (string|null); + public value?: (proto.UserPassword.TransformerArg.IValue|null); + public static create(properties?: proto.UserPassword.ITransformerArg): proto.UserPassword.TransformerArg; + public static encode(m: proto.UserPassword.ITransformerArg, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.UserPassword.TransformerArg; + public static fromObject(d: { [k: string]: any }): proto.UserPassword.TransformerArg; + public static toObject(m: proto.UserPassword.TransformerArg, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace TransformerArg { + + interface IValue { + asBlob?: (Uint8Array|null); + asUnsignedInteger?: (number|null); + } + + class Value implements IValue { + constructor(p?: proto.UserPassword.TransformerArg.IValue); + public asBlob?: (Uint8Array|null); + public asUnsignedInteger?: (number|null); + public value?: ("asBlob"|"asUnsignedInteger"); + public static create(properties?: proto.UserPassword.TransformerArg.IValue): proto.UserPassword.TransformerArg.Value; + public static encode(m: proto.UserPassword.TransformerArg.IValue, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.UserPassword.TransformerArg.Value; + public static fromObject(d: { [k: string]: any }): proto.UserPassword.TransformerArg.Value; + public static toObject(m: proto.UserPassword.TransformerArg.Value, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + } + + interface IUserReceipt { + userJid?: (string|null); + receiptTimestamp?: (number|Long|null); + readTimestamp?: (number|Long|null); + playedTimestamp?: (number|Long|null); + pendingDeviceJid?: (string[]|null); + deliveredDeviceJid?: (string[]|null); + } + + class UserReceipt implements IUserReceipt { + constructor(p?: proto.IUserReceipt); + public userJid: string; + public receiptTimestamp?: (number|Long|null); + public readTimestamp?: (number|Long|null); + public playedTimestamp?: (number|Long|null); + public pendingDeviceJid: string[]; + public deliveredDeviceJid: string[]; + public static create(properties?: proto.IUserReceipt): proto.UserReceipt; + public static encode(m: proto.IUserReceipt, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.UserReceipt; + public static fromObject(d: { [k: string]: any }): proto.UserReceipt; + public static toObject(m: proto.UserReceipt, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IVerifiedNameCertificate { + details?: (Uint8Array|null); + signature?: (Uint8Array|null); + serverSignature?: (Uint8Array|null); + } + + class VerifiedNameCertificate implements IVerifiedNameCertificate { + constructor(p?: proto.IVerifiedNameCertificate); + public details?: (Uint8Array|null); + public signature?: (Uint8Array|null); + public serverSignature?: (Uint8Array|null); + public static create(properties?: proto.IVerifiedNameCertificate): proto.VerifiedNameCertificate; + public static encode(m: proto.IVerifiedNameCertificate, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.VerifiedNameCertificate; + public static fromObject(d: { [k: string]: any }): proto.VerifiedNameCertificate; + public static toObject(m: proto.VerifiedNameCertificate, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace VerifiedNameCertificate { + + interface IDetails { + serial?: (number|Long|null); + issuer?: (string|null); + verifiedName?: (string|null); + localizedNames?: (proto.ILocalizedName[]|null); + issueTime?: (number|Long|null); + } + + class Details implements IDetails { + constructor(p?: proto.VerifiedNameCertificate.IDetails); + public serial?: (number|Long|null); + public issuer?: (string|null); + public verifiedName?: (string|null); + public localizedNames: proto.ILocalizedName[]; + public issueTime?: (number|Long|null); + public static create(properties?: proto.VerifiedNameCertificate.IDetails): proto.VerifiedNameCertificate.Details; + public static encode(m: proto.VerifiedNameCertificate.IDetails, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.VerifiedNameCertificate.Details; + public static fromObject(d: { [k: string]: any }): proto.VerifiedNameCertificate.Details; + public static toObject(m: proto.VerifiedNameCertificate.Details, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + } + + interface IWallpaperSettings { + filename?: (string|null); + opacity?: (number|null); + } + + class WallpaperSettings implements IWallpaperSettings { + constructor(p?: proto.IWallpaperSettings); + public filename?: (string|null); + public opacity?: (number|null); + public static create(properties?: proto.IWallpaperSettings): proto.WallpaperSettings; + public static encode(m: proto.IWallpaperSettings, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.WallpaperSettings; + public static fromObject(d: { [k: string]: any }): proto.WallpaperSettings; + public static toObject(m: proto.WallpaperSettings, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + interface IWebFeatures { + labelsDisplay?: (proto.WebFeatures.Flag|null); + voipIndividualOutgoing?: (proto.WebFeatures.Flag|null); + groupsV3?: (proto.WebFeatures.Flag|null); + groupsV3Create?: (proto.WebFeatures.Flag|null); + changeNumberV2?: (proto.WebFeatures.Flag|null); + queryStatusV3Thumbnail?: (proto.WebFeatures.Flag|null); + liveLocations?: (proto.WebFeatures.Flag|null); + queryVname?: (proto.WebFeatures.Flag|null); + voipIndividualIncoming?: (proto.WebFeatures.Flag|null); + quickRepliesQuery?: (proto.WebFeatures.Flag|null); + payments?: (proto.WebFeatures.Flag|null); + stickerPackQuery?: (proto.WebFeatures.Flag|null); + liveLocationsFinal?: (proto.WebFeatures.Flag|null); + labelsEdit?: (proto.WebFeatures.Flag|null); + mediaUpload?: (proto.WebFeatures.Flag|null); + mediaUploadRichQuickReplies?: (proto.WebFeatures.Flag|null); + vnameV2?: (proto.WebFeatures.Flag|null); + videoPlaybackUrl?: (proto.WebFeatures.Flag|null); + statusRanking?: (proto.WebFeatures.Flag|null); + voipIndividualVideo?: (proto.WebFeatures.Flag|null); + thirdPartyStickers?: (proto.WebFeatures.Flag|null); + frequentlyForwardedSetting?: (proto.WebFeatures.Flag|null); + groupsV4JoinPermission?: (proto.WebFeatures.Flag|null); + recentStickers?: (proto.WebFeatures.Flag|null); + catalog?: (proto.WebFeatures.Flag|null); + starredStickers?: (proto.WebFeatures.Flag|null); + voipGroupCall?: (proto.WebFeatures.Flag|null); + templateMessage?: (proto.WebFeatures.Flag|null); + templateMessageInteractivity?: (proto.WebFeatures.Flag|null); + ephemeralMessages?: (proto.WebFeatures.Flag|null); + e2ENotificationSync?: (proto.WebFeatures.Flag|null); + recentStickersV2?: (proto.WebFeatures.Flag|null); + recentStickersV3?: (proto.WebFeatures.Flag|null); + userNotice?: (proto.WebFeatures.Flag|null); + support?: (proto.WebFeatures.Flag|null); + groupUiiCleanup?: (proto.WebFeatures.Flag|null); + groupDogfoodingInternalOnly?: (proto.WebFeatures.Flag|null); + settingsSync?: (proto.WebFeatures.Flag|null); + archiveV2?: (proto.WebFeatures.Flag|null); + ephemeralAllowGroupMembers?: (proto.WebFeatures.Flag|null); + ephemeral24HDuration?: (proto.WebFeatures.Flag|null); + mdForceUpgrade?: (proto.WebFeatures.Flag|null); + disappearingMode?: (proto.WebFeatures.Flag|null); + externalMdOptInAvailable?: (proto.WebFeatures.Flag|null); + noDeleteMessageTimeLimit?: (proto.WebFeatures.Flag|null); + } + + class WebFeatures implements IWebFeatures { + constructor(p?: proto.IWebFeatures); + public labelsDisplay?: (proto.WebFeatures.Flag|null); + public voipIndividualOutgoing?: (proto.WebFeatures.Flag|null); + public groupsV3?: (proto.WebFeatures.Flag|null); + public groupsV3Create?: (proto.WebFeatures.Flag|null); + public changeNumberV2?: (proto.WebFeatures.Flag|null); + public queryStatusV3Thumbnail?: (proto.WebFeatures.Flag|null); + public liveLocations?: (proto.WebFeatures.Flag|null); + public queryVname?: (proto.WebFeatures.Flag|null); + public voipIndividualIncoming?: (proto.WebFeatures.Flag|null); + public quickRepliesQuery?: (proto.WebFeatures.Flag|null); + public payments?: (proto.WebFeatures.Flag|null); + public stickerPackQuery?: (proto.WebFeatures.Flag|null); + public liveLocationsFinal?: (proto.WebFeatures.Flag|null); + public labelsEdit?: (proto.WebFeatures.Flag|null); + public mediaUpload?: (proto.WebFeatures.Flag|null); + public mediaUploadRichQuickReplies?: (proto.WebFeatures.Flag|null); + public vnameV2?: (proto.WebFeatures.Flag|null); + public videoPlaybackUrl?: (proto.WebFeatures.Flag|null); + public statusRanking?: (proto.WebFeatures.Flag|null); + public voipIndividualVideo?: (proto.WebFeatures.Flag|null); + public thirdPartyStickers?: (proto.WebFeatures.Flag|null); + public frequentlyForwardedSetting?: (proto.WebFeatures.Flag|null); + public groupsV4JoinPermission?: (proto.WebFeatures.Flag|null); + public recentStickers?: (proto.WebFeatures.Flag|null); + public catalog?: (proto.WebFeatures.Flag|null); + public starredStickers?: (proto.WebFeatures.Flag|null); + public voipGroupCall?: (proto.WebFeatures.Flag|null); + public templateMessage?: (proto.WebFeatures.Flag|null); + public templateMessageInteractivity?: (proto.WebFeatures.Flag|null); + public ephemeralMessages?: (proto.WebFeatures.Flag|null); + public e2ENotificationSync?: (proto.WebFeatures.Flag|null); + public recentStickersV2?: (proto.WebFeatures.Flag|null); + public recentStickersV3?: (proto.WebFeatures.Flag|null); + public userNotice?: (proto.WebFeatures.Flag|null); + public support?: (proto.WebFeatures.Flag|null); + public groupUiiCleanup?: (proto.WebFeatures.Flag|null); + public groupDogfoodingInternalOnly?: (proto.WebFeatures.Flag|null); + public settingsSync?: (proto.WebFeatures.Flag|null); + public archiveV2?: (proto.WebFeatures.Flag|null); + public ephemeralAllowGroupMembers?: (proto.WebFeatures.Flag|null); + public ephemeral24HDuration?: (proto.WebFeatures.Flag|null); + public mdForceUpgrade?: (proto.WebFeatures.Flag|null); + public disappearingMode?: (proto.WebFeatures.Flag|null); + public externalMdOptInAvailable?: (proto.WebFeatures.Flag|null); + public noDeleteMessageTimeLimit?: (proto.WebFeatures.Flag|null); + public static create(properties?: proto.IWebFeatures): proto.WebFeatures; + public static encode(m: proto.IWebFeatures, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.WebFeatures; + public static fromObject(d: { [k: string]: any }): proto.WebFeatures; + public static toObject(m: proto.WebFeatures, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace WebFeatures { + + enum Flag { + NOT_STARTED = 0, + FORCE_UPGRADE = 1, + DEVELOPMENT = 2, + PRODUCTION = 3 + } + } + + enum WebLinkRenderConfig { + WEBVIEW = 0, + SYSTEM = 1 + } + + interface IWebMessageInfo { + key?: (proto.IMessageKey|null); + message?: (proto.IMessage|null); + messageTimestamp?: (number|Long|null); + status?: (proto.WebMessageInfo.Status|null); + participant?: (string|null); + messageC2STimestamp?: (number|Long|null); + ignore?: (boolean|null); + starred?: (boolean|null); + broadcast?: (boolean|null); + pushName?: (string|null); + mediaCiphertextSha256?: (Uint8Array|null); + multicast?: (boolean|null); + urlText?: (boolean|null); + urlNumber?: (boolean|null); + messageStubType?: (proto.WebMessageInfo.StubType|null); + clearMedia?: (boolean|null); + messageStubParameters?: (string[]|null); + duration?: (number|null); + labels?: (string[]|null); + paymentInfo?: (proto.IPaymentInfo|null); + finalLiveLocation?: (proto.Message.ILiveLocationMessage|null); + quotedPaymentInfo?: (proto.IPaymentInfo|null); + ephemeralStartTimestamp?: (number|Long|null); + ephemeralDuration?: (number|null); + ephemeralOffToOn?: (boolean|null); + ephemeralOutOfSync?: (boolean|null); + bizPrivacyStatus?: (proto.WebMessageInfo.BizPrivacyStatus|null); + verifiedBizName?: (string|null); + mediaData?: (proto.IMediaData|null); + photoChange?: (proto.IPhotoChange|null); + userReceipt?: (proto.IUserReceipt[]|null); + reactions?: (proto.IReaction[]|null); + quotedStickerData?: (proto.IMediaData|null); + futureproofData?: (Uint8Array|null); + statusPsa?: (proto.IStatusPSA|null); + pollUpdates?: (proto.IPollUpdate[]|null); + pollAdditionalMetadata?: (proto.IPollAdditionalMetadata|null); + agentId?: (string|null); + statusAlreadyViewed?: (boolean|null); + messageSecret?: (Uint8Array|null); + keepInChat?: (proto.IKeepInChat|null); + originalSelfAuthorUserJidString?: (string|null); + revokeMessageTimestamp?: (number|Long|null); + pinInChat?: (proto.IPinInChat|null); + premiumMessageInfo?: (proto.IPremiumMessageInfo|null); + is1PBizBotMessage?: (boolean|null); + isGroupHistoryMessage?: (boolean|null); + botMessageInvokerJid?: (string|null); + commentMetadata?: (proto.ICommentMetadata|null); + eventResponses?: (proto.IEventResponse[]|null); + reportingTokenInfo?: (proto.IReportingTokenInfo|null); + newsletterServerId?: (number|Long|null); + eventAdditionalMetadata?: (proto.IEventAdditionalMetadata|null); + isMentionedInStatus?: (boolean|null); + statusMentions?: (string[]|null); + targetMessageId?: (proto.IMessageKey|null); + messageAddOns?: (proto.IMessageAddOn[]|null); + statusMentionMessageInfo?: (proto.IStatusMentionMessage|null); + isSupportAiMessage?: (boolean|null); + statusMentionSources?: (string[]|null); + supportAiCitations?: (proto.ICitation[]|null); + botTargetId?: (string|null); + groupHistoryIndividualMessageInfo?: (proto.IGroupHistoryIndividualMessageInfo|null); + groupHistoryBundleInfo?: (proto.IGroupHistoryBundleInfo|null); + interactiveMessageAdditionalMetadata?: (proto.IInteractiveMessageAdditionalMetadata|null); + quarantinedMessage?: (proto.IQuarantinedMessage|null); + } + + class WebMessageInfo implements IWebMessageInfo { + constructor(p?: proto.IWebMessageInfo); + public key?: (proto.IMessageKey|null); + public message?: (proto.IMessage|null); + public messageTimestamp?: (number|Long|null); + public status?: (proto.WebMessageInfo.Status|null); + public participant?: (string|null); + public messageC2STimestamp?: (number|Long|null); + public ignore?: (boolean|null); + public starred?: (boolean|null); + public broadcast?: (boolean|null); + public pushName?: (string|null); + public mediaCiphertextSha256?: (Uint8Array|null); + public multicast?: (boolean|null); + public urlText?: (boolean|null); + public urlNumber?: (boolean|null); + public messageStubType?: (proto.WebMessageInfo.StubType|null); + public clearMedia?: (boolean|null); + public messageStubParameters: string[]; + public duration?: (number|null); + public labels: string[]; + public paymentInfo?: (proto.IPaymentInfo|null); + public finalLiveLocation?: (proto.Message.ILiveLocationMessage|null); + public quotedPaymentInfo?: (proto.IPaymentInfo|null); + public ephemeralStartTimestamp?: (number|Long|null); + public ephemeralDuration?: (number|null); + public ephemeralOffToOn?: (boolean|null); + public ephemeralOutOfSync?: (boolean|null); + public bizPrivacyStatus?: (proto.WebMessageInfo.BizPrivacyStatus|null); + public verifiedBizName?: (string|null); + public mediaData?: (proto.IMediaData|null); + public photoChange?: (proto.IPhotoChange|null); + public userReceipt: proto.IUserReceipt[]; + public reactions: proto.IReaction[]; + public quotedStickerData?: (proto.IMediaData|null); + public futureproofData?: (Uint8Array|null); + public statusPsa?: (proto.IStatusPSA|null); + public pollUpdates: proto.IPollUpdate[]; + public pollAdditionalMetadata?: (proto.IPollAdditionalMetadata|null); + public agentId?: (string|null); + public statusAlreadyViewed?: (boolean|null); + public messageSecret?: (Uint8Array|null); + public keepInChat?: (proto.IKeepInChat|null); + public originalSelfAuthorUserJidString?: (string|null); + public revokeMessageTimestamp?: (number|Long|null); + public pinInChat?: (proto.IPinInChat|null); + public premiumMessageInfo?: (proto.IPremiumMessageInfo|null); + public is1PBizBotMessage?: (boolean|null); + public isGroupHistoryMessage?: (boolean|null); + public botMessageInvokerJid?: (string|null); + public commentMetadata?: (proto.ICommentMetadata|null); + public eventResponses: proto.IEventResponse[]; + public reportingTokenInfo?: (proto.IReportingTokenInfo|null); + public newsletterServerId?: (number|Long|null); + public eventAdditionalMetadata?: (proto.IEventAdditionalMetadata|null); + public isMentionedInStatus?: (boolean|null); + public statusMentions: string[]; + public targetMessageId?: (proto.IMessageKey|null); + public messageAddOns: proto.IMessageAddOn[]; + public statusMentionMessageInfo?: (proto.IStatusMentionMessage|null); + public isSupportAiMessage?: (boolean|null); + public statusMentionSources: string[]; + public supportAiCitations: proto.ICitation[]; + public botTargetId?: (string|null); + public groupHistoryIndividualMessageInfo?: (proto.IGroupHistoryIndividualMessageInfo|null); + public groupHistoryBundleInfo?: (proto.IGroupHistoryBundleInfo|null); + public interactiveMessageAdditionalMetadata?: (proto.IInteractiveMessageAdditionalMetadata|null); + public quarantinedMessage?: (proto.IQuarantinedMessage|null); + public static create(properties?: proto.IWebMessageInfo): proto.WebMessageInfo; + public static encode(m: proto.IWebMessageInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.WebMessageInfo; + public static fromObject(d: { [k: string]: any }): proto.WebMessageInfo; + public static toObject(m: proto.WebMessageInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } + + namespace WebMessageInfo { + + enum BizPrivacyStatus { + E2EE = 0, + FB = 2, + BSP = 1, + BSP_AND_FB = 3 + } + + enum Status { + ERROR = 0, + PENDING = 1, + SERVER_ACK = 2, + DELIVERY_ACK = 3, + READ = 4, + PLAYED = 5 + } + + enum StubType { + UNKNOWN = 0, + REVOKE = 1, + CIPHERTEXT = 2, + FUTUREPROOF = 3, + NON_VERIFIED_TRANSITION = 4, + UNVERIFIED_TRANSITION = 5, + VERIFIED_TRANSITION = 6, + VERIFIED_LOW_UNKNOWN = 7, + VERIFIED_HIGH = 8, + VERIFIED_INITIAL_UNKNOWN = 9, + VERIFIED_INITIAL_LOW = 10, + VERIFIED_INITIAL_HIGH = 11, + VERIFIED_TRANSITION_ANY_TO_NONE = 12, + VERIFIED_TRANSITION_ANY_TO_HIGH = 13, + VERIFIED_TRANSITION_HIGH_TO_LOW = 14, + VERIFIED_TRANSITION_HIGH_TO_UNKNOWN = 15, + VERIFIED_TRANSITION_UNKNOWN_TO_LOW = 16, + VERIFIED_TRANSITION_LOW_TO_UNKNOWN = 17, + VERIFIED_TRANSITION_NONE_TO_LOW = 18, + VERIFIED_TRANSITION_NONE_TO_UNKNOWN = 19, + GROUP_CREATE = 20, + GROUP_CHANGE_SUBJECT = 21, + GROUP_CHANGE_ICON = 22, + GROUP_CHANGE_INVITE_LINK = 23, + GROUP_CHANGE_DESCRIPTION = 24, + GROUP_CHANGE_RESTRICT = 25, + GROUP_CHANGE_ANNOUNCE = 26, + GROUP_PARTICIPANT_ADD = 27, + GROUP_PARTICIPANT_REMOVE = 28, + GROUP_PARTICIPANT_PROMOTE = 29, + GROUP_PARTICIPANT_DEMOTE = 30, + GROUP_PARTICIPANT_INVITE = 31, + GROUP_PARTICIPANT_LEAVE = 32, + GROUP_PARTICIPANT_CHANGE_NUMBER = 33, + BROADCAST_CREATE = 34, + BROADCAST_ADD = 35, + BROADCAST_REMOVE = 36, + GENERIC_NOTIFICATION = 37, + E2E_IDENTITY_CHANGED = 38, + E2E_ENCRYPTED = 39, + CALL_MISSED_VOICE = 40, + CALL_MISSED_VIDEO = 41, + INDIVIDUAL_CHANGE_NUMBER = 42, + GROUP_DELETE = 43, + GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE = 44, + CALL_MISSED_GROUP_VOICE = 45, + CALL_MISSED_GROUP_VIDEO = 46, + PAYMENT_CIPHERTEXT = 47, + PAYMENT_FUTUREPROOF = 48, + PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED = 49, + PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED = 50, + PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED = 51, + PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP = 52, + PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP = 53, + PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER = 54, + PAYMENT_ACTION_SEND_PAYMENT_REMINDER = 55, + PAYMENT_ACTION_SEND_PAYMENT_INVITATION = 56, + PAYMENT_ACTION_REQUEST_DECLINED = 57, + PAYMENT_ACTION_REQUEST_EXPIRED = 58, + PAYMENT_ACTION_REQUEST_CANCELLED = 59, + BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM = 60, + BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP = 61, + BIZ_INTRO_TOP = 62, + BIZ_INTRO_BOTTOM = 63, + BIZ_NAME_CHANGE = 64, + BIZ_MOVE_TO_CONSUMER_APP = 65, + BIZ_TWO_TIER_MIGRATION_TOP = 66, + BIZ_TWO_TIER_MIGRATION_BOTTOM = 67, + OVERSIZED = 68, + GROUP_CHANGE_NO_FREQUENTLY_FORWARDED = 69, + GROUP_V4_ADD_INVITE_SENT = 70, + GROUP_PARTICIPANT_ADD_REQUEST_JOIN = 71, + CHANGE_EPHEMERAL_SETTING = 72, + E2E_DEVICE_CHANGED = 73, + VIEWED_ONCE = 74, + E2E_ENCRYPTED_NOW = 75, + BLUE_MSG_BSP_FB_TO_BSP_PREMISE = 76, + BLUE_MSG_BSP_FB_TO_SELF_FB = 77, + BLUE_MSG_BSP_FB_TO_SELF_PREMISE = 78, + BLUE_MSG_BSP_FB_UNVERIFIED = 79, + BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 80, + BLUE_MSG_BSP_FB_VERIFIED = 81, + BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 82, + BLUE_MSG_BSP_PREMISE_TO_SELF_PREMISE = 83, + BLUE_MSG_BSP_PREMISE_UNVERIFIED = 84, + BLUE_MSG_BSP_PREMISE_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 85, + BLUE_MSG_BSP_PREMISE_VERIFIED = 86, + BLUE_MSG_BSP_PREMISE_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 87, + BLUE_MSG_CONSUMER_TO_BSP_FB_UNVERIFIED = 88, + BLUE_MSG_CONSUMER_TO_BSP_PREMISE_UNVERIFIED = 89, + BLUE_MSG_CONSUMER_TO_SELF_FB_UNVERIFIED = 90, + BLUE_MSG_CONSUMER_TO_SELF_PREMISE_UNVERIFIED = 91, + BLUE_MSG_SELF_FB_TO_BSP_PREMISE = 92, + BLUE_MSG_SELF_FB_TO_SELF_PREMISE = 93, + BLUE_MSG_SELF_FB_UNVERIFIED = 94, + BLUE_MSG_SELF_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED = 95, + BLUE_MSG_SELF_FB_VERIFIED = 96, + BLUE_MSG_SELF_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED = 97, + BLUE_MSG_SELF_PREMISE_TO_BSP_PREMISE = 98, + BLUE_MSG_SELF_PREMISE_UNVERIFIED = 99, + BLUE_MSG_SELF_PREMISE_VERIFIED = 100, + BLUE_MSG_TO_BSP_FB = 101, + BLUE_MSG_TO_CONSUMER = 102, + BLUE_MSG_TO_SELF_FB = 103, + BLUE_MSG_UNVERIFIED_TO_BSP_FB_VERIFIED = 104, + BLUE_MSG_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 105, + BLUE_MSG_UNVERIFIED_TO_SELF_FB_VERIFIED = 106, + BLUE_MSG_UNVERIFIED_TO_VERIFIED = 107, + BLUE_MSG_VERIFIED_TO_BSP_FB_UNVERIFIED = 108, + BLUE_MSG_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 109, + BLUE_MSG_VERIFIED_TO_SELF_FB_UNVERIFIED = 110, + BLUE_MSG_VERIFIED_TO_UNVERIFIED = 111, + BLUE_MSG_BSP_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 112, + BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_FB_VERIFIED = 113, + BLUE_MSG_BSP_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 114, + BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_FB_UNVERIFIED = 115, + BLUE_MSG_SELF_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED = 116, + BLUE_MSG_SELF_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED = 117, + E2E_IDENTITY_UNAVAILABLE = 118, + GROUP_CREATING = 119, + GROUP_CREATE_FAILED = 120, + GROUP_BOUNCED = 121, + BLOCK_CONTACT = 122, + EPHEMERAL_SETTING_NOT_APPLIED = 123, + SYNC_FAILED = 124, + SYNCING = 125, + BIZ_PRIVACY_MODE_INIT_FB = 126, + BIZ_PRIVACY_MODE_INIT_BSP = 127, + BIZ_PRIVACY_MODE_TO_FB = 128, + BIZ_PRIVACY_MODE_TO_BSP = 129, + DISAPPEARING_MODE = 130, + E2E_DEVICE_FETCH_FAILED = 131, + ADMIN_REVOKE = 132, + GROUP_INVITE_LINK_GROWTH_LOCKED = 133, + COMMUNITY_LINK_PARENT_GROUP = 134, + COMMUNITY_LINK_SIBLING_GROUP = 135, + COMMUNITY_LINK_SUB_GROUP = 136, + COMMUNITY_UNLINK_PARENT_GROUP = 137, + COMMUNITY_UNLINK_SIBLING_GROUP = 138, + COMMUNITY_UNLINK_SUB_GROUP = 139, + GROUP_PARTICIPANT_ACCEPT = 140, + GROUP_PARTICIPANT_LINKED_GROUP_JOIN = 141, + COMMUNITY_CREATE = 142, + EPHEMERAL_KEEP_IN_CHAT = 143, + GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST = 144, + GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE = 145, + INTEGRITY_UNLINK_PARENT_GROUP = 146, + COMMUNITY_PARTICIPANT_PROMOTE = 147, + COMMUNITY_PARTICIPANT_DEMOTE = 148, + COMMUNITY_PARENT_GROUP_DELETED = 149, + COMMUNITY_LINK_PARENT_GROUP_MEMBERSHIP_APPROVAL = 150, + GROUP_PARTICIPANT_JOINED_GROUP_AND_PARENT_GROUP = 151, + MASKED_THREAD_CREATED = 152, + MASKED_THREAD_UNMASKED = 153, + BIZ_CHAT_ASSIGNMENT = 154, + CHAT_PSA = 155, + CHAT_POLL_CREATION_MESSAGE = 156, + CAG_MASKED_THREAD_CREATED = 157, + COMMUNITY_PARENT_GROUP_SUBJECT_CHANGED = 158, + CAG_INVITE_AUTO_ADD = 159, + BIZ_CHAT_ASSIGNMENT_UNASSIGN = 160, + CAG_INVITE_AUTO_JOINED = 161, + SCHEDULED_CALL_START_MESSAGE = 162, + COMMUNITY_INVITE_RICH = 163, + COMMUNITY_INVITE_AUTO_ADD_RICH = 164, + SUB_GROUP_INVITE_RICH = 165, + SUB_GROUP_PARTICIPANT_ADD_RICH = 166, + COMMUNITY_LINK_PARENT_GROUP_RICH = 167, + COMMUNITY_PARTICIPANT_ADD_RICH = 168, + SILENCED_UNKNOWN_CALLER_AUDIO = 169, + SILENCED_UNKNOWN_CALLER_VIDEO = 170, + GROUP_MEMBER_ADD_MODE = 171, + GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD = 172, + COMMUNITY_CHANGE_DESCRIPTION = 173, + SENDER_INVITE = 174, + RECEIVER_INVITE = 175, + COMMUNITY_ALLOW_MEMBER_ADDED_GROUPS = 176, + PINNED_MESSAGE_IN_CHAT = 177, + PAYMENT_INVITE_SETUP_INVITER = 178, + PAYMENT_INVITE_SETUP_INVITEE_RECEIVE_ONLY = 179, + PAYMENT_INVITE_SETUP_INVITEE_SEND_AND_RECEIVE = 180, + LINKED_GROUP_CALL_START = 181, + REPORT_TO_ADMIN_ENABLED_STATUS = 182, + EMPTY_SUBGROUP_CREATE = 183, + SCHEDULED_CALL_CANCEL = 184, + SUBGROUP_ADMIN_TRIGGERED_AUTO_ADD_RICH = 185, + GROUP_CHANGE_RECENT_HISTORY_SHARING = 186, + PAID_MESSAGE_SERVER_CAMPAIGN_ID = 187, + GENERAL_CHAT_CREATE = 188, + GENERAL_CHAT_ADD = 189, + GENERAL_CHAT_AUTO_ADD_DISABLED = 190, + SUGGESTED_SUBGROUP_ANNOUNCE = 191, + BIZ_BOT_1P_MESSAGING_ENABLED = 192, + CHANGE_USERNAME = 193, + BIZ_COEX_PRIVACY_INIT_SELF = 194, + BIZ_COEX_PRIVACY_TRANSITION_SELF = 195, + SUPPORT_AI_EDUCATION = 196, + BIZ_BOT_3P_MESSAGING_ENABLED = 197, + REMINDER_SETUP_MESSAGE = 198, + REMINDER_SENT_MESSAGE = 199, + REMINDER_CANCEL_MESSAGE = 200, + BIZ_COEX_PRIVACY_INIT = 201, + BIZ_COEX_PRIVACY_TRANSITION = 202, + GROUP_DEACTIVATED = 203, + COMMUNITY_DEACTIVATE_SIBLING_GROUP = 204, + EVENT_UPDATED = 205, + EVENT_CANCELED = 206, + COMMUNITY_OWNER_UPDATED = 207, + COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN = 208, + CAPI_GROUP_NE2EE_SYSTEM_MESSAGE = 209, + STATUS_MENTION = 210, + USER_CONTROLS_SYSTEM_MESSAGE = 211, + SUPPORT_SYSTEM_MESSAGE = 212, + CHANGE_LID = 213, + BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE = 214, + BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE = 215, + CHANGE_LIMIT_SHARING = 216, + GROUP_MEMBER_LINK_MODE = 217, + BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE = 218, + PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE = 219, + QUARANTINED_MESSAGE = 220, + GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE = 221 + } + } + + interface IWebNotificationsInfo { + timestamp?: (number|Long|null); + unreadChats?: (number|null); + notifyMessageCount?: (number|null); + notifyMessages?: (proto.IWebMessageInfo[]|null); + } + + class WebNotificationsInfo implements IWebNotificationsInfo { + constructor(p?: proto.IWebNotificationsInfo); + public timestamp?: (number|Long|null); + public unreadChats?: (number|null); + public notifyMessageCount?: (number|null); + public notifyMessages: proto.IWebMessageInfo[]; + public static create(properties?: proto.IWebNotificationsInfo): proto.WebNotificationsInfo; + public static encode(m: proto.IWebNotificationsInfo, w?: $protobuf.Writer): $protobuf.Writer; + public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.WebNotificationsInfo; + public static fromObject(d: { [k: string]: any }): proto.WebNotificationsInfo; + public static toObject(m: proto.WebNotificationsInfo, o?: $protobuf.IConversionOptions): { [k: string]: any }; + public toJSON(): { [k: string]: any }; + public static getTypeUrl(typeUrlPrefix?: string): string; + } +} diff --git a/packages/transport/vendor/WAProto/index.js b/packages/transport/vendor/WAProto/index.js new file mode 100644 index 0000000..8950f90 --- /dev/null +++ b/packages/transport/vendor/WAProto/index.js @@ -0,0 +1,97691 @@ +/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/ +import $protobuf from "protobufjs/minimal.js"; + +const $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util; + +const $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); + +function longToString(value, unsigned) { + if (typeof value === "string") { + return value; + } + if (typeof value === "number") { + return String(value); + } + // Fast path: convert Long {low, high} directly via native BigInt + // BigInt.toString() is a native C++ operation, much faster than Long's pure JS division loops + if (value && typeof value.low === "number" && typeof value.high === "number") { + const lo = BigInt(value.low >>> 0); + const hi = BigInt(value.high >>> 0); + const combined = (hi << 32n) | lo; + if (!unsigned && value.high < 0) { + return (combined - (1n << 64n)).toString(); + } + return combined.toString(); + } + return String(value); +} + +function longToNumber(value, unsigned) { + if (typeof value === "number") { + return value; + } + if (typeof value === "string") { + return Number(value); + } + // Fast path: convert Long {low, high} directly via native BigInt + if (value && typeof value.low === "number" && typeof value.high === "number") { + const lo = BigInt(value.low >>> 0); + const hi = BigInt(value.high >>> 0); + const combined = (hi << 32n) | lo; + if (!unsigned && value.high < 0) { + return Number(combined - (1n << 64n)); + } + return Number(combined); + } + return Number(value); +} + +export const proto = $root.proto = (() => { + + const proto = {}; + + proto.ADVDeviceIdentity = (function() { + + function ADVDeviceIdentity(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ADVDeviceIdentity.prototype.rawId = null; + ADVDeviceIdentity.prototype.timestamp = null; + ADVDeviceIdentity.prototype.keyIndex = null; + ADVDeviceIdentity.prototype.accountType = null; + ADVDeviceIdentity.prototype.deviceType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVDeviceIdentity.prototype, "_rawId", { + get: $util.oneOfGetter($oneOfFields = ["rawId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVDeviceIdentity.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVDeviceIdentity.prototype, "_keyIndex", { + get: $util.oneOfGetter($oneOfFields = ["keyIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVDeviceIdentity.prototype, "_accountType", { + get: $util.oneOfGetter($oneOfFields = ["accountType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVDeviceIdentity.prototype, "_deviceType", { + get: $util.oneOfGetter($oneOfFields = ["deviceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ADVDeviceIdentity.create = function create(properties) { + return new ADVDeviceIdentity(properties); + }; + + ADVDeviceIdentity.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.rawId != null && Object.hasOwnProperty.call(m, "rawId")) + w.uint32(8).uint32(m.rawId); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(16).uint64(m.timestamp); + if (m.keyIndex != null && Object.hasOwnProperty.call(m, "keyIndex")) + w.uint32(24).uint32(m.keyIndex); + if (m.accountType != null && Object.hasOwnProperty.call(m, "accountType")) + w.uint32(32).int32(m.accountType); + if (m.deviceType != null && Object.hasOwnProperty.call(m, "deviceType")) + w.uint32(40).int32(m.deviceType); + return w; + }; + + ADVDeviceIdentity.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ADVDeviceIdentity(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.rawId = r.uint32(); + break; + } + case 2: { + m.timestamp = r.uint64(); + break; + } + case 3: { + m.keyIndex = r.uint32(); + break; + } + case 4: { + m.accountType = r.int32(); + break; + } + case 5: { + m.deviceType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ADVDeviceIdentity.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ADVDeviceIdentity) + return d; + var m = new $root.proto.ADVDeviceIdentity(); + if (d.rawId != null) { + m.rawId = d.rawId >>> 0; + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = true; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(true); + } + if (d.keyIndex != null) { + m.keyIndex = d.keyIndex >>> 0; + } + switch (d.accountType) { + default: + if (typeof d.accountType === "number") { + m.accountType = d.accountType; + break; + } + break; + case "E2EE": + case 0: + m.accountType = 0; + break; + case "HOSTED": + case 1: + m.accountType = 1; + break; + } + switch (d.deviceType) { + default: + if (typeof d.deviceType === "number") { + m.deviceType = d.deviceType; + break; + } + break; + case "E2EE": + case 0: + m.deviceType = 0; + break; + case "HOSTED": + case 1: + m.deviceType = 1; + break; + } + return m; + }; + + ADVDeviceIdentity.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.rawId != null && m.hasOwnProperty("rawId")) { + d.rawId = m.rawId; + if (o.oneofs) + d._rawId = "rawId"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp, true) : o.longs === Number ? longToNumber(m.timestamp, true) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + if (m.keyIndex != null && m.hasOwnProperty("keyIndex")) { + d.keyIndex = m.keyIndex; + if (o.oneofs) + d._keyIndex = "keyIndex"; + } + if (m.accountType != null && m.hasOwnProperty("accountType")) { + d.accountType = o.enums === String ? $root.proto.ADVEncryptionType[m.accountType] === undefined ? m.accountType : $root.proto.ADVEncryptionType[m.accountType] : m.accountType; + if (o.oneofs) + d._accountType = "accountType"; + } + if (m.deviceType != null && m.hasOwnProperty("deviceType")) { + d.deviceType = o.enums === String ? $root.proto.ADVEncryptionType[m.deviceType] === undefined ? m.deviceType : $root.proto.ADVEncryptionType[m.deviceType] : m.deviceType; + if (o.oneofs) + d._deviceType = "deviceType"; + } + return d; + }; + + ADVDeviceIdentity.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ADVDeviceIdentity.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ADVDeviceIdentity"; + }; + + return ADVDeviceIdentity; + })(); + + proto.ADVEncryptionType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "E2EE"] = 0; + values[valuesById[1] = "HOSTED"] = 1; + return values; + })(); + + proto.ADVKeyIndexList = (function() { + + function ADVKeyIndexList(p) { + this.validIndexes = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ADVKeyIndexList.prototype.rawId = null; + ADVKeyIndexList.prototype.timestamp = null; + ADVKeyIndexList.prototype.currentIndex = null; + ADVKeyIndexList.prototype.validIndexes = $util.emptyArray; + ADVKeyIndexList.prototype.accountType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVKeyIndexList.prototype, "_rawId", { + get: $util.oneOfGetter($oneOfFields = ["rawId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVKeyIndexList.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVKeyIndexList.prototype, "_currentIndex", { + get: $util.oneOfGetter($oneOfFields = ["currentIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVKeyIndexList.prototype, "_accountType", { + get: $util.oneOfGetter($oneOfFields = ["accountType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ADVKeyIndexList.create = function create(properties) { + return new ADVKeyIndexList(properties); + }; + + ADVKeyIndexList.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.rawId != null && Object.hasOwnProperty.call(m, "rawId")) + w.uint32(8).uint32(m.rawId); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(16).uint64(m.timestamp); + if (m.currentIndex != null && Object.hasOwnProperty.call(m, "currentIndex")) + w.uint32(24).uint32(m.currentIndex); + if (m.validIndexes != null && m.validIndexes.length) { + w.uint32(34).fork(); + for (var i = 0; i < m.validIndexes.length; ++i) + w.uint32(m.validIndexes[i]); + w.ldelim(); + } + if (m.accountType != null && Object.hasOwnProperty.call(m, "accountType")) + w.uint32(40).int32(m.accountType); + return w; + }; + + ADVKeyIndexList.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ADVKeyIndexList(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.rawId = r.uint32(); + break; + } + case 2: { + m.timestamp = r.uint64(); + break; + } + case 3: { + m.currentIndex = r.uint32(); + break; + } + case 4: { + if (!(m.validIndexes && m.validIndexes.length)) + m.validIndexes = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.validIndexes.push(r.uint32()); + } else + m.validIndexes.push(r.uint32()); + break; + } + case 5: { + m.accountType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ADVKeyIndexList.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ADVKeyIndexList) + return d; + var m = new $root.proto.ADVKeyIndexList(); + if (d.rawId != null) { + m.rawId = d.rawId >>> 0; + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = true; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(true); + } + if (d.currentIndex != null) { + m.currentIndex = d.currentIndex >>> 0; + } + if (d.validIndexes) { + if (!Array.isArray(d.validIndexes)) + throw TypeError(".proto.ADVKeyIndexList.validIndexes: array expected"); + m.validIndexes = []; + for (var i = 0; i < d.validIndexes.length; ++i) { + m.validIndexes[i] = d.validIndexes[i] >>> 0; + } + } + switch (d.accountType) { + default: + if (typeof d.accountType === "number") { + m.accountType = d.accountType; + break; + } + break; + case "E2EE": + case 0: + m.accountType = 0; + break; + case "HOSTED": + case 1: + m.accountType = 1; + break; + } + return m; + }; + + ADVKeyIndexList.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.validIndexes = []; + } + if (m.rawId != null && m.hasOwnProperty("rawId")) { + d.rawId = m.rawId; + if (o.oneofs) + d._rawId = "rawId"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp, true) : o.longs === Number ? longToNumber(m.timestamp, true) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + if (m.currentIndex != null && m.hasOwnProperty("currentIndex")) { + d.currentIndex = m.currentIndex; + if (o.oneofs) + d._currentIndex = "currentIndex"; + } + if (m.validIndexes && m.validIndexes.length) { + d.validIndexes = []; + for (var j = 0; j < m.validIndexes.length; ++j) { + d.validIndexes[j] = m.validIndexes[j]; + } + } + if (m.accountType != null && m.hasOwnProperty("accountType")) { + d.accountType = o.enums === String ? $root.proto.ADVEncryptionType[m.accountType] === undefined ? m.accountType : $root.proto.ADVEncryptionType[m.accountType] : m.accountType; + if (o.oneofs) + d._accountType = "accountType"; + } + return d; + }; + + ADVKeyIndexList.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ADVKeyIndexList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ADVKeyIndexList"; + }; + + return ADVKeyIndexList; + })(); + + proto.ADVSignedDeviceIdentity = (function() { + + function ADVSignedDeviceIdentity(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ADVSignedDeviceIdentity.prototype.details = null; + ADVSignedDeviceIdentity.prototype.accountSignatureKey = null; + ADVSignedDeviceIdentity.prototype.accountSignature = null; + ADVSignedDeviceIdentity.prototype.deviceSignature = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedDeviceIdentity.prototype, "_details", { + get: $util.oneOfGetter($oneOfFields = ["details"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedDeviceIdentity.prototype, "_accountSignatureKey", { + get: $util.oneOfGetter($oneOfFields = ["accountSignatureKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedDeviceIdentity.prototype, "_accountSignature", { + get: $util.oneOfGetter($oneOfFields = ["accountSignature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedDeviceIdentity.prototype, "_deviceSignature", { + get: $util.oneOfGetter($oneOfFields = ["deviceSignature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ADVSignedDeviceIdentity.create = function create(properties) { + return new ADVSignedDeviceIdentity(properties); + }; + + ADVSignedDeviceIdentity.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.details != null && Object.hasOwnProperty.call(m, "details")) + w.uint32(10).bytes(m.details); + if (m.accountSignatureKey != null && Object.hasOwnProperty.call(m, "accountSignatureKey")) + w.uint32(18).bytes(m.accountSignatureKey); + if (m.accountSignature != null && Object.hasOwnProperty.call(m, "accountSignature")) + w.uint32(26).bytes(m.accountSignature); + if (m.deviceSignature != null && Object.hasOwnProperty.call(m, "deviceSignature")) + w.uint32(34).bytes(m.deviceSignature); + return w; + }; + + ADVSignedDeviceIdentity.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ADVSignedDeviceIdentity(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.details = r.bytes(); + break; + } + case 2: { + m.accountSignatureKey = r.bytes(); + break; + } + case 3: { + m.accountSignature = r.bytes(); + break; + } + case 4: { + m.deviceSignature = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ADVSignedDeviceIdentity.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ADVSignedDeviceIdentity) + return d; + var m = new $root.proto.ADVSignedDeviceIdentity(); + if (d.details != null) { + if (typeof d.details === "string") + $util.base64.decode(d.details, m.details = $util.newBuffer($util.base64.length(d.details)), 0); + else if (d.details.length >= 0) + m.details = d.details; + } + if (d.accountSignatureKey != null) { + if (typeof d.accountSignatureKey === "string") + $util.base64.decode(d.accountSignatureKey, m.accountSignatureKey = $util.newBuffer($util.base64.length(d.accountSignatureKey)), 0); + else if (d.accountSignatureKey.length >= 0) + m.accountSignatureKey = d.accountSignatureKey; + } + if (d.accountSignature != null) { + if (typeof d.accountSignature === "string") + $util.base64.decode(d.accountSignature, m.accountSignature = $util.newBuffer($util.base64.length(d.accountSignature)), 0); + else if (d.accountSignature.length >= 0) + m.accountSignature = d.accountSignature; + } + if (d.deviceSignature != null) { + if (typeof d.deviceSignature === "string") + $util.base64.decode(d.deviceSignature, m.deviceSignature = $util.newBuffer($util.base64.length(d.deviceSignature)), 0); + else if (d.deviceSignature.length >= 0) + m.deviceSignature = d.deviceSignature; + } + return m; + }; + + ADVSignedDeviceIdentity.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.details != null && m.hasOwnProperty("details")) { + d.details = o.bytes === String ? $util.base64.encode(m.details, 0, m.details.length) : o.bytes === Array ? Array.prototype.slice.call(m.details) : m.details; + if (o.oneofs) + d._details = "details"; + } + if (m.accountSignatureKey != null && m.hasOwnProperty("accountSignatureKey")) { + d.accountSignatureKey = o.bytes === String ? $util.base64.encode(m.accountSignatureKey, 0, m.accountSignatureKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.accountSignatureKey) : m.accountSignatureKey; + if (o.oneofs) + d._accountSignatureKey = "accountSignatureKey"; + } + if (m.accountSignature != null && m.hasOwnProperty("accountSignature")) { + d.accountSignature = o.bytes === String ? $util.base64.encode(m.accountSignature, 0, m.accountSignature.length) : o.bytes === Array ? Array.prototype.slice.call(m.accountSignature) : m.accountSignature; + if (o.oneofs) + d._accountSignature = "accountSignature"; + } + if (m.deviceSignature != null && m.hasOwnProperty("deviceSignature")) { + d.deviceSignature = o.bytes === String ? $util.base64.encode(m.deviceSignature, 0, m.deviceSignature.length) : o.bytes === Array ? Array.prototype.slice.call(m.deviceSignature) : m.deviceSignature; + if (o.oneofs) + d._deviceSignature = "deviceSignature"; + } + return d; + }; + + ADVSignedDeviceIdentity.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ADVSignedDeviceIdentity.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ADVSignedDeviceIdentity"; + }; + + return ADVSignedDeviceIdentity; + })(); + + proto.ADVSignedDeviceIdentityHMAC = (function() { + + function ADVSignedDeviceIdentityHMAC(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ADVSignedDeviceIdentityHMAC.prototype.details = null; + ADVSignedDeviceIdentityHMAC.prototype.hmac = null; + ADVSignedDeviceIdentityHMAC.prototype.accountType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedDeviceIdentityHMAC.prototype, "_details", { + get: $util.oneOfGetter($oneOfFields = ["details"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedDeviceIdentityHMAC.prototype, "_hmac", { + get: $util.oneOfGetter($oneOfFields = ["hmac"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedDeviceIdentityHMAC.prototype, "_accountType", { + get: $util.oneOfGetter($oneOfFields = ["accountType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ADVSignedDeviceIdentityHMAC.create = function create(properties) { + return new ADVSignedDeviceIdentityHMAC(properties); + }; + + ADVSignedDeviceIdentityHMAC.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.details != null && Object.hasOwnProperty.call(m, "details")) + w.uint32(10).bytes(m.details); + if (m.hmac != null && Object.hasOwnProperty.call(m, "hmac")) + w.uint32(18).bytes(m.hmac); + if (m.accountType != null && Object.hasOwnProperty.call(m, "accountType")) + w.uint32(24).int32(m.accountType); + return w; + }; + + ADVSignedDeviceIdentityHMAC.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ADVSignedDeviceIdentityHMAC(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.details = r.bytes(); + break; + } + case 2: { + m.hmac = r.bytes(); + break; + } + case 3: { + m.accountType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ADVSignedDeviceIdentityHMAC.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ADVSignedDeviceIdentityHMAC) + return d; + var m = new $root.proto.ADVSignedDeviceIdentityHMAC(); + if (d.details != null) { + if (typeof d.details === "string") + $util.base64.decode(d.details, m.details = $util.newBuffer($util.base64.length(d.details)), 0); + else if (d.details.length >= 0) + m.details = d.details; + } + if (d.hmac != null) { + if (typeof d.hmac === "string") + $util.base64.decode(d.hmac, m.hmac = $util.newBuffer($util.base64.length(d.hmac)), 0); + else if (d.hmac.length >= 0) + m.hmac = d.hmac; + } + switch (d.accountType) { + default: + if (typeof d.accountType === "number") { + m.accountType = d.accountType; + break; + } + break; + case "E2EE": + case 0: + m.accountType = 0; + break; + case "HOSTED": + case 1: + m.accountType = 1; + break; + } + return m; + }; + + ADVSignedDeviceIdentityHMAC.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.details != null && m.hasOwnProperty("details")) { + d.details = o.bytes === String ? $util.base64.encode(m.details, 0, m.details.length) : o.bytes === Array ? Array.prototype.slice.call(m.details) : m.details; + if (o.oneofs) + d._details = "details"; + } + if (m.hmac != null && m.hasOwnProperty("hmac")) { + d.hmac = o.bytes === String ? $util.base64.encode(m.hmac, 0, m.hmac.length) : o.bytes === Array ? Array.prototype.slice.call(m.hmac) : m.hmac; + if (o.oneofs) + d._hmac = "hmac"; + } + if (m.accountType != null && m.hasOwnProperty("accountType")) { + d.accountType = o.enums === String ? $root.proto.ADVEncryptionType[m.accountType] === undefined ? m.accountType : $root.proto.ADVEncryptionType[m.accountType] : m.accountType; + if (o.oneofs) + d._accountType = "accountType"; + } + return d; + }; + + ADVSignedDeviceIdentityHMAC.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ADVSignedDeviceIdentityHMAC.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ADVSignedDeviceIdentityHMAC"; + }; + + return ADVSignedDeviceIdentityHMAC; + })(); + + proto.ADVSignedKeyIndexList = (function() { + + function ADVSignedKeyIndexList(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ADVSignedKeyIndexList.prototype.details = null; + ADVSignedKeyIndexList.prototype.accountSignature = null; + ADVSignedKeyIndexList.prototype.accountSignatureKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedKeyIndexList.prototype, "_details", { + get: $util.oneOfGetter($oneOfFields = ["details"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedKeyIndexList.prototype, "_accountSignature", { + get: $util.oneOfGetter($oneOfFields = ["accountSignature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ADVSignedKeyIndexList.prototype, "_accountSignatureKey", { + get: $util.oneOfGetter($oneOfFields = ["accountSignatureKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ADVSignedKeyIndexList.create = function create(properties) { + return new ADVSignedKeyIndexList(properties); + }; + + ADVSignedKeyIndexList.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.details != null && Object.hasOwnProperty.call(m, "details")) + w.uint32(10).bytes(m.details); + if (m.accountSignature != null && Object.hasOwnProperty.call(m, "accountSignature")) + w.uint32(18).bytes(m.accountSignature); + if (m.accountSignatureKey != null && Object.hasOwnProperty.call(m, "accountSignatureKey")) + w.uint32(26).bytes(m.accountSignatureKey); + return w; + }; + + ADVSignedKeyIndexList.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ADVSignedKeyIndexList(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.details = r.bytes(); + break; + } + case 2: { + m.accountSignature = r.bytes(); + break; + } + case 3: { + m.accountSignatureKey = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ADVSignedKeyIndexList.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ADVSignedKeyIndexList) + return d; + var m = new $root.proto.ADVSignedKeyIndexList(); + if (d.details != null) { + if (typeof d.details === "string") + $util.base64.decode(d.details, m.details = $util.newBuffer($util.base64.length(d.details)), 0); + else if (d.details.length >= 0) + m.details = d.details; + } + if (d.accountSignature != null) { + if (typeof d.accountSignature === "string") + $util.base64.decode(d.accountSignature, m.accountSignature = $util.newBuffer($util.base64.length(d.accountSignature)), 0); + else if (d.accountSignature.length >= 0) + m.accountSignature = d.accountSignature; + } + if (d.accountSignatureKey != null) { + if (typeof d.accountSignatureKey === "string") + $util.base64.decode(d.accountSignatureKey, m.accountSignatureKey = $util.newBuffer($util.base64.length(d.accountSignatureKey)), 0); + else if (d.accountSignatureKey.length >= 0) + m.accountSignatureKey = d.accountSignatureKey; + } + return m; + }; + + ADVSignedKeyIndexList.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.details != null && m.hasOwnProperty("details")) { + d.details = o.bytes === String ? $util.base64.encode(m.details, 0, m.details.length) : o.bytes === Array ? Array.prototype.slice.call(m.details) : m.details; + if (o.oneofs) + d._details = "details"; + } + if (m.accountSignature != null && m.hasOwnProperty("accountSignature")) { + d.accountSignature = o.bytes === String ? $util.base64.encode(m.accountSignature, 0, m.accountSignature.length) : o.bytes === Array ? Array.prototype.slice.call(m.accountSignature) : m.accountSignature; + if (o.oneofs) + d._accountSignature = "accountSignature"; + } + if (m.accountSignatureKey != null && m.hasOwnProperty("accountSignatureKey")) { + d.accountSignatureKey = o.bytes === String ? $util.base64.encode(m.accountSignatureKey, 0, m.accountSignatureKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.accountSignatureKey) : m.accountSignatureKey; + if (o.oneofs) + d._accountSignatureKey = "accountSignatureKey"; + } + return d; + }; + + ADVSignedKeyIndexList.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ADVSignedKeyIndexList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ADVSignedKeyIndexList"; + }; + + return ADVSignedKeyIndexList; + })(); + + proto.AIHomeState = (function() { + + function AIHomeState(p) { + this.capabilityOptions = []; + this.conversationOptions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIHomeState.prototype.lastFetchTime = null; + AIHomeState.prototype.capabilityOptions = $util.emptyArray; + AIHomeState.prototype.conversationOptions = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeState.prototype, "_lastFetchTime", { + get: $util.oneOfGetter($oneOfFields = ["lastFetchTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIHomeState.create = function create(properties) { + return new AIHomeState(properties); + }; + + AIHomeState.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.lastFetchTime != null && Object.hasOwnProperty.call(m, "lastFetchTime")) + w.uint32(8).int64(m.lastFetchTime); + if (m.capabilityOptions != null && m.capabilityOptions.length) { + for (var i = 0; i < m.capabilityOptions.length; ++i) + $root.proto.AIHomeState.AIHomeOption.encode(m.capabilityOptions[i], w.uint32(18).fork()).ldelim(); + } + if (m.conversationOptions != null && m.conversationOptions.length) { + for (var i = 0; i < m.conversationOptions.length; ++i) + $root.proto.AIHomeState.AIHomeOption.encode(m.conversationOptions[i], w.uint32(26).fork()).ldelim(); + } + return w; + }; + + AIHomeState.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIHomeState(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.lastFetchTime = r.int64(); + break; + } + case 2: { + if (!(m.capabilityOptions && m.capabilityOptions.length)) + m.capabilityOptions = []; + m.capabilityOptions.push($root.proto.AIHomeState.AIHomeOption.decode(r, r.uint32())); + break; + } + case 3: { + if (!(m.conversationOptions && m.conversationOptions.length)) + m.conversationOptions = []; + m.conversationOptions.push($root.proto.AIHomeState.AIHomeOption.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIHomeState.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIHomeState) + return d; + var m = new $root.proto.AIHomeState(); + if (d.lastFetchTime != null) { + if ($util.Long) + (m.lastFetchTime = $util.Long.fromValue(d.lastFetchTime)).unsigned = false; + else if (typeof d.lastFetchTime === "string") + m.lastFetchTime = parseInt(d.lastFetchTime, 10); + else if (typeof d.lastFetchTime === "number") + m.lastFetchTime = d.lastFetchTime; + else if (typeof d.lastFetchTime === "object") + m.lastFetchTime = new $util.LongBits(d.lastFetchTime.low >>> 0, d.lastFetchTime.high >>> 0).toNumber(); + } + if (d.capabilityOptions) { + if (!Array.isArray(d.capabilityOptions)) + throw TypeError(".proto.AIHomeState.capabilityOptions: array expected"); + m.capabilityOptions = []; + for (var i = 0; i < d.capabilityOptions.length; ++i) { + if (typeof d.capabilityOptions[i] !== "object") + throw TypeError(".proto.AIHomeState.capabilityOptions: object expected"); + m.capabilityOptions[i] = $root.proto.AIHomeState.AIHomeOption.fromObject(d.capabilityOptions[i]); + } + } + if (d.conversationOptions) { + if (!Array.isArray(d.conversationOptions)) + throw TypeError(".proto.AIHomeState.conversationOptions: array expected"); + m.conversationOptions = []; + for (var i = 0; i < d.conversationOptions.length; ++i) { + if (typeof d.conversationOptions[i] !== "object") + throw TypeError(".proto.AIHomeState.conversationOptions: object expected"); + m.conversationOptions[i] = $root.proto.AIHomeState.AIHomeOption.fromObject(d.conversationOptions[i]); + } + } + return m; + }; + + AIHomeState.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.capabilityOptions = []; + d.conversationOptions = []; + } + if (m.lastFetchTime != null && m.hasOwnProperty("lastFetchTime")) { + if (typeof m.lastFetchTime === "number") + d.lastFetchTime = o.longs === String ? String(m.lastFetchTime) : m.lastFetchTime; + else + d.lastFetchTime = o.longs === String ? longToString(m.lastFetchTime) : o.longs === Number ? longToNumber(m.lastFetchTime) : m.lastFetchTime; + if (o.oneofs) + d._lastFetchTime = "lastFetchTime"; + } + if (m.capabilityOptions && m.capabilityOptions.length) { + d.capabilityOptions = []; + for (var j = 0; j < m.capabilityOptions.length; ++j) { + d.capabilityOptions[j] = $root.proto.AIHomeState.AIHomeOption.toObject(m.capabilityOptions[j], o); + } + } + if (m.conversationOptions && m.conversationOptions.length) { + d.conversationOptions = []; + for (var j = 0; j < m.conversationOptions.length; ++j) { + d.conversationOptions[j] = $root.proto.AIHomeState.AIHomeOption.toObject(m.conversationOptions[j], o); + } + } + return d; + }; + + AIHomeState.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIHomeState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIHomeState"; + }; + + AIHomeState.AIHomeOption = (function() { + + function AIHomeOption(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIHomeOption.prototype.type = null; + AIHomeOption.prototype.title = null; + AIHomeOption.prototype.promptText = null; + AIHomeOption.prototype.sessionId = null; + AIHomeOption.prototype.imageWdsIdentifier = null; + AIHomeOption.prototype.imageTintColor = null; + AIHomeOption.prototype.imageBackgroundColor = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeOption.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeOption.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeOption.prototype, "_promptText", { + get: $util.oneOfGetter($oneOfFields = ["promptText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeOption.prototype, "_sessionId", { + get: $util.oneOfGetter($oneOfFields = ["sessionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeOption.prototype, "_imageWdsIdentifier", { + get: $util.oneOfGetter($oneOfFields = ["imageWdsIdentifier"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeOption.prototype, "_imageTintColor", { + get: $util.oneOfGetter($oneOfFields = ["imageTintColor"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIHomeOption.prototype, "_imageBackgroundColor", { + get: $util.oneOfGetter($oneOfFields = ["imageBackgroundColor"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIHomeOption.create = function create(properties) { + return new AIHomeOption(properties); + }; + + AIHomeOption.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(18).string(m.title); + if (m.promptText != null && Object.hasOwnProperty.call(m, "promptText")) + w.uint32(26).string(m.promptText); + if (m.sessionId != null && Object.hasOwnProperty.call(m, "sessionId")) + w.uint32(34).string(m.sessionId); + if (m.imageWdsIdentifier != null && Object.hasOwnProperty.call(m, "imageWdsIdentifier")) + w.uint32(42).string(m.imageWdsIdentifier); + if (m.imageTintColor != null && Object.hasOwnProperty.call(m, "imageTintColor")) + w.uint32(50).string(m.imageTintColor); + if (m.imageBackgroundColor != null && Object.hasOwnProperty.call(m, "imageBackgroundColor")) + w.uint32(58).string(m.imageBackgroundColor); + return w; + }; + + AIHomeOption.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIHomeState.AIHomeOption(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + case 2: { + m.title = r.string(); + break; + } + case 3: { + m.promptText = r.string(); + break; + } + case 4: { + m.sessionId = r.string(); + break; + } + case 5: { + m.imageWdsIdentifier = r.string(); + break; + } + case 6: { + m.imageTintColor = r.string(); + break; + } + case 7: { + m.imageBackgroundColor = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIHomeOption.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIHomeState.AIHomeOption) + return d; + var m = new $root.proto.AIHomeState.AIHomeOption(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "PROMPT": + case 0: + m.type = 0; + break; + case "CREATE_IMAGE": + case 1: + m.type = 1; + break; + case "ANIMATE_PHOTO": + case 2: + m.type = 2; + break; + case "ANALYZE_FILE": + case 3: + m.type = 3; + break; + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.promptText != null) { + m.promptText = String(d.promptText); + } + if (d.sessionId != null) { + m.sessionId = String(d.sessionId); + } + if (d.imageWdsIdentifier != null) { + m.imageWdsIdentifier = String(d.imageWdsIdentifier); + } + if (d.imageTintColor != null) { + m.imageTintColor = String(d.imageTintColor); + } + if (d.imageBackgroundColor != null) { + m.imageBackgroundColor = String(d.imageBackgroundColor); + } + return m; + }; + + AIHomeOption.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.AIHomeState.AIHomeOption.AIHomeActionType[m.type] === undefined ? m.type : $root.proto.AIHomeState.AIHomeOption.AIHomeActionType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.promptText != null && m.hasOwnProperty("promptText")) { + d.promptText = m.promptText; + if (o.oneofs) + d._promptText = "promptText"; + } + if (m.sessionId != null && m.hasOwnProperty("sessionId")) { + d.sessionId = m.sessionId; + if (o.oneofs) + d._sessionId = "sessionId"; + } + if (m.imageWdsIdentifier != null && m.hasOwnProperty("imageWdsIdentifier")) { + d.imageWdsIdentifier = m.imageWdsIdentifier; + if (o.oneofs) + d._imageWdsIdentifier = "imageWdsIdentifier"; + } + if (m.imageTintColor != null && m.hasOwnProperty("imageTintColor")) { + d.imageTintColor = m.imageTintColor; + if (o.oneofs) + d._imageTintColor = "imageTintColor"; + } + if (m.imageBackgroundColor != null && m.hasOwnProperty("imageBackgroundColor")) { + d.imageBackgroundColor = m.imageBackgroundColor; + if (o.oneofs) + d._imageBackgroundColor = "imageBackgroundColor"; + } + return d; + }; + + AIHomeOption.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIHomeOption.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIHomeState.AIHomeOption"; + }; + + AIHomeOption.AIHomeActionType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "PROMPT"] = 0; + values[valuesById[1] = "CREATE_IMAGE"] = 1; + values[valuesById[2] = "ANIMATE_PHOTO"] = 2; + values[valuesById[3] = "ANALYZE_FILE"] = 3; + return values; + })(); + + return AIHomeOption; + })(); + + return AIHomeState; + })(); + + proto.AIQueryFanout = (function() { + + function AIQueryFanout(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIQueryFanout.prototype.messageKey = null; + AIQueryFanout.prototype.message = null; + AIQueryFanout.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIQueryFanout.prototype, "_messageKey", { + get: $util.oneOfGetter($oneOfFields = ["messageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIQueryFanout.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIQueryFanout.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIQueryFanout.create = function create(properties) { + return new AIQueryFanout(properties); + }; + + AIQueryFanout.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageKey != null && Object.hasOwnProperty.call(m, "messageKey")) + $root.proto.MessageKey.encode(m.messageKey, w.uint32(10).fork()).ldelim(); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.Message.encode(m.message, w.uint32(18).fork()).ldelim(); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(24).int64(m.timestamp); + return w; + }; + + AIQueryFanout.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIQueryFanout(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.message = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 3: { + m.timestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIQueryFanout.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIQueryFanout) + return d; + var m = new $root.proto.AIQueryFanout(); + if (d.messageKey != null) { + if (typeof d.messageKey !== "object") + throw TypeError(".proto.AIQueryFanout.messageKey: object expected"); + m.messageKey = $root.proto.MessageKey.fromObject(d.messageKey); + } + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.AIQueryFanout.message: object expected"); + m.message = $root.proto.Message.fromObject(d.message); + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + AIQueryFanout.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageKey != null && m.hasOwnProperty("messageKey")) { + d.messageKey = $root.proto.MessageKey.toObject(m.messageKey, o); + if (o.oneofs) + d._messageKey = "messageKey"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.Message.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + AIQueryFanout.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIQueryFanout.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIQueryFanout"; + }; + + return AIQueryFanout; + })(); + + proto.AIRegenerateMetadata = (function() { + + function AIRegenerateMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRegenerateMetadata.prototype.messageKey = null; + AIRegenerateMetadata.prototype.responseTimestampMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRegenerateMetadata.prototype, "_messageKey", { + get: $util.oneOfGetter($oneOfFields = ["messageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRegenerateMetadata.prototype, "_responseTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["responseTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRegenerateMetadata.create = function create(properties) { + return new AIRegenerateMetadata(properties); + }; + + AIRegenerateMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageKey != null && Object.hasOwnProperty.call(m, "messageKey")) + $root.proto.MessageKey.encode(m.messageKey, w.uint32(10).fork()).ldelim(); + if (m.responseTimestampMs != null && Object.hasOwnProperty.call(m, "responseTimestampMs")) + w.uint32(16).int64(m.responseTimestampMs); + return w; + }; + + AIRegenerateMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRegenerateMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.responseTimestampMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRegenerateMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRegenerateMetadata) + return d; + var m = new $root.proto.AIRegenerateMetadata(); + if (d.messageKey != null) { + if (typeof d.messageKey !== "object") + throw TypeError(".proto.AIRegenerateMetadata.messageKey: object expected"); + m.messageKey = $root.proto.MessageKey.fromObject(d.messageKey); + } + if (d.responseTimestampMs != null) { + if ($util.Long) + (m.responseTimestampMs = $util.Long.fromValue(d.responseTimestampMs)).unsigned = false; + else if (typeof d.responseTimestampMs === "string") + m.responseTimestampMs = parseInt(d.responseTimestampMs, 10); + else if (typeof d.responseTimestampMs === "number") + m.responseTimestampMs = d.responseTimestampMs; + else if (typeof d.responseTimestampMs === "object") + m.responseTimestampMs = new $util.LongBits(d.responseTimestampMs.low >>> 0, d.responseTimestampMs.high >>> 0).toNumber(); + } + return m; + }; + + AIRegenerateMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageKey != null && m.hasOwnProperty("messageKey")) { + d.messageKey = $root.proto.MessageKey.toObject(m.messageKey, o); + if (o.oneofs) + d._messageKey = "messageKey"; + } + if (m.responseTimestampMs != null && m.hasOwnProperty("responseTimestampMs")) { + if (typeof m.responseTimestampMs === "number") + d.responseTimestampMs = o.longs === String ? String(m.responseTimestampMs) : m.responseTimestampMs; + else + d.responseTimestampMs = o.longs === String ? longToString(m.responseTimestampMs) : o.longs === Number ? longToNumber(m.responseTimestampMs) : m.responseTimestampMs; + if (o.oneofs) + d._responseTimestampMs = "responseTimestampMs"; + } + return d; + }; + + AIRegenerateMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRegenerateMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRegenerateMetadata"; + }; + + return AIRegenerateMetadata; + })(); + + proto.AIRichResponseCodeMetadata = (function() { + + function AIRichResponseCodeMetadata(p) { + this.codeBlocks = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseCodeMetadata.prototype.codeLanguage = null; + AIRichResponseCodeMetadata.prototype.codeBlocks = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseCodeMetadata.prototype, "_codeLanguage", { + get: $util.oneOfGetter($oneOfFields = ["codeLanguage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseCodeMetadata.create = function create(properties) { + return new AIRichResponseCodeMetadata(properties); + }; + + AIRichResponseCodeMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.codeLanguage != null && Object.hasOwnProperty.call(m, "codeLanguage")) + w.uint32(10).string(m.codeLanguage); + if (m.codeBlocks != null && m.codeBlocks.length) { + for (var i = 0; i < m.codeBlocks.length; ++i) + $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock.encode(m.codeBlocks[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + AIRichResponseCodeMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseCodeMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.codeLanguage = r.string(); + break; + } + case 2: { + if (!(m.codeBlocks && m.codeBlocks.length)) + m.codeBlocks = []; + m.codeBlocks.push($root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseCodeMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseCodeMetadata) + return d; + var m = new $root.proto.AIRichResponseCodeMetadata(); + if (d.codeLanguage != null) { + m.codeLanguage = String(d.codeLanguage); + } + if (d.codeBlocks) { + if (!Array.isArray(d.codeBlocks)) + throw TypeError(".proto.AIRichResponseCodeMetadata.codeBlocks: array expected"); + m.codeBlocks = []; + for (var i = 0; i < d.codeBlocks.length; ++i) { + if (typeof d.codeBlocks[i] !== "object") + throw TypeError(".proto.AIRichResponseCodeMetadata.codeBlocks: object expected"); + m.codeBlocks[i] = $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock.fromObject(d.codeBlocks[i]); + } + } + return m; + }; + + AIRichResponseCodeMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.codeBlocks = []; + } + if (m.codeLanguage != null && m.hasOwnProperty("codeLanguage")) { + d.codeLanguage = m.codeLanguage; + if (o.oneofs) + d._codeLanguage = "codeLanguage"; + } + if (m.codeBlocks && m.codeBlocks.length) { + d.codeBlocks = []; + for (var j = 0; j < m.codeBlocks.length; ++j) { + d.codeBlocks[j] = $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock.toObject(m.codeBlocks[j], o); + } + } + return d; + }; + + AIRichResponseCodeMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseCodeMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseCodeMetadata"; + }; + + AIRichResponseCodeMetadata.AIRichResponseCodeBlock = (function() { + + function AIRichResponseCodeBlock(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseCodeBlock.prototype.highlightType = null; + AIRichResponseCodeBlock.prototype.codeContent = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseCodeBlock.prototype, "_highlightType", { + get: $util.oneOfGetter($oneOfFields = ["highlightType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseCodeBlock.prototype, "_codeContent", { + get: $util.oneOfGetter($oneOfFields = ["codeContent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseCodeBlock.create = function create(properties) { + return new AIRichResponseCodeBlock(properties); + }; + + AIRichResponseCodeBlock.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.highlightType != null && Object.hasOwnProperty.call(m, "highlightType")) + w.uint32(8).int32(m.highlightType); + if (m.codeContent != null && Object.hasOwnProperty.call(m, "codeContent")) + w.uint32(18).string(m.codeContent); + return w; + }; + + AIRichResponseCodeBlock.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.highlightType = r.int32(); + break; + } + case 2: { + m.codeContent = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseCodeBlock.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock) + return d; + var m = new $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock(); + switch (d.highlightType) { + default: + if (typeof d.highlightType === "number") { + m.highlightType = d.highlightType; + break; + } + break; + case "AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT": + case 0: + m.highlightType = 0; + break; + case "AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD": + case 1: + m.highlightType = 1; + break; + case "AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD": + case 2: + m.highlightType = 2; + break; + case "AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING": + case 3: + m.highlightType = 3; + break; + case "AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER": + case 4: + m.highlightType = 4; + break; + case "AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT": + case 5: + m.highlightType = 5; + break; + } + if (d.codeContent != null) { + m.codeContent = String(d.codeContent); + } + return m; + }; + + AIRichResponseCodeBlock.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.highlightType != null && m.hasOwnProperty("highlightType")) { + d.highlightType = o.enums === String ? $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType[m.highlightType] === undefined ? m.highlightType : $root.proto.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType[m.highlightType] : m.highlightType; + if (o.oneofs) + d._highlightType = "highlightType"; + } + if (m.codeContent != null && m.hasOwnProperty("codeContent")) { + d.codeContent = m.codeContent; + if (o.oneofs) + d._codeContent = "codeContent"; + } + return d; + }; + + AIRichResponseCodeBlock.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseCodeBlock.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseCodeMetadata.AIRichResponseCodeBlock"; + }; + + return AIRichResponseCodeBlock; + })(); + + AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT"] = 0; + values[valuesById[1] = "AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD"] = 1; + values[valuesById[2] = "AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD"] = 2; + values[valuesById[3] = "AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING"] = 3; + values[valuesById[4] = "AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER"] = 4; + values[valuesById[5] = "AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT"] = 5; + return values; + })(); + + return AIRichResponseCodeMetadata; + })(); + + proto.AIRichResponseContentItemsMetadata = (function() { + + function AIRichResponseContentItemsMetadata(p) { + this.itemsMetadata = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseContentItemsMetadata.prototype.itemsMetadata = $util.emptyArray; + AIRichResponseContentItemsMetadata.prototype.contentType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseContentItemsMetadata.prototype, "_contentType", { + get: $util.oneOfGetter($oneOfFields = ["contentType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseContentItemsMetadata.create = function create(properties) { + return new AIRichResponseContentItemsMetadata(properties); + }; + + AIRichResponseContentItemsMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.itemsMetadata != null && m.itemsMetadata.length) { + for (var i = 0; i < m.itemsMetadata.length; ++i) + $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.encode(m.itemsMetadata[i], w.uint32(10).fork()).ldelim(); + } + if (m.contentType != null && Object.hasOwnProperty.call(m, "contentType")) + w.uint32(16).int32(m.contentType); + return w; + }; + + AIRichResponseContentItemsMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseContentItemsMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.itemsMetadata && m.itemsMetadata.length)) + m.itemsMetadata = []; + m.itemsMetadata.push($root.proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.decode(r, r.uint32())); + break; + } + case 2: { + m.contentType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseContentItemsMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseContentItemsMetadata) + return d; + var m = new $root.proto.AIRichResponseContentItemsMetadata(); + if (d.itemsMetadata) { + if (!Array.isArray(d.itemsMetadata)) + throw TypeError(".proto.AIRichResponseContentItemsMetadata.itemsMetadata: array expected"); + m.itemsMetadata = []; + for (var i = 0; i < d.itemsMetadata.length; ++i) { + if (typeof d.itemsMetadata[i] !== "object") + throw TypeError(".proto.AIRichResponseContentItemsMetadata.itemsMetadata: object expected"); + m.itemsMetadata[i] = $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.fromObject(d.itemsMetadata[i]); + } + } + switch (d.contentType) { + default: + if (typeof d.contentType === "number") { + m.contentType = d.contentType; + break; + } + break; + case "DEFAULT": + case 0: + m.contentType = 0; + break; + case "CAROUSEL": + case 1: + m.contentType = 1; + break; + } + return m; + }; + + AIRichResponseContentItemsMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.itemsMetadata = []; + } + if (m.itemsMetadata && m.itemsMetadata.length) { + d.itemsMetadata = []; + for (var j = 0; j < m.itemsMetadata.length; ++j) { + d.itemsMetadata[j] = $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.toObject(m.itemsMetadata[j], o); + } + } + if (m.contentType != null && m.hasOwnProperty("contentType")) { + d.contentType = o.enums === String ? $root.proto.AIRichResponseContentItemsMetadata.ContentType[m.contentType] === undefined ? m.contentType : $root.proto.AIRichResponseContentItemsMetadata.ContentType[m.contentType] : m.contentType; + if (o.oneofs) + d._contentType = "contentType"; + } + return d; + }; + + AIRichResponseContentItemsMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseContentItemsMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseContentItemsMetadata"; + }; + + AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata = (function() { + + function AIRichResponseContentItemMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseContentItemMetadata.prototype.reelItem = null; + + let $oneOfFields; + + Object.defineProperty(AIRichResponseContentItemMetadata.prototype, "aIRichResponseContentItem", { + get: $util.oneOfGetter($oneOfFields = ["reelItem"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseContentItemMetadata.create = function create(properties) { + return new AIRichResponseContentItemMetadata(properties); + }; + + AIRichResponseContentItemMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.reelItem != null && Object.hasOwnProperty.call(m, "reelItem")) + $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem.encode(m.reelItem, w.uint32(10).fork()).ldelim(); + return w; + }; + + AIRichResponseContentItemMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.reelItem = $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseContentItemMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata) + return d; + var m = new $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata(); + if (d.reelItem != null) { + if (typeof d.reelItem !== "object") + throw TypeError(".proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.reelItem: object expected"); + m.reelItem = $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem.fromObject(d.reelItem); + } + return m; + }; + + AIRichResponseContentItemMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.reelItem != null && m.hasOwnProperty("reelItem")) { + d.reelItem = $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem.toObject(m.reelItem, o); + if (o.oneofs) + d.aIRichResponseContentItem = "reelItem"; + } + return d; + }; + + AIRichResponseContentItemMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseContentItemMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata"; + }; + + return AIRichResponseContentItemMetadata; + })(); + + AIRichResponseContentItemsMetadata.AIRichResponseReelItem = (function() { + + function AIRichResponseReelItem(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseReelItem.prototype.title = null; + AIRichResponseReelItem.prototype.profileIconUrl = null; + AIRichResponseReelItem.prototype.thumbnailUrl = null; + AIRichResponseReelItem.prototype.videoUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseReelItem.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseReelItem.prototype, "_profileIconUrl", { + get: $util.oneOfGetter($oneOfFields = ["profileIconUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseReelItem.prototype, "_thumbnailUrl", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseReelItem.prototype, "_videoUrl", { + get: $util.oneOfGetter($oneOfFields = ["videoUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseReelItem.create = function create(properties) { + return new AIRichResponseReelItem(properties); + }; + + AIRichResponseReelItem.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.profileIconUrl != null && Object.hasOwnProperty.call(m, "profileIconUrl")) + w.uint32(18).string(m.profileIconUrl); + if (m.thumbnailUrl != null && Object.hasOwnProperty.call(m, "thumbnailUrl")) + w.uint32(26).string(m.thumbnailUrl); + if (m.videoUrl != null && Object.hasOwnProperty.call(m, "videoUrl")) + w.uint32(34).string(m.videoUrl); + return w; + }; + + AIRichResponseReelItem.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.profileIconUrl = r.string(); + break; + } + case 3: { + m.thumbnailUrl = r.string(); + break; + } + case 4: { + m.videoUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseReelItem.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem) + return d; + var m = new $root.proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.profileIconUrl != null) { + m.profileIconUrl = String(d.profileIconUrl); + } + if (d.thumbnailUrl != null) { + m.thumbnailUrl = String(d.thumbnailUrl); + } + if (d.videoUrl != null) { + m.videoUrl = String(d.videoUrl); + } + return m; + }; + + AIRichResponseReelItem.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.profileIconUrl != null && m.hasOwnProperty("profileIconUrl")) { + d.profileIconUrl = m.profileIconUrl; + if (o.oneofs) + d._profileIconUrl = "profileIconUrl"; + } + if (m.thumbnailUrl != null && m.hasOwnProperty("thumbnailUrl")) { + d.thumbnailUrl = m.thumbnailUrl; + if (o.oneofs) + d._thumbnailUrl = "thumbnailUrl"; + } + if (m.videoUrl != null && m.hasOwnProperty("videoUrl")) { + d.videoUrl = m.videoUrl; + if (o.oneofs) + d._videoUrl = "videoUrl"; + } + return d; + }; + + AIRichResponseReelItem.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseReelItem.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseContentItemsMetadata.AIRichResponseReelItem"; + }; + + return AIRichResponseReelItem; + })(); + + AIRichResponseContentItemsMetadata.ContentType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DEFAULT"] = 0; + values[valuesById[1] = "CAROUSEL"] = 1; + return values; + })(); + + return AIRichResponseContentItemsMetadata; + })(); + + proto.AIRichResponseDynamicMetadata = (function() { + + function AIRichResponseDynamicMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseDynamicMetadata.prototype.type = null; + AIRichResponseDynamicMetadata.prototype.version = null; + AIRichResponseDynamicMetadata.prototype.url = null; + AIRichResponseDynamicMetadata.prototype.loopCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseDynamicMetadata.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseDynamicMetadata.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseDynamicMetadata.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseDynamicMetadata.prototype, "_loopCount", { + get: $util.oneOfGetter($oneOfFields = ["loopCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseDynamicMetadata.create = function create(properties) { + return new AIRichResponseDynamicMetadata(properties); + }; + + AIRichResponseDynamicMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(16).uint64(m.version); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(26).string(m.url); + if (m.loopCount != null && Object.hasOwnProperty.call(m, "loopCount")) + w.uint32(32).uint32(m.loopCount); + return w; + }; + + AIRichResponseDynamicMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseDynamicMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + case 2: { + m.version = r.uint64(); + break; + } + case 3: { + m.url = r.string(); + break; + } + case 4: { + m.loopCount = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseDynamicMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseDynamicMetadata) + return d; + var m = new $root.proto.AIRichResponseDynamicMetadata(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN": + case 0: + m.type = 0; + break; + case "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE": + case 1: + m.type = 1; + break; + case "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF": + case 2: + m.type = 2; + break; + } + if (d.version != null) { + if ($util.Long) + (m.version = $util.Long.fromValue(d.version)).unsigned = true; + else if (typeof d.version === "string") + m.version = parseInt(d.version, 10); + else if (typeof d.version === "number") + m.version = d.version; + else if (typeof d.version === "object") + m.version = new $util.LongBits(d.version.low >>> 0, d.version.high >>> 0).toNumber(true); + } + if (d.url != null) { + m.url = String(d.url); + } + if (d.loopCount != null) { + m.loopCount = d.loopCount >>> 0; + } + return m; + }; + + AIRichResponseDynamicMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType[m.type] === undefined ? m.type : $root.proto.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.version != null && m.hasOwnProperty("version")) { + if (typeof m.version === "number") + d.version = o.longs === String ? String(m.version) : m.version; + else + d.version = o.longs === String ? longToString(m.version, true) : o.longs === Number ? longToNumber(m.version, true) : m.version; + if (o.oneofs) + d._version = "version"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.loopCount != null && m.hasOwnProperty("loopCount")) { + d.loopCount = m.loopCount; + if (o.oneofs) + d._loopCount = "loopCount"; + } + return d; + }; + + AIRichResponseDynamicMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseDynamicMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseDynamicMetadata"; + }; + + AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN"] = 0; + values[valuesById[1] = "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE"] = 1; + values[valuesById[2] = "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF"] = 2; + return values; + })(); + + return AIRichResponseDynamicMetadata; + })(); + + proto.AIRichResponseGridImageMetadata = (function() { + + function AIRichResponseGridImageMetadata(p) { + this.imageUrls = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseGridImageMetadata.prototype.gridImageUrl = null; + AIRichResponseGridImageMetadata.prototype.imageUrls = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseGridImageMetadata.prototype, "_gridImageUrl", { + get: $util.oneOfGetter($oneOfFields = ["gridImageUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseGridImageMetadata.create = function create(properties) { + return new AIRichResponseGridImageMetadata(properties); + }; + + AIRichResponseGridImageMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.gridImageUrl != null && Object.hasOwnProperty.call(m, "gridImageUrl")) + $root.proto.AIRichResponseImageURL.encode(m.gridImageUrl, w.uint32(10).fork()).ldelim(); + if (m.imageUrls != null && m.imageUrls.length) { + for (var i = 0; i < m.imageUrls.length; ++i) + $root.proto.AIRichResponseImageURL.encode(m.imageUrls[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + AIRichResponseGridImageMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseGridImageMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.gridImageUrl = $root.proto.AIRichResponseImageURL.decode(r, r.uint32()); + break; + } + case 2: { + if (!(m.imageUrls && m.imageUrls.length)) + m.imageUrls = []; + m.imageUrls.push($root.proto.AIRichResponseImageURL.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseGridImageMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseGridImageMetadata) + return d; + var m = new $root.proto.AIRichResponseGridImageMetadata(); + if (d.gridImageUrl != null) { + if (typeof d.gridImageUrl !== "object") + throw TypeError(".proto.AIRichResponseGridImageMetadata.gridImageUrl: object expected"); + m.gridImageUrl = $root.proto.AIRichResponseImageURL.fromObject(d.gridImageUrl); + } + if (d.imageUrls) { + if (!Array.isArray(d.imageUrls)) + throw TypeError(".proto.AIRichResponseGridImageMetadata.imageUrls: array expected"); + m.imageUrls = []; + for (var i = 0; i < d.imageUrls.length; ++i) { + if (typeof d.imageUrls[i] !== "object") + throw TypeError(".proto.AIRichResponseGridImageMetadata.imageUrls: object expected"); + m.imageUrls[i] = $root.proto.AIRichResponseImageURL.fromObject(d.imageUrls[i]); + } + } + return m; + }; + + AIRichResponseGridImageMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.imageUrls = []; + } + if (m.gridImageUrl != null && m.hasOwnProperty("gridImageUrl")) { + d.gridImageUrl = $root.proto.AIRichResponseImageURL.toObject(m.gridImageUrl, o); + if (o.oneofs) + d._gridImageUrl = "gridImageUrl"; + } + if (m.imageUrls && m.imageUrls.length) { + d.imageUrls = []; + for (var j = 0; j < m.imageUrls.length; ++j) { + d.imageUrls[j] = $root.proto.AIRichResponseImageURL.toObject(m.imageUrls[j], o); + } + } + return d; + }; + + AIRichResponseGridImageMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseGridImageMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseGridImageMetadata"; + }; + + return AIRichResponseGridImageMetadata; + })(); + + proto.AIRichResponseImageURL = (function() { + + function AIRichResponseImageURL(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseImageURL.prototype.imagePreviewUrl = null; + AIRichResponseImageURL.prototype.imageHighResUrl = null; + AIRichResponseImageURL.prototype.sourceUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseImageURL.prototype, "_imagePreviewUrl", { + get: $util.oneOfGetter($oneOfFields = ["imagePreviewUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseImageURL.prototype, "_imageHighResUrl", { + get: $util.oneOfGetter($oneOfFields = ["imageHighResUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseImageURL.prototype, "_sourceUrl", { + get: $util.oneOfGetter($oneOfFields = ["sourceUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseImageURL.create = function create(properties) { + return new AIRichResponseImageURL(properties); + }; + + AIRichResponseImageURL.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.imagePreviewUrl != null && Object.hasOwnProperty.call(m, "imagePreviewUrl")) + w.uint32(10).string(m.imagePreviewUrl); + if (m.imageHighResUrl != null && Object.hasOwnProperty.call(m, "imageHighResUrl")) + w.uint32(18).string(m.imageHighResUrl); + if (m.sourceUrl != null && Object.hasOwnProperty.call(m, "sourceUrl")) + w.uint32(26).string(m.sourceUrl); + return w; + }; + + AIRichResponseImageURL.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseImageURL(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.imagePreviewUrl = r.string(); + break; + } + case 2: { + m.imageHighResUrl = r.string(); + break; + } + case 3: { + m.sourceUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseImageURL.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseImageURL) + return d; + var m = new $root.proto.AIRichResponseImageURL(); + if (d.imagePreviewUrl != null) { + m.imagePreviewUrl = String(d.imagePreviewUrl); + } + if (d.imageHighResUrl != null) { + m.imageHighResUrl = String(d.imageHighResUrl); + } + if (d.sourceUrl != null) { + m.sourceUrl = String(d.sourceUrl); + } + return m; + }; + + AIRichResponseImageURL.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.imagePreviewUrl != null && m.hasOwnProperty("imagePreviewUrl")) { + d.imagePreviewUrl = m.imagePreviewUrl; + if (o.oneofs) + d._imagePreviewUrl = "imagePreviewUrl"; + } + if (m.imageHighResUrl != null && m.hasOwnProperty("imageHighResUrl")) { + d.imageHighResUrl = m.imageHighResUrl; + if (o.oneofs) + d._imageHighResUrl = "imageHighResUrl"; + } + if (m.sourceUrl != null && m.hasOwnProperty("sourceUrl")) { + d.sourceUrl = m.sourceUrl; + if (o.oneofs) + d._sourceUrl = "sourceUrl"; + } + return d; + }; + + AIRichResponseImageURL.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseImageURL.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseImageURL"; + }; + + return AIRichResponseImageURL; + })(); + + proto.AIRichResponseInlineImageMetadata = (function() { + + function AIRichResponseInlineImageMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseInlineImageMetadata.prototype.imageUrl = null; + AIRichResponseInlineImageMetadata.prototype.imageText = null; + AIRichResponseInlineImageMetadata.prototype.alignment = null; + AIRichResponseInlineImageMetadata.prototype.tapLinkUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseInlineImageMetadata.prototype, "_imageUrl", { + get: $util.oneOfGetter($oneOfFields = ["imageUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseInlineImageMetadata.prototype, "_imageText", { + get: $util.oneOfGetter($oneOfFields = ["imageText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseInlineImageMetadata.prototype, "_alignment", { + get: $util.oneOfGetter($oneOfFields = ["alignment"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseInlineImageMetadata.prototype, "_tapLinkUrl", { + get: $util.oneOfGetter($oneOfFields = ["tapLinkUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseInlineImageMetadata.create = function create(properties) { + return new AIRichResponseInlineImageMetadata(properties); + }; + + AIRichResponseInlineImageMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.imageUrl != null && Object.hasOwnProperty.call(m, "imageUrl")) + $root.proto.AIRichResponseImageURL.encode(m.imageUrl, w.uint32(10).fork()).ldelim(); + if (m.imageText != null && Object.hasOwnProperty.call(m, "imageText")) + w.uint32(18).string(m.imageText); + if (m.alignment != null && Object.hasOwnProperty.call(m, "alignment")) + w.uint32(24).int32(m.alignment); + if (m.tapLinkUrl != null && Object.hasOwnProperty.call(m, "tapLinkUrl")) + w.uint32(34).string(m.tapLinkUrl); + return w; + }; + + AIRichResponseInlineImageMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseInlineImageMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.imageUrl = $root.proto.AIRichResponseImageURL.decode(r, r.uint32()); + break; + } + case 2: { + m.imageText = r.string(); + break; + } + case 3: { + m.alignment = r.int32(); + break; + } + case 4: { + m.tapLinkUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseInlineImageMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseInlineImageMetadata) + return d; + var m = new $root.proto.AIRichResponseInlineImageMetadata(); + if (d.imageUrl != null) { + if (typeof d.imageUrl !== "object") + throw TypeError(".proto.AIRichResponseInlineImageMetadata.imageUrl: object expected"); + m.imageUrl = $root.proto.AIRichResponseImageURL.fromObject(d.imageUrl); + } + if (d.imageText != null) { + m.imageText = String(d.imageText); + } + switch (d.alignment) { + default: + if (typeof d.alignment === "number") { + m.alignment = d.alignment; + break; + } + break; + case "AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED": + case 0: + m.alignment = 0; + break; + case "AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED": + case 1: + m.alignment = 1; + break; + case "AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED": + case 2: + m.alignment = 2; + break; + } + if (d.tapLinkUrl != null) { + m.tapLinkUrl = String(d.tapLinkUrl); + } + return m; + }; + + AIRichResponseInlineImageMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.imageUrl != null && m.hasOwnProperty("imageUrl")) { + d.imageUrl = $root.proto.AIRichResponseImageURL.toObject(m.imageUrl, o); + if (o.oneofs) + d._imageUrl = "imageUrl"; + } + if (m.imageText != null && m.hasOwnProperty("imageText")) { + d.imageText = m.imageText; + if (o.oneofs) + d._imageText = "imageText"; + } + if (m.alignment != null && m.hasOwnProperty("alignment")) { + d.alignment = o.enums === String ? $root.proto.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment[m.alignment] === undefined ? m.alignment : $root.proto.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment[m.alignment] : m.alignment; + if (o.oneofs) + d._alignment = "alignment"; + } + if (m.tapLinkUrl != null && m.hasOwnProperty("tapLinkUrl")) { + d.tapLinkUrl = m.tapLinkUrl; + if (o.oneofs) + d._tapLinkUrl = "tapLinkUrl"; + } + return d; + }; + + AIRichResponseInlineImageMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseInlineImageMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseInlineImageMetadata"; + }; + + AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED"] = 0; + values[valuesById[1] = "AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED"] = 1; + values[valuesById[2] = "AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED"] = 2; + return values; + })(); + + return AIRichResponseInlineImageMetadata; + })(); + + proto.AIRichResponseLatexMetadata = (function() { + + function AIRichResponseLatexMetadata(p) { + this.expressions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseLatexMetadata.prototype.text = null; + AIRichResponseLatexMetadata.prototype.expressions = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexMetadata.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseLatexMetadata.create = function create(properties) { + return new AIRichResponseLatexMetadata(properties); + }; + + AIRichResponseLatexMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + if (m.expressions != null && m.expressions.length) { + for (var i = 0; i < m.expressions.length; ++i) + $root.proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression.encode(m.expressions[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + AIRichResponseLatexMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseLatexMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.text = r.string(); + break; + } + case 2: { + if (!(m.expressions && m.expressions.length)) + m.expressions = []; + m.expressions.push($root.proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseLatexMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseLatexMetadata) + return d; + var m = new $root.proto.AIRichResponseLatexMetadata(); + if (d.text != null) { + m.text = String(d.text); + } + if (d.expressions) { + if (!Array.isArray(d.expressions)) + throw TypeError(".proto.AIRichResponseLatexMetadata.expressions: array expected"); + m.expressions = []; + for (var i = 0; i < d.expressions.length; ++i) { + if (typeof d.expressions[i] !== "object") + throw TypeError(".proto.AIRichResponseLatexMetadata.expressions: object expected"); + m.expressions[i] = $root.proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression.fromObject(d.expressions[i]); + } + } + return m; + }; + + AIRichResponseLatexMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.expressions = []; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.expressions && m.expressions.length) { + d.expressions = []; + for (var j = 0; j < m.expressions.length; ++j) { + d.expressions[j] = $root.proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression.toObject(m.expressions[j], o); + } + } + return d; + }; + + AIRichResponseLatexMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseLatexMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseLatexMetadata"; + }; + + AIRichResponseLatexMetadata.AIRichResponseLatexExpression = (function() { + + function AIRichResponseLatexExpression(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseLatexExpression.prototype.latexExpression = null; + AIRichResponseLatexExpression.prototype.url = null; + AIRichResponseLatexExpression.prototype.width = null; + AIRichResponseLatexExpression.prototype.height = null; + AIRichResponseLatexExpression.prototype.fontHeight = null; + AIRichResponseLatexExpression.prototype.imageTopPadding = null; + AIRichResponseLatexExpression.prototype.imageLeadingPadding = null; + AIRichResponseLatexExpression.prototype.imageBottomPadding = null; + AIRichResponseLatexExpression.prototype.imageTrailingPadding = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_latexExpression", { + get: $util.oneOfGetter($oneOfFields = ["latexExpression"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_fontHeight", { + get: $util.oneOfGetter($oneOfFields = ["fontHeight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_imageTopPadding", { + get: $util.oneOfGetter($oneOfFields = ["imageTopPadding"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_imageLeadingPadding", { + get: $util.oneOfGetter($oneOfFields = ["imageLeadingPadding"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_imageBottomPadding", { + get: $util.oneOfGetter($oneOfFields = ["imageBottomPadding"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseLatexExpression.prototype, "_imageTrailingPadding", { + get: $util.oneOfGetter($oneOfFields = ["imageTrailingPadding"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseLatexExpression.create = function create(properties) { + return new AIRichResponseLatexExpression(properties); + }; + + AIRichResponseLatexExpression.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.latexExpression != null && Object.hasOwnProperty.call(m, "latexExpression")) + w.uint32(10).string(m.latexExpression); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(18).string(m.url); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(25).double(m.width); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(33).double(m.height); + if (m.fontHeight != null && Object.hasOwnProperty.call(m, "fontHeight")) + w.uint32(41).double(m.fontHeight); + if (m.imageTopPadding != null && Object.hasOwnProperty.call(m, "imageTopPadding")) + w.uint32(49).double(m.imageTopPadding); + if (m.imageLeadingPadding != null && Object.hasOwnProperty.call(m, "imageLeadingPadding")) + w.uint32(57).double(m.imageLeadingPadding); + if (m.imageBottomPadding != null && Object.hasOwnProperty.call(m, "imageBottomPadding")) + w.uint32(65).double(m.imageBottomPadding); + if (m.imageTrailingPadding != null && Object.hasOwnProperty.call(m, "imageTrailingPadding")) + w.uint32(73).double(m.imageTrailingPadding); + return w; + }; + + AIRichResponseLatexExpression.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.latexExpression = r.string(); + break; + } + case 2: { + m.url = r.string(); + break; + } + case 3: { + m.width = r.double(); + break; + } + case 4: { + m.height = r.double(); + break; + } + case 5: { + m.fontHeight = r.double(); + break; + } + case 6: { + m.imageTopPadding = r.double(); + break; + } + case 7: { + m.imageLeadingPadding = r.double(); + break; + } + case 8: { + m.imageBottomPadding = r.double(); + break; + } + case 9: { + m.imageTrailingPadding = r.double(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseLatexExpression.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression) + return d; + var m = new $root.proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression(); + if (d.latexExpression != null) { + m.latexExpression = String(d.latexExpression); + } + if (d.url != null) { + m.url = String(d.url); + } + if (d.width != null) { + m.width = Number(d.width); + } + if (d.height != null) { + m.height = Number(d.height); + } + if (d.fontHeight != null) { + m.fontHeight = Number(d.fontHeight); + } + if (d.imageTopPadding != null) { + m.imageTopPadding = Number(d.imageTopPadding); + } + if (d.imageLeadingPadding != null) { + m.imageLeadingPadding = Number(d.imageLeadingPadding); + } + if (d.imageBottomPadding != null) { + m.imageBottomPadding = Number(d.imageBottomPadding); + } + if (d.imageTrailingPadding != null) { + m.imageTrailingPadding = Number(d.imageTrailingPadding); + } + return m; + }; + + AIRichResponseLatexExpression.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.latexExpression != null && m.hasOwnProperty("latexExpression")) { + d.latexExpression = m.latexExpression; + if (o.oneofs) + d._latexExpression = "latexExpression"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = o.json && !isFinite(m.width) ? String(m.width) : m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = o.json && !isFinite(m.height) ? String(m.height) : m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.fontHeight != null && m.hasOwnProperty("fontHeight")) { + d.fontHeight = o.json && !isFinite(m.fontHeight) ? String(m.fontHeight) : m.fontHeight; + if (o.oneofs) + d._fontHeight = "fontHeight"; + } + if (m.imageTopPadding != null && m.hasOwnProperty("imageTopPadding")) { + d.imageTopPadding = o.json && !isFinite(m.imageTopPadding) ? String(m.imageTopPadding) : m.imageTopPadding; + if (o.oneofs) + d._imageTopPadding = "imageTopPadding"; + } + if (m.imageLeadingPadding != null && m.hasOwnProperty("imageLeadingPadding")) { + d.imageLeadingPadding = o.json && !isFinite(m.imageLeadingPadding) ? String(m.imageLeadingPadding) : m.imageLeadingPadding; + if (o.oneofs) + d._imageLeadingPadding = "imageLeadingPadding"; + } + if (m.imageBottomPadding != null && m.hasOwnProperty("imageBottomPadding")) { + d.imageBottomPadding = o.json && !isFinite(m.imageBottomPadding) ? String(m.imageBottomPadding) : m.imageBottomPadding; + if (o.oneofs) + d._imageBottomPadding = "imageBottomPadding"; + } + if (m.imageTrailingPadding != null && m.hasOwnProperty("imageTrailingPadding")) { + d.imageTrailingPadding = o.json && !isFinite(m.imageTrailingPadding) ? String(m.imageTrailingPadding) : m.imageTrailingPadding; + if (o.oneofs) + d._imageTrailingPadding = "imageTrailingPadding"; + } + return d; + }; + + AIRichResponseLatexExpression.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseLatexExpression.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseLatexMetadata.AIRichResponseLatexExpression"; + }; + + return AIRichResponseLatexExpression; + })(); + + return AIRichResponseLatexMetadata; + })(); + + proto.AIRichResponseMapMetadata = (function() { + + function AIRichResponseMapMetadata(p) { + this.annotations = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseMapMetadata.prototype.centerLatitude = null; + AIRichResponseMapMetadata.prototype.centerLongitude = null; + AIRichResponseMapMetadata.prototype.latitudeDelta = null; + AIRichResponseMapMetadata.prototype.longitudeDelta = null; + AIRichResponseMapMetadata.prototype.annotations = $util.emptyArray; + AIRichResponseMapMetadata.prototype.showInfoList = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapMetadata.prototype, "_centerLatitude", { + get: $util.oneOfGetter($oneOfFields = ["centerLatitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapMetadata.prototype, "_centerLongitude", { + get: $util.oneOfGetter($oneOfFields = ["centerLongitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapMetadata.prototype, "_latitudeDelta", { + get: $util.oneOfGetter($oneOfFields = ["latitudeDelta"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapMetadata.prototype, "_longitudeDelta", { + get: $util.oneOfGetter($oneOfFields = ["longitudeDelta"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapMetadata.prototype, "_showInfoList", { + get: $util.oneOfGetter($oneOfFields = ["showInfoList"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseMapMetadata.create = function create(properties) { + return new AIRichResponseMapMetadata(properties); + }; + + AIRichResponseMapMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.centerLatitude != null && Object.hasOwnProperty.call(m, "centerLatitude")) + w.uint32(9).double(m.centerLatitude); + if (m.centerLongitude != null && Object.hasOwnProperty.call(m, "centerLongitude")) + w.uint32(17).double(m.centerLongitude); + if (m.latitudeDelta != null && Object.hasOwnProperty.call(m, "latitudeDelta")) + w.uint32(25).double(m.latitudeDelta); + if (m.longitudeDelta != null && Object.hasOwnProperty.call(m, "longitudeDelta")) + w.uint32(33).double(m.longitudeDelta); + if (m.annotations != null && m.annotations.length) { + for (var i = 0; i < m.annotations.length; ++i) + $root.proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation.encode(m.annotations[i], w.uint32(42).fork()).ldelim(); + } + if (m.showInfoList != null && Object.hasOwnProperty.call(m, "showInfoList")) + w.uint32(48).bool(m.showInfoList); + return w; + }; + + AIRichResponseMapMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseMapMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.centerLatitude = r.double(); + break; + } + case 2: { + m.centerLongitude = r.double(); + break; + } + case 3: { + m.latitudeDelta = r.double(); + break; + } + case 4: { + m.longitudeDelta = r.double(); + break; + } + case 5: { + if (!(m.annotations && m.annotations.length)) + m.annotations = []; + m.annotations.push($root.proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation.decode(r, r.uint32())); + break; + } + case 6: { + m.showInfoList = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseMapMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseMapMetadata) + return d; + var m = new $root.proto.AIRichResponseMapMetadata(); + if (d.centerLatitude != null) { + m.centerLatitude = Number(d.centerLatitude); + } + if (d.centerLongitude != null) { + m.centerLongitude = Number(d.centerLongitude); + } + if (d.latitudeDelta != null) { + m.latitudeDelta = Number(d.latitudeDelta); + } + if (d.longitudeDelta != null) { + m.longitudeDelta = Number(d.longitudeDelta); + } + if (d.annotations) { + if (!Array.isArray(d.annotations)) + throw TypeError(".proto.AIRichResponseMapMetadata.annotations: array expected"); + m.annotations = []; + for (var i = 0; i < d.annotations.length; ++i) { + if (typeof d.annotations[i] !== "object") + throw TypeError(".proto.AIRichResponseMapMetadata.annotations: object expected"); + m.annotations[i] = $root.proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation.fromObject(d.annotations[i]); + } + } + if (d.showInfoList != null) { + m.showInfoList = Boolean(d.showInfoList); + } + return m; + }; + + AIRichResponseMapMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.annotations = []; + } + if (m.centerLatitude != null && m.hasOwnProperty("centerLatitude")) { + d.centerLatitude = o.json && !isFinite(m.centerLatitude) ? String(m.centerLatitude) : m.centerLatitude; + if (o.oneofs) + d._centerLatitude = "centerLatitude"; + } + if (m.centerLongitude != null && m.hasOwnProperty("centerLongitude")) { + d.centerLongitude = o.json && !isFinite(m.centerLongitude) ? String(m.centerLongitude) : m.centerLongitude; + if (o.oneofs) + d._centerLongitude = "centerLongitude"; + } + if (m.latitudeDelta != null && m.hasOwnProperty("latitudeDelta")) { + d.latitudeDelta = o.json && !isFinite(m.latitudeDelta) ? String(m.latitudeDelta) : m.latitudeDelta; + if (o.oneofs) + d._latitudeDelta = "latitudeDelta"; + } + if (m.longitudeDelta != null && m.hasOwnProperty("longitudeDelta")) { + d.longitudeDelta = o.json && !isFinite(m.longitudeDelta) ? String(m.longitudeDelta) : m.longitudeDelta; + if (o.oneofs) + d._longitudeDelta = "longitudeDelta"; + } + if (m.annotations && m.annotations.length) { + d.annotations = []; + for (var j = 0; j < m.annotations.length; ++j) { + d.annotations[j] = $root.proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation.toObject(m.annotations[j], o); + } + } + if (m.showInfoList != null && m.hasOwnProperty("showInfoList")) { + d.showInfoList = m.showInfoList; + if (o.oneofs) + d._showInfoList = "showInfoList"; + } + return d; + }; + + AIRichResponseMapMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseMapMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseMapMetadata"; + }; + + AIRichResponseMapMetadata.AIRichResponseMapAnnotation = (function() { + + function AIRichResponseMapAnnotation(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseMapAnnotation.prototype.annotationNumber = null; + AIRichResponseMapAnnotation.prototype.latitude = null; + AIRichResponseMapAnnotation.prototype.longitude = null; + AIRichResponseMapAnnotation.prototype.title = null; + AIRichResponseMapAnnotation.prototype.body = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapAnnotation.prototype, "_annotationNumber", { + get: $util.oneOfGetter($oneOfFields = ["annotationNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapAnnotation.prototype, "_latitude", { + get: $util.oneOfGetter($oneOfFields = ["latitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapAnnotation.prototype, "_longitude", { + get: $util.oneOfGetter($oneOfFields = ["longitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapAnnotation.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMapAnnotation.prototype, "_body", { + get: $util.oneOfGetter($oneOfFields = ["body"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseMapAnnotation.create = function create(properties) { + return new AIRichResponseMapAnnotation(properties); + }; + + AIRichResponseMapAnnotation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.annotationNumber != null && Object.hasOwnProperty.call(m, "annotationNumber")) + w.uint32(8).uint32(m.annotationNumber); + if (m.latitude != null && Object.hasOwnProperty.call(m, "latitude")) + w.uint32(17).double(m.latitude); + if (m.longitude != null && Object.hasOwnProperty.call(m, "longitude")) + w.uint32(25).double(m.longitude); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(34).string(m.title); + if (m.body != null && Object.hasOwnProperty.call(m, "body")) + w.uint32(42).string(m.body); + return w; + }; + + AIRichResponseMapAnnotation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.annotationNumber = r.uint32(); + break; + } + case 2: { + m.latitude = r.double(); + break; + } + case 3: { + m.longitude = r.double(); + break; + } + case 4: { + m.title = r.string(); + break; + } + case 5: { + m.body = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseMapAnnotation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation) + return d; + var m = new $root.proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation(); + if (d.annotationNumber != null) { + m.annotationNumber = d.annotationNumber >>> 0; + } + if (d.latitude != null) { + m.latitude = Number(d.latitude); + } + if (d.longitude != null) { + m.longitude = Number(d.longitude); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.body != null) { + m.body = String(d.body); + } + return m; + }; + + AIRichResponseMapAnnotation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.annotationNumber != null && m.hasOwnProperty("annotationNumber")) { + d.annotationNumber = m.annotationNumber; + if (o.oneofs) + d._annotationNumber = "annotationNumber"; + } + if (m.latitude != null && m.hasOwnProperty("latitude")) { + d.latitude = o.json && !isFinite(m.latitude) ? String(m.latitude) : m.latitude; + if (o.oneofs) + d._latitude = "latitude"; + } + if (m.longitude != null && m.hasOwnProperty("longitude")) { + d.longitude = o.json && !isFinite(m.longitude) ? String(m.longitude) : m.longitude; + if (o.oneofs) + d._longitude = "longitude"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.body != null && m.hasOwnProperty("body")) { + d.body = m.body; + if (o.oneofs) + d._body = "body"; + } + return d; + }; + + AIRichResponseMapAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseMapAnnotation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseMapMetadata.AIRichResponseMapAnnotation"; + }; + + return AIRichResponseMapAnnotation; + })(); + + return AIRichResponseMapMetadata; + })(); + + proto.AIRichResponseMessage = (function() { + + function AIRichResponseMessage(p) { + this.submessages = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseMessage.prototype.messageType = null; + AIRichResponseMessage.prototype.submessages = $util.emptyArray; + AIRichResponseMessage.prototype.unifiedResponse = null; + AIRichResponseMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMessage.prototype, "_messageType", { + get: $util.oneOfGetter($oneOfFields = ["messageType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMessage.prototype, "_unifiedResponse", { + get: $util.oneOfGetter($oneOfFields = ["unifiedResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseMessage.create = function create(properties) { + return new AIRichResponseMessage(properties); + }; + + AIRichResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageType != null && Object.hasOwnProperty.call(m, "messageType")) + w.uint32(8).int32(m.messageType); + if (m.submessages != null && m.submessages.length) { + for (var i = 0; i < m.submessages.length; ++i) + $root.proto.AIRichResponseSubMessage.encode(m.submessages[i], w.uint32(18).fork()).ldelim(); + } + if (m.unifiedResponse != null && Object.hasOwnProperty.call(m, "unifiedResponse")) + $root.proto.AIRichResponseUnifiedResponse.encode(m.unifiedResponse, w.uint32(26).fork()).ldelim(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(34).fork()).ldelim(); + return w; + }; + + AIRichResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageType = r.int32(); + break; + } + case 2: { + if (!(m.submessages && m.submessages.length)) + m.submessages = []; + m.submessages.push($root.proto.AIRichResponseSubMessage.decode(r, r.uint32())); + break; + } + case 3: { + m.unifiedResponse = $root.proto.AIRichResponseUnifiedResponse.decode(r, r.uint32()); + break; + } + case 4: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseMessage) + return d; + var m = new $root.proto.AIRichResponseMessage(); + switch (d.messageType) { + default: + if (typeof d.messageType === "number") { + m.messageType = d.messageType; + break; + } + break; + case "AI_RICH_RESPONSE_TYPE_UNKNOWN": + case 0: + m.messageType = 0; + break; + case "AI_RICH_RESPONSE_TYPE_STANDARD": + case 1: + m.messageType = 1; + break; + } + if (d.submessages) { + if (!Array.isArray(d.submessages)) + throw TypeError(".proto.AIRichResponseMessage.submessages: array expected"); + m.submessages = []; + for (var i = 0; i < d.submessages.length; ++i) { + if (typeof d.submessages[i] !== "object") + throw TypeError(".proto.AIRichResponseMessage.submessages: object expected"); + m.submessages[i] = $root.proto.AIRichResponseSubMessage.fromObject(d.submessages[i]); + } + } + if (d.unifiedResponse != null) { + if (typeof d.unifiedResponse !== "object") + throw TypeError(".proto.AIRichResponseMessage.unifiedResponse: object expected"); + m.unifiedResponse = $root.proto.AIRichResponseUnifiedResponse.fromObject(d.unifiedResponse); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.AIRichResponseMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + AIRichResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.submessages = []; + } + if (m.messageType != null && m.hasOwnProperty("messageType")) { + d.messageType = o.enums === String ? $root.proto.AIRichResponseMessageType[m.messageType] === undefined ? m.messageType : $root.proto.AIRichResponseMessageType[m.messageType] : m.messageType; + if (o.oneofs) + d._messageType = "messageType"; + } + if (m.submessages && m.submessages.length) { + d.submessages = []; + for (var j = 0; j < m.submessages.length; ++j) { + d.submessages[j] = $root.proto.AIRichResponseSubMessage.toObject(m.submessages[j], o); + } + } + if (m.unifiedResponse != null && m.hasOwnProperty("unifiedResponse")) { + d.unifiedResponse = $root.proto.AIRichResponseUnifiedResponse.toObject(m.unifiedResponse, o); + if (o.oneofs) + d._unifiedResponse = "unifiedResponse"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + AIRichResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseMessage"; + }; + + return AIRichResponseMessage; + })(); + + proto.AIRichResponseMessageType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "AI_RICH_RESPONSE_TYPE_UNKNOWN"] = 0; + values[valuesById[1] = "AI_RICH_RESPONSE_TYPE_STANDARD"] = 1; + return values; + })(); + + proto.AIRichResponseSubMessage = (function() { + + function AIRichResponseSubMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseSubMessage.prototype.messageType = null; + AIRichResponseSubMessage.prototype.gridImageMetadata = null; + AIRichResponseSubMessage.prototype.messageText = null; + AIRichResponseSubMessage.prototype.imageMetadata = null; + AIRichResponseSubMessage.prototype.codeMetadata = null; + AIRichResponseSubMessage.prototype.tableMetadata = null; + AIRichResponseSubMessage.prototype.dynamicMetadata = null; + AIRichResponseSubMessage.prototype.latexMetadata = null; + AIRichResponseSubMessage.prototype.mapMetadata = null; + AIRichResponseSubMessage.prototype.contentItemsMetadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_messageType", { + get: $util.oneOfGetter($oneOfFields = ["messageType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_gridImageMetadata", { + get: $util.oneOfGetter($oneOfFields = ["gridImageMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_messageText", { + get: $util.oneOfGetter($oneOfFields = ["messageText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_imageMetadata", { + get: $util.oneOfGetter($oneOfFields = ["imageMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_codeMetadata", { + get: $util.oneOfGetter($oneOfFields = ["codeMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_tableMetadata", { + get: $util.oneOfGetter($oneOfFields = ["tableMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_dynamicMetadata", { + get: $util.oneOfGetter($oneOfFields = ["dynamicMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_latexMetadata", { + get: $util.oneOfGetter($oneOfFields = ["latexMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_mapMetadata", { + get: $util.oneOfGetter($oneOfFields = ["mapMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseSubMessage.prototype, "_contentItemsMetadata", { + get: $util.oneOfGetter($oneOfFields = ["contentItemsMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseSubMessage.create = function create(properties) { + return new AIRichResponseSubMessage(properties); + }; + + AIRichResponseSubMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageType != null && Object.hasOwnProperty.call(m, "messageType")) + w.uint32(8).int32(m.messageType); + if (m.gridImageMetadata != null && Object.hasOwnProperty.call(m, "gridImageMetadata")) + $root.proto.AIRichResponseGridImageMetadata.encode(m.gridImageMetadata, w.uint32(18).fork()).ldelim(); + if (m.messageText != null && Object.hasOwnProperty.call(m, "messageText")) + w.uint32(26).string(m.messageText); + if (m.imageMetadata != null && Object.hasOwnProperty.call(m, "imageMetadata")) + $root.proto.AIRichResponseInlineImageMetadata.encode(m.imageMetadata, w.uint32(34).fork()).ldelim(); + if (m.codeMetadata != null && Object.hasOwnProperty.call(m, "codeMetadata")) + $root.proto.AIRichResponseCodeMetadata.encode(m.codeMetadata, w.uint32(42).fork()).ldelim(); + if (m.tableMetadata != null && Object.hasOwnProperty.call(m, "tableMetadata")) + $root.proto.AIRichResponseTableMetadata.encode(m.tableMetadata, w.uint32(50).fork()).ldelim(); + if (m.dynamicMetadata != null && Object.hasOwnProperty.call(m, "dynamicMetadata")) + $root.proto.AIRichResponseDynamicMetadata.encode(m.dynamicMetadata, w.uint32(58).fork()).ldelim(); + if (m.latexMetadata != null && Object.hasOwnProperty.call(m, "latexMetadata")) + $root.proto.AIRichResponseLatexMetadata.encode(m.latexMetadata, w.uint32(66).fork()).ldelim(); + if (m.mapMetadata != null && Object.hasOwnProperty.call(m, "mapMetadata")) + $root.proto.AIRichResponseMapMetadata.encode(m.mapMetadata, w.uint32(74).fork()).ldelim(); + if (m.contentItemsMetadata != null && Object.hasOwnProperty.call(m, "contentItemsMetadata")) + $root.proto.AIRichResponseContentItemsMetadata.encode(m.contentItemsMetadata, w.uint32(82).fork()).ldelim(); + return w; + }; + + AIRichResponseSubMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseSubMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageType = r.int32(); + break; + } + case 2: { + m.gridImageMetadata = $root.proto.AIRichResponseGridImageMetadata.decode(r, r.uint32()); + break; + } + case 3: { + m.messageText = r.string(); + break; + } + case 4: { + m.imageMetadata = $root.proto.AIRichResponseInlineImageMetadata.decode(r, r.uint32()); + break; + } + case 5: { + m.codeMetadata = $root.proto.AIRichResponseCodeMetadata.decode(r, r.uint32()); + break; + } + case 6: { + m.tableMetadata = $root.proto.AIRichResponseTableMetadata.decode(r, r.uint32()); + break; + } + case 7: { + m.dynamicMetadata = $root.proto.AIRichResponseDynamicMetadata.decode(r, r.uint32()); + break; + } + case 8: { + m.latexMetadata = $root.proto.AIRichResponseLatexMetadata.decode(r, r.uint32()); + break; + } + case 9: { + m.mapMetadata = $root.proto.AIRichResponseMapMetadata.decode(r, r.uint32()); + break; + } + case 10: { + m.contentItemsMetadata = $root.proto.AIRichResponseContentItemsMetadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseSubMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseSubMessage) + return d; + var m = new $root.proto.AIRichResponseSubMessage(); + switch (d.messageType) { + default: + if (typeof d.messageType === "number") { + m.messageType = d.messageType; + break; + } + break; + case "AI_RICH_RESPONSE_UNKNOWN": + case 0: + m.messageType = 0; + break; + case "AI_RICH_RESPONSE_GRID_IMAGE": + case 1: + m.messageType = 1; + break; + case "AI_RICH_RESPONSE_TEXT": + case 2: + m.messageType = 2; + break; + case "AI_RICH_RESPONSE_INLINE_IMAGE": + case 3: + m.messageType = 3; + break; + case "AI_RICH_RESPONSE_TABLE": + case 4: + m.messageType = 4; + break; + case "AI_RICH_RESPONSE_CODE": + case 5: + m.messageType = 5; + break; + case "AI_RICH_RESPONSE_DYNAMIC": + case 6: + m.messageType = 6; + break; + case "AI_RICH_RESPONSE_MAP": + case 7: + m.messageType = 7; + break; + case "AI_RICH_RESPONSE_LATEX": + case 8: + m.messageType = 8; + break; + case "AI_RICH_RESPONSE_CONTENT_ITEMS": + case 9: + m.messageType = 9; + break; + } + if (d.gridImageMetadata != null) { + if (typeof d.gridImageMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.gridImageMetadata: object expected"); + m.gridImageMetadata = $root.proto.AIRichResponseGridImageMetadata.fromObject(d.gridImageMetadata); + } + if (d.messageText != null) { + m.messageText = String(d.messageText); + } + if (d.imageMetadata != null) { + if (typeof d.imageMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.imageMetadata: object expected"); + m.imageMetadata = $root.proto.AIRichResponseInlineImageMetadata.fromObject(d.imageMetadata); + } + if (d.codeMetadata != null) { + if (typeof d.codeMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.codeMetadata: object expected"); + m.codeMetadata = $root.proto.AIRichResponseCodeMetadata.fromObject(d.codeMetadata); + } + if (d.tableMetadata != null) { + if (typeof d.tableMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.tableMetadata: object expected"); + m.tableMetadata = $root.proto.AIRichResponseTableMetadata.fromObject(d.tableMetadata); + } + if (d.dynamicMetadata != null) { + if (typeof d.dynamicMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.dynamicMetadata: object expected"); + m.dynamicMetadata = $root.proto.AIRichResponseDynamicMetadata.fromObject(d.dynamicMetadata); + } + if (d.latexMetadata != null) { + if (typeof d.latexMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.latexMetadata: object expected"); + m.latexMetadata = $root.proto.AIRichResponseLatexMetadata.fromObject(d.latexMetadata); + } + if (d.mapMetadata != null) { + if (typeof d.mapMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.mapMetadata: object expected"); + m.mapMetadata = $root.proto.AIRichResponseMapMetadata.fromObject(d.mapMetadata); + } + if (d.contentItemsMetadata != null) { + if (typeof d.contentItemsMetadata !== "object") + throw TypeError(".proto.AIRichResponseSubMessage.contentItemsMetadata: object expected"); + m.contentItemsMetadata = $root.proto.AIRichResponseContentItemsMetadata.fromObject(d.contentItemsMetadata); + } + return m; + }; + + AIRichResponseSubMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageType != null && m.hasOwnProperty("messageType")) { + d.messageType = o.enums === String ? $root.proto.AIRichResponseSubMessageType[m.messageType] === undefined ? m.messageType : $root.proto.AIRichResponseSubMessageType[m.messageType] : m.messageType; + if (o.oneofs) + d._messageType = "messageType"; + } + if (m.gridImageMetadata != null && m.hasOwnProperty("gridImageMetadata")) { + d.gridImageMetadata = $root.proto.AIRichResponseGridImageMetadata.toObject(m.gridImageMetadata, o); + if (o.oneofs) + d._gridImageMetadata = "gridImageMetadata"; + } + if (m.messageText != null && m.hasOwnProperty("messageText")) { + d.messageText = m.messageText; + if (o.oneofs) + d._messageText = "messageText"; + } + if (m.imageMetadata != null && m.hasOwnProperty("imageMetadata")) { + d.imageMetadata = $root.proto.AIRichResponseInlineImageMetadata.toObject(m.imageMetadata, o); + if (o.oneofs) + d._imageMetadata = "imageMetadata"; + } + if (m.codeMetadata != null && m.hasOwnProperty("codeMetadata")) { + d.codeMetadata = $root.proto.AIRichResponseCodeMetadata.toObject(m.codeMetadata, o); + if (o.oneofs) + d._codeMetadata = "codeMetadata"; + } + if (m.tableMetadata != null && m.hasOwnProperty("tableMetadata")) { + d.tableMetadata = $root.proto.AIRichResponseTableMetadata.toObject(m.tableMetadata, o); + if (o.oneofs) + d._tableMetadata = "tableMetadata"; + } + if (m.dynamicMetadata != null && m.hasOwnProperty("dynamicMetadata")) { + d.dynamicMetadata = $root.proto.AIRichResponseDynamicMetadata.toObject(m.dynamicMetadata, o); + if (o.oneofs) + d._dynamicMetadata = "dynamicMetadata"; + } + if (m.latexMetadata != null && m.hasOwnProperty("latexMetadata")) { + d.latexMetadata = $root.proto.AIRichResponseLatexMetadata.toObject(m.latexMetadata, o); + if (o.oneofs) + d._latexMetadata = "latexMetadata"; + } + if (m.mapMetadata != null && m.hasOwnProperty("mapMetadata")) { + d.mapMetadata = $root.proto.AIRichResponseMapMetadata.toObject(m.mapMetadata, o); + if (o.oneofs) + d._mapMetadata = "mapMetadata"; + } + if (m.contentItemsMetadata != null && m.hasOwnProperty("contentItemsMetadata")) { + d.contentItemsMetadata = $root.proto.AIRichResponseContentItemsMetadata.toObject(m.contentItemsMetadata, o); + if (o.oneofs) + d._contentItemsMetadata = "contentItemsMetadata"; + } + return d; + }; + + AIRichResponseSubMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseSubMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseSubMessage"; + }; + + return AIRichResponseSubMessage; + })(); + + proto.AIRichResponseSubMessageType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "AI_RICH_RESPONSE_UNKNOWN"] = 0; + values[valuesById[1] = "AI_RICH_RESPONSE_GRID_IMAGE"] = 1; + values[valuesById[2] = "AI_RICH_RESPONSE_TEXT"] = 2; + values[valuesById[3] = "AI_RICH_RESPONSE_INLINE_IMAGE"] = 3; + values[valuesById[4] = "AI_RICH_RESPONSE_TABLE"] = 4; + values[valuesById[5] = "AI_RICH_RESPONSE_CODE"] = 5; + values[valuesById[6] = "AI_RICH_RESPONSE_DYNAMIC"] = 6; + values[valuesById[7] = "AI_RICH_RESPONSE_MAP"] = 7; + values[valuesById[8] = "AI_RICH_RESPONSE_LATEX"] = 8; + values[valuesById[9] = "AI_RICH_RESPONSE_CONTENT_ITEMS"] = 9; + return values; + })(); + + proto.AIRichResponseTableMetadata = (function() { + + function AIRichResponseTableMetadata(p) { + this.rows = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseTableMetadata.prototype.rows = $util.emptyArray; + AIRichResponseTableMetadata.prototype.title = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseTableMetadata.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseTableMetadata.create = function create(properties) { + return new AIRichResponseTableMetadata(properties); + }; + + AIRichResponseTableMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.rows != null && m.rows.length) { + for (var i = 0; i < m.rows.length; ++i) + $root.proto.AIRichResponseTableMetadata.AIRichResponseTableRow.encode(m.rows[i], w.uint32(10).fork()).ldelim(); + } + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(18).string(m.title); + return w; + }; + + AIRichResponseTableMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseTableMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.rows && m.rows.length)) + m.rows = []; + m.rows.push($root.proto.AIRichResponseTableMetadata.AIRichResponseTableRow.decode(r, r.uint32())); + break; + } + case 2: { + m.title = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseTableMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseTableMetadata) + return d; + var m = new $root.proto.AIRichResponseTableMetadata(); + if (d.rows) { + if (!Array.isArray(d.rows)) + throw TypeError(".proto.AIRichResponseTableMetadata.rows: array expected"); + m.rows = []; + for (var i = 0; i < d.rows.length; ++i) { + if (typeof d.rows[i] !== "object") + throw TypeError(".proto.AIRichResponseTableMetadata.rows: object expected"); + m.rows[i] = $root.proto.AIRichResponseTableMetadata.AIRichResponseTableRow.fromObject(d.rows[i]); + } + } + if (d.title != null) { + m.title = String(d.title); + } + return m; + }; + + AIRichResponseTableMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.rows = []; + } + if (m.rows && m.rows.length) { + d.rows = []; + for (var j = 0; j < m.rows.length; ++j) { + d.rows[j] = $root.proto.AIRichResponseTableMetadata.AIRichResponseTableRow.toObject(m.rows[j], o); + } + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + return d; + }; + + AIRichResponseTableMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseTableMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseTableMetadata"; + }; + + AIRichResponseTableMetadata.AIRichResponseTableRow = (function() { + + function AIRichResponseTableRow(p) { + this.items = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseTableRow.prototype.items = $util.emptyArray; + AIRichResponseTableRow.prototype.isHeading = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseTableRow.prototype, "_isHeading", { + get: $util.oneOfGetter($oneOfFields = ["isHeading"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseTableRow.create = function create(properties) { + return new AIRichResponseTableRow(properties); + }; + + AIRichResponseTableRow.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.items != null && m.items.length) { + for (var i = 0; i < m.items.length; ++i) + w.uint32(10).string(m.items[i]); + } + if (m.isHeading != null && Object.hasOwnProperty.call(m, "isHeading")) + w.uint32(16).bool(m.isHeading); + return w; + }; + + AIRichResponseTableRow.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseTableMetadata.AIRichResponseTableRow(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.items && m.items.length)) + m.items = []; + m.items.push(r.string()); + break; + } + case 2: { + m.isHeading = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseTableRow.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseTableMetadata.AIRichResponseTableRow) + return d; + var m = new $root.proto.AIRichResponseTableMetadata.AIRichResponseTableRow(); + if (d.items) { + if (!Array.isArray(d.items)) + throw TypeError(".proto.AIRichResponseTableMetadata.AIRichResponseTableRow.items: array expected"); + m.items = []; + for (var i = 0; i < d.items.length; ++i) { + m.items[i] = String(d.items[i]); + } + } + if (d.isHeading != null) { + m.isHeading = Boolean(d.isHeading); + } + return m; + }; + + AIRichResponseTableRow.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.items = []; + } + if (m.items && m.items.length) { + d.items = []; + for (var j = 0; j < m.items.length; ++j) { + d.items[j] = m.items[j]; + } + } + if (m.isHeading != null && m.hasOwnProperty("isHeading")) { + d.isHeading = m.isHeading; + if (o.oneofs) + d._isHeading = "isHeading"; + } + return d; + }; + + AIRichResponseTableRow.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseTableRow.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseTableMetadata.AIRichResponseTableRow"; + }; + + return AIRichResponseTableRow; + })(); + + return AIRichResponseTableMetadata; + })(); + + proto.AIRichResponseUnifiedResponse = (function() { + + function AIRichResponseUnifiedResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIRichResponseUnifiedResponse.prototype.data = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIRichResponseUnifiedResponse.prototype, "_data", { + get: $util.oneOfGetter($oneOfFields = ["data"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIRichResponseUnifiedResponse.create = function create(properties) { + return new AIRichResponseUnifiedResponse(properties); + }; + + AIRichResponseUnifiedResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.data != null && Object.hasOwnProperty.call(m, "data")) + w.uint32(10).bytes(m.data); + return w; + }; + + AIRichResponseUnifiedResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIRichResponseUnifiedResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.data = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIRichResponseUnifiedResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIRichResponseUnifiedResponse) + return d; + var m = new $root.proto.AIRichResponseUnifiedResponse(); + if (d.data != null) { + if (typeof d.data === "string") + $util.base64.decode(d.data, m.data = $util.newBuffer($util.base64.length(d.data)), 0); + else if (d.data.length >= 0) + m.data = d.data; + } + return m; + }; + + AIRichResponseUnifiedResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.data != null && m.hasOwnProperty("data")) { + d.data = o.bytes === String ? $util.base64.encode(m.data, 0, m.data.length) : o.bytes === Array ? Array.prototype.slice.call(m.data) : m.data; + if (o.oneofs) + d._data = "data"; + } + return d; + }; + + AIRichResponseUnifiedResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIRichResponseUnifiedResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIRichResponseUnifiedResponse"; + }; + + return AIRichResponseUnifiedResponse; + })(); + + proto.AIThreadInfo = (function() { + + function AIThreadInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIThreadInfo.prototype.serverInfo = null; + AIThreadInfo.prototype.clientInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIThreadInfo.prototype, "_serverInfo", { + get: $util.oneOfGetter($oneOfFields = ["serverInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIThreadInfo.prototype, "_clientInfo", { + get: $util.oneOfGetter($oneOfFields = ["clientInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIThreadInfo.create = function create(properties) { + return new AIThreadInfo(properties); + }; + + AIThreadInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.serverInfo != null && Object.hasOwnProperty.call(m, "serverInfo")) + $root.proto.AIThreadInfo.AIThreadServerInfo.encode(m.serverInfo, w.uint32(10).fork()).ldelim(); + if (m.clientInfo != null && Object.hasOwnProperty.call(m, "clientInfo")) + $root.proto.AIThreadInfo.AIThreadClientInfo.encode(m.clientInfo, w.uint32(18).fork()).ldelim(); + return w; + }; + + AIThreadInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIThreadInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.serverInfo = $root.proto.AIThreadInfo.AIThreadServerInfo.decode(r, r.uint32()); + break; + } + case 2: { + m.clientInfo = $root.proto.AIThreadInfo.AIThreadClientInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIThreadInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIThreadInfo) + return d; + var m = new $root.proto.AIThreadInfo(); + if (d.serverInfo != null) { + if (typeof d.serverInfo !== "object") + throw TypeError(".proto.AIThreadInfo.serverInfo: object expected"); + m.serverInfo = $root.proto.AIThreadInfo.AIThreadServerInfo.fromObject(d.serverInfo); + } + if (d.clientInfo != null) { + if (typeof d.clientInfo !== "object") + throw TypeError(".proto.AIThreadInfo.clientInfo: object expected"); + m.clientInfo = $root.proto.AIThreadInfo.AIThreadClientInfo.fromObject(d.clientInfo); + } + return m; + }; + + AIThreadInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.serverInfo != null && m.hasOwnProperty("serverInfo")) { + d.serverInfo = $root.proto.AIThreadInfo.AIThreadServerInfo.toObject(m.serverInfo, o); + if (o.oneofs) + d._serverInfo = "serverInfo"; + } + if (m.clientInfo != null && m.hasOwnProperty("clientInfo")) { + d.clientInfo = $root.proto.AIThreadInfo.AIThreadClientInfo.toObject(m.clientInfo, o); + if (o.oneofs) + d._clientInfo = "clientInfo"; + } + return d; + }; + + AIThreadInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIThreadInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIThreadInfo"; + }; + + AIThreadInfo.AIThreadClientInfo = (function() { + + function AIThreadClientInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIThreadClientInfo.prototype.type = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIThreadClientInfo.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIThreadClientInfo.create = function create(properties) { + return new AIThreadClientInfo(properties); + }; + + AIThreadClientInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + return w; + }; + + AIThreadClientInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIThreadInfo.AIThreadClientInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIThreadClientInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIThreadInfo.AIThreadClientInfo) + return d; + var m = new $root.proto.AIThreadInfo.AIThreadClientInfo(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN": + case 0: + m.type = 0; + break; + case "DEFAULT": + case 1: + m.type = 1; + break; + case "INCOGNITO": + case 2: + m.type = 2; + break; + } + return m; + }; + + AIThreadClientInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.AIThreadInfo.AIThreadClientInfo.AIThreadType[m.type] === undefined ? m.type : $root.proto.AIThreadInfo.AIThreadClientInfo.AIThreadType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + AIThreadClientInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIThreadClientInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIThreadInfo.AIThreadClientInfo"; + }; + + AIThreadClientInfo.AIThreadType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "DEFAULT"] = 1; + values[valuesById[2] = "INCOGNITO"] = 2; + return values; + })(); + + return AIThreadClientInfo; + })(); + + AIThreadInfo.AIThreadServerInfo = (function() { + + function AIThreadServerInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AIThreadServerInfo.prototype.title = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AIThreadServerInfo.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AIThreadServerInfo.create = function create(properties) { + return new AIThreadServerInfo(properties); + }; + + AIThreadServerInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + return w; + }; + + AIThreadServerInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AIThreadInfo.AIThreadServerInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AIThreadServerInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AIThreadInfo.AIThreadServerInfo) + return d; + var m = new $root.proto.AIThreadInfo.AIThreadServerInfo(); + if (d.title != null) { + m.title = String(d.title); + } + return m; + }; + + AIThreadServerInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + return d; + }; + + AIThreadServerInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AIThreadServerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AIThreadInfo.AIThreadServerInfo"; + }; + + return AIThreadServerInfo; + })(); + + return AIThreadInfo; + })(); + + proto.Account = (function() { + + function Account(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Account.prototype.lid = null; + Account.prototype.username = null; + Account.prototype.countryCode = null; + Account.prototype.isUsernameDeleted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Account.prototype, "_lid", { + get: $util.oneOfGetter($oneOfFields = ["lid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Account.prototype, "_username", { + get: $util.oneOfGetter($oneOfFields = ["username"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Account.prototype, "_countryCode", { + get: $util.oneOfGetter($oneOfFields = ["countryCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Account.prototype, "_isUsernameDeleted", { + get: $util.oneOfGetter($oneOfFields = ["isUsernameDeleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Account.create = function create(properties) { + return new Account(properties); + }; + + Account.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.lid != null && Object.hasOwnProperty.call(m, "lid")) + w.uint32(10).string(m.lid); + if (m.username != null && Object.hasOwnProperty.call(m, "username")) + w.uint32(18).string(m.username); + if (m.countryCode != null && Object.hasOwnProperty.call(m, "countryCode")) + w.uint32(26).string(m.countryCode); + if (m.isUsernameDeleted != null && Object.hasOwnProperty.call(m, "isUsernameDeleted")) + w.uint32(32).bool(m.isUsernameDeleted); + return w; + }; + + Account.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Account(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.lid = r.string(); + break; + } + case 2: { + m.username = r.string(); + break; + } + case 3: { + m.countryCode = r.string(); + break; + } + case 4: { + m.isUsernameDeleted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Account.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Account) + return d; + var m = new $root.proto.Account(); + if (d.lid != null) { + m.lid = String(d.lid); + } + if (d.username != null) { + m.username = String(d.username); + } + if (d.countryCode != null) { + m.countryCode = String(d.countryCode); + } + if (d.isUsernameDeleted != null) { + m.isUsernameDeleted = Boolean(d.isUsernameDeleted); + } + return m; + }; + + Account.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.lid != null && m.hasOwnProperty("lid")) { + d.lid = m.lid; + if (o.oneofs) + d._lid = "lid"; + } + if (m.username != null && m.hasOwnProperty("username")) { + d.username = m.username; + if (o.oneofs) + d._username = "username"; + } + if (m.countryCode != null && m.hasOwnProperty("countryCode")) { + d.countryCode = m.countryCode; + if (o.oneofs) + d._countryCode = "countryCode"; + } + if (m.isUsernameDeleted != null && m.hasOwnProperty("isUsernameDeleted")) { + d.isUsernameDeleted = m.isUsernameDeleted; + if (o.oneofs) + d._isUsernameDeleted = "isUsernameDeleted"; + } + return d; + }; + + Account.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Account.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Account"; + }; + + return Account; + })(); + + proto.ActionLink = (function() { + + function ActionLink(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ActionLink.prototype.url = null; + ActionLink.prototype.buttonTitle = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ActionLink.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ActionLink.prototype, "_buttonTitle", { + get: $util.oneOfGetter($oneOfFields = ["buttonTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ActionLink.create = function create(properties) { + return new ActionLink(properties); + }; + + ActionLink.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.buttonTitle != null && Object.hasOwnProperty.call(m, "buttonTitle")) + w.uint32(18).string(m.buttonTitle); + return w; + }; + + ActionLink.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ActionLink(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.buttonTitle = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ActionLink.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ActionLink) + return d; + var m = new $root.proto.ActionLink(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.buttonTitle != null) { + m.buttonTitle = String(d.buttonTitle); + } + return m; + }; + + ActionLink.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.buttonTitle != null && m.hasOwnProperty("buttonTitle")) { + d.buttonTitle = m.buttonTitle; + if (o.oneofs) + d._buttonTitle = "buttonTitle"; + } + return d; + }; + + ActionLink.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ActionLink.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ActionLink"; + }; + + return ActionLink; + })(); + + proto.AutoDownloadSettings = (function() { + + function AutoDownloadSettings(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AutoDownloadSettings.prototype.downloadImages = null; + AutoDownloadSettings.prototype.downloadAudio = null; + AutoDownloadSettings.prototype.downloadVideo = null; + AutoDownloadSettings.prototype.downloadDocuments = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AutoDownloadSettings.prototype, "_downloadImages", { + get: $util.oneOfGetter($oneOfFields = ["downloadImages"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AutoDownloadSettings.prototype, "_downloadAudio", { + get: $util.oneOfGetter($oneOfFields = ["downloadAudio"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AutoDownloadSettings.prototype, "_downloadVideo", { + get: $util.oneOfGetter($oneOfFields = ["downloadVideo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AutoDownloadSettings.prototype, "_downloadDocuments", { + get: $util.oneOfGetter($oneOfFields = ["downloadDocuments"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AutoDownloadSettings.create = function create(properties) { + return new AutoDownloadSettings(properties); + }; + + AutoDownloadSettings.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.downloadImages != null && Object.hasOwnProperty.call(m, "downloadImages")) + w.uint32(8).bool(m.downloadImages); + if (m.downloadAudio != null && Object.hasOwnProperty.call(m, "downloadAudio")) + w.uint32(16).bool(m.downloadAudio); + if (m.downloadVideo != null && Object.hasOwnProperty.call(m, "downloadVideo")) + w.uint32(24).bool(m.downloadVideo); + if (m.downloadDocuments != null && Object.hasOwnProperty.call(m, "downloadDocuments")) + w.uint32(32).bool(m.downloadDocuments); + return w; + }; + + AutoDownloadSettings.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AutoDownloadSettings(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.downloadImages = r.bool(); + break; + } + case 2: { + m.downloadAudio = r.bool(); + break; + } + case 3: { + m.downloadVideo = r.bool(); + break; + } + case 4: { + m.downloadDocuments = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AutoDownloadSettings.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AutoDownloadSettings) + return d; + var m = new $root.proto.AutoDownloadSettings(); + if (d.downloadImages != null) { + m.downloadImages = Boolean(d.downloadImages); + } + if (d.downloadAudio != null) { + m.downloadAudio = Boolean(d.downloadAudio); + } + if (d.downloadVideo != null) { + m.downloadVideo = Boolean(d.downloadVideo); + } + if (d.downloadDocuments != null) { + m.downloadDocuments = Boolean(d.downloadDocuments); + } + return m; + }; + + AutoDownloadSettings.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.downloadImages != null && m.hasOwnProperty("downloadImages")) { + d.downloadImages = m.downloadImages; + if (o.oneofs) + d._downloadImages = "downloadImages"; + } + if (m.downloadAudio != null && m.hasOwnProperty("downloadAudio")) { + d.downloadAudio = m.downloadAudio; + if (o.oneofs) + d._downloadAudio = "downloadAudio"; + } + if (m.downloadVideo != null && m.hasOwnProperty("downloadVideo")) { + d.downloadVideo = m.downloadVideo; + if (o.oneofs) + d._downloadVideo = "downloadVideo"; + } + if (m.downloadDocuments != null && m.hasOwnProperty("downloadDocuments")) { + d.downloadDocuments = m.downloadDocuments; + if (o.oneofs) + d._downloadDocuments = "downloadDocuments"; + } + return d; + }; + + AutoDownloadSettings.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AutoDownloadSettings.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AutoDownloadSettings"; + }; + + return AutoDownloadSettings; + })(); + + proto.AvatarUserSettings = (function() { + + function AvatarUserSettings(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AvatarUserSettings.prototype.fbid = null; + AvatarUserSettings.prototype.password = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AvatarUserSettings.prototype, "_fbid", { + get: $util.oneOfGetter($oneOfFields = ["fbid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AvatarUserSettings.prototype, "_password", { + get: $util.oneOfGetter($oneOfFields = ["password"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AvatarUserSettings.create = function create(properties) { + return new AvatarUserSettings(properties); + }; + + AvatarUserSettings.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fbid != null && Object.hasOwnProperty.call(m, "fbid")) + w.uint32(10).string(m.fbid); + if (m.password != null && Object.hasOwnProperty.call(m, "password")) + w.uint32(18).string(m.password); + return w; + }; + + AvatarUserSettings.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.AvatarUserSettings(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fbid = r.string(); + break; + } + case 2: { + m.password = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AvatarUserSettings.fromObject = function fromObject(d) { + if (d instanceof $root.proto.AvatarUserSettings) + return d; + var m = new $root.proto.AvatarUserSettings(); + if (d.fbid != null) { + m.fbid = String(d.fbid); + } + if (d.password != null) { + m.password = String(d.password); + } + return m; + }; + + AvatarUserSettings.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fbid != null && m.hasOwnProperty("fbid")) { + d.fbid = m.fbid; + if (o.oneofs) + d._fbid = "fbid"; + } + if (m.password != null && m.hasOwnProperty("password")) { + d.password = m.password; + if (o.oneofs) + d._password = "password"; + } + return d; + }; + + AvatarUserSettings.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AvatarUserSettings.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.AvatarUserSettings"; + }; + + return AvatarUserSettings; + })(); + + proto.BizAccountLinkInfo = (function() { + + function BizAccountLinkInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BizAccountLinkInfo.prototype.whatsappBizAcctFbid = null; + BizAccountLinkInfo.prototype.whatsappAcctNumber = null; + BizAccountLinkInfo.prototype.issueTime = null; + BizAccountLinkInfo.prototype.hostStorage = null; + BizAccountLinkInfo.prototype.accountType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizAccountLinkInfo.prototype, "_whatsappBizAcctFbid", { + get: $util.oneOfGetter($oneOfFields = ["whatsappBizAcctFbid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizAccountLinkInfo.prototype, "_whatsappAcctNumber", { + get: $util.oneOfGetter($oneOfFields = ["whatsappAcctNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizAccountLinkInfo.prototype, "_issueTime", { + get: $util.oneOfGetter($oneOfFields = ["issueTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizAccountLinkInfo.prototype, "_hostStorage", { + get: $util.oneOfGetter($oneOfFields = ["hostStorage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizAccountLinkInfo.prototype, "_accountType", { + get: $util.oneOfGetter($oneOfFields = ["accountType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BizAccountLinkInfo.create = function create(properties) { + return new BizAccountLinkInfo(properties); + }; + + BizAccountLinkInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.whatsappBizAcctFbid != null && Object.hasOwnProperty.call(m, "whatsappBizAcctFbid")) + w.uint32(8).uint64(m.whatsappBizAcctFbid); + if (m.whatsappAcctNumber != null && Object.hasOwnProperty.call(m, "whatsappAcctNumber")) + w.uint32(18).string(m.whatsappAcctNumber); + if (m.issueTime != null && Object.hasOwnProperty.call(m, "issueTime")) + w.uint32(24).uint64(m.issueTime); + if (m.hostStorage != null && Object.hasOwnProperty.call(m, "hostStorage")) + w.uint32(32).int32(m.hostStorage); + if (m.accountType != null && Object.hasOwnProperty.call(m, "accountType")) + w.uint32(40).int32(m.accountType); + return w; + }; + + BizAccountLinkInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BizAccountLinkInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.whatsappBizAcctFbid = r.uint64(); + break; + } + case 2: { + m.whatsappAcctNumber = r.string(); + break; + } + case 3: { + m.issueTime = r.uint64(); + break; + } + case 4: { + m.hostStorage = r.int32(); + break; + } + case 5: { + m.accountType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BizAccountLinkInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BizAccountLinkInfo) + return d; + var m = new $root.proto.BizAccountLinkInfo(); + if (d.whatsappBizAcctFbid != null) { + if ($util.Long) + (m.whatsappBizAcctFbid = $util.Long.fromValue(d.whatsappBizAcctFbid)).unsigned = true; + else if (typeof d.whatsappBizAcctFbid === "string") + m.whatsappBizAcctFbid = parseInt(d.whatsappBizAcctFbid, 10); + else if (typeof d.whatsappBizAcctFbid === "number") + m.whatsappBizAcctFbid = d.whatsappBizAcctFbid; + else if (typeof d.whatsappBizAcctFbid === "object") + m.whatsappBizAcctFbid = new $util.LongBits(d.whatsappBizAcctFbid.low >>> 0, d.whatsappBizAcctFbid.high >>> 0).toNumber(true); + } + if (d.whatsappAcctNumber != null) { + m.whatsappAcctNumber = String(d.whatsappAcctNumber); + } + if (d.issueTime != null) { + if ($util.Long) + (m.issueTime = $util.Long.fromValue(d.issueTime)).unsigned = true; + else if (typeof d.issueTime === "string") + m.issueTime = parseInt(d.issueTime, 10); + else if (typeof d.issueTime === "number") + m.issueTime = d.issueTime; + else if (typeof d.issueTime === "object") + m.issueTime = new $util.LongBits(d.issueTime.low >>> 0, d.issueTime.high >>> 0).toNumber(true); + } + switch (d.hostStorage) { + default: + if (typeof d.hostStorage === "number") { + m.hostStorage = d.hostStorage; + break; + } + break; + case "ON_PREMISE": + case 0: + m.hostStorage = 0; + break; + case "FACEBOOK": + case 1: + m.hostStorage = 1; + break; + } + switch (d.accountType) { + default: + if (typeof d.accountType === "number") { + m.accountType = d.accountType; + break; + } + break; + case "ENTERPRISE": + case 0: + m.accountType = 0; + break; + } + return m; + }; + + BizAccountLinkInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.whatsappBizAcctFbid != null && m.hasOwnProperty("whatsappBizAcctFbid")) { + if (typeof m.whatsappBizAcctFbid === "number") + d.whatsappBizAcctFbid = o.longs === String ? String(m.whatsappBizAcctFbid) : m.whatsappBizAcctFbid; + else + d.whatsappBizAcctFbid = o.longs === String ? longToString(m.whatsappBizAcctFbid, true) : o.longs === Number ? longToNumber(m.whatsappBizAcctFbid, true) : m.whatsappBizAcctFbid; + if (o.oneofs) + d._whatsappBizAcctFbid = "whatsappBizAcctFbid"; + } + if (m.whatsappAcctNumber != null && m.hasOwnProperty("whatsappAcctNumber")) { + d.whatsappAcctNumber = m.whatsappAcctNumber; + if (o.oneofs) + d._whatsappAcctNumber = "whatsappAcctNumber"; + } + if (m.issueTime != null && m.hasOwnProperty("issueTime")) { + if (typeof m.issueTime === "number") + d.issueTime = o.longs === String ? String(m.issueTime) : m.issueTime; + else + d.issueTime = o.longs === String ? longToString(m.issueTime, true) : o.longs === Number ? longToNumber(m.issueTime, true) : m.issueTime; + if (o.oneofs) + d._issueTime = "issueTime"; + } + if (m.hostStorage != null && m.hasOwnProperty("hostStorage")) { + d.hostStorage = o.enums === String ? $root.proto.BizAccountLinkInfo.HostStorageType[m.hostStorage] === undefined ? m.hostStorage : $root.proto.BizAccountLinkInfo.HostStorageType[m.hostStorage] : m.hostStorage; + if (o.oneofs) + d._hostStorage = "hostStorage"; + } + if (m.accountType != null && m.hasOwnProperty("accountType")) { + d.accountType = o.enums === String ? $root.proto.BizAccountLinkInfo.AccountType[m.accountType] === undefined ? m.accountType : $root.proto.BizAccountLinkInfo.AccountType[m.accountType] : m.accountType; + if (o.oneofs) + d._accountType = "accountType"; + } + return d; + }; + + BizAccountLinkInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BizAccountLinkInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BizAccountLinkInfo"; + }; + + BizAccountLinkInfo.AccountType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ENTERPRISE"] = 0; + return values; + })(); + + BizAccountLinkInfo.HostStorageType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ON_PREMISE"] = 0; + values[valuesById[1] = "FACEBOOK"] = 1; + return values; + })(); + + return BizAccountLinkInfo; + })(); + + proto.BizAccountPayload = (function() { + + function BizAccountPayload(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BizAccountPayload.prototype.vnameCert = null; + BizAccountPayload.prototype.bizAcctLinkInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizAccountPayload.prototype, "_vnameCert", { + get: $util.oneOfGetter($oneOfFields = ["vnameCert"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizAccountPayload.prototype, "_bizAcctLinkInfo", { + get: $util.oneOfGetter($oneOfFields = ["bizAcctLinkInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BizAccountPayload.create = function create(properties) { + return new BizAccountPayload(properties); + }; + + BizAccountPayload.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.vnameCert != null && Object.hasOwnProperty.call(m, "vnameCert")) + $root.proto.VerifiedNameCertificate.encode(m.vnameCert, w.uint32(10).fork()).ldelim(); + if (m.bizAcctLinkInfo != null && Object.hasOwnProperty.call(m, "bizAcctLinkInfo")) + w.uint32(18).bytes(m.bizAcctLinkInfo); + return w; + }; + + BizAccountPayload.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BizAccountPayload(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.vnameCert = $root.proto.VerifiedNameCertificate.decode(r, r.uint32()); + break; + } + case 2: { + m.bizAcctLinkInfo = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BizAccountPayload.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BizAccountPayload) + return d; + var m = new $root.proto.BizAccountPayload(); + if (d.vnameCert != null) { + if (typeof d.vnameCert !== "object") + throw TypeError(".proto.BizAccountPayload.vnameCert: object expected"); + m.vnameCert = $root.proto.VerifiedNameCertificate.fromObject(d.vnameCert); + } + if (d.bizAcctLinkInfo != null) { + if (typeof d.bizAcctLinkInfo === "string") + $util.base64.decode(d.bizAcctLinkInfo, m.bizAcctLinkInfo = $util.newBuffer($util.base64.length(d.bizAcctLinkInfo)), 0); + else if (d.bizAcctLinkInfo.length >= 0) + m.bizAcctLinkInfo = d.bizAcctLinkInfo; + } + return m; + }; + + BizAccountPayload.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.vnameCert != null && m.hasOwnProperty("vnameCert")) { + d.vnameCert = $root.proto.VerifiedNameCertificate.toObject(m.vnameCert, o); + if (o.oneofs) + d._vnameCert = "vnameCert"; + } + if (m.bizAcctLinkInfo != null && m.hasOwnProperty("bizAcctLinkInfo")) { + d.bizAcctLinkInfo = o.bytes === String ? $util.base64.encode(m.bizAcctLinkInfo, 0, m.bizAcctLinkInfo.length) : o.bytes === Array ? Array.prototype.slice.call(m.bizAcctLinkInfo) : m.bizAcctLinkInfo; + if (o.oneofs) + d._bizAcctLinkInfo = "bizAcctLinkInfo"; + } + return d; + }; + + BizAccountPayload.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BizAccountPayload.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BizAccountPayload"; + }; + + return BizAccountPayload; + })(); + + proto.BizIdentityInfo = (function() { + + function BizIdentityInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BizIdentityInfo.prototype.vlevel = null; + BizIdentityInfo.prototype.vnameCert = null; + BizIdentityInfo.prototype.signed = null; + BizIdentityInfo.prototype.revoked = null; + BizIdentityInfo.prototype.hostStorage = null; + BizIdentityInfo.prototype.actualActors = null; + BizIdentityInfo.prototype.privacyModeTs = null; + BizIdentityInfo.prototype.featureControls = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_vlevel", { + get: $util.oneOfGetter($oneOfFields = ["vlevel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_vnameCert", { + get: $util.oneOfGetter($oneOfFields = ["vnameCert"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_signed", { + get: $util.oneOfGetter($oneOfFields = ["signed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_revoked", { + get: $util.oneOfGetter($oneOfFields = ["revoked"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_hostStorage", { + get: $util.oneOfGetter($oneOfFields = ["hostStorage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_actualActors", { + get: $util.oneOfGetter($oneOfFields = ["actualActors"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_privacyModeTs", { + get: $util.oneOfGetter($oneOfFields = ["privacyModeTs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BizIdentityInfo.prototype, "_featureControls", { + get: $util.oneOfGetter($oneOfFields = ["featureControls"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BizIdentityInfo.create = function create(properties) { + return new BizIdentityInfo(properties); + }; + + BizIdentityInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.vlevel != null && Object.hasOwnProperty.call(m, "vlevel")) + w.uint32(8).int32(m.vlevel); + if (m.vnameCert != null && Object.hasOwnProperty.call(m, "vnameCert")) + $root.proto.VerifiedNameCertificate.encode(m.vnameCert, w.uint32(18).fork()).ldelim(); + if (m.signed != null && Object.hasOwnProperty.call(m, "signed")) + w.uint32(24).bool(m.signed); + if (m.revoked != null && Object.hasOwnProperty.call(m, "revoked")) + w.uint32(32).bool(m.revoked); + if (m.hostStorage != null && Object.hasOwnProperty.call(m, "hostStorage")) + w.uint32(40).int32(m.hostStorage); + if (m.actualActors != null && Object.hasOwnProperty.call(m, "actualActors")) + w.uint32(48).int32(m.actualActors); + if (m.privacyModeTs != null && Object.hasOwnProperty.call(m, "privacyModeTs")) + w.uint32(56).uint64(m.privacyModeTs); + if (m.featureControls != null && Object.hasOwnProperty.call(m, "featureControls")) + w.uint32(64).uint64(m.featureControls); + return w; + }; + + BizIdentityInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BizIdentityInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.vlevel = r.int32(); + break; + } + case 2: { + m.vnameCert = $root.proto.VerifiedNameCertificate.decode(r, r.uint32()); + break; + } + case 3: { + m.signed = r.bool(); + break; + } + case 4: { + m.revoked = r.bool(); + break; + } + case 5: { + m.hostStorage = r.int32(); + break; + } + case 6: { + m.actualActors = r.int32(); + break; + } + case 7: { + m.privacyModeTs = r.uint64(); + break; + } + case 8: { + m.featureControls = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BizIdentityInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BizIdentityInfo) + return d; + var m = new $root.proto.BizIdentityInfo(); + switch (d.vlevel) { + default: + if (typeof d.vlevel === "number") { + m.vlevel = d.vlevel; + break; + } + break; + case "UNKNOWN": + case 0: + m.vlevel = 0; + break; + case "LOW": + case 1: + m.vlevel = 1; + break; + case "HIGH": + case 2: + m.vlevel = 2; + break; + } + if (d.vnameCert != null) { + if (typeof d.vnameCert !== "object") + throw TypeError(".proto.BizIdentityInfo.vnameCert: object expected"); + m.vnameCert = $root.proto.VerifiedNameCertificate.fromObject(d.vnameCert); + } + if (d.signed != null) { + m.signed = Boolean(d.signed); + } + if (d.revoked != null) { + m.revoked = Boolean(d.revoked); + } + switch (d.hostStorage) { + default: + if (typeof d.hostStorage === "number") { + m.hostStorage = d.hostStorage; + break; + } + break; + case "ON_PREMISE": + case 0: + m.hostStorage = 0; + break; + case "FACEBOOK": + case 1: + m.hostStorage = 1; + break; + } + switch (d.actualActors) { + default: + if (typeof d.actualActors === "number") { + m.actualActors = d.actualActors; + break; + } + break; + case "SELF": + case 0: + m.actualActors = 0; + break; + case "BSP": + case 1: + m.actualActors = 1; + break; + } + if (d.privacyModeTs != null) { + if ($util.Long) + (m.privacyModeTs = $util.Long.fromValue(d.privacyModeTs)).unsigned = true; + else if (typeof d.privacyModeTs === "string") + m.privacyModeTs = parseInt(d.privacyModeTs, 10); + else if (typeof d.privacyModeTs === "number") + m.privacyModeTs = d.privacyModeTs; + else if (typeof d.privacyModeTs === "object") + m.privacyModeTs = new $util.LongBits(d.privacyModeTs.low >>> 0, d.privacyModeTs.high >>> 0).toNumber(true); + } + if (d.featureControls != null) { + if ($util.Long) + (m.featureControls = $util.Long.fromValue(d.featureControls)).unsigned = true; + else if (typeof d.featureControls === "string") + m.featureControls = parseInt(d.featureControls, 10); + else if (typeof d.featureControls === "number") + m.featureControls = d.featureControls; + else if (typeof d.featureControls === "object") + m.featureControls = new $util.LongBits(d.featureControls.low >>> 0, d.featureControls.high >>> 0).toNumber(true); + } + return m; + }; + + BizIdentityInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.vlevel != null && m.hasOwnProperty("vlevel")) { + d.vlevel = o.enums === String ? $root.proto.BizIdentityInfo.VerifiedLevelValue[m.vlevel] === undefined ? m.vlevel : $root.proto.BizIdentityInfo.VerifiedLevelValue[m.vlevel] : m.vlevel; + if (o.oneofs) + d._vlevel = "vlevel"; + } + if (m.vnameCert != null && m.hasOwnProperty("vnameCert")) { + d.vnameCert = $root.proto.VerifiedNameCertificate.toObject(m.vnameCert, o); + if (o.oneofs) + d._vnameCert = "vnameCert"; + } + if (m.signed != null && m.hasOwnProperty("signed")) { + d.signed = m.signed; + if (o.oneofs) + d._signed = "signed"; + } + if (m.revoked != null && m.hasOwnProperty("revoked")) { + d.revoked = m.revoked; + if (o.oneofs) + d._revoked = "revoked"; + } + if (m.hostStorage != null && m.hasOwnProperty("hostStorage")) { + d.hostStorage = o.enums === String ? $root.proto.BizIdentityInfo.HostStorageType[m.hostStorage] === undefined ? m.hostStorage : $root.proto.BizIdentityInfo.HostStorageType[m.hostStorage] : m.hostStorage; + if (o.oneofs) + d._hostStorage = "hostStorage"; + } + if (m.actualActors != null && m.hasOwnProperty("actualActors")) { + d.actualActors = o.enums === String ? $root.proto.BizIdentityInfo.ActualActorsType[m.actualActors] === undefined ? m.actualActors : $root.proto.BizIdentityInfo.ActualActorsType[m.actualActors] : m.actualActors; + if (o.oneofs) + d._actualActors = "actualActors"; + } + if (m.privacyModeTs != null && m.hasOwnProperty("privacyModeTs")) { + if (typeof m.privacyModeTs === "number") + d.privacyModeTs = o.longs === String ? String(m.privacyModeTs) : m.privacyModeTs; + else + d.privacyModeTs = o.longs === String ? longToString(m.privacyModeTs, true) : o.longs === Number ? longToNumber(m.privacyModeTs, true) : m.privacyModeTs; + if (o.oneofs) + d._privacyModeTs = "privacyModeTs"; + } + if (m.featureControls != null && m.hasOwnProperty("featureControls")) { + if (typeof m.featureControls === "number") + d.featureControls = o.longs === String ? String(m.featureControls) : m.featureControls; + else + d.featureControls = o.longs === String ? longToString(m.featureControls, true) : o.longs === Number ? longToNumber(m.featureControls, true) : m.featureControls; + if (o.oneofs) + d._featureControls = "featureControls"; + } + return d; + }; + + BizIdentityInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BizIdentityInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BizIdentityInfo"; + }; + + BizIdentityInfo.ActualActorsType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SELF"] = 0; + values[valuesById[1] = "BSP"] = 1; + return values; + })(); + + BizIdentityInfo.HostStorageType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ON_PREMISE"] = 0; + values[valuesById[1] = "FACEBOOK"] = 1; + return values; + })(); + + BizIdentityInfo.VerifiedLevelValue = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "LOW"] = 1; + values[valuesById[2] = "HIGH"] = 2; + return values; + })(); + + return BizIdentityInfo; + })(); + + proto.BotAgeCollectionMetadata = (function() { + + function BotAgeCollectionMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotAgeCollectionMetadata.prototype.ageCollectionEligible = null; + BotAgeCollectionMetadata.prototype.shouldTriggerAgeCollectionOnClient = null; + BotAgeCollectionMetadata.prototype.ageCollectionType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAgeCollectionMetadata.prototype, "_ageCollectionEligible", { + get: $util.oneOfGetter($oneOfFields = ["ageCollectionEligible"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAgeCollectionMetadata.prototype, "_shouldTriggerAgeCollectionOnClient", { + get: $util.oneOfGetter($oneOfFields = ["shouldTriggerAgeCollectionOnClient"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAgeCollectionMetadata.prototype, "_ageCollectionType", { + get: $util.oneOfGetter($oneOfFields = ["ageCollectionType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotAgeCollectionMetadata.create = function create(properties) { + return new BotAgeCollectionMetadata(properties); + }; + + BotAgeCollectionMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.ageCollectionEligible != null && Object.hasOwnProperty.call(m, "ageCollectionEligible")) + w.uint32(8).bool(m.ageCollectionEligible); + if (m.shouldTriggerAgeCollectionOnClient != null && Object.hasOwnProperty.call(m, "shouldTriggerAgeCollectionOnClient")) + w.uint32(16).bool(m.shouldTriggerAgeCollectionOnClient); + if (m.ageCollectionType != null && Object.hasOwnProperty.call(m, "ageCollectionType")) + w.uint32(24).int32(m.ageCollectionType); + return w; + }; + + BotAgeCollectionMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotAgeCollectionMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.ageCollectionEligible = r.bool(); + break; + } + case 2: { + m.shouldTriggerAgeCollectionOnClient = r.bool(); + break; + } + case 3: { + m.ageCollectionType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotAgeCollectionMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotAgeCollectionMetadata) + return d; + var m = new $root.proto.BotAgeCollectionMetadata(); + if (d.ageCollectionEligible != null) { + m.ageCollectionEligible = Boolean(d.ageCollectionEligible); + } + if (d.shouldTriggerAgeCollectionOnClient != null) { + m.shouldTriggerAgeCollectionOnClient = Boolean(d.shouldTriggerAgeCollectionOnClient); + } + switch (d.ageCollectionType) { + default: + if (typeof d.ageCollectionType === "number") { + m.ageCollectionType = d.ageCollectionType; + break; + } + break; + case "O18_BINARY": + case 0: + m.ageCollectionType = 0; + break; + case "WAFFLE": + case 1: + m.ageCollectionType = 1; + break; + } + return m; + }; + + BotAgeCollectionMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.ageCollectionEligible != null && m.hasOwnProperty("ageCollectionEligible")) { + d.ageCollectionEligible = m.ageCollectionEligible; + if (o.oneofs) + d._ageCollectionEligible = "ageCollectionEligible"; + } + if (m.shouldTriggerAgeCollectionOnClient != null && m.hasOwnProperty("shouldTriggerAgeCollectionOnClient")) { + d.shouldTriggerAgeCollectionOnClient = m.shouldTriggerAgeCollectionOnClient; + if (o.oneofs) + d._shouldTriggerAgeCollectionOnClient = "shouldTriggerAgeCollectionOnClient"; + } + if (m.ageCollectionType != null && m.hasOwnProperty("ageCollectionType")) { + d.ageCollectionType = o.enums === String ? $root.proto.BotAgeCollectionMetadata.AgeCollectionType[m.ageCollectionType] === undefined ? m.ageCollectionType : $root.proto.BotAgeCollectionMetadata.AgeCollectionType[m.ageCollectionType] : m.ageCollectionType; + if (o.oneofs) + d._ageCollectionType = "ageCollectionType"; + } + return d; + }; + + BotAgeCollectionMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotAgeCollectionMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotAgeCollectionMetadata"; + }; + + BotAgeCollectionMetadata.AgeCollectionType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "O18_BINARY"] = 0; + values[valuesById[1] = "WAFFLE"] = 1; + return values; + })(); + + return BotAgeCollectionMetadata; + })(); + + proto.BotAvatarMetadata = (function() { + + function BotAvatarMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotAvatarMetadata.prototype.sentiment = null; + BotAvatarMetadata.prototype.behaviorGraph = null; + BotAvatarMetadata.prototype.action = null; + BotAvatarMetadata.prototype.intensity = null; + BotAvatarMetadata.prototype.wordCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAvatarMetadata.prototype, "_sentiment", { + get: $util.oneOfGetter($oneOfFields = ["sentiment"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAvatarMetadata.prototype, "_behaviorGraph", { + get: $util.oneOfGetter($oneOfFields = ["behaviorGraph"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAvatarMetadata.prototype, "_action", { + get: $util.oneOfGetter($oneOfFields = ["action"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAvatarMetadata.prototype, "_intensity", { + get: $util.oneOfGetter($oneOfFields = ["intensity"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotAvatarMetadata.prototype, "_wordCount", { + get: $util.oneOfGetter($oneOfFields = ["wordCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotAvatarMetadata.create = function create(properties) { + return new BotAvatarMetadata(properties); + }; + + BotAvatarMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sentiment != null && Object.hasOwnProperty.call(m, "sentiment")) + w.uint32(8).uint32(m.sentiment); + if (m.behaviorGraph != null && Object.hasOwnProperty.call(m, "behaviorGraph")) + w.uint32(18).string(m.behaviorGraph); + if (m.action != null && Object.hasOwnProperty.call(m, "action")) + w.uint32(24).uint32(m.action); + if (m.intensity != null && Object.hasOwnProperty.call(m, "intensity")) + w.uint32(32).uint32(m.intensity); + if (m.wordCount != null && Object.hasOwnProperty.call(m, "wordCount")) + w.uint32(40).uint32(m.wordCount); + return w; + }; + + BotAvatarMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotAvatarMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sentiment = r.uint32(); + break; + } + case 2: { + m.behaviorGraph = r.string(); + break; + } + case 3: { + m.action = r.uint32(); + break; + } + case 4: { + m.intensity = r.uint32(); + break; + } + case 5: { + m.wordCount = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotAvatarMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotAvatarMetadata) + return d; + var m = new $root.proto.BotAvatarMetadata(); + if (d.sentiment != null) { + m.sentiment = d.sentiment >>> 0; + } + if (d.behaviorGraph != null) { + m.behaviorGraph = String(d.behaviorGraph); + } + if (d.action != null) { + m.action = d.action >>> 0; + } + if (d.intensity != null) { + m.intensity = d.intensity >>> 0; + } + if (d.wordCount != null) { + m.wordCount = d.wordCount >>> 0; + } + return m; + }; + + BotAvatarMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.sentiment != null && m.hasOwnProperty("sentiment")) { + d.sentiment = m.sentiment; + if (o.oneofs) + d._sentiment = "sentiment"; + } + if (m.behaviorGraph != null && m.hasOwnProperty("behaviorGraph")) { + d.behaviorGraph = m.behaviorGraph; + if (o.oneofs) + d._behaviorGraph = "behaviorGraph"; + } + if (m.action != null && m.hasOwnProperty("action")) { + d.action = m.action; + if (o.oneofs) + d._action = "action"; + } + if (m.intensity != null && m.hasOwnProperty("intensity")) { + d.intensity = m.intensity; + if (o.oneofs) + d._intensity = "intensity"; + } + if (m.wordCount != null && m.hasOwnProperty("wordCount")) { + d.wordCount = m.wordCount; + if (o.oneofs) + d._wordCount = "wordCount"; + } + return d; + }; + + BotAvatarMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotAvatarMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotAvatarMetadata"; + }; + + return BotAvatarMetadata; + })(); + + proto.BotCapabilityMetadata = (function() { + + function BotCapabilityMetadata(p) { + this.capabilities = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotCapabilityMetadata.prototype.capabilities = $util.emptyArray; + + BotCapabilityMetadata.create = function create(properties) { + return new BotCapabilityMetadata(properties); + }; + + BotCapabilityMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.capabilities != null && m.capabilities.length) { + w.uint32(10).fork(); + for (var i = 0; i < m.capabilities.length; ++i) + w.int32(m.capabilities[i]); + w.ldelim(); + } + return w; + }; + + BotCapabilityMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotCapabilityMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.capabilities && m.capabilities.length)) + m.capabilities = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.capabilities.push(r.int32()); + } else + m.capabilities.push(r.int32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotCapabilityMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotCapabilityMetadata) + return d; + var m = new $root.proto.BotCapabilityMetadata(); + if (d.capabilities) { + if (!Array.isArray(d.capabilities)) + throw TypeError(".proto.BotCapabilityMetadata.capabilities: array expected"); + m.capabilities = []; + for (var i = 0; i < d.capabilities.length; ++i) { + switch (d.capabilities[i]) { + default: + if (typeof d.capabilities[i] === "number") { + m.capabilities[i] = d.capabilities[i]; + break; + } + case "UNKNOWN": + case 0: + m.capabilities[i] = 0; + break; + case "PROGRESS_INDICATOR": + case 1: + m.capabilities[i] = 1; + break; + case "RICH_RESPONSE_HEADING": + case 2: + m.capabilities[i] = 2; + break; + case "RICH_RESPONSE_NESTED_LIST": + case 3: + m.capabilities[i] = 3; + break; + case "AI_MEMORY": + case 4: + m.capabilities[i] = 4; + break; + case "RICH_RESPONSE_THREAD_SURFING": + case 5: + m.capabilities[i] = 5; + break; + case "RICH_RESPONSE_TABLE": + case 6: + m.capabilities[i] = 6; + break; + case "RICH_RESPONSE_CODE": + case 7: + m.capabilities[i] = 7; + break; + case "RICH_RESPONSE_STRUCTURED_RESPONSE": + case 8: + m.capabilities[i] = 8; + break; + case "RICH_RESPONSE_INLINE_IMAGE": + case 9: + m.capabilities[i] = 9; + break; + case "WA_IG_1P_PLUGIN_RANKING_CONTROL": + case 10: + m.capabilities[i] = 10; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_1": + case 11: + m.capabilities[i] = 11; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_2": + case 12: + m.capabilities[i] = 12; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_3": + case 13: + m.capabilities[i] = 13; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_4": + case 14: + m.capabilities[i] = 14; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_5": + case 15: + m.capabilities[i] = 15; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_6": + case 16: + m.capabilities[i] = 16; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_7": + case 17: + m.capabilities[i] = 17; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_8": + case 18: + m.capabilities[i] = 18; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_9": + case 19: + m.capabilities[i] = 19; + break; + case "WA_IG_1P_PLUGIN_RANKING_UPDATE_10": + case 20: + m.capabilities[i] = 20; + break; + case "RICH_RESPONSE_SUB_HEADING": + case 21: + m.capabilities[i] = 21; + break; + case "RICH_RESPONSE_GRID_IMAGE": + case 22: + m.capabilities[i] = 22; + break; + case "AI_STUDIO_UGC_MEMORY": + case 23: + m.capabilities[i] = 23; + break; + case "RICH_RESPONSE_LATEX": + case 24: + m.capabilities[i] = 24; + break; + case "RICH_RESPONSE_MAPS": + case 25: + m.capabilities[i] = 25; + break; + case "RICH_RESPONSE_INLINE_REELS": + case 26: + m.capabilities[i] = 26; + break; + case "AGENTIC_PLANNING": + case 27: + m.capabilities[i] = 27; + break; + case "ACCOUNT_LINKING": + case 28: + m.capabilities[i] = 28; + break; + case "STREAMING_DISAGGREGATION": + case 29: + m.capabilities[i] = 29; + break; + case "RICH_RESPONSE_GRID_IMAGE_3P": + case 30: + m.capabilities[i] = 30; + break; + case "RICH_RESPONSE_LATEX_INLINE": + case 31: + m.capabilities[i] = 31; + break; + case "QUERY_PLAN": + case 32: + m.capabilities[i] = 32; + break; + case "PROACTIVE_MESSAGE": + case 33: + m.capabilities[i] = 33; + break; + case "RICH_RESPONSE_UNIFIED_RESPONSE": + case 34: + m.capabilities[i] = 34; + break; + case "PROMOTION_MESSAGE": + case 35: + m.capabilities[i] = 35; + break; + case "SIMPLIFIED_PROFILE_PAGE": + case 36: + m.capabilities[i] = 36; + break; + case "RICH_RESPONSE_SOURCES_IN_MESSAGE": + case 37: + m.capabilities[i] = 37; + break; + case "RICH_RESPONSE_SIDE_BY_SIDE_SURVEY": + case 38: + m.capabilities[i] = 38; + break; + case "RICH_RESPONSE_UNIFIED_TEXT_COMPONENT": + case 39: + m.capabilities[i] = 39; + break; + case "AI_SHARED_MEMORY": + case 40: + m.capabilities[i] = 40; + break; + case "RICH_RESPONSE_UNIFIED_SOURCES": + case 41: + m.capabilities[i] = 41; + break; + case "RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS": + case 42: + m.capabilities[i] = 42; + break; + case "RICH_RESPONSE_UR_INLINE_REELS_ENABLED": + case 43: + m.capabilities[i] = 43; + break; + case "RICH_RESPONSE_UR_MEDIA_GRID_ENABLED": + case 44: + m.capabilities[i] = 44; + break; + case "RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER": + case 45: + m.capabilities[i] = 45; + break; + case "RICH_RESPONSE_IN_APP_SURVEY": + case 46: + m.capabilities[i] = 46; + break; + case "AI_RESPONSE_MODEL_BRANDING": + case 47: + m.capabilities[i] = 47; + break; + case "SESSION_TRANSPARENCY_SYSTEM_MESSAGE": + case 48: + m.capabilities[i] = 48; + break; + case "RICH_RESPONSE_UR_REASONING": + case 49: + m.capabilities[i] = 49; + break; + } + } + } + return m; + }; + + BotCapabilityMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.capabilities = []; + } + if (m.capabilities && m.capabilities.length) { + d.capabilities = []; + for (var j = 0; j < m.capabilities.length; ++j) { + d.capabilities[j] = o.enums === String ? $root.proto.BotCapabilityMetadata.BotCapabilityType[m.capabilities[j]] === undefined ? m.capabilities[j] : $root.proto.BotCapabilityMetadata.BotCapabilityType[m.capabilities[j]] : m.capabilities[j]; + } + } + return d; + }; + + BotCapabilityMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotCapabilityMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotCapabilityMetadata"; + }; + + BotCapabilityMetadata.BotCapabilityType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "PROGRESS_INDICATOR"] = 1; + values[valuesById[2] = "RICH_RESPONSE_HEADING"] = 2; + values[valuesById[3] = "RICH_RESPONSE_NESTED_LIST"] = 3; + values[valuesById[4] = "AI_MEMORY"] = 4; + values[valuesById[5] = "RICH_RESPONSE_THREAD_SURFING"] = 5; + values[valuesById[6] = "RICH_RESPONSE_TABLE"] = 6; + values[valuesById[7] = "RICH_RESPONSE_CODE"] = 7; + values[valuesById[8] = "RICH_RESPONSE_STRUCTURED_RESPONSE"] = 8; + values[valuesById[9] = "RICH_RESPONSE_INLINE_IMAGE"] = 9; + values[valuesById[10] = "WA_IG_1P_PLUGIN_RANKING_CONTROL"] = 10; + values[valuesById[11] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_1"] = 11; + values[valuesById[12] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_2"] = 12; + values[valuesById[13] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_3"] = 13; + values[valuesById[14] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_4"] = 14; + values[valuesById[15] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_5"] = 15; + values[valuesById[16] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_6"] = 16; + values[valuesById[17] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_7"] = 17; + values[valuesById[18] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_8"] = 18; + values[valuesById[19] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_9"] = 19; + values[valuesById[20] = "WA_IG_1P_PLUGIN_RANKING_UPDATE_10"] = 20; + values[valuesById[21] = "RICH_RESPONSE_SUB_HEADING"] = 21; + values[valuesById[22] = "RICH_RESPONSE_GRID_IMAGE"] = 22; + values[valuesById[23] = "AI_STUDIO_UGC_MEMORY"] = 23; + values[valuesById[24] = "RICH_RESPONSE_LATEX"] = 24; + values[valuesById[25] = "RICH_RESPONSE_MAPS"] = 25; + values[valuesById[26] = "RICH_RESPONSE_INLINE_REELS"] = 26; + values[valuesById[27] = "AGENTIC_PLANNING"] = 27; + values[valuesById[28] = "ACCOUNT_LINKING"] = 28; + values[valuesById[29] = "STREAMING_DISAGGREGATION"] = 29; + values[valuesById[30] = "RICH_RESPONSE_GRID_IMAGE_3P"] = 30; + values[valuesById[31] = "RICH_RESPONSE_LATEX_INLINE"] = 31; + values[valuesById[32] = "QUERY_PLAN"] = 32; + values[valuesById[33] = "PROACTIVE_MESSAGE"] = 33; + values[valuesById[34] = "RICH_RESPONSE_UNIFIED_RESPONSE"] = 34; + values[valuesById[35] = "PROMOTION_MESSAGE"] = 35; + values[valuesById[36] = "SIMPLIFIED_PROFILE_PAGE"] = 36; + values[valuesById[37] = "RICH_RESPONSE_SOURCES_IN_MESSAGE"] = 37; + values[valuesById[38] = "RICH_RESPONSE_SIDE_BY_SIDE_SURVEY"] = 38; + values[valuesById[39] = "RICH_RESPONSE_UNIFIED_TEXT_COMPONENT"] = 39; + values[valuesById[40] = "AI_SHARED_MEMORY"] = 40; + values[valuesById[41] = "RICH_RESPONSE_UNIFIED_SOURCES"] = 41; + values[valuesById[42] = "RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS"] = 42; + values[valuesById[43] = "RICH_RESPONSE_UR_INLINE_REELS_ENABLED"] = 43; + values[valuesById[44] = "RICH_RESPONSE_UR_MEDIA_GRID_ENABLED"] = 44; + values[valuesById[45] = "RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER"] = 45; + values[valuesById[46] = "RICH_RESPONSE_IN_APP_SURVEY"] = 46; + values[valuesById[47] = "AI_RESPONSE_MODEL_BRANDING"] = 47; + values[valuesById[48] = "SESSION_TRANSPARENCY_SYSTEM_MESSAGE"] = 48; + values[valuesById[49] = "RICH_RESPONSE_UR_REASONING"] = 49; + return values; + })(); + + return BotCapabilityMetadata; + })(); + + proto.BotFeedbackMessage = (function() { + + function BotFeedbackMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotFeedbackMessage.prototype.messageKey = null; + BotFeedbackMessage.prototype.kind = null; + BotFeedbackMessage.prototype.text = null; + BotFeedbackMessage.prototype.kindNegative = null; + BotFeedbackMessage.prototype.kindPositive = null; + BotFeedbackMessage.prototype.kindReport = null; + BotFeedbackMessage.prototype.sideBySideSurveyMetadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeedbackMessage.prototype, "_messageKey", { + get: $util.oneOfGetter($oneOfFields = ["messageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeedbackMessage.prototype, "_kind", { + get: $util.oneOfGetter($oneOfFields = ["kind"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeedbackMessage.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeedbackMessage.prototype, "_kindNegative", { + get: $util.oneOfGetter($oneOfFields = ["kindNegative"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeedbackMessage.prototype, "_kindPositive", { + get: $util.oneOfGetter($oneOfFields = ["kindPositive"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeedbackMessage.prototype, "_kindReport", { + get: $util.oneOfGetter($oneOfFields = ["kindReport"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeedbackMessage.prototype, "_sideBySideSurveyMetadata", { + get: $util.oneOfGetter($oneOfFields = ["sideBySideSurveyMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotFeedbackMessage.create = function create(properties) { + return new BotFeedbackMessage(properties); + }; + + BotFeedbackMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageKey != null && Object.hasOwnProperty.call(m, "messageKey")) + $root.proto.MessageKey.encode(m.messageKey, w.uint32(10).fork()).ldelim(); + if (m.kind != null && Object.hasOwnProperty.call(m, "kind")) + w.uint32(16).int32(m.kind); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(26).string(m.text); + if (m.kindNegative != null && Object.hasOwnProperty.call(m, "kindNegative")) + w.uint32(32).uint64(m.kindNegative); + if (m.kindPositive != null && Object.hasOwnProperty.call(m, "kindPositive")) + w.uint32(40).uint64(m.kindPositive); + if (m.kindReport != null && Object.hasOwnProperty.call(m, "kindReport")) + w.uint32(48).int32(m.kindReport); + if (m.sideBySideSurveyMetadata != null && Object.hasOwnProperty.call(m, "sideBySideSurveyMetadata")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.encode(m.sideBySideSurveyMetadata, w.uint32(58).fork()).ldelim(); + return w; + }; + + BotFeedbackMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.kind = r.int32(); + break; + } + case 3: { + m.text = r.string(); + break; + } + case 4: { + m.kindNegative = r.uint64(); + break; + } + case 5: { + m.kindPositive = r.uint64(); + break; + } + case 6: { + m.kindReport = r.int32(); + break; + } + case 7: { + m.sideBySideSurveyMetadata = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotFeedbackMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage) + return d; + var m = new $root.proto.BotFeedbackMessage(); + if (d.messageKey != null) { + if (typeof d.messageKey !== "object") + throw TypeError(".proto.BotFeedbackMessage.messageKey: object expected"); + m.messageKey = $root.proto.MessageKey.fromObject(d.messageKey); + } + switch (d.kind) { + default: + if (typeof d.kind === "number") { + m.kind = d.kind; + break; + } + break; + case "BOT_FEEDBACK_POSITIVE": + case 0: + m.kind = 0; + break; + case "BOT_FEEDBACK_NEGATIVE_GENERIC": + case 1: + m.kind = 1; + break; + case "BOT_FEEDBACK_NEGATIVE_HELPFUL": + case 2: + m.kind = 2; + break; + case "BOT_FEEDBACK_NEGATIVE_INTERESTING": + case 3: + m.kind = 3; + break; + case "BOT_FEEDBACK_NEGATIVE_ACCURATE": + case 4: + m.kind = 4; + break; + case "BOT_FEEDBACK_NEGATIVE_SAFE": + case 5: + m.kind = 5; + break; + case "BOT_FEEDBACK_NEGATIVE_OTHER": + case 6: + m.kind = 6; + break; + case "BOT_FEEDBACK_NEGATIVE_REFUSED": + case 7: + m.kind = 7; + break; + case "BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING": + case 8: + m.kind = 8; + break; + case "BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT": + case 9: + m.kind = 9; + break; + case "BOT_FEEDBACK_NEGATIVE_PERSONALIZED": + case 10: + m.kind = 10; + break; + case "BOT_FEEDBACK_NEGATIVE_CLARITY": + case 11: + m.kind = 11; + break; + case "BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON": + case 12: + m.kind = 12; + break; + case "BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY": + case 13: + m.kind = 13; + break; + case "BOT_FEEDBACK_NEGATIVE": + case 14: + m.kind = 14; + break; + } + if (d.text != null) { + m.text = String(d.text); + } + if (d.kindNegative != null) { + if ($util.Long) + (m.kindNegative = $util.Long.fromValue(d.kindNegative)).unsigned = true; + else if (typeof d.kindNegative === "string") + m.kindNegative = parseInt(d.kindNegative, 10); + else if (typeof d.kindNegative === "number") + m.kindNegative = d.kindNegative; + else if (typeof d.kindNegative === "object") + m.kindNegative = new $util.LongBits(d.kindNegative.low >>> 0, d.kindNegative.high >>> 0).toNumber(true); + } + if (d.kindPositive != null) { + if ($util.Long) + (m.kindPositive = $util.Long.fromValue(d.kindPositive)).unsigned = true; + else if (typeof d.kindPositive === "string") + m.kindPositive = parseInt(d.kindPositive, 10); + else if (typeof d.kindPositive === "number") + m.kindPositive = d.kindPositive; + else if (typeof d.kindPositive === "object") + m.kindPositive = new $util.LongBits(d.kindPositive.low >>> 0, d.kindPositive.high >>> 0).toNumber(true); + } + switch (d.kindReport) { + default: + if (typeof d.kindReport === "number") { + m.kindReport = d.kindReport; + break; + } + break; + case "NONE": + case 0: + m.kindReport = 0; + break; + case "GENERIC": + case 1: + m.kindReport = 1; + break; + } + if (d.sideBySideSurveyMetadata != null) { + if (typeof d.sideBySideSurveyMetadata !== "object") + throw TypeError(".proto.BotFeedbackMessage.sideBySideSurveyMetadata: object expected"); + m.sideBySideSurveyMetadata = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.fromObject(d.sideBySideSurveyMetadata); + } + return m; + }; + + BotFeedbackMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageKey != null && m.hasOwnProperty("messageKey")) { + d.messageKey = $root.proto.MessageKey.toObject(m.messageKey, o); + if (o.oneofs) + d._messageKey = "messageKey"; + } + if (m.kind != null && m.hasOwnProperty("kind")) { + d.kind = o.enums === String ? $root.proto.BotFeedbackMessage.BotFeedbackKind[m.kind] === undefined ? m.kind : $root.proto.BotFeedbackMessage.BotFeedbackKind[m.kind] : m.kind; + if (o.oneofs) + d._kind = "kind"; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.kindNegative != null && m.hasOwnProperty("kindNegative")) { + if (typeof m.kindNegative === "number") + d.kindNegative = o.longs === String ? String(m.kindNegative) : m.kindNegative; + else + d.kindNegative = o.longs === String ? longToString(m.kindNegative, true) : o.longs === Number ? longToNumber(m.kindNegative, true) : m.kindNegative; + if (o.oneofs) + d._kindNegative = "kindNegative"; + } + if (m.kindPositive != null && m.hasOwnProperty("kindPositive")) { + if (typeof m.kindPositive === "number") + d.kindPositive = o.longs === String ? String(m.kindPositive) : m.kindPositive; + else + d.kindPositive = o.longs === String ? longToString(m.kindPositive, true) : o.longs === Number ? longToNumber(m.kindPositive, true) : m.kindPositive; + if (o.oneofs) + d._kindPositive = "kindPositive"; + } + if (m.kindReport != null && m.hasOwnProperty("kindReport")) { + d.kindReport = o.enums === String ? $root.proto.BotFeedbackMessage.ReportKind[m.kindReport] === undefined ? m.kindReport : $root.proto.BotFeedbackMessage.ReportKind[m.kindReport] : m.kindReport; + if (o.oneofs) + d._kindReport = "kindReport"; + } + if (m.sideBySideSurveyMetadata != null && m.hasOwnProperty("sideBySideSurveyMetadata")) { + d.sideBySideSurveyMetadata = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.toObject(m.sideBySideSurveyMetadata, o); + if (o.oneofs) + d._sideBySideSurveyMetadata = "sideBySideSurveyMetadata"; + } + return d; + }; + + BotFeedbackMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotFeedbackMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage"; + }; + + BotFeedbackMessage.BotFeedbackKind = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "BOT_FEEDBACK_POSITIVE"] = 0; + values[valuesById[1] = "BOT_FEEDBACK_NEGATIVE_GENERIC"] = 1; + values[valuesById[2] = "BOT_FEEDBACK_NEGATIVE_HELPFUL"] = 2; + values[valuesById[3] = "BOT_FEEDBACK_NEGATIVE_INTERESTING"] = 3; + values[valuesById[4] = "BOT_FEEDBACK_NEGATIVE_ACCURATE"] = 4; + values[valuesById[5] = "BOT_FEEDBACK_NEGATIVE_SAFE"] = 5; + values[valuesById[6] = "BOT_FEEDBACK_NEGATIVE_OTHER"] = 6; + values[valuesById[7] = "BOT_FEEDBACK_NEGATIVE_REFUSED"] = 7; + values[valuesById[8] = "BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING"] = 8; + values[valuesById[9] = "BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT"] = 9; + values[valuesById[10] = "BOT_FEEDBACK_NEGATIVE_PERSONALIZED"] = 10; + values[valuesById[11] = "BOT_FEEDBACK_NEGATIVE_CLARITY"] = 11; + values[valuesById[12] = "BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON"] = 12; + values[valuesById[13] = "BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY"] = 13; + values[valuesById[14] = "BOT_FEEDBACK_NEGATIVE"] = 14; + return values; + })(); + + BotFeedbackMessage.BotFeedbackKindMultipleNegative = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC"] = 1; + values[valuesById[2] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL"] = 2; + values[valuesById[4] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING"] = 4; + values[valuesById[8] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE"] = 8; + values[valuesById[16] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE"] = 16; + values[valuesById[32] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER"] = 32; + values[valuesById[64] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED"] = 64; + values[valuesById[128] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING"] = 128; + values[valuesById[256] = "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT"] = 256; + return values; + })(); + + BotFeedbackMessage.BotFeedbackKindMultiplePositive = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC"] = 1; + return values; + })(); + + BotFeedbackMessage.ReportKind = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "GENERIC"] = 1; + return values; + })(); + + BotFeedbackMessage.SideBySideSurveyMetadata = (function() { + + function SideBySideSurveyMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideSurveyMetadata.prototype.selectedRequestId = null; + SideBySideSurveyMetadata.prototype.surveyId = null; + SideBySideSurveyMetadata.prototype.simonSessionFbid = null; + SideBySideSurveyMetadata.prototype.responseOtid = null; + SideBySideSurveyMetadata.prototype.responseTimestampMsString = null; + SideBySideSurveyMetadata.prototype.isSelectedResponsePrimary = null; + SideBySideSurveyMetadata.prototype.messageIdToEdit = null; + SideBySideSurveyMetadata.prototype.analyticsData = null; + SideBySideSurveyMetadata.prototype.metaAiAnalyticsData = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_selectedRequestId", { + get: $util.oneOfGetter($oneOfFields = ["selectedRequestId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_surveyId", { + get: $util.oneOfGetter($oneOfFields = ["surveyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_simonSessionFbid", { + get: $util.oneOfGetter($oneOfFields = ["simonSessionFbid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_responseOtid", { + get: $util.oneOfGetter($oneOfFields = ["responseOtid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_responseTimestampMsString", { + get: $util.oneOfGetter($oneOfFields = ["responseTimestampMsString"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_isSelectedResponsePrimary", { + get: $util.oneOfGetter($oneOfFields = ["isSelectedResponsePrimary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_messageIdToEdit", { + get: $util.oneOfGetter($oneOfFields = ["messageIdToEdit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_analyticsData", { + get: $util.oneOfGetter($oneOfFields = ["analyticsData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyMetadata.prototype, "_metaAiAnalyticsData", { + get: $util.oneOfGetter($oneOfFields = ["metaAiAnalyticsData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SideBySideSurveyMetadata.create = function create(properties) { + return new SideBySideSurveyMetadata(properties); + }; + + SideBySideSurveyMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.selectedRequestId != null && Object.hasOwnProperty.call(m, "selectedRequestId")) + w.uint32(10).string(m.selectedRequestId); + if (m.surveyId != null && Object.hasOwnProperty.call(m, "surveyId")) + w.uint32(16).uint32(m.surveyId); + if (m.simonSessionFbid != null && Object.hasOwnProperty.call(m, "simonSessionFbid")) + w.uint32(26).string(m.simonSessionFbid); + if (m.responseOtid != null && Object.hasOwnProperty.call(m, "responseOtid")) + w.uint32(34).string(m.responseOtid); + if (m.responseTimestampMsString != null && Object.hasOwnProperty.call(m, "responseTimestampMsString")) + w.uint32(42).string(m.responseTimestampMsString); + if (m.isSelectedResponsePrimary != null && Object.hasOwnProperty.call(m, "isSelectedResponsePrimary")) + w.uint32(48).bool(m.isSelectedResponsePrimary); + if (m.messageIdToEdit != null && Object.hasOwnProperty.call(m, "messageIdToEdit")) + w.uint32(58).string(m.messageIdToEdit); + if (m.analyticsData != null && Object.hasOwnProperty.call(m, "analyticsData")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData.encode(m.analyticsData, w.uint32(66).fork()).ldelim(); + if (m.metaAiAnalyticsData != null && Object.hasOwnProperty.call(m, "metaAiAnalyticsData")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.encode(m.metaAiAnalyticsData, w.uint32(74).fork()).ldelim(); + return w; + }; + + SideBySideSurveyMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.selectedRequestId = r.string(); + break; + } + case 2: { + m.surveyId = r.uint32(); + break; + } + case 3: { + m.simonSessionFbid = r.string(); + break; + } + case 4: { + m.responseOtid = r.string(); + break; + } + case 5: { + m.responseTimestampMsString = r.string(); + break; + } + case 6: { + m.isSelectedResponsePrimary = r.bool(); + break; + } + case 7: { + m.messageIdToEdit = r.string(); + break; + } + case 8: { + m.analyticsData = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData.decode(r, r.uint32()); + break; + } + case 9: { + m.metaAiAnalyticsData = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideSurveyMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata) + return d; + var m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata(); + if (d.selectedRequestId != null) { + m.selectedRequestId = String(d.selectedRequestId); + } + if (d.surveyId != null) { + m.surveyId = d.surveyId >>> 0; + } + if (d.simonSessionFbid != null) { + m.simonSessionFbid = String(d.simonSessionFbid); + } + if (d.responseOtid != null) { + m.responseOtid = String(d.responseOtid); + } + if (d.responseTimestampMsString != null) { + m.responseTimestampMsString = String(d.responseTimestampMsString); + } + if (d.isSelectedResponsePrimary != null) { + m.isSelectedResponsePrimary = Boolean(d.isSelectedResponsePrimary); + } + if (d.messageIdToEdit != null) { + m.messageIdToEdit = String(d.messageIdToEdit); + } + if (d.analyticsData != null) { + if (typeof d.analyticsData !== "object") + throw TypeError(".proto.BotFeedbackMessage.SideBySideSurveyMetadata.analyticsData: object expected"); + m.analyticsData = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData.fromObject(d.analyticsData); + } + if (d.metaAiAnalyticsData != null) { + if (typeof d.metaAiAnalyticsData !== "object") + throw TypeError(".proto.BotFeedbackMessage.SideBySideSurveyMetadata.metaAiAnalyticsData: object expected"); + m.metaAiAnalyticsData = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.fromObject(d.metaAiAnalyticsData); + } + return m; + }; + + SideBySideSurveyMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.selectedRequestId != null && m.hasOwnProperty("selectedRequestId")) { + d.selectedRequestId = m.selectedRequestId; + if (o.oneofs) + d._selectedRequestId = "selectedRequestId"; + } + if (m.surveyId != null && m.hasOwnProperty("surveyId")) { + d.surveyId = m.surveyId; + if (o.oneofs) + d._surveyId = "surveyId"; + } + if (m.simonSessionFbid != null && m.hasOwnProperty("simonSessionFbid")) { + d.simonSessionFbid = m.simonSessionFbid; + if (o.oneofs) + d._simonSessionFbid = "simonSessionFbid"; + } + if (m.responseOtid != null && m.hasOwnProperty("responseOtid")) { + d.responseOtid = m.responseOtid; + if (o.oneofs) + d._responseOtid = "responseOtid"; + } + if (m.responseTimestampMsString != null && m.hasOwnProperty("responseTimestampMsString")) { + d.responseTimestampMsString = m.responseTimestampMsString; + if (o.oneofs) + d._responseTimestampMsString = "responseTimestampMsString"; + } + if (m.isSelectedResponsePrimary != null && m.hasOwnProperty("isSelectedResponsePrimary")) { + d.isSelectedResponsePrimary = m.isSelectedResponsePrimary; + if (o.oneofs) + d._isSelectedResponsePrimary = "isSelectedResponsePrimary"; + } + if (m.messageIdToEdit != null && m.hasOwnProperty("messageIdToEdit")) { + d.messageIdToEdit = m.messageIdToEdit; + if (o.oneofs) + d._messageIdToEdit = "messageIdToEdit"; + } + if (m.analyticsData != null && m.hasOwnProperty("analyticsData")) { + d.analyticsData = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData.toObject(m.analyticsData, o); + if (o.oneofs) + d._analyticsData = "analyticsData"; + } + if (m.metaAiAnalyticsData != null && m.hasOwnProperty("metaAiAnalyticsData")) { + d.metaAiAnalyticsData = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.toObject(m.metaAiAnalyticsData, o); + if (o.oneofs) + d._metaAiAnalyticsData = "metaAiAnalyticsData"; + } + return d; + }; + + SideBySideSurveyMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideSurveyMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata"; + }; + + SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData = (function() { + + function SideBySideSurveyAnalyticsData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideSurveyAnalyticsData.prototype.tessaEvent = null; + SideBySideSurveyAnalyticsData.prototype.tessaSessionFbid = null; + SideBySideSurveyAnalyticsData.prototype.simonSessionFbid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyAnalyticsData.prototype, "_tessaEvent", { + get: $util.oneOfGetter($oneOfFields = ["tessaEvent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyAnalyticsData.prototype, "_tessaSessionFbid", { + get: $util.oneOfGetter($oneOfFields = ["tessaSessionFbid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyAnalyticsData.prototype, "_simonSessionFbid", { + get: $util.oneOfGetter($oneOfFields = ["simonSessionFbid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SideBySideSurveyAnalyticsData.create = function create(properties) { + return new SideBySideSurveyAnalyticsData(properties); + }; + + SideBySideSurveyAnalyticsData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.tessaEvent != null && Object.hasOwnProperty.call(m, "tessaEvent")) + w.uint32(10).string(m.tessaEvent); + if (m.tessaSessionFbid != null && Object.hasOwnProperty.call(m, "tessaSessionFbid")) + w.uint32(18).string(m.tessaSessionFbid); + if (m.simonSessionFbid != null && Object.hasOwnProperty.call(m, "simonSessionFbid")) + w.uint32(26).string(m.simonSessionFbid); + return w; + }; + + SideBySideSurveyAnalyticsData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.tessaEvent = r.string(); + break; + } + case 2: { + m.tessaSessionFbid = r.string(); + break; + } + case 3: { + m.simonSessionFbid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideSurveyAnalyticsData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData) + return d; + var m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData(); + if (d.tessaEvent != null) { + m.tessaEvent = String(d.tessaEvent); + } + if (d.tessaSessionFbid != null) { + m.tessaSessionFbid = String(d.tessaSessionFbid); + } + if (d.simonSessionFbid != null) { + m.simonSessionFbid = String(d.simonSessionFbid); + } + return m; + }; + + SideBySideSurveyAnalyticsData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.tessaEvent != null && m.hasOwnProperty("tessaEvent")) { + d.tessaEvent = m.tessaEvent; + if (o.oneofs) + d._tessaEvent = "tessaEvent"; + } + if (m.tessaSessionFbid != null && m.hasOwnProperty("tessaSessionFbid")) { + d.tessaSessionFbid = m.tessaSessionFbid; + if (o.oneofs) + d._tessaSessionFbid = "tessaSessionFbid"; + } + if (m.simonSessionFbid != null && m.hasOwnProperty("simonSessionFbid")) { + d.simonSessionFbid = m.simonSessionFbid; + if (o.oneofs) + d._simonSessionFbid = "simonSessionFbid"; + } + return d; + }; + + SideBySideSurveyAnalyticsData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideSurveyAnalyticsData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData"; + }; + + return SideBySideSurveyAnalyticsData; + })(); + + SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData = (function() { + + function SidebySideSurveyMetaAiAnalyticsData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SidebySideSurveyMetaAiAnalyticsData.prototype.surveyId = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.primaryResponseId = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.testArmName = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.timestampMsString = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.ctaImpressionEvent = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.ctaClickEvent = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.cardImpressionEvent = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.responseEvent = null; + SidebySideSurveyMetaAiAnalyticsData.prototype.abandonEvent = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_surveyId", { + get: $util.oneOfGetter($oneOfFields = ["surveyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_primaryResponseId", { + get: $util.oneOfGetter($oneOfFields = ["primaryResponseId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_testArmName", { + get: $util.oneOfGetter($oneOfFields = ["testArmName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_timestampMsString", { + get: $util.oneOfGetter($oneOfFields = ["timestampMsString"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_ctaImpressionEvent", { + get: $util.oneOfGetter($oneOfFields = ["ctaImpressionEvent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_ctaClickEvent", { + get: $util.oneOfGetter($oneOfFields = ["ctaClickEvent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_cardImpressionEvent", { + get: $util.oneOfGetter($oneOfFields = ["cardImpressionEvent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_responseEvent", { + get: $util.oneOfGetter($oneOfFields = ["responseEvent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SidebySideSurveyMetaAiAnalyticsData.prototype, "_abandonEvent", { + get: $util.oneOfGetter($oneOfFields = ["abandonEvent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SidebySideSurveyMetaAiAnalyticsData.create = function create(properties) { + return new SidebySideSurveyMetaAiAnalyticsData(properties); + }; + + SidebySideSurveyMetaAiAnalyticsData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.surveyId != null && Object.hasOwnProperty.call(m, "surveyId")) + w.uint32(8).uint32(m.surveyId); + if (m.primaryResponseId != null && Object.hasOwnProperty.call(m, "primaryResponseId")) + w.uint32(18).string(m.primaryResponseId); + if (m.testArmName != null && Object.hasOwnProperty.call(m, "testArmName")) + w.uint32(26).string(m.testArmName); + if (m.timestampMsString != null && Object.hasOwnProperty.call(m, "timestampMsString")) + w.uint32(34).string(m.timestampMsString); + if (m.ctaImpressionEvent != null && Object.hasOwnProperty.call(m, "ctaImpressionEvent")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData.encode(m.ctaImpressionEvent, w.uint32(42).fork()).ldelim(); + if (m.ctaClickEvent != null && Object.hasOwnProperty.call(m, "ctaClickEvent")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData.encode(m.ctaClickEvent, w.uint32(50).fork()).ldelim(); + if (m.cardImpressionEvent != null && Object.hasOwnProperty.call(m, "cardImpressionEvent")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData.encode(m.cardImpressionEvent, w.uint32(58).fork()).ldelim(); + if (m.responseEvent != null && Object.hasOwnProperty.call(m, "responseEvent")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData.encode(m.responseEvent, w.uint32(66).fork()).ldelim(); + if (m.abandonEvent != null && Object.hasOwnProperty.call(m, "abandonEvent")) + $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData.encode(m.abandonEvent, w.uint32(74).fork()).ldelim(); + return w; + }; + + SidebySideSurveyMetaAiAnalyticsData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.surveyId = r.uint32(); + break; + } + case 2: { + m.primaryResponseId = r.string(); + break; + } + case 3: { + m.testArmName = r.string(); + break; + } + case 4: { + m.timestampMsString = r.string(); + break; + } + case 5: { + m.ctaImpressionEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData.decode(r, r.uint32()); + break; + } + case 6: { + m.ctaClickEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData.decode(r, r.uint32()); + break; + } + case 7: { + m.cardImpressionEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData.decode(r, r.uint32()); + break; + } + case 8: { + m.responseEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData.decode(r, r.uint32()); + break; + } + case 9: { + m.abandonEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SidebySideSurveyMetaAiAnalyticsData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData) + return d; + var m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData(); + if (d.surveyId != null) { + m.surveyId = d.surveyId >>> 0; + } + if (d.primaryResponseId != null) { + m.primaryResponseId = String(d.primaryResponseId); + } + if (d.testArmName != null) { + m.testArmName = String(d.testArmName); + } + if (d.timestampMsString != null) { + m.timestampMsString = String(d.timestampMsString); + } + if (d.ctaImpressionEvent != null) { + if (typeof d.ctaImpressionEvent !== "object") + throw TypeError(".proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ctaImpressionEvent: object expected"); + m.ctaImpressionEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData.fromObject(d.ctaImpressionEvent); + } + if (d.ctaClickEvent != null) { + if (typeof d.ctaClickEvent !== "object") + throw TypeError(".proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ctaClickEvent: object expected"); + m.ctaClickEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData.fromObject(d.ctaClickEvent); + } + if (d.cardImpressionEvent != null) { + if (typeof d.cardImpressionEvent !== "object") + throw TypeError(".proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.cardImpressionEvent: object expected"); + m.cardImpressionEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData.fromObject(d.cardImpressionEvent); + } + if (d.responseEvent != null) { + if (typeof d.responseEvent !== "object") + throw TypeError(".proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.responseEvent: object expected"); + m.responseEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData.fromObject(d.responseEvent); + } + if (d.abandonEvent != null) { + if (typeof d.abandonEvent !== "object") + throw TypeError(".proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.abandonEvent: object expected"); + m.abandonEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData.fromObject(d.abandonEvent); + } + return m; + }; + + SidebySideSurveyMetaAiAnalyticsData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.surveyId != null && m.hasOwnProperty("surveyId")) { + d.surveyId = m.surveyId; + if (o.oneofs) + d._surveyId = "surveyId"; + } + if (m.primaryResponseId != null && m.hasOwnProperty("primaryResponseId")) { + d.primaryResponseId = m.primaryResponseId; + if (o.oneofs) + d._primaryResponseId = "primaryResponseId"; + } + if (m.testArmName != null && m.hasOwnProperty("testArmName")) { + d.testArmName = m.testArmName; + if (o.oneofs) + d._testArmName = "testArmName"; + } + if (m.timestampMsString != null && m.hasOwnProperty("timestampMsString")) { + d.timestampMsString = m.timestampMsString; + if (o.oneofs) + d._timestampMsString = "timestampMsString"; + } + if (m.ctaImpressionEvent != null && m.hasOwnProperty("ctaImpressionEvent")) { + d.ctaImpressionEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData.toObject(m.ctaImpressionEvent, o); + if (o.oneofs) + d._ctaImpressionEvent = "ctaImpressionEvent"; + } + if (m.ctaClickEvent != null && m.hasOwnProperty("ctaClickEvent")) { + d.ctaClickEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData.toObject(m.ctaClickEvent, o); + if (o.oneofs) + d._ctaClickEvent = "ctaClickEvent"; + } + if (m.cardImpressionEvent != null && m.hasOwnProperty("cardImpressionEvent")) { + d.cardImpressionEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData.toObject(m.cardImpressionEvent, o); + if (o.oneofs) + d._cardImpressionEvent = "cardImpressionEvent"; + } + if (m.responseEvent != null && m.hasOwnProperty("responseEvent")) { + d.responseEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData.toObject(m.responseEvent, o); + if (o.oneofs) + d._responseEvent = "responseEvent"; + } + if (m.abandonEvent != null && m.hasOwnProperty("abandonEvent")) { + d.abandonEvent = $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData.toObject(m.abandonEvent, o); + if (o.oneofs) + d._abandonEvent = "abandonEvent"; + } + return d; + }; + + SidebySideSurveyMetaAiAnalyticsData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SidebySideSurveyMetaAiAnalyticsData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData"; + }; + + SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData = (function() { + + function SideBySideSurveyAbandonEventData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideSurveyAbandonEventData.prototype.abandonDwellTimeMsString = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyAbandonEventData.prototype, "_abandonDwellTimeMsString", { + get: $util.oneOfGetter($oneOfFields = ["abandonDwellTimeMsString"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SideBySideSurveyAbandonEventData.create = function create(properties) { + return new SideBySideSurveyAbandonEventData(properties); + }; + + SideBySideSurveyAbandonEventData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.abandonDwellTimeMsString != null && Object.hasOwnProperty.call(m, "abandonDwellTimeMsString")) + w.uint32(10).string(m.abandonDwellTimeMsString); + return w; + }; + + SideBySideSurveyAbandonEventData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.abandonDwellTimeMsString = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideSurveyAbandonEventData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData) + return d; + var m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData(); + if (d.abandonDwellTimeMsString != null) { + m.abandonDwellTimeMsString = String(d.abandonDwellTimeMsString); + } + return m; + }; + + SideBySideSurveyAbandonEventData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.abandonDwellTimeMsString != null && m.hasOwnProperty("abandonDwellTimeMsString")) { + d.abandonDwellTimeMsString = m.abandonDwellTimeMsString; + if (o.oneofs) + d._abandonDwellTimeMsString = "abandonDwellTimeMsString"; + } + return d; + }; + + SideBySideSurveyAbandonEventData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideSurveyAbandonEventData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData"; + }; + + return SideBySideSurveyAbandonEventData; + })(); + + SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData = (function() { + + function SideBySideSurveyCTAClickEventData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideSurveyCTAClickEventData.prototype.isSurveyExpired = null; + SideBySideSurveyCTAClickEventData.prototype.clickDwellTimeMsString = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyCTAClickEventData.prototype, "_isSurveyExpired", { + get: $util.oneOfGetter($oneOfFields = ["isSurveyExpired"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyCTAClickEventData.prototype, "_clickDwellTimeMsString", { + get: $util.oneOfGetter($oneOfFields = ["clickDwellTimeMsString"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SideBySideSurveyCTAClickEventData.create = function create(properties) { + return new SideBySideSurveyCTAClickEventData(properties); + }; + + SideBySideSurveyCTAClickEventData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isSurveyExpired != null && Object.hasOwnProperty.call(m, "isSurveyExpired")) + w.uint32(8).bool(m.isSurveyExpired); + if (m.clickDwellTimeMsString != null && Object.hasOwnProperty.call(m, "clickDwellTimeMsString")) + w.uint32(18).string(m.clickDwellTimeMsString); + return w; + }; + + SideBySideSurveyCTAClickEventData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isSurveyExpired = r.bool(); + break; + } + case 2: { + m.clickDwellTimeMsString = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideSurveyCTAClickEventData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData) + return d; + var m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData(); + if (d.isSurveyExpired != null) { + m.isSurveyExpired = Boolean(d.isSurveyExpired); + } + if (d.clickDwellTimeMsString != null) { + m.clickDwellTimeMsString = String(d.clickDwellTimeMsString); + } + return m; + }; + + SideBySideSurveyCTAClickEventData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isSurveyExpired != null && m.hasOwnProperty("isSurveyExpired")) { + d.isSurveyExpired = m.isSurveyExpired; + if (o.oneofs) + d._isSurveyExpired = "isSurveyExpired"; + } + if (m.clickDwellTimeMsString != null && m.hasOwnProperty("clickDwellTimeMsString")) { + d.clickDwellTimeMsString = m.clickDwellTimeMsString; + if (o.oneofs) + d._clickDwellTimeMsString = "clickDwellTimeMsString"; + } + return d; + }; + + SideBySideSurveyCTAClickEventData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideSurveyCTAClickEventData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData"; + }; + + return SideBySideSurveyCTAClickEventData; + })(); + + SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData = (function() { + + function SideBySideSurveyCTAImpressionEventData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideSurveyCTAImpressionEventData.prototype.isSurveyExpired = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyCTAImpressionEventData.prototype, "_isSurveyExpired", { + get: $util.oneOfGetter($oneOfFields = ["isSurveyExpired"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SideBySideSurveyCTAImpressionEventData.create = function create(properties) { + return new SideBySideSurveyCTAImpressionEventData(properties); + }; + + SideBySideSurveyCTAImpressionEventData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isSurveyExpired != null && Object.hasOwnProperty.call(m, "isSurveyExpired")) + w.uint32(8).bool(m.isSurveyExpired); + return w; + }; + + SideBySideSurveyCTAImpressionEventData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isSurveyExpired = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideSurveyCTAImpressionEventData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData) + return d; + var m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData(); + if (d.isSurveyExpired != null) { + m.isSurveyExpired = Boolean(d.isSurveyExpired); + } + return m; + }; + + SideBySideSurveyCTAImpressionEventData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isSurveyExpired != null && m.hasOwnProperty("isSurveyExpired")) { + d.isSurveyExpired = m.isSurveyExpired; + if (o.oneofs) + d._isSurveyExpired = "isSurveyExpired"; + } + return d; + }; + + SideBySideSurveyCTAImpressionEventData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideSurveyCTAImpressionEventData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData"; + }; + + return SideBySideSurveyCTAImpressionEventData; + })(); + + SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData = (function() { + + function SideBySideSurveyCardImpressionEventData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideSurveyCardImpressionEventData.create = function create(properties) { + return new SideBySideSurveyCardImpressionEventData(properties); + }; + + SideBySideSurveyCardImpressionEventData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + return w; + }; + + SideBySideSurveyCardImpressionEventData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideSurveyCardImpressionEventData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData) + return d; + return new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData(); + }; + + SideBySideSurveyCardImpressionEventData.toObject = function toObject() { + return {}; + }; + + SideBySideSurveyCardImpressionEventData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideSurveyCardImpressionEventData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData"; + }; + + return SideBySideSurveyCardImpressionEventData; + })(); + + SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData = (function() { + + function SideBySideSurveyResponseEventData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideSurveyResponseEventData.prototype.responseDwellTimeMsString = null; + SideBySideSurveyResponseEventData.prototype.selectedResponseId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyResponseEventData.prototype, "_responseDwellTimeMsString", { + get: $util.oneOfGetter($oneOfFields = ["responseDwellTimeMsString"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideSurveyResponseEventData.prototype, "_selectedResponseId", { + get: $util.oneOfGetter($oneOfFields = ["selectedResponseId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SideBySideSurveyResponseEventData.create = function create(properties) { + return new SideBySideSurveyResponseEventData(properties); + }; + + SideBySideSurveyResponseEventData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.responseDwellTimeMsString != null && Object.hasOwnProperty.call(m, "responseDwellTimeMsString")) + w.uint32(10).string(m.responseDwellTimeMsString); + if (m.selectedResponseId != null && Object.hasOwnProperty.call(m, "selectedResponseId")) + w.uint32(18).string(m.selectedResponseId); + return w; + }; + + SideBySideSurveyResponseEventData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.responseDwellTimeMsString = r.string(); + break; + } + case 2: { + m.selectedResponseId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideSurveyResponseEventData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData) + return d; + var m = new $root.proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData(); + if (d.responseDwellTimeMsString != null) { + m.responseDwellTimeMsString = String(d.responseDwellTimeMsString); + } + if (d.selectedResponseId != null) { + m.selectedResponseId = String(d.selectedResponseId); + } + return m; + }; + + SideBySideSurveyResponseEventData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.responseDwellTimeMsString != null && m.hasOwnProperty("responseDwellTimeMsString")) { + d.responseDwellTimeMsString = m.responseDwellTimeMsString; + if (o.oneofs) + d._responseDwellTimeMsString = "responseDwellTimeMsString"; + } + if (m.selectedResponseId != null && m.hasOwnProperty("selectedResponseId")) { + d.selectedResponseId = m.selectedResponseId; + if (o.oneofs) + d._selectedResponseId = "selectedResponseId"; + } + return d; + }; + + SideBySideSurveyResponseEventData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideSurveyResponseEventData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData"; + }; + + return SideBySideSurveyResponseEventData; + })(); + + return SidebySideSurveyMetaAiAnalyticsData; + })(); + + return SideBySideSurveyMetadata; + })(); + + return BotFeedbackMessage; + })(); + + proto.BotImagineMetadata = (function() { + + function BotImagineMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotImagineMetadata.prototype.imagineType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotImagineMetadata.prototype, "_imagineType", { + get: $util.oneOfGetter($oneOfFields = ["imagineType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotImagineMetadata.create = function create(properties) { + return new BotImagineMetadata(properties); + }; + + BotImagineMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.imagineType != null && Object.hasOwnProperty.call(m, "imagineType")) + w.uint32(8).int32(m.imagineType); + return w; + }; + + BotImagineMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotImagineMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.imagineType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotImagineMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotImagineMetadata) + return d; + var m = new $root.proto.BotImagineMetadata(); + switch (d.imagineType) { + default: + if (typeof d.imagineType === "number") { + m.imagineType = d.imagineType; + break; + } + break; + case "UNKNOWN": + case 0: + m.imagineType = 0; + break; + case "IMAGINE": + case 1: + m.imagineType = 1; + break; + case "MEMU": + case 2: + m.imagineType = 2; + break; + case "FLASH": + case 3: + m.imagineType = 3; + break; + case "EDIT": + case 4: + m.imagineType = 4; + break; + } + return m; + }; + + BotImagineMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.imagineType != null && m.hasOwnProperty("imagineType")) { + d.imagineType = o.enums === String ? $root.proto.BotImagineMetadata.ImagineType[m.imagineType] === undefined ? m.imagineType : $root.proto.BotImagineMetadata.ImagineType[m.imagineType] : m.imagineType; + if (o.oneofs) + d._imagineType = "imagineType"; + } + return d; + }; + + BotImagineMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotImagineMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotImagineMetadata"; + }; + + BotImagineMetadata.ImagineType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "IMAGINE"] = 1; + values[valuesById[2] = "MEMU"] = 2; + values[valuesById[3] = "FLASH"] = 3; + values[valuesById[4] = "EDIT"] = 4; + return values; + })(); + + return BotImagineMetadata; + })(); + + proto.BotLinkedAccount = (function() { + + function BotLinkedAccount(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotLinkedAccount.prototype.type = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotLinkedAccount.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotLinkedAccount.create = function create(properties) { + return new BotLinkedAccount(properties); + }; + + BotLinkedAccount.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + return w; + }; + + BotLinkedAccount.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotLinkedAccount(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotLinkedAccount.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotLinkedAccount) + return d; + var m = new $root.proto.BotLinkedAccount(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "BOT_LINKED_ACCOUNT_TYPE_1P": + case 0: + m.type = 0; + break; + } + return m; + }; + + BotLinkedAccount.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.BotLinkedAccount.BotLinkedAccountType[m.type] === undefined ? m.type : $root.proto.BotLinkedAccount.BotLinkedAccountType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + BotLinkedAccount.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotLinkedAccount.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotLinkedAccount"; + }; + + BotLinkedAccount.BotLinkedAccountType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "BOT_LINKED_ACCOUNT_TYPE_1P"] = 0; + return values; + })(); + + return BotLinkedAccount; + })(); + + proto.BotLinkedAccountsMetadata = (function() { + + function BotLinkedAccountsMetadata(p) { + this.accounts = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotLinkedAccountsMetadata.prototype.accounts = $util.emptyArray; + BotLinkedAccountsMetadata.prototype.acAuthTokens = null; + BotLinkedAccountsMetadata.prototype.acErrorCode = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotLinkedAccountsMetadata.prototype, "_acAuthTokens", { + get: $util.oneOfGetter($oneOfFields = ["acAuthTokens"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotLinkedAccountsMetadata.prototype, "_acErrorCode", { + get: $util.oneOfGetter($oneOfFields = ["acErrorCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotLinkedAccountsMetadata.create = function create(properties) { + return new BotLinkedAccountsMetadata(properties); + }; + + BotLinkedAccountsMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.accounts != null && m.accounts.length) { + for (var i = 0; i < m.accounts.length; ++i) + $root.proto.BotLinkedAccount.encode(m.accounts[i], w.uint32(10).fork()).ldelim(); + } + if (m.acAuthTokens != null && Object.hasOwnProperty.call(m, "acAuthTokens")) + w.uint32(18).bytes(m.acAuthTokens); + if (m.acErrorCode != null && Object.hasOwnProperty.call(m, "acErrorCode")) + w.uint32(24).int32(m.acErrorCode); + return w; + }; + + BotLinkedAccountsMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotLinkedAccountsMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.accounts && m.accounts.length)) + m.accounts = []; + m.accounts.push($root.proto.BotLinkedAccount.decode(r, r.uint32())); + break; + } + case 2: { + m.acAuthTokens = r.bytes(); + break; + } + case 3: { + m.acErrorCode = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotLinkedAccountsMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotLinkedAccountsMetadata) + return d; + var m = new $root.proto.BotLinkedAccountsMetadata(); + if (d.accounts) { + if (!Array.isArray(d.accounts)) + throw TypeError(".proto.BotLinkedAccountsMetadata.accounts: array expected"); + m.accounts = []; + for (var i = 0; i < d.accounts.length; ++i) { + if (typeof d.accounts[i] !== "object") + throw TypeError(".proto.BotLinkedAccountsMetadata.accounts: object expected"); + m.accounts[i] = $root.proto.BotLinkedAccount.fromObject(d.accounts[i]); + } + } + if (d.acAuthTokens != null) { + if (typeof d.acAuthTokens === "string") + $util.base64.decode(d.acAuthTokens, m.acAuthTokens = $util.newBuffer($util.base64.length(d.acAuthTokens)), 0); + else if (d.acAuthTokens.length >= 0) + m.acAuthTokens = d.acAuthTokens; + } + if (d.acErrorCode != null) { + m.acErrorCode = d.acErrorCode | 0; + } + return m; + }; + + BotLinkedAccountsMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.accounts = []; + } + if (m.accounts && m.accounts.length) { + d.accounts = []; + for (var j = 0; j < m.accounts.length; ++j) { + d.accounts[j] = $root.proto.BotLinkedAccount.toObject(m.accounts[j], o); + } + } + if (m.acAuthTokens != null && m.hasOwnProperty("acAuthTokens")) { + d.acAuthTokens = o.bytes === String ? $util.base64.encode(m.acAuthTokens, 0, m.acAuthTokens.length) : o.bytes === Array ? Array.prototype.slice.call(m.acAuthTokens) : m.acAuthTokens; + if (o.oneofs) + d._acAuthTokens = "acAuthTokens"; + } + if (m.acErrorCode != null && m.hasOwnProperty("acErrorCode")) { + d.acErrorCode = m.acErrorCode; + if (o.oneofs) + d._acErrorCode = "acErrorCode"; + } + return d; + }; + + BotLinkedAccountsMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotLinkedAccountsMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotLinkedAccountsMetadata"; + }; + + return BotLinkedAccountsMetadata; + })(); + + proto.BotMediaMetadata = (function() { + + function BotMediaMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMediaMetadata.prototype.fileSha256 = null; + BotMediaMetadata.prototype.mediaKey = null; + BotMediaMetadata.prototype.fileEncSha256 = null; + BotMediaMetadata.prototype.directPath = null; + BotMediaMetadata.prototype.mediaKeyTimestamp = null; + BotMediaMetadata.prototype.mimetype = null; + BotMediaMetadata.prototype.orientationType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMediaMetadata.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMediaMetadata.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMediaMetadata.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMediaMetadata.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMediaMetadata.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMediaMetadata.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMediaMetadata.prototype, "_orientationType", { + get: $util.oneOfGetter($oneOfFields = ["orientationType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotMediaMetadata.create = function create(properties) { + return new BotMediaMetadata(properties); + }; + + BotMediaMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(10).string(m.fileSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(18).string(m.mediaKey); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(26).string(m.fileEncSha256); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(34).string(m.directPath); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(40).int64(m.mediaKeyTimestamp); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(50).string(m.mimetype); + if (m.orientationType != null && Object.hasOwnProperty.call(m, "orientationType")) + w.uint32(56).int32(m.orientationType); + return w; + }; + + BotMediaMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMediaMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fileSha256 = r.string(); + break; + } + case 2: { + m.mediaKey = r.string(); + break; + } + case 3: { + m.fileEncSha256 = r.string(); + break; + } + case 4: { + m.directPath = r.string(); + break; + } + case 5: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 6: { + m.mimetype = r.string(); + break; + } + case 7: { + m.orientationType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMediaMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMediaMetadata) + return d; + var m = new $root.proto.BotMediaMetadata(); + if (d.fileSha256 != null) { + m.fileSha256 = String(d.fileSha256); + } + if (d.mediaKey != null) { + m.mediaKey = String(d.mediaKey); + } + if (d.fileEncSha256 != null) { + m.fileEncSha256 = String(d.fileEncSha256); + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + switch (d.orientationType) { + default: + if (typeof d.orientationType === "number") { + m.orientationType = d.orientationType; + break; + } + break; + case "CENTER": + case 1: + m.orientationType = 1; + break; + case "LEFT": + case 2: + m.orientationType = 2; + break; + case "RIGHT": + case 3: + m.orientationType = 3; + break; + } + return m; + }; + + BotMediaMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.orientationType != null && m.hasOwnProperty("orientationType")) { + d.orientationType = o.enums === String ? $root.proto.BotMediaMetadata.OrientationType[m.orientationType] === undefined ? m.orientationType : $root.proto.BotMediaMetadata.OrientationType[m.orientationType] : m.orientationType; + if (o.oneofs) + d._orientationType = "orientationType"; + } + return d; + }; + + BotMediaMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMediaMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMediaMetadata"; + }; + + BotMediaMetadata.OrientationType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "CENTER"] = 1; + values[valuesById[2] = "LEFT"] = 2; + values[valuesById[3] = "RIGHT"] = 3; + return values; + })(); + + return BotMediaMetadata; + })(); + + proto.BotMemoryFact = (function() { + + function BotMemoryFact(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMemoryFact.prototype.fact = null; + BotMemoryFact.prototype.factId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMemoryFact.prototype, "_fact", { + get: $util.oneOfGetter($oneOfFields = ["fact"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMemoryFact.prototype, "_factId", { + get: $util.oneOfGetter($oneOfFields = ["factId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotMemoryFact.create = function create(properties) { + return new BotMemoryFact(properties); + }; + + BotMemoryFact.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fact != null && Object.hasOwnProperty.call(m, "fact")) + w.uint32(10).string(m.fact); + if (m.factId != null && Object.hasOwnProperty.call(m, "factId")) + w.uint32(18).string(m.factId); + return w; + }; + + BotMemoryFact.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMemoryFact(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fact = r.string(); + break; + } + case 2: { + m.factId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMemoryFact.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMemoryFact) + return d; + var m = new $root.proto.BotMemoryFact(); + if (d.fact != null) { + m.fact = String(d.fact); + } + if (d.factId != null) { + m.factId = String(d.factId); + } + return m; + }; + + BotMemoryFact.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fact != null && m.hasOwnProperty("fact")) { + d.fact = m.fact; + if (o.oneofs) + d._fact = "fact"; + } + if (m.factId != null && m.hasOwnProperty("factId")) { + d.factId = m.factId; + if (o.oneofs) + d._factId = "factId"; + } + return d; + }; + + BotMemoryFact.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMemoryFact.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMemoryFact"; + }; + + return BotMemoryFact; + })(); + + proto.BotMemoryMetadata = (function() { + + function BotMemoryMetadata(p) { + this.addedFacts = []; + this.removedFacts = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMemoryMetadata.prototype.addedFacts = $util.emptyArray; + BotMemoryMetadata.prototype.removedFacts = $util.emptyArray; + BotMemoryMetadata.prototype.disclaimer = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMemoryMetadata.prototype, "_disclaimer", { + get: $util.oneOfGetter($oneOfFields = ["disclaimer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotMemoryMetadata.create = function create(properties) { + return new BotMemoryMetadata(properties); + }; + + BotMemoryMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.addedFacts != null && m.addedFacts.length) { + for (var i = 0; i < m.addedFacts.length; ++i) + $root.proto.BotMemoryFact.encode(m.addedFacts[i], w.uint32(10).fork()).ldelim(); + } + if (m.removedFacts != null && m.removedFacts.length) { + for (var i = 0; i < m.removedFacts.length; ++i) + $root.proto.BotMemoryFact.encode(m.removedFacts[i], w.uint32(18).fork()).ldelim(); + } + if (m.disclaimer != null && Object.hasOwnProperty.call(m, "disclaimer")) + w.uint32(26).string(m.disclaimer); + return w; + }; + + BotMemoryMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMemoryMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.addedFacts && m.addedFacts.length)) + m.addedFacts = []; + m.addedFacts.push($root.proto.BotMemoryFact.decode(r, r.uint32())); + break; + } + case 2: { + if (!(m.removedFacts && m.removedFacts.length)) + m.removedFacts = []; + m.removedFacts.push($root.proto.BotMemoryFact.decode(r, r.uint32())); + break; + } + case 3: { + m.disclaimer = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMemoryMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMemoryMetadata) + return d; + var m = new $root.proto.BotMemoryMetadata(); + if (d.addedFacts) { + if (!Array.isArray(d.addedFacts)) + throw TypeError(".proto.BotMemoryMetadata.addedFacts: array expected"); + m.addedFacts = []; + for (var i = 0; i < d.addedFacts.length; ++i) { + if (typeof d.addedFacts[i] !== "object") + throw TypeError(".proto.BotMemoryMetadata.addedFacts: object expected"); + m.addedFacts[i] = $root.proto.BotMemoryFact.fromObject(d.addedFacts[i]); + } + } + if (d.removedFacts) { + if (!Array.isArray(d.removedFacts)) + throw TypeError(".proto.BotMemoryMetadata.removedFacts: array expected"); + m.removedFacts = []; + for (var i = 0; i < d.removedFacts.length; ++i) { + if (typeof d.removedFacts[i] !== "object") + throw TypeError(".proto.BotMemoryMetadata.removedFacts: object expected"); + m.removedFacts[i] = $root.proto.BotMemoryFact.fromObject(d.removedFacts[i]); + } + } + if (d.disclaimer != null) { + m.disclaimer = String(d.disclaimer); + } + return m; + }; + + BotMemoryMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.addedFacts = []; + d.removedFacts = []; + } + if (m.addedFacts && m.addedFacts.length) { + d.addedFacts = []; + for (var j = 0; j < m.addedFacts.length; ++j) { + d.addedFacts[j] = $root.proto.BotMemoryFact.toObject(m.addedFacts[j], o); + } + } + if (m.removedFacts && m.removedFacts.length) { + d.removedFacts = []; + for (var j = 0; j < m.removedFacts.length; ++j) { + d.removedFacts[j] = $root.proto.BotMemoryFact.toObject(m.removedFacts[j], o); + } + } + if (m.disclaimer != null && m.hasOwnProperty("disclaimer")) { + d.disclaimer = m.disclaimer; + if (o.oneofs) + d._disclaimer = "disclaimer"; + } + return d; + }; + + BotMemoryMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMemoryMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMemoryMetadata"; + }; + + return BotMemoryMetadata; + })(); + + proto.BotMemuMetadata = (function() { + + function BotMemuMetadata(p) { + this.faceImages = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMemuMetadata.prototype.faceImages = $util.emptyArray; + + BotMemuMetadata.create = function create(properties) { + return new BotMemuMetadata(properties); + }; + + BotMemuMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.faceImages != null && m.faceImages.length) { + for (var i = 0; i < m.faceImages.length; ++i) + $root.proto.BotMediaMetadata.encode(m.faceImages[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + BotMemuMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMemuMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.faceImages && m.faceImages.length)) + m.faceImages = []; + m.faceImages.push($root.proto.BotMediaMetadata.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMemuMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMemuMetadata) + return d; + var m = new $root.proto.BotMemuMetadata(); + if (d.faceImages) { + if (!Array.isArray(d.faceImages)) + throw TypeError(".proto.BotMemuMetadata.faceImages: array expected"); + m.faceImages = []; + for (var i = 0; i < d.faceImages.length; ++i) { + if (typeof d.faceImages[i] !== "object") + throw TypeError(".proto.BotMemuMetadata.faceImages: object expected"); + m.faceImages[i] = $root.proto.BotMediaMetadata.fromObject(d.faceImages[i]); + } + } + return m; + }; + + BotMemuMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.faceImages = []; + } + if (m.faceImages && m.faceImages.length) { + d.faceImages = []; + for (var j = 0; j < m.faceImages.length; ++j) { + d.faceImages[j] = $root.proto.BotMediaMetadata.toObject(m.faceImages[j], o); + } + } + return d; + }; + + BotMemuMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMemuMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMemuMetadata"; + }; + + return BotMemuMetadata; + })(); + + proto.BotMessageOrigin = (function() { + + function BotMessageOrigin(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMessageOrigin.prototype.type = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMessageOrigin.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotMessageOrigin.create = function create(properties) { + return new BotMessageOrigin(properties); + }; + + BotMessageOrigin.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + return w; + }; + + BotMessageOrigin.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMessageOrigin(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMessageOrigin.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMessageOrigin) + return d; + var m = new $root.proto.BotMessageOrigin(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED": + case 0: + m.type = 0; + break; + } + return m; + }; + + BotMessageOrigin.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.BotMessageOrigin.BotMessageOriginType[m.type] === undefined ? m.type : $root.proto.BotMessageOrigin.BotMessageOriginType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + BotMessageOrigin.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMessageOrigin.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMessageOrigin"; + }; + + BotMessageOrigin.BotMessageOriginType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED"] = 0; + return values; + })(); + + return BotMessageOrigin; + })(); + + proto.BotMessageOriginMetadata = (function() { + + function BotMessageOriginMetadata(p) { + this.origins = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMessageOriginMetadata.prototype.origins = $util.emptyArray; + + BotMessageOriginMetadata.create = function create(properties) { + return new BotMessageOriginMetadata(properties); + }; + + BotMessageOriginMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.origins != null && m.origins.length) { + for (var i = 0; i < m.origins.length; ++i) + $root.proto.BotMessageOrigin.encode(m.origins[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + BotMessageOriginMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMessageOriginMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.origins && m.origins.length)) + m.origins = []; + m.origins.push($root.proto.BotMessageOrigin.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMessageOriginMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMessageOriginMetadata) + return d; + var m = new $root.proto.BotMessageOriginMetadata(); + if (d.origins) { + if (!Array.isArray(d.origins)) + throw TypeError(".proto.BotMessageOriginMetadata.origins: array expected"); + m.origins = []; + for (var i = 0; i < d.origins.length; ++i) { + if (typeof d.origins[i] !== "object") + throw TypeError(".proto.BotMessageOriginMetadata.origins: object expected"); + m.origins[i] = $root.proto.BotMessageOrigin.fromObject(d.origins[i]); + } + } + return m; + }; + + BotMessageOriginMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.origins = []; + } + if (m.origins && m.origins.length) { + d.origins = []; + for (var j = 0; j < m.origins.length; ++j) { + d.origins[j] = $root.proto.BotMessageOrigin.toObject(m.origins[j], o); + } + } + return d; + }; + + BotMessageOriginMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMessageOriginMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMessageOriginMetadata"; + }; + + return BotMessageOriginMetadata; + })(); + + proto.BotMessageSharingInfo = (function() { + + function BotMessageSharingInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMessageSharingInfo.prototype.botEntryPointOrigin = null; + BotMessageSharingInfo.prototype.forwardScore = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMessageSharingInfo.prototype, "_botEntryPointOrigin", { + get: $util.oneOfGetter($oneOfFields = ["botEntryPointOrigin"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMessageSharingInfo.prototype, "_forwardScore", { + get: $util.oneOfGetter($oneOfFields = ["forwardScore"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotMessageSharingInfo.create = function create(properties) { + return new BotMessageSharingInfo(properties); + }; + + BotMessageSharingInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.botEntryPointOrigin != null && Object.hasOwnProperty.call(m, "botEntryPointOrigin")) + w.uint32(8).int32(m.botEntryPointOrigin); + if (m.forwardScore != null && Object.hasOwnProperty.call(m, "forwardScore")) + w.uint32(16).uint32(m.forwardScore); + return w; + }; + + BotMessageSharingInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMessageSharingInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.botEntryPointOrigin = r.int32(); + break; + } + case 2: { + m.forwardScore = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMessageSharingInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMessageSharingInfo) + return d; + var m = new $root.proto.BotMessageSharingInfo(); + switch (d.botEntryPointOrigin) { + default: + if (typeof d.botEntryPointOrigin === "number") { + m.botEntryPointOrigin = d.botEntryPointOrigin; + break; + } + break; + case "UNDEFINED_ENTRY_POINT": + case 0: + m.botEntryPointOrigin = 0; + break; + case "FAVICON": + case 1: + m.botEntryPointOrigin = 1; + break; + case "CHATLIST": + case 2: + m.botEntryPointOrigin = 2; + break; + case "AISEARCH_NULL_STATE_PAPER_PLANE": + case 3: + m.botEntryPointOrigin = 3; + break; + case "AISEARCH_NULL_STATE_SUGGESTION": + case 4: + m.botEntryPointOrigin = 4; + break; + case "AISEARCH_TYPE_AHEAD_SUGGESTION": + case 5: + m.botEntryPointOrigin = 5; + break; + case "AISEARCH_TYPE_AHEAD_PAPER_PLANE": + case 6: + m.botEntryPointOrigin = 6; + break; + case "AISEARCH_TYPE_AHEAD_RESULT_CHATLIST": + case 7: + m.botEntryPointOrigin = 7; + break; + case "AISEARCH_TYPE_AHEAD_RESULT_MESSAGES": + case 8: + m.botEntryPointOrigin = 8; + break; + case "AIVOICE_SEARCH_BAR": + case 9: + m.botEntryPointOrigin = 9; + break; + case "AIVOICE_FAVICON": + case 10: + m.botEntryPointOrigin = 10; + break; + case "AISTUDIO": + case 11: + m.botEntryPointOrigin = 11; + break; + case "DEEPLINK": + case 12: + m.botEntryPointOrigin = 12; + break; + case "NOTIFICATION": + case 13: + m.botEntryPointOrigin = 13; + break; + case "PROFILE_MESSAGE_BUTTON": + case 14: + m.botEntryPointOrigin = 14; + break; + case "FORWARD": + case 15: + m.botEntryPointOrigin = 15; + break; + case "APP_SHORTCUT": + case 16: + m.botEntryPointOrigin = 16; + break; + case "FF_FAMILY": + case 17: + m.botEntryPointOrigin = 17; + break; + case "AI_TAB": + case 18: + m.botEntryPointOrigin = 18; + break; + case "AI_HOME": + case 19: + m.botEntryPointOrigin = 19; + break; + case "AI_DEEPLINK_IMMERSIVE": + case 20: + m.botEntryPointOrigin = 20; + break; + case "AI_DEEPLINK": + case 21: + m.botEntryPointOrigin = 21; + break; + case "META_AI_CHAT_SHORTCUT_AI_STUDIO": + case 22: + m.botEntryPointOrigin = 22; + break; + case "UGC_CHAT_SHORTCUT_AI_STUDIO": + case 23: + m.botEntryPointOrigin = 23; + break; + case "NEW_CHAT_AI_STUDIO": + case 24: + m.botEntryPointOrigin = 24; + break; + case "AIVOICE_FAVICON_CALL_HISTORY": + case 25: + m.botEntryPointOrigin = 25; + break; + case "ASK_META_AI_CONTEXT_MENU": + case 26: + m.botEntryPointOrigin = 26; + break; + case "ASK_META_AI_CONTEXT_MENU_1ON1": + case 27: + m.botEntryPointOrigin = 27; + break; + case "ASK_META_AI_CONTEXT_MENU_GROUP": + case 28: + m.botEntryPointOrigin = 28; + break; + case "INVOKE_META_AI_1ON1": + case 29: + m.botEntryPointOrigin = 29; + break; + case "INVOKE_META_AI_GROUP": + case 30: + m.botEntryPointOrigin = 30; + break; + case "META_AI_FORWARD": + case 31: + m.botEntryPointOrigin = 31; + break; + case "NEW_CHAT_AI_CONTACT": + case 32: + m.botEntryPointOrigin = 32; + break; + case "MESSAGE_QUICK_ACTION_1_ON_1_CHAT": + case 33: + m.botEntryPointOrigin = 33; + break; + case "MESSAGE_QUICK_ACTION_GROUP_CHAT": + case 34: + m.botEntryPointOrigin = 34; + break; + case "ATTACHMENT_TRAY_1_ON_1_CHAT": + case 35: + m.botEntryPointOrigin = 35; + break; + case "ATTACHMENT_TRAY_GROUP_CHAT": + case 36: + m.botEntryPointOrigin = 36; + break; + case "ASK_META_AI_MEDIA_VIEWER_1ON1": + case 37: + m.botEntryPointOrigin = 37; + break; + case "ASK_META_AI_MEDIA_VIEWER_GROUP": + case 38: + m.botEntryPointOrigin = 38; + break; + } + if (d.forwardScore != null) { + m.forwardScore = d.forwardScore >>> 0; + } + return m; + }; + + BotMessageSharingInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.botEntryPointOrigin != null && m.hasOwnProperty("botEntryPointOrigin")) { + d.botEntryPointOrigin = o.enums === String ? $root.proto.BotMetricsEntryPoint[m.botEntryPointOrigin] === undefined ? m.botEntryPointOrigin : $root.proto.BotMetricsEntryPoint[m.botEntryPointOrigin] : m.botEntryPointOrigin; + if (o.oneofs) + d._botEntryPointOrigin = "botEntryPointOrigin"; + } + if (m.forwardScore != null && m.hasOwnProperty("forwardScore")) { + d.forwardScore = m.forwardScore; + if (o.oneofs) + d._forwardScore = "forwardScore"; + } + return d; + }; + + BotMessageSharingInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMessageSharingInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMessageSharingInfo"; + }; + + return BotMessageSharingInfo; + })(); + + proto.BotMetadata = (function() { + + function BotMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMetadata.prototype.avatarMetadata = null; + BotMetadata.prototype.personaId = null; + BotMetadata.prototype.pluginMetadata = null; + BotMetadata.prototype.suggestedPromptMetadata = null; + BotMetadata.prototype.invokerJid = null; + BotMetadata.prototype.sessionMetadata = null; + BotMetadata.prototype.memuMetadata = null; + BotMetadata.prototype.timezone = null; + BotMetadata.prototype.reminderMetadata = null; + BotMetadata.prototype.modelMetadata = null; + BotMetadata.prototype.messageDisclaimerText = null; + BotMetadata.prototype.progressIndicatorMetadata = null; + BotMetadata.prototype.capabilityMetadata = null; + BotMetadata.prototype.imagineMetadata = null; + BotMetadata.prototype.memoryMetadata = null; + BotMetadata.prototype.renderingMetadata = null; + BotMetadata.prototype.botMetricsMetadata = null; + BotMetadata.prototype.botLinkedAccountsMetadata = null; + BotMetadata.prototype.richResponseSourcesMetadata = null; + BotMetadata.prototype.aiConversationContext = null; + BotMetadata.prototype.botPromotionMessageMetadata = null; + BotMetadata.prototype.botModeSelectionMetadata = null; + BotMetadata.prototype.botQuotaMetadata = null; + BotMetadata.prototype.botAgeCollectionMetadata = null; + BotMetadata.prototype.conversationStarterPromptId = null; + BotMetadata.prototype.botResponseId = null; + BotMetadata.prototype.verificationMetadata = null; + BotMetadata.prototype.unifiedResponseMutation = null; + BotMetadata.prototype.botMessageOriginMetadata = null; + BotMetadata.prototype.inThreadSurveyMetadata = null; + BotMetadata.prototype.botThreadInfo = null; + BotMetadata.prototype.regenerateMetadata = null; + BotMetadata.prototype.sessionTransparencyMetadata = null; + BotMetadata.prototype.internalMetadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_avatarMetadata", { + get: $util.oneOfGetter($oneOfFields = ["avatarMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_personaId", { + get: $util.oneOfGetter($oneOfFields = ["personaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_pluginMetadata", { + get: $util.oneOfGetter($oneOfFields = ["pluginMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_suggestedPromptMetadata", { + get: $util.oneOfGetter($oneOfFields = ["suggestedPromptMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_invokerJid", { + get: $util.oneOfGetter($oneOfFields = ["invokerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_sessionMetadata", { + get: $util.oneOfGetter($oneOfFields = ["sessionMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_memuMetadata", { + get: $util.oneOfGetter($oneOfFields = ["memuMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_timezone", { + get: $util.oneOfGetter($oneOfFields = ["timezone"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_reminderMetadata", { + get: $util.oneOfGetter($oneOfFields = ["reminderMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_modelMetadata", { + get: $util.oneOfGetter($oneOfFields = ["modelMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_messageDisclaimerText", { + get: $util.oneOfGetter($oneOfFields = ["messageDisclaimerText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_progressIndicatorMetadata", { + get: $util.oneOfGetter($oneOfFields = ["progressIndicatorMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_capabilityMetadata", { + get: $util.oneOfGetter($oneOfFields = ["capabilityMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_imagineMetadata", { + get: $util.oneOfGetter($oneOfFields = ["imagineMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_memoryMetadata", { + get: $util.oneOfGetter($oneOfFields = ["memoryMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_renderingMetadata", { + get: $util.oneOfGetter($oneOfFields = ["renderingMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botMetricsMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botMetricsMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botLinkedAccountsMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botLinkedAccountsMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_richResponseSourcesMetadata", { + get: $util.oneOfGetter($oneOfFields = ["richResponseSourcesMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_aiConversationContext", { + get: $util.oneOfGetter($oneOfFields = ["aiConversationContext"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botPromotionMessageMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botPromotionMessageMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botModeSelectionMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botModeSelectionMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botQuotaMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botQuotaMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botAgeCollectionMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botAgeCollectionMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_conversationStarterPromptId", { + get: $util.oneOfGetter($oneOfFields = ["conversationStarterPromptId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botResponseId", { + get: $util.oneOfGetter($oneOfFields = ["botResponseId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_verificationMetadata", { + get: $util.oneOfGetter($oneOfFields = ["verificationMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_unifiedResponseMutation", { + get: $util.oneOfGetter($oneOfFields = ["unifiedResponseMutation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botMessageOriginMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botMessageOriginMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_inThreadSurveyMetadata", { + get: $util.oneOfGetter($oneOfFields = ["inThreadSurveyMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_botThreadInfo", { + get: $util.oneOfGetter($oneOfFields = ["botThreadInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_regenerateMetadata", { + get: $util.oneOfGetter($oneOfFields = ["regenerateMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_sessionTransparencyMetadata", { + get: $util.oneOfGetter($oneOfFields = ["sessionTransparencyMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetadata.prototype, "_internalMetadata", { + get: $util.oneOfGetter($oneOfFields = ["internalMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotMetadata.create = function create(properties) { + return new BotMetadata(properties); + }; + + BotMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.avatarMetadata != null && Object.hasOwnProperty.call(m, "avatarMetadata")) + $root.proto.BotAvatarMetadata.encode(m.avatarMetadata, w.uint32(10).fork()).ldelim(); + if (m.personaId != null && Object.hasOwnProperty.call(m, "personaId")) + w.uint32(18).string(m.personaId); + if (m.pluginMetadata != null && Object.hasOwnProperty.call(m, "pluginMetadata")) + $root.proto.BotPluginMetadata.encode(m.pluginMetadata, w.uint32(26).fork()).ldelim(); + if (m.suggestedPromptMetadata != null && Object.hasOwnProperty.call(m, "suggestedPromptMetadata")) + $root.proto.BotSuggestedPromptMetadata.encode(m.suggestedPromptMetadata, w.uint32(34).fork()).ldelim(); + if (m.invokerJid != null && Object.hasOwnProperty.call(m, "invokerJid")) + w.uint32(42).string(m.invokerJid); + if (m.sessionMetadata != null && Object.hasOwnProperty.call(m, "sessionMetadata")) + $root.proto.BotSessionMetadata.encode(m.sessionMetadata, w.uint32(50).fork()).ldelim(); + if (m.memuMetadata != null && Object.hasOwnProperty.call(m, "memuMetadata")) + $root.proto.BotMemuMetadata.encode(m.memuMetadata, w.uint32(58).fork()).ldelim(); + if (m.timezone != null && Object.hasOwnProperty.call(m, "timezone")) + w.uint32(66).string(m.timezone); + if (m.reminderMetadata != null && Object.hasOwnProperty.call(m, "reminderMetadata")) + $root.proto.BotReminderMetadata.encode(m.reminderMetadata, w.uint32(74).fork()).ldelim(); + if (m.modelMetadata != null && Object.hasOwnProperty.call(m, "modelMetadata")) + $root.proto.BotModelMetadata.encode(m.modelMetadata, w.uint32(82).fork()).ldelim(); + if (m.messageDisclaimerText != null && Object.hasOwnProperty.call(m, "messageDisclaimerText")) + w.uint32(90).string(m.messageDisclaimerText); + if (m.progressIndicatorMetadata != null && Object.hasOwnProperty.call(m, "progressIndicatorMetadata")) + $root.proto.BotProgressIndicatorMetadata.encode(m.progressIndicatorMetadata, w.uint32(98).fork()).ldelim(); + if (m.capabilityMetadata != null && Object.hasOwnProperty.call(m, "capabilityMetadata")) + $root.proto.BotCapabilityMetadata.encode(m.capabilityMetadata, w.uint32(106).fork()).ldelim(); + if (m.imagineMetadata != null && Object.hasOwnProperty.call(m, "imagineMetadata")) + $root.proto.BotImagineMetadata.encode(m.imagineMetadata, w.uint32(114).fork()).ldelim(); + if (m.memoryMetadata != null && Object.hasOwnProperty.call(m, "memoryMetadata")) + $root.proto.BotMemoryMetadata.encode(m.memoryMetadata, w.uint32(122).fork()).ldelim(); + if (m.renderingMetadata != null && Object.hasOwnProperty.call(m, "renderingMetadata")) + $root.proto.BotRenderingMetadata.encode(m.renderingMetadata, w.uint32(130).fork()).ldelim(); + if (m.botMetricsMetadata != null && Object.hasOwnProperty.call(m, "botMetricsMetadata")) + $root.proto.BotMetricsMetadata.encode(m.botMetricsMetadata, w.uint32(138).fork()).ldelim(); + if (m.botLinkedAccountsMetadata != null && Object.hasOwnProperty.call(m, "botLinkedAccountsMetadata")) + $root.proto.BotLinkedAccountsMetadata.encode(m.botLinkedAccountsMetadata, w.uint32(146).fork()).ldelim(); + if (m.richResponseSourcesMetadata != null && Object.hasOwnProperty.call(m, "richResponseSourcesMetadata")) + $root.proto.BotSourcesMetadata.encode(m.richResponseSourcesMetadata, w.uint32(154).fork()).ldelim(); + if (m.aiConversationContext != null && Object.hasOwnProperty.call(m, "aiConversationContext")) + w.uint32(162).bytes(m.aiConversationContext); + if (m.botPromotionMessageMetadata != null && Object.hasOwnProperty.call(m, "botPromotionMessageMetadata")) + $root.proto.BotPromotionMessageMetadata.encode(m.botPromotionMessageMetadata, w.uint32(170).fork()).ldelim(); + if (m.botModeSelectionMetadata != null && Object.hasOwnProperty.call(m, "botModeSelectionMetadata")) + $root.proto.BotModeSelectionMetadata.encode(m.botModeSelectionMetadata, w.uint32(178).fork()).ldelim(); + if (m.botQuotaMetadata != null && Object.hasOwnProperty.call(m, "botQuotaMetadata")) + $root.proto.BotQuotaMetadata.encode(m.botQuotaMetadata, w.uint32(186).fork()).ldelim(); + if (m.botAgeCollectionMetadata != null && Object.hasOwnProperty.call(m, "botAgeCollectionMetadata")) + $root.proto.BotAgeCollectionMetadata.encode(m.botAgeCollectionMetadata, w.uint32(194).fork()).ldelim(); + if (m.conversationStarterPromptId != null && Object.hasOwnProperty.call(m, "conversationStarterPromptId")) + w.uint32(202).string(m.conversationStarterPromptId); + if (m.botResponseId != null && Object.hasOwnProperty.call(m, "botResponseId")) + w.uint32(210).string(m.botResponseId); + if (m.verificationMetadata != null && Object.hasOwnProperty.call(m, "verificationMetadata")) + $root.proto.BotSignatureVerificationMetadata.encode(m.verificationMetadata, w.uint32(218).fork()).ldelim(); + if (m.unifiedResponseMutation != null && Object.hasOwnProperty.call(m, "unifiedResponseMutation")) + $root.proto.BotUnifiedResponseMutation.encode(m.unifiedResponseMutation, w.uint32(226).fork()).ldelim(); + if (m.botMessageOriginMetadata != null && Object.hasOwnProperty.call(m, "botMessageOriginMetadata")) + $root.proto.BotMessageOriginMetadata.encode(m.botMessageOriginMetadata, w.uint32(234).fork()).ldelim(); + if (m.inThreadSurveyMetadata != null && Object.hasOwnProperty.call(m, "inThreadSurveyMetadata")) + $root.proto.InThreadSurveyMetadata.encode(m.inThreadSurveyMetadata, w.uint32(242).fork()).ldelim(); + if (m.botThreadInfo != null && Object.hasOwnProperty.call(m, "botThreadInfo")) + $root.proto.AIThreadInfo.encode(m.botThreadInfo, w.uint32(250).fork()).ldelim(); + if (m.regenerateMetadata != null && Object.hasOwnProperty.call(m, "regenerateMetadata")) + $root.proto.AIRegenerateMetadata.encode(m.regenerateMetadata, w.uint32(258).fork()).ldelim(); + if (m.sessionTransparencyMetadata != null && Object.hasOwnProperty.call(m, "sessionTransparencyMetadata")) + $root.proto.SessionTransparencyMetadata.encode(m.sessionTransparencyMetadata, w.uint32(266).fork()).ldelim(); + if (m.internalMetadata != null && Object.hasOwnProperty.call(m, "internalMetadata")) + w.uint32(7994).bytes(m.internalMetadata); + return w; + }; + + BotMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.avatarMetadata = $root.proto.BotAvatarMetadata.decode(r, r.uint32()); + break; + } + case 2: { + m.personaId = r.string(); + break; + } + case 3: { + m.pluginMetadata = $root.proto.BotPluginMetadata.decode(r, r.uint32()); + break; + } + case 4: { + m.suggestedPromptMetadata = $root.proto.BotSuggestedPromptMetadata.decode(r, r.uint32()); + break; + } + case 5: { + m.invokerJid = r.string(); + break; + } + case 6: { + m.sessionMetadata = $root.proto.BotSessionMetadata.decode(r, r.uint32()); + break; + } + case 7: { + m.memuMetadata = $root.proto.BotMemuMetadata.decode(r, r.uint32()); + break; + } + case 8: { + m.timezone = r.string(); + break; + } + case 9: { + m.reminderMetadata = $root.proto.BotReminderMetadata.decode(r, r.uint32()); + break; + } + case 10: { + m.modelMetadata = $root.proto.BotModelMetadata.decode(r, r.uint32()); + break; + } + case 11: { + m.messageDisclaimerText = r.string(); + break; + } + case 12: { + m.progressIndicatorMetadata = $root.proto.BotProgressIndicatorMetadata.decode(r, r.uint32()); + break; + } + case 13: { + m.capabilityMetadata = $root.proto.BotCapabilityMetadata.decode(r, r.uint32()); + break; + } + case 14: { + m.imagineMetadata = $root.proto.BotImagineMetadata.decode(r, r.uint32()); + break; + } + case 15: { + m.memoryMetadata = $root.proto.BotMemoryMetadata.decode(r, r.uint32()); + break; + } + case 16: { + m.renderingMetadata = $root.proto.BotRenderingMetadata.decode(r, r.uint32()); + break; + } + case 17: { + m.botMetricsMetadata = $root.proto.BotMetricsMetadata.decode(r, r.uint32()); + break; + } + case 18: { + m.botLinkedAccountsMetadata = $root.proto.BotLinkedAccountsMetadata.decode(r, r.uint32()); + break; + } + case 19: { + m.richResponseSourcesMetadata = $root.proto.BotSourcesMetadata.decode(r, r.uint32()); + break; + } + case 20: { + m.aiConversationContext = r.bytes(); + break; + } + case 21: { + m.botPromotionMessageMetadata = $root.proto.BotPromotionMessageMetadata.decode(r, r.uint32()); + break; + } + case 22: { + m.botModeSelectionMetadata = $root.proto.BotModeSelectionMetadata.decode(r, r.uint32()); + break; + } + case 23: { + m.botQuotaMetadata = $root.proto.BotQuotaMetadata.decode(r, r.uint32()); + break; + } + case 24: { + m.botAgeCollectionMetadata = $root.proto.BotAgeCollectionMetadata.decode(r, r.uint32()); + break; + } + case 25: { + m.conversationStarterPromptId = r.string(); + break; + } + case 26: { + m.botResponseId = r.string(); + break; + } + case 27: { + m.verificationMetadata = $root.proto.BotSignatureVerificationMetadata.decode(r, r.uint32()); + break; + } + case 28: { + m.unifiedResponseMutation = $root.proto.BotUnifiedResponseMutation.decode(r, r.uint32()); + break; + } + case 29: { + m.botMessageOriginMetadata = $root.proto.BotMessageOriginMetadata.decode(r, r.uint32()); + break; + } + case 30: { + m.inThreadSurveyMetadata = $root.proto.InThreadSurveyMetadata.decode(r, r.uint32()); + break; + } + case 31: { + m.botThreadInfo = $root.proto.AIThreadInfo.decode(r, r.uint32()); + break; + } + case 32: { + m.regenerateMetadata = $root.proto.AIRegenerateMetadata.decode(r, r.uint32()); + break; + } + case 33: { + m.sessionTransparencyMetadata = $root.proto.SessionTransparencyMetadata.decode(r, r.uint32()); + break; + } + case 999: { + m.internalMetadata = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMetadata) + return d; + var m = new $root.proto.BotMetadata(); + if (d.avatarMetadata != null) { + if (typeof d.avatarMetadata !== "object") + throw TypeError(".proto.BotMetadata.avatarMetadata: object expected"); + m.avatarMetadata = $root.proto.BotAvatarMetadata.fromObject(d.avatarMetadata); + } + if (d.personaId != null) { + m.personaId = String(d.personaId); + } + if (d.pluginMetadata != null) { + if (typeof d.pluginMetadata !== "object") + throw TypeError(".proto.BotMetadata.pluginMetadata: object expected"); + m.pluginMetadata = $root.proto.BotPluginMetadata.fromObject(d.pluginMetadata); + } + if (d.suggestedPromptMetadata != null) { + if (typeof d.suggestedPromptMetadata !== "object") + throw TypeError(".proto.BotMetadata.suggestedPromptMetadata: object expected"); + m.suggestedPromptMetadata = $root.proto.BotSuggestedPromptMetadata.fromObject(d.suggestedPromptMetadata); + } + if (d.invokerJid != null) { + m.invokerJid = String(d.invokerJid); + } + if (d.sessionMetadata != null) { + if (typeof d.sessionMetadata !== "object") + throw TypeError(".proto.BotMetadata.sessionMetadata: object expected"); + m.sessionMetadata = $root.proto.BotSessionMetadata.fromObject(d.sessionMetadata); + } + if (d.memuMetadata != null) { + if (typeof d.memuMetadata !== "object") + throw TypeError(".proto.BotMetadata.memuMetadata: object expected"); + m.memuMetadata = $root.proto.BotMemuMetadata.fromObject(d.memuMetadata); + } + if (d.timezone != null) { + m.timezone = String(d.timezone); + } + if (d.reminderMetadata != null) { + if (typeof d.reminderMetadata !== "object") + throw TypeError(".proto.BotMetadata.reminderMetadata: object expected"); + m.reminderMetadata = $root.proto.BotReminderMetadata.fromObject(d.reminderMetadata); + } + if (d.modelMetadata != null) { + if (typeof d.modelMetadata !== "object") + throw TypeError(".proto.BotMetadata.modelMetadata: object expected"); + m.modelMetadata = $root.proto.BotModelMetadata.fromObject(d.modelMetadata); + } + if (d.messageDisclaimerText != null) { + m.messageDisclaimerText = String(d.messageDisclaimerText); + } + if (d.progressIndicatorMetadata != null) { + if (typeof d.progressIndicatorMetadata !== "object") + throw TypeError(".proto.BotMetadata.progressIndicatorMetadata: object expected"); + m.progressIndicatorMetadata = $root.proto.BotProgressIndicatorMetadata.fromObject(d.progressIndicatorMetadata); + } + if (d.capabilityMetadata != null) { + if (typeof d.capabilityMetadata !== "object") + throw TypeError(".proto.BotMetadata.capabilityMetadata: object expected"); + m.capabilityMetadata = $root.proto.BotCapabilityMetadata.fromObject(d.capabilityMetadata); + } + if (d.imagineMetadata != null) { + if (typeof d.imagineMetadata !== "object") + throw TypeError(".proto.BotMetadata.imagineMetadata: object expected"); + m.imagineMetadata = $root.proto.BotImagineMetadata.fromObject(d.imagineMetadata); + } + if (d.memoryMetadata != null) { + if (typeof d.memoryMetadata !== "object") + throw TypeError(".proto.BotMetadata.memoryMetadata: object expected"); + m.memoryMetadata = $root.proto.BotMemoryMetadata.fromObject(d.memoryMetadata); + } + if (d.renderingMetadata != null) { + if (typeof d.renderingMetadata !== "object") + throw TypeError(".proto.BotMetadata.renderingMetadata: object expected"); + m.renderingMetadata = $root.proto.BotRenderingMetadata.fromObject(d.renderingMetadata); + } + if (d.botMetricsMetadata != null) { + if (typeof d.botMetricsMetadata !== "object") + throw TypeError(".proto.BotMetadata.botMetricsMetadata: object expected"); + m.botMetricsMetadata = $root.proto.BotMetricsMetadata.fromObject(d.botMetricsMetadata); + } + if (d.botLinkedAccountsMetadata != null) { + if (typeof d.botLinkedAccountsMetadata !== "object") + throw TypeError(".proto.BotMetadata.botLinkedAccountsMetadata: object expected"); + m.botLinkedAccountsMetadata = $root.proto.BotLinkedAccountsMetadata.fromObject(d.botLinkedAccountsMetadata); + } + if (d.richResponseSourcesMetadata != null) { + if (typeof d.richResponseSourcesMetadata !== "object") + throw TypeError(".proto.BotMetadata.richResponseSourcesMetadata: object expected"); + m.richResponseSourcesMetadata = $root.proto.BotSourcesMetadata.fromObject(d.richResponseSourcesMetadata); + } + if (d.aiConversationContext != null) { + if (typeof d.aiConversationContext === "string") + $util.base64.decode(d.aiConversationContext, m.aiConversationContext = $util.newBuffer($util.base64.length(d.aiConversationContext)), 0); + else if (d.aiConversationContext.length >= 0) + m.aiConversationContext = d.aiConversationContext; + } + if (d.botPromotionMessageMetadata != null) { + if (typeof d.botPromotionMessageMetadata !== "object") + throw TypeError(".proto.BotMetadata.botPromotionMessageMetadata: object expected"); + m.botPromotionMessageMetadata = $root.proto.BotPromotionMessageMetadata.fromObject(d.botPromotionMessageMetadata); + } + if (d.botModeSelectionMetadata != null) { + if (typeof d.botModeSelectionMetadata !== "object") + throw TypeError(".proto.BotMetadata.botModeSelectionMetadata: object expected"); + m.botModeSelectionMetadata = $root.proto.BotModeSelectionMetadata.fromObject(d.botModeSelectionMetadata); + } + if (d.botQuotaMetadata != null) { + if (typeof d.botQuotaMetadata !== "object") + throw TypeError(".proto.BotMetadata.botQuotaMetadata: object expected"); + m.botQuotaMetadata = $root.proto.BotQuotaMetadata.fromObject(d.botQuotaMetadata); + } + if (d.botAgeCollectionMetadata != null) { + if (typeof d.botAgeCollectionMetadata !== "object") + throw TypeError(".proto.BotMetadata.botAgeCollectionMetadata: object expected"); + m.botAgeCollectionMetadata = $root.proto.BotAgeCollectionMetadata.fromObject(d.botAgeCollectionMetadata); + } + if (d.conversationStarterPromptId != null) { + m.conversationStarterPromptId = String(d.conversationStarterPromptId); + } + if (d.botResponseId != null) { + m.botResponseId = String(d.botResponseId); + } + if (d.verificationMetadata != null) { + if (typeof d.verificationMetadata !== "object") + throw TypeError(".proto.BotMetadata.verificationMetadata: object expected"); + m.verificationMetadata = $root.proto.BotSignatureVerificationMetadata.fromObject(d.verificationMetadata); + } + if (d.unifiedResponseMutation != null) { + if (typeof d.unifiedResponseMutation !== "object") + throw TypeError(".proto.BotMetadata.unifiedResponseMutation: object expected"); + m.unifiedResponseMutation = $root.proto.BotUnifiedResponseMutation.fromObject(d.unifiedResponseMutation); + } + if (d.botMessageOriginMetadata != null) { + if (typeof d.botMessageOriginMetadata !== "object") + throw TypeError(".proto.BotMetadata.botMessageOriginMetadata: object expected"); + m.botMessageOriginMetadata = $root.proto.BotMessageOriginMetadata.fromObject(d.botMessageOriginMetadata); + } + if (d.inThreadSurveyMetadata != null) { + if (typeof d.inThreadSurveyMetadata !== "object") + throw TypeError(".proto.BotMetadata.inThreadSurveyMetadata: object expected"); + m.inThreadSurveyMetadata = $root.proto.InThreadSurveyMetadata.fromObject(d.inThreadSurveyMetadata); + } + if (d.botThreadInfo != null) { + if (typeof d.botThreadInfo !== "object") + throw TypeError(".proto.BotMetadata.botThreadInfo: object expected"); + m.botThreadInfo = $root.proto.AIThreadInfo.fromObject(d.botThreadInfo); + } + if (d.regenerateMetadata != null) { + if (typeof d.regenerateMetadata !== "object") + throw TypeError(".proto.BotMetadata.regenerateMetadata: object expected"); + m.regenerateMetadata = $root.proto.AIRegenerateMetadata.fromObject(d.regenerateMetadata); + } + if (d.sessionTransparencyMetadata != null) { + if (typeof d.sessionTransparencyMetadata !== "object") + throw TypeError(".proto.BotMetadata.sessionTransparencyMetadata: object expected"); + m.sessionTransparencyMetadata = $root.proto.SessionTransparencyMetadata.fromObject(d.sessionTransparencyMetadata); + } + if (d.internalMetadata != null) { + if (typeof d.internalMetadata === "string") + $util.base64.decode(d.internalMetadata, m.internalMetadata = $util.newBuffer($util.base64.length(d.internalMetadata)), 0); + else if (d.internalMetadata.length >= 0) + m.internalMetadata = d.internalMetadata; + } + return m; + }; + + BotMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.avatarMetadata != null && m.hasOwnProperty("avatarMetadata")) { + d.avatarMetadata = $root.proto.BotAvatarMetadata.toObject(m.avatarMetadata, o); + if (o.oneofs) + d._avatarMetadata = "avatarMetadata"; + } + if (m.personaId != null && m.hasOwnProperty("personaId")) { + d.personaId = m.personaId; + if (o.oneofs) + d._personaId = "personaId"; + } + if (m.pluginMetadata != null && m.hasOwnProperty("pluginMetadata")) { + d.pluginMetadata = $root.proto.BotPluginMetadata.toObject(m.pluginMetadata, o); + if (o.oneofs) + d._pluginMetadata = "pluginMetadata"; + } + if (m.suggestedPromptMetadata != null && m.hasOwnProperty("suggestedPromptMetadata")) { + d.suggestedPromptMetadata = $root.proto.BotSuggestedPromptMetadata.toObject(m.suggestedPromptMetadata, o); + if (o.oneofs) + d._suggestedPromptMetadata = "suggestedPromptMetadata"; + } + if (m.invokerJid != null && m.hasOwnProperty("invokerJid")) { + d.invokerJid = m.invokerJid; + if (o.oneofs) + d._invokerJid = "invokerJid"; + } + if (m.sessionMetadata != null && m.hasOwnProperty("sessionMetadata")) { + d.sessionMetadata = $root.proto.BotSessionMetadata.toObject(m.sessionMetadata, o); + if (o.oneofs) + d._sessionMetadata = "sessionMetadata"; + } + if (m.memuMetadata != null && m.hasOwnProperty("memuMetadata")) { + d.memuMetadata = $root.proto.BotMemuMetadata.toObject(m.memuMetadata, o); + if (o.oneofs) + d._memuMetadata = "memuMetadata"; + } + if (m.timezone != null && m.hasOwnProperty("timezone")) { + d.timezone = m.timezone; + if (o.oneofs) + d._timezone = "timezone"; + } + if (m.reminderMetadata != null && m.hasOwnProperty("reminderMetadata")) { + d.reminderMetadata = $root.proto.BotReminderMetadata.toObject(m.reminderMetadata, o); + if (o.oneofs) + d._reminderMetadata = "reminderMetadata"; + } + if (m.modelMetadata != null && m.hasOwnProperty("modelMetadata")) { + d.modelMetadata = $root.proto.BotModelMetadata.toObject(m.modelMetadata, o); + if (o.oneofs) + d._modelMetadata = "modelMetadata"; + } + if (m.messageDisclaimerText != null && m.hasOwnProperty("messageDisclaimerText")) { + d.messageDisclaimerText = m.messageDisclaimerText; + if (o.oneofs) + d._messageDisclaimerText = "messageDisclaimerText"; + } + if (m.progressIndicatorMetadata != null && m.hasOwnProperty("progressIndicatorMetadata")) { + d.progressIndicatorMetadata = $root.proto.BotProgressIndicatorMetadata.toObject(m.progressIndicatorMetadata, o); + if (o.oneofs) + d._progressIndicatorMetadata = "progressIndicatorMetadata"; + } + if (m.capabilityMetadata != null && m.hasOwnProperty("capabilityMetadata")) { + d.capabilityMetadata = $root.proto.BotCapabilityMetadata.toObject(m.capabilityMetadata, o); + if (o.oneofs) + d._capabilityMetadata = "capabilityMetadata"; + } + if (m.imagineMetadata != null && m.hasOwnProperty("imagineMetadata")) { + d.imagineMetadata = $root.proto.BotImagineMetadata.toObject(m.imagineMetadata, o); + if (o.oneofs) + d._imagineMetadata = "imagineMetadata"; + } + if (m.memoryMetadata != null && m.hasOwnProperty("memoryMetadata")) { + d.memoryMetadata = $root.proto.BotMemoryMetadata.toObject(m.memoryMetadata, o); + if (o.oneofs) + d._memoryMetadata = "memoryMetadata"; + } + if (m.renderingMetadata != null && m.hasOwnProperty("renderingMetadata")) { + d.renderingMetadata = $root.proto.BotRenderingMetadata.toObject(m.renderingMetadata, o); + if (o.oneofs) + d._renderingMetadata = "renderingMetadata"; + } + if (m.botMetricsMetadata != null && m.hasOwnProperty("botMetricsMetadata")) { + d.botMetricsMetadata = $root.proto.BotMetricsMetadata.toObject(m.botMetricsMetadata, o); + if (o.oneofs) + d._botMetricsMetadata = "botMetricsMetadata"; + } + if (m.botLinkedAccountsMetadata != null && m.hasOwnProperty("botLinkedAccountsMetadata")) { + d.botLinkedAccountsMetadata = $root.proto.BotLinkedAccountsMetadata.toObject(m.botLinkedAccountsMetadata, o); + if (o.oneofs) + d._botLinkedAccountsMetadata = "botLinkedAccountsMetadata"; + } + if (m.richResponseSourcesMetadata != null && m.hasOwnProperty("richResponseSourcesMetadata")) { + d.richResponseSourcesMetadata = $root.proto.BotSourcesMetadata.toObject(m.richResponseSourcesMetadata, o); + if (o.oneofs) + d._richResponseSourcesMetadata = "richResponseSourcesMetadata"; + } + if (m.aiConversationContext != null && m.hasOwnProperty("aiConversationContext")) { + d.aiConversationContext = o.bytes === String ? $util.base64.encode(m.aiConversationContext, 0, m.aiConversationContext.length) : o.bytes === Array ? Array.prototype.slice.call(m.aiConversationContext) : m.aiConversationContext; + if (o.oneofs) + d._aiConversationContext = "aiConversationContext"; + } + if (m.botPromotionMessageMetadata != null && m.hasOwnProperty("botPromotionMessageMetadata")) { + d.botPromotionMessageMetadata = $root.proto.BotPromotionMessageMetadata.toObject(m.botPromotionMessageMetadata, o); + if (o.oneofs) + d._botPromotionMessageMetadata = "botPromotionMessageMetadata"; + } + if (m.botModeSelectionMetadata != null && m.hasOwnProperty("botModeSelectionMetadata")) { + d.botModeSelectionMetadata = $root.proto.BotModeSelectionMetadata.toObject(m.botModeSelectionMetadata, o); + if (o.oneofs) + d._botModeSelectionMetadata = "botModeSelectionMetadata"; + } + if (m.botQuotaMetadata != null && m.hasOwnProperty("botQuotaMetadata")) { + d.botQuotaMetadata = $root.proto.BotQuotaMetadata.toObject(m.botQuotaMetadata, o); + if (o.oneofs) + d._botQuotaMetadata = "botQuotaMetadata"; + } + if (m.botAgeCollectionMetadata != null && m.hasOwnProperty("botAgeCollectionMetadata")) { + d.botAgeCollectionMetadata = $root.proto.BotAgeCollectionMetadata.toObject(m.botAgeCollectionMetadata, o); + if (o.oneofs) + d._botAgeCollectionMetadata = "botAgeCollectionMetadata"; + } + if (m.conversationStarterPromptId != null && m.hasOwnProperty("conversationStarterPromptId")) { + d.conversationStarterPromptId = m.conversationStarterPromptId; + if (o.oneofs) + d._conversationStarterPromptId = "conversationStarterPromptId"; + } + if (m.botResponseId != null && m.hasOwnProperty("botResponseId")) { + d.botResponseId = m.botResponseId; + if (o.oneofs) + d._botResponseId = "botResponseId"; + } + if (m.verificationMetadata != null && m.hasOwnProperty("verificationMetadata")) { + d.verificationMetadata = $root.proto.BotSignatureVerificationMetadata.toObject(m.verificationMetadata, o); + if (o.oneofs) + d._verificationMetadata = "verificationMetadata"; + } + if (m.unifiedResponseMutation != null && m.hasOwnProperty("unifiedResponseMutation")) { + d.unifiedResponseMutation = $root.proto.BotUnifiedResponseMutation.toObject(m.unifiedResponseMutation, o); + if (o.oneofs) + d._unifiedResponseMutation = "unifiedResponseMutation"; + } + if (m.botMessageOriginMetadata != null && m.hasOwnProperty("botMessageOriginMetadata")) { + d.botMessageOriginMetadata = $root.proto.BotMessageOriginMetadata.toObject(m.botMessageOriginMetadata, o); + if (o.oneofs) + d._botMessageOriginMetadata = "botMessageOriginMetadata"; + } + if (m.inThreadSurveyMetadata != null && m.hasOwnProperty("inThreadSurveyMetadata")) { + d.inThreadSurveyMetadata = $root.proto.InThreadSurveyMetadata.toObject(m.inThreadSurveyMetadata, o); + if (o.oneofs) + d._inThreadSurveyMetadata = "inThreadSurveyMetadata"; + } + if (m.botThreadInfo != null && m.hasOwnProperty("botThreadInfo")) { + d.botThreadInfo = $root.proto.AIThreadInfo.toObject(m.botThreadInfo, o); + if (o.oneofs) + d._botThreadInfo = "botThreadInfo"; + } + if (m.regenerateMetadata != null && m.hasOwnProperty("regenerateMetadata")) { + d.regenerateMetadata = $root.proto.AIRegenerateMetadata.toObject(m.regenerateMetadata, o); + if (o.oneofs) + d._regenerateMetadata = "regenerateMetadata"; + } + if (m.sessionTransparencyMetadata != null && m.hasOwnProperty("sessionTransparencyMetadata")) { + d.sessionTransparencyMetadata = $root.proto.SessionTransparencyMetadata.toObject(m.sessionTransparencyMetadata, o); + if (o.oneofs) + d._sessionTransparencyMetadata = "sessionTransparencyMetadata"; + } + if (m.internalMetadata != null && m.hasOwnProperty("internalMetadata")) { + d.internalMetadata = o.bytes === String ? $util.base64.encode(m.internalMetadata, 0, m.internalMetadata.length) : o.bytes === Array ? Array.prototype.slice.call(m.internalMetadata) : m.internalMetadata; + if (o.oneofs) + d._internalMetadata = "internalMetadata"; + } + return d; + }; + + BotMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMetadata"; + }; + + return BotMetadata; + })(); + + proto.BotMetricsEntryPoint = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNDEFINED_ENTRY_POINT"] = 0; + values[valuesById[1] = "FAVICON"] = 1; + values[valuesById[2] = "CHATLIST"] = 2; + values[valuesById[3] = "AISEARCH_NULL_STATE_PAPER_PLANE"] = 3; + values[valuesById[4] = "AISEARCH_NULL_STATE_SUGGESTION"] = 4; + values[valuesById[5] = "AISEARCH_TYPE_AHEAD_SUGGESTION"] = 5; + values[valuesById[6] = "AISEARCH_TYPE_AHEAD_PAPER_PLANE"] = 6; + values[valuesById[7] = "AISEARCH_TYPE_AHEAD_RESULT_CHATLIST"] = 7; + values[valuesById[8] = "AISEARCH_TYPE_AHEAD_RESULT_MESSAGES"] = 8; + values[valuesById[9] = "AIVOICE_SEARCH_BAR"] = 9; + values[valuesById[10] = "AIVOICE_FAVICON"] = 10; + values[valuesById[11] = "AISTUDIO"] = 11; + values[valuesById[12] = "DEEPLINK"] = 12; + values[valuesById[13] = "NOTIFICATION"] = 13; + values[valuesById[14] = "PROFILE_MESSAGE_BUTTON"] = 14; + values[valuesById[15] = "FORWARD"] = 15; + values[valuesById[16] = "APP_SHORTCUT"] = 16; + values[valuesById[17] = "FF_FAMILY"] = 17; + values[valuesById[18] = "AI_TAB"] = 18; + values[valuesById[19] = "AI_HOME"] = 19; + values[valuesById[20] = "AI_DEEPLINK_IMMERSIVE"] = 20; + values[valuesById[21] = "AI_DEEPLINK"] = 21; + values[valuesById[22] = "META_AI_CHAT_SHORTCUT_AI_STUDIO"] = 22; + values[valuesById[23] = "UGC_CHAT_SHORTCUT_AI_STUDIO"] = 23; + values[valuesById[24] = "NEW_CHAT_AI_STUDIO"] = 24; + values[valuesById[25] = "AIVOICE_FAVICON_CALL_HISTORY"] = 25; + values[valuesById[26] = "ASK_META_AI_CONTEXT_MENU"] = 26; + values[valuesById[27] = "ASK_META_AI_CONTEXT_MENU_1ON1"] = 27; + values[valuesById[28] = "ASK_META_AI_CONTEXT_MENU_GROUP"] = 28; + values[valuesById[29] = "INVOKE_META_AI_1ON1"] = 29; + values[valuesById[30] = "INVOKE_META_AI_GROUP"] = 30; + values[valuesById[31] = "META_AI_FORWARD"] = 31; + values[valuesById[32] = "NEW_CHAT_AI_CONTACT"] = 32; + values[valuesById[33] = "MESSAGE_QUICK_ACTION_1_ON_1_CHAT"] = 33; + values[valuesById[34] = "MESSAGE_QUICK_ACTION_GROUP_CHAT"] = 34; + values[valuesById[35] = "ATTACHMENT_TRAY_1_ON_1_CHAT"] = 35; + values[valuesById[36] = "ATTACHMENT_TRAY_GROUP_CHAT"] = 36; + values[valuesById[37] = "ASK_META_AI_MEDIA_VIEWER_1ON1"] = 37; + values[valuesById[38] = "ASK_META_AI_MEDIA_VIEWER_GROUP"] = 38; + return values; + })(); + + proto.BotMetricsMetadata = (function() { + + function BotMetricsMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotMetricsMetadata.prototype.destinationId = null; + BotMetricsMetadata.prototype.destinationEntryPoint = null; + BotMetricsMetadata.prototype.threadOrigin = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetricsMetadata.prototype, "_destinationId", { + get: $util.oneOfGetter($oneOfFields = ["destinationId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetricsMetadata.prototype, "_destinationEntryPoint", { + get: $util.oneOfGetter($oneOfFields = ["destinationEntryPoint"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotMetricsMetadata.prototype, "_threadOrigin", { + get: $util.oneOfGetter($oneOfFields = ["threadOrigin"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotMetricsMetadata.create = function create(properties) { + return new BotMetricsMetadata(properties); + }; + + BotMetricsMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.destinationId != null && Object.hasOwnProperty.call(m, "destinationId")) + w.uint32(10).string(m.destinationId); + if (m.destinationEntryPoint != null && Object.hasOwnProperty.call(m, "destinationEntryPoint")) + w.uint32(16).int32(m.destinationEntryPoint); + if (m.threadOrigin != null && Object.hasOwnProperty.call(m, "threadOrigin")) + w.uint32(24).int32(m.threadOrigin); + return w; + }; + + BotMetricsMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotMetricsMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.destinationId = r.string(); + break; + } + case 2: { + m.destinationEntryPoint = r.int32(); + break; + } + case 3: { + m.threadOrigin = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotMetricsMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotMetricsMetadata) + return d; + var m = new $root.proto.BotMetricsMetadata(); + if (d.destinationId != null) { + m.destinationId = String(d.destinationId); + } + switch (d.destinationEntryPoint) { + default: + if (typeof d.destinationEntryPoint === "number") { + m.destinationEntryPoint = d.destinationEntryPoint; + break; + } + break; + case "UNDEFINED_ENTRY_POINT": + case 0: + m.destinationEntryPoint = 0; + break; + case "FAVICON": + case 1: + m.destinationEntryPoint = 1; + break; + case "CHATLIST": + case 2: + m.destinationEntryPoint = 2; + break; + case "AISEARCH_NULL_STATE_PAPER_PLANE": + case 3: + m.destinationEntryPoint = 3; + break; + case "AISEARCH_NULL_STATE_SUGGESTION": + case 4: + m.destinationEntryPoint = 4; + break; + case "AISEARCH_TYPE_AHEAD_SUGGESTION": + case 5: + m.destinationEntryPoint = 5; + break; + case "AISEARCH_TYPE_AHEAD_PAPER_PLANE": + case 6: + m.destinationEntryPoint = 6; + break; + case "AISEARCH_TYPE_AHEAD_RESULT_CHATLIST": + case 7: + m.destinationEntryPoint = 7; + break; + case "AISEARCH_TYPE_AHEAD_RESULT_MESSAGES": + case 8: + m.destinationEntryPoint = 8; + break; + case "AIVOICE_SEARCH_BAR": + case 9: + m.destinationEntryPoint = 9; + break; + case "AIVOICE_FAVICON": + case 10: + m.destinationEntryPoint = 10; + break; + case "AISTUDIO": + case 11: + m.destinationEntryPoint = 11; + break; + case "DEEPLINK": + case 12: + m.destinationEntryPoint = 12; + break; + case "NOTIFICATION": + case 13: + m.destinationEntryPoint = 13; + break; + case "PROFILE_MESSAGE_BUTTON": + case 14: + m.destinationEntryPoint = 14; + break; + case "FORWARD": + case 15: + m.destinationEntryPoint = 15; + break; + case "APP_SHORTCUT": + case 16: + m.destinationEntryPoint = 16; + break; + case "FF_FAMILY": + case 17: + m.destinationEntryPoint = 17; + break; + case "AI_TAB": + case 18: + m.destinationEntryPoint = 18; + break; + case "AI_HOME": + case 19: + m.destinationEntryPoint = 19; + break; + case "AI_DEEPLINK_IMMERSIVE": + case 20: + m.destinationEntryPoint = 20; + break; + case "AI_DEEPLINK": + case 21: + m.destinationEntryPoint = 21; + break; + case "META_AI_CHAT_SHORTCUT_AI_STUDIO": + case 22: + m.destinationEntryPoint = 22; + break; + case "UGC_CHAT_SHORTCUT_AI_STUDIO": + case 23: + m.destinationEntryPoint = 23; + break; + case "NEW_CHAT_AI_STUDIO": + case 24: + m.destinationEntryPoint = 24; + break; + case "AIVOICE_FAVICON_CALL_HISTORY": + case 25: + m.destinationEntryPoint = 25; + break; + case "ASK_META_AI_CONTEXT_MENU": + case 26: + m.destinationEntryPoint = 26; + break; + case "ASK_META_AI_CONTEXT_MENU_1ON1": + case 27: + m.destinationEntryPoint = 27; + break; + case "ASK_META_AI_CONTEXT_MENU_GROUP": + case 28: + m.destinationEntryPoint = 28; + break; + case "INVOKE_META_AI_1ON1": + case 29: + m.destinationEntryPoint = 29; + break; + case "INVOKE_META_AI_GROUP": + case 30: + m.destinationEntryPoint = 30; + break; + case "META_AI_FORWARD": + case 31: + m.destinationEntryPoint = 31; + break; + case "NEW_CHAT_AI_CONTACT": + case 32: + m.destinationEntryPoint = 32; + break; + case "MESSAGE_QUICK_ACTION_1_ON_1_CHAT": + case 33: + m.destinationEntryPoint = 33; + break; + case "MESSAGE_QUICK_ACTION_GROUP_CHAT": + case 34: + m.destinationEntryPoint = 34; + break; + case "ATTACHMENT_TRAY_1_ON_1_CHAT": + case 35: + m.destinationEntryPoint = 35; + break; + case "ATTACHMENT_TRAY_GROUP_CHAT": + case 36: + m.destinationEntryPoint = 36; + break; + case "ASK_META_AI_MEDIA_VIEWER_1ON1": + case 37: + m.destinationEntryPoint = 37; + break; + case "ASK_META_AI_MEDIA_VIEWER_GROUP": + case 38: + m.destinationEntryPoint = 38; + break; + } + switch (d.threadOrigin) { + default: + if (typeof d.threadOrigin === "number") { + m.threadOrigin = d.threadOrigin; + break; + } + break; + case "AI_TAB_THREAD": + case 1: + m.threadOrigin = 1; + break; + case "AI_HOME_THREAD": + case 2: + m.threadOrigin = 2; + break; + case "AI_DEEPLINK_IMMERSIVE_THREAD": + case 3: + m.threadOrigin = 3; + break; + case "AI_DEEPLINK_THREAD": + case 4: + m.threadOrigin = 4; + break; + case "ASK_META_AI_CONTEXT_MENU_THREAD": + case 5: + m.threadOrigin = 5; + break; + } + return m; + }; + + BotMetricsMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.destinationId != null && m.hasOwnProperty("destinationId")) { + d.destinationId = m.destinationId; + if (o.oneofs) + d._destinationId = "destinationId"; + } + if (m.destinationEntryPoint != null && m.hasOwnProperty("destinationEntryPoint")) { + d.destinationEntryPoint = o.enums === String ? $root.proto.BotMetricsEntryPoint[m.destinationEntryPoint] === undefined ? m.destinationEntryPoint : $root.proto.BotMetricsEntryPoint[m.destinationEntryPoint] : m.destinationEntryPoint; + if (o.oneofs) + d._destinationEntryPoint = "destinationEntryPoint"; + } + if (m.threadOrigin != null && m.hasOwnProperty("threadOrigin")) { + d.threadOrigin = o.enums === String ? $root.proto.BotMetricsThreadEntryPoint[m.threadOrigin] === undefined ? m.threadOrigin : $root.proto.BotMetricsThreadEntryPoint[m.threadOrigin] : m.threadOrigin; + if (o.oneofs) + d._threadOrigin = "threadOrigin"; + } + return d; + }; + + BotMetricsMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotMetricsMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotMetricsMetadata"; + }; + + return BotMetricsMetadata; + })(); + + proto.BotMetricsThreadEntryPoint = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "AI_TAB_THREAD"] = 1; + values[valuesById[2] = "AI_HOME_THREAD"] = 2; + values[valuesById[3] = "AI_DEEPLINK_IMMERSIVE_THREAD"] = 3; + values[valuesById[4] = "AI_DEEPLINK_THREAD"] = 4; + values[valuesById[5] = "ASK_META_AI_CONTEXT_MENU_THREAD"] = 5; + return values; + })(); + + proto.BotModeSelectionMetadata = (function() { + + function BotModeSelectionMetadata(p) { + this.mode = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotModeSelectionMetadata.prototype.mode = $util.emptyArray; + + BotModeSelectionMetadata.create = function create(properties) { + return new BotModeSelectionMetadata(properties); + }; + + BotModeSelectionMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.mode != null && m.mode.length) { + w.uint32(10).fork(); + for (var i = 0; i < m.mode.length; ++i) + w.int32(m.mode[i]); + w.ldelim(); + } + return w; + }; + + BotModeSelectionMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotModeSelectionMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.mode && m.mode.length)) + m.mode = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.mode.push(r.int32()); + } else + m.mode.push(r.int32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotModeSelectionMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotModeSelectionMetadata) + return d; + var m = new $root.proto.BotModeSelectionMetadata(); + if (d.mode) { + if (!Array.isArray(d.mode)) + throw TypeError(".proto.BotModeSelectionMetadata.mode: array expected"); + m.mode = []; + for (var i = 0; i < d.mode.length; ++i) { + switch (d.mode[i]) { + default: + if (typeof d.mode[i] === "number") { + m.mode[i] = d.mode[i]; + break; + } + case "UNKNOWN_MODE": + case 0: + m.mode[i] = 0; + break; + case "REASONING_MODE": + case 1: + m.mode[i] = 1; + break; + } + } + } + return m; + }; + + BotModeSelectionMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.mode = []; + } + if (m.mode && m.mode.length) { + d.mode = []; + for (var j = 0; j < m.mode.length; ++j) { + d.mode[j] = o.enums === String ? $root.proto.BotModeSelectionMetadata.BotUserSelectionMode[m.mode[j]] === undefined ? m.mode[j] : $root.proto.BotModeSelectionMetadata.BotUserSelectionMode[m.mode[j]] : m.mode[j]; + } + } + return d; + }; + + BotModeSelectionMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotModeSelectionMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotModeSelectionMetadata"; + }; + + BotModeSelectionMetadata.BotUserSelectionMode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_MODE"] = 0; + values[valuesById[1] = "REASONING_MODE"] = 1; + return values; + })(); + + return BotModeSelectionMetadata; + })(); + + proto.BotModelMetadata = (function() { + + function BotModelMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotModelMetadata.prototype.modelType = null; + BotModelMetadata.prototype.premiumModelStatus = null; + BotModelMetadata.prototype.modelNameOverride = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotModelMetadata.prototype, "_modelType", { + get: $util.oneOfGetter($oneOfFields = ["modelType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotModelMetadata.prototype, "_premiumModelStatus", { + get: $util.oneOfGetter($oneOfFields = ["premiumModelStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotModelMetadata.prototype, "_modelNameOverride", { + get: $util.oneOfGetter($oneOfFields = ["modelNameOverride"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotModelMetadata.create = function create(properties) { + return new BotModelMetadata(properties); + }; + + BotModelMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.modelType != null && Object.hasOwnProperty.call(m, "modelType")) + w.uint32(8).int32(m.modelType); + if (m.premiumModelStatus != null && Object.hasOwnProperty.call(m, "premiumModelStatus")) + w.uint32(16).int32(m.premiumModelStatus); + if (m.modelNameOverride != null && Object.hasOwnProperty.call(m, "modelNameOverride")) + w.uint32(26).string(m.modelNameOverride); + return w; + }; + + BotModelMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotModelMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.modelType = r.int32(); + break; + } + case 2: { + m.premiumModelStatus = r.int32(); + break; + } + case 3: { + m.modelNameOverride = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotModelMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotModelMetadata) + return d; + var m = new $root.proto.BotModelMetadata(); + switch (d.modelType) { + default: + if (typeof d.modelType === "number") { + m.modelType = d.modelType; + break; + } + break; + case "UNKNOWN_TYPE": + case 0: + m.modelType = 0; + break; + case "LLAMA_PROD": + case 1: + m.modelType = 1; + break; + case "LLAMA_PROD_PREMIUM": + case 2: + m.modelType = 2; + break; + } + switch (d.premiumModelStatus) { + default: + if (typeof d.premiumModelStatus === "number") { + m.premiumModelStatus = d.premiumModelStatus; + break; + } + break; + case "UNKNOWN_STATUS": + case 0: + m.premiumModelStatus = 0; + break; + case "AVAILABLE": + case 1: + m.premiumModelStatus = 1; + break; + case "QUOTA_EXCEED_LIMIT": + case 2: + m.premiumModelStatus = 2; + break; + } + if (d.modelNameOverride != null) { + m.modelNameOverride = String(d.modelNameOverride); + } + return m; + }; + + BotModelMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.modelType != null && m.hasOwnProperty("modelType")) { + d.modelType = o.enums === String ? $root.proto.BotModelMetadata.ModelType[m.modelType] === undefined ? m.modelType : $root.proto.BotModelMetadata.ModelType[m.modelType] : m.modelType; + if (o.oneofs) + d._modelType = "modelType"; + } + if (m.premiumModelStatus != null && m.hasOwnProperty("premiumModelStatus")) { + d.premiumModelStatus = o.enums === String ? $root.proto.BotModelMetadata.PremiumModelStatus[m.premiumModelStatus] === undefined ? m.premiumModelStatus : $root.proto.BotModelMetadata.PremiumModelStatus[m.premiumModelStatus] : m.premiumModelStatus; + if (o.oneofs) + d._premiumModelStatus = "premiumModelStatus"; + } + if (m.modelNameOverride != null && m.hasOwnProperty("modelNameOverride")) { + d.modelNameOverride = m.modelNameOverride; + if (o.oneofs) + d._modelNameOverride = "modelNameOverride"; + } + return d; + }; + + BotModelMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotModelMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotModelMetadata"; + }; + + BotModelMetadata.ModelType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_TYPE"] = 0; + values[valuesById[1] = "LLAMA_PROD"] = 1; + values[valuesById[2] = "LLAMA_PROD_PREMIUM"] = 2; + return values; + })(); + + BotModelMetadata.PremiumModelStatus = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_STATUS"] = 0; + values[valuesById[1] = "AVAILABLE"] = 1; + values[valuesById[2] = "QUOTA_EXCEED_LIMIT"] = 2; + return values; + })(); + + return BotModelMetadata; + })(); + + proto.BotPluginMetadata = (function() { + + function BotPluginMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPluginMetadata.prototype.provider = null; + BotPluginMetadata.prototype.pluginType = null; + BotPluginMetadata.prototype.thumbnailCdnUrl = null; + BotPluginMetadata.prototype.profilePhotoCdnUrl = null; + BotPluginMetadata.prototype.searchProviderUrl = null; + BotPluginMetadata.prototype.referenceIndex = null; + BotPluginMetadata.prototype.expectedLinksCount = null; + BotPluginMetadata.prototype.searchQuery = null; + BotPluginMetadata.prototype.parentPluginMessageKey = null; + BotPluginMetadata.prototype.deprecatedField = null; + BotPluginMetadata.prototype.parentPluginType = null; + BotPluginMetadata.prototype.faviconCdnUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_provider", { + get: $util.oneOfGetter($oneOfFields = ["provider"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_pluginType", { + get: $util.oneOfGetter($oneOfFields = ["pluginType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_thumbnailCdnUrl", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailCdnUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_profilePhotoCdnUrl", { + get: $util.oneOfGetter($oneOfFields = ["profilePhotoCdnUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_searchProviderUrl", { + get: $util.oneOfGetter($oneOfFields = ["searchProviderUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_referenceIndex", { + get: $util.oneOfGetter($oneOfFields = ["referenceIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_expectedLinksCount", { + get: $util.oneOfGetter($oneOfFields = ["expectedLinksCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_searchQuery", { + get: $util.oneOfGetter($oneOfFields = ["searchQuery"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_parentPluginMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["parentPluginMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_deprecatedField", { + get: $util.oneOfGetter($oneOfFields = ["deprecatedField"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_parentPluginType", { + get: $util.oneOfGetter($oneOfFields = ["parentPluginType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPluginMetadata.prototype, "_faviconCdnUrl", { + get: $util.oneOfGetter($oneOfFields = ["faviconCdnUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotPluginMetadata.create = function create(properties) { + return new BotPluginMetadata(properties); + }; + + BotPluginMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.provider != null && Object.hasOwnProperty.call(m, "provider")) + w.uint32(8).int32(m.provider); + if (m.pluginType != null && Object.hasOwnProperty.call(m, "pluginType")) + w.uint32(16).int32(m.pluginType); + if (m.thumbnailCdnUrl != null && Object.hasOwnProperty.call(m, "thumbnailCdnUrl")) + w.uint32(26).string(m.thumbnailCdnUrl); + if (m.profilePhotoCdnUrl != null && Object.hasOwnProperty.call(m, "profilePhotoCdnUrl")) + w.uint32(34).string(m.profilePhotoCdnUrl); + if (m.searchProviderUrl != null && Object.hasOwnProperty.call(m, "searchProviderUrl")) + w.uint32(42).string(m.searchProviderUrl); + if (m.referenceIndex != null && Object.hasOwnProperty.call(m, "referenceIndex")) + w.uint32(48).uint32(m.referenceIndex); + if (m.expectedLinksCount != null && Object.hasOwnProperty.call(m, "expectedLinksCount")) + w.uint32(56).uint32(m.expectedLinksCount); + if (m.searchQuery != null && Object.hasOwnProperty.call(m, "searchQuery")) + w.uint32(74).string(m.searchQuery); + if (m.parentPluginMessageKey != null && Object.hasOwnProperty.call(m, "parentPluginMessageKey")) + $root.proto.MessageKey.encode(m.parentPluginMessageKey, w.uint32(82).fork()).ldelim(); + if (m.deprecatedField != null && Object.hasOwnProperty.call(m, "deprecatedField")) + w.uint32(88).int32(m.deprecatedField); + if (m.parentPluginType != null && Object.hasOwnProperty.call(m, "parentPluginType")) + w.uint32(96).int32(m.parentPluginType); + if (m.faviconCdnUrl != null && Object.hasOwnProperty.call(m, "faviconCdnUrl")) + w.uint32(106).string(m.faviconCdnUrl); + return w; + }; + + BotPluginMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotPluginMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.provider = r.int32(); + break; + } + case 2: { + m.pluginType = r.int32(); + break; + } + case 3: { + m.thumbnailCdnUrl = r.string(); + break; + } + case 4: { + m.profilePhotoCdnUrl = r.string(); + break; + } + case 5: { + m.searchProviderUrl = r.string(); + break; + } + case 6: { + m.referenceIndex = r.uint32(); + break; + } + case 7: { + m.expectedLinksCount = r.uint32(); + break; + } + case 9: { + m.searchQuery = r.string(); + break; + } + case 10: { + m.parentPluginMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 11: { + m.deprecatedField = r.int32(); + break; + } + case 12: { + m.parentPluginType = r.int32(); + break; + } + case 13: { + m.faviconCdnUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPluginMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotPluginMetadata) + return d; + var m = new $root.proto.BotPluginMetadata(); + switch (d.provider) { + default: + if (typeof d.provider === "number") { + m.provider = d.provider; + break; + } + break; + case "UNKNOWN": + case 0: + m.provider = 0; + break; + case "BING": + case 1: + m.provider = 1; + break; + case "GOOGLE": + case 2: + m.provider = 2; + break; + case "SUPPORT": + case 3: + m.provider = 3; + break; + } + switch (d.pluginType) { + default: + if (typeof d.pluginType === "number") { + m.pluginType = d.pluginType; + break; + } + break; + case "UNKNOWN_PLUGIN": + case 0: + m.pluginType = 0; + break; + case "REELS": + case 1: + m.pluginType = 1; + break; + case "SEARCH": + case 2: + m.pluginType = 2; + break; + } + if (d.thumbnailCdnUrl != null) { + m.thumbnailCdnUrl = String(d.thumbnailCdnUrl); + } + if (d.profilePhotoCdnUrl != null) { + m.profilePhotoCdnUrl = String(d.profilePhotoCdnUrl); + } + if (d.searchProviderUrl != null) { + m.searchProviderUrl = String(d.searchProviderUrl); + } + if (d.referenceIndex != null) { + m.referenceIndex = d.referenceIndex >>> 0; + } + if (d.expectedLinksCount != null) { + m.expectedLinksCount = d.expectedLinksCount >>> 0; + } + if (d.searchQuery != null) { + m.searchQuery = String(d.searchQuery); + } + if (d.parentPluginMessageKey != null) { + if (typeof d.parentPluginMessageKey !== "object") + throw TypeError(".proto.BotPluginMetadata.parentPluginMessageKey: object expected"); + m.parentPluginMessageKey = $root.proto.MessageKey.fromObject(d.parentPluginMessageKey); + } + switch (d.deprecatedField) { + default: + if (typeof d.deprecatedField === "number") { + m.deprecatedField = d.deprecatedField; + break; + } + break; + case "UNKNOWN_PLUGIN": + case 0: + m.deprecatedField = 0; + break; + case "REELS": + case 1: + m.deprecatedField = 1; + break; + case "SEARCH": + case 2: + m.deprecatedField = 2; + break; + } + switch (d.parentPluginType) { + default: + if (typeof d.parentPluginType === "number") { + m.parentPluginType = d.parentPluginType; + break; + } + break; + case "UNKNOWN_PLUGIN": + case 0: + m.parentPluginType = 0; + break; + case "REELS": + case 1: + m.parentPluginType = 1; + break; + case "SEARCH": + case 2: + m.parentPluginType = 2; + break; + } + if (d.faviconCdnUrl != null) { + m.faviconCdnUrl = String(d.faviconCdnUrl); + } + return m; + }; + + BotPluginMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.provider != null && m.hasOwnProperty("provider")) { + d.provider = o.enums === String ? $root.proto.BotPluginMetadata.SearchProvider[m.provider] === undefined ? m.provider : $root.proto.BotPluginMetadata.SearchProvider[m.provider] : m.provider; + if (o.oneofs) + d._provider = "provider"; + } + if (m.pluginType != null && m.hasOwnProperty("pluginType")) { + d.pluginType = o.enums === String ? $root.proto.BotPluginMetadata.PluginType[m.pluginType] === undefined ? m.pluginType : $root.proto.BotPluginMetadata.PluginType[m.pluginType] : m.pluginType; + if (o.oneofs) + d._pluginType = "pluginType"; + } + if (m.thumbnailCdnUrl != null && m.hasOwnProperty("thumbnailCdnUrl")) { + d.thumbnailCdnUrl = m.thumbnailCdnUrl; + if (o.oneofs) + d._thumbnailCdnUrl = "thumbnailCdnUrl"; + } + if (m.profilePhotoCdnUrl != null && m.hasOwnProperty("profilePhotoCdnUrl")) { + d.profilePhotoCdnUrl = m.profilePhotoCdnUrl; + if (o.oneofs) + d._profilePhotoCdnUrl = "profilePhotoCdnUrl"; + } + if (m.searchProviderUrl != null && m.hasOwnProperty("searchProviderUrl")) { + d.searchProviderUrl = m.searchProviderUrl; + if (o.oneofs) + d._searchProviderUrl = "searchProviderUrl"; + } + if (m.referenceIndex != null && m.hasOwnProperty("referenceIndex")) { + d.referenceIndex = m.referenceIndex; + if (o.oneofs) + d._referenceIndex = "referenceIndex"; + } + if (m.expectedLinksCount != null && m.hasOwnProperty("expectedLinksCount")) { + d.expectedLinksCount = m.expectedLinksCount; + if (o.oneofs) + d._expectedLinksCount = "expectedLinksCount"; + } + if (m.searchQuery != null && m.hasOwnProperty("searchQuery")) { + d.searchQuery = m.searchQuery; + if (o.oneofs) + d._searchQuery = "searchQuery"; + } + if (m.parentPluginMessageKey != null && m.hasOwnProperty("parentPluginMessageKey")) { + d.parentPluginMessageKey = $root.proto.MessageKey.toObject(m.parentPluginMessageKey, o); + if (o.oneofs) + d._parentPluginMessageKey = "parentPluginMessageKey"; + } + if (m.deprecatedField != null && m.hasOwnProperty("deprecatedField")) { + d.deprecatedField = o.enums === String ? $root.proto.BotPluginMetadata.PluginType[m.deprecatedField] === undefined ? m.deprecatedField : $root.proto.BotPluginMetadata.PluginType[m.deprecatedField] : m.deprecatedField; + if (o.oneofs) + d._deprecatedField = "deprecatedField"; + } + if (m.parentPluginType != null && m.hasOwnProperty("parentPluginType")) { + d.parentPluginType = o.enums === String ? $root.proto.BotPluginMetadata.PluginType[m.parentPluginType] === undefined ? m.parentPluginType : $root.proto.BotPluginMetadata.PluginType[m.parentPluginType] : m.parentPluginType; + if (o.oneofs) + d._parentPluginType = "parentPluginType"; + } + if (m.faviconCdnUrl != null && m.hasOwnProperty("faviconCdnUrl")) { + d.faviconCdnUrl = m.faviconCdnUrl; + if (o.oneofs) + d._faviconCdnUrl = "faviconCdnUrl"; + } + return d; + }; + + BotPluginMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPluginMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotPluginMetadata"; + }; + + BotPluginMetadata.PluginType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_PLUGIN"] = 0; + values[valuesById[1] = "REELS"] = 1; + values[valuesById[2] = "SEARCH"] = 2; + return values; + })(); + + BotPluginMetadata.SearchProvider = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "BING"] = 1; + values[valuesById[2] = "GOOGLE"] = 2; + values[valuesById[3] = "SUPPORT"] = 3; + return values; + })(); + + return BotPluginMetadata; + })(); + + proto.BotProgressIndicatorMetadata = (function() { + + function BotProgressIndicatorMetadata(p) { + this.stepsMetadata = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotProgressIndicatorMetadata.prototype.progressDescription = null; + BotProgressIndicatorMetadata.prototype.stepsMetadata = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotProgressIndicatorMetadata.prototype, "_progressDescription", { + get: $util.oneOfGetter($oneOfFields = ["progressDescription"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotProgressIndicatorMetadata.create = function create(properties) { + return new BotProgressIndicatorMetadata(properties); + }; + + BotProgressIndicatorMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.progressDescription != null && Object.hasOwnProperty.call(m, "progressDescription")) + w.uint32(10).string(m.progressDescription); + if (m.stepsMetadata != null && m.stepsMetadata.length) { + for (var i = 0; i < m.stepsMetadata.length; ++i) + $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.encode(m.stepsMetadata[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + BotProgressIndicatorMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotProgressIndicatorMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.progressDescription = r.string(); + break; + } + case 2: { + if (!(m.stepsMetadata && m.stepsMetadata.length)) + m.stepsMetadata = []; + m.stepsMetadata.push($root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotProgressIndicatorMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotProgressIndicatorMetadata) + return d; + var m = new $root.proto.BotProgressIndicatorMetadata(); + if (d.progressDescription != null) { + m.progressDescription = String(d.progressDescription); + } + if (d.stepsMetadata) { + if (!Array.isArray(d.stepsMetadata)) + throw TypeError(".proto.BotProgressIndicatorMetadata.stepsMetadata: array expected"); + m.stepsMetadata = []; + for (var i = 0; i < d.stepsMetadata.length; ++i) { + if (typeof d.stepsMetadata[i] !== "object") + throw TypeError(".proto.BotProgressIndicatorMetadata.stepsMetadata: object expected"); + m.stepsMetadata[i] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.fromObject(d.stepsMetadata[i]); + } + } + return m; + }; + + BotProgressIndicatorMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.stepsMetadata = []; + } + if (m.progressDescription != null && m.hasOwnProperty("progressDescription")) { + d.progressDescription = m.progressDescription; + if (o.oneofs) + d._progressDescription = "progressDescription"; + } + if (m.stepsMetadata && m.stepsMetadata.length) { + d.stepsMetadata = []; + for (var j = 0; j < m.stepsMetadata.length; ++j) { + d.stepsMetadata[j] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.toObject(m.stepsMetadata[j], o); + } + } + return d; + }; + + BotProgressIndicatorMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotProgressIndicatorMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotProgressIndicatorMetadata"; + }; + + BotProgressIndicatorMetadata.BotPlanningStepMetadata = (function() { + + function BotPlanningStepMetadata(p) { + this.sourcesMetadata = []; + this.sections = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPlanningStepMetadata.prototype.statusTitle = null; + BotPlanningStepMetadata.prototype.statusBody = null; + BotPlanningStepMetadata.prototype.sourcesMetadata = $util.emptyArray; + BotPlanningStepMetadata.prototype.status = null; + BotPlanningStepMetadata.prototype.isReasoning = null; + BotPlanningStepMetadata.prototype.isEnhancedSearch = null; + BotPlanningStepMetadata.prototype.sections = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningStepMetadata.prototype, "_statusTitle", { + get: $util.oneOfGetter($oneOfFields = ["statusTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningStepMetadata.prototype, "_statusBody", { + get: $util.oneOfGetter($oneOfFields = ["statusBody"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningStepMetadata.prototype, "_status", { + get: $util.oneOfGetter($oneOfFields = ["status"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningStepMetadata.prototype, "_isReasoning", { + get: $util.oneOfGetter($oneOfFields = ["isReasoning"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningStepMetadata.prototype, "_isEnhancedSearch", { + get: $util.oneOfGetter($oneOfFields = ["isEnhancedSearch"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotPlanningStepMetadata.create = function create(properties) { + return new BotPlanningStepMetadata(properties); + }; + + BotPlanningStepMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.statusTitle != null && Object.hasOwnProperty.call(m, "statusTitle")) + w.uint32(10).string(m.statusTitle); + if (m.statusBody != null && Object.hasOwnProperty.call(m, "statusBody")) + w.uint32(18).string(m.statusBody); + if (m.sourcesMetadata != null && m.sourcesMetadata.length) { + for (var i = 0; i < m.sourcesMetadata.length; ++i) + $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.encode(m.sourcesMetadata[i], w.uint32(26).fork()).ldelim(); + } + if (m.status != null && Object.hasOwnProperty.call(m, "status")) + w.uint32(32).int32(m.status); + if (m.isReasoning != null && Object.hasOwnProperty.call(m, "isReasoning")) + w.uint32(40).bool(m.isReasoning); + if (m.isEnhancedSearch != null && Object.hasOwnProperty.call(m, "isEnhancedSearch")) + w.uint32(48).bool(m.isEnhancedSearch); + if (m.sections != null && m.sections.length) { + for (var i = 0; i < m.sections.length; ++i) + $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.encode(m.sections[i], w.uint32(58).fork()).ldelim(); + } + return w; + }; + + BotPlanningStepMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.statusTitle = r.string(); + break; + } + case 2: { + m.statusBody = r.string(); + break; + } + case 3: { + if (!(m.sourcesMetadata && m.sourcesMetadata.length)) + m.sourcesMetadata = []; + m.sourcesMetadata.push($root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.decode(r, r.uint32())); + break; + } + case 4: { + m.status = r.int32(); + break; + } + case 5: { + m.isReasoning = r.bool(); + break; + } + case 6: { + m.isEnhancedSearch = r.bool(); + break; + } + case 7: { + if (!(m.sections && m.sections.length)) + m.sections = []; + m.sections.push($root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPlanningStepMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata) + return d; + var m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata(); + if (d.statusTitle != null) { + m.statusTitle = String(d.statusTitle); + } + if (d.statusBody != null) { + m.statusBody = String(d.statusBody); + } + if (d.sourcesMetadata) { + if (!Array.isArray(d.sourcesMetadata)) + throw TypeError(".proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sourcesMetadata: array expected"); + m.sourcesMetadata = []; + for (var i = 0; i < d.sourcesMetadata.length; ++i) { + if (typeof d.sourcesMetadata[i] !== "object") + throw TypeError(".proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sourcesMetadata: object expected"); + m.sourcesMetadata[i] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.fromObject(d.sourcesMetadata[i]); + } + } + switch (d.status) { + default: + if (typeof d.status === "number") { + m.status = d.status; + break; + } + break; + case "UNKNOWN": + case 0: + m.status = 0; + break; + case "PLANNED": + case 1: + m.status = 1; + break; + case "EXECUTING": + case 2: + m.status = 2; + break; + case "FINISHED": + case 3: + m.status = 3; + break; + } + if (d.isReasoning != null) { + m.isReasoning = Boolean(d.isReasoning); + } + if (d.isEnhancedSearch != null) { + m.isEnhancedSearch = Boolean(d.isEnhancedSearch); + } + if (d.sections) { + if (!Array.isArray(d.sections)) + throw TypeError(".proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sections: array expected"); + m.sections = []; + for (var i = 0; i < d.sections.length; ++i) { + if (typeof d.sections[i] !== "object") + throw TypeError(".proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sections: object expected"); + m.sections[i] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.fromObject(d.sections[i]); + } + } + return m; + }; + + BotPlanningStepMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.sourcesMetadata = []; + d.sections = []; + } + if (m.statusTitle != null && m.hasOwnProperty("statusTitle")) { + d.statusTitle = m.statusTitle; + if (o.oneofs) + d._statusTitle = "statusTitle"; + } + if (m.statusBody != null && m.hasOwnProperty("statusBody")) { + d.statusBody = m.statusBody; + if (o.oneofs) + d._statusBody = "statusBody"; + } + if (m.sourcesMetadata && m.sourcesMetadata.length) { + d.sourcesMetadata = []; + for (var j = 0; j < m.sourcesMetadata.length; ++j) { + d.sourcesMetadata[j] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.toObject(m.sourcesMetadata[j], o); + } + } + if (m.status != null && m.hasOwnProperty("status")) { + d.status = o.enums === String ? $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus[m.status] === undefined ? m.status : $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus[m.status] : m.status; + if (o.oneofs) + d._status = "status"; + } + if (m.isReasoning != null && m.hasOwnProperty("isReasoning")) { + d.isReasoning = m.isReasoning; + if (o.oneofs) + d._isReasoning = "isReasoning"; + } + if (m.isEnhancedSearch != null && m.hasOwnProperty("isEnhancedSearch")) { + d.isEnhancedSearch = m.isEnhancedSearch; + if (o.oneofs) + d._isEnhancedSearch = "isEnhancedSearch"; + } + if (m.sections && m.sections.length) { + d.sections = []; + for (var j = 0; j < m.sections.length; ++j) { + d.sections[j] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.toObject(m.sections[j], o); + } + } + return d; + }; + + BotPlanningStepMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPlanningStepMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata"; + }; + + BotPlanningStepMetadata.BotPlanningSearchSourceMetadata = (function() { + + function BotPlanningSearchSourceMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPlanningSearchSourceMetadata.prototype.title = null; + BotPlanningSearchSourceMetadata.prototype.provider = null; + BotPlanningSearchSourceMetadata.prototype.sourceUrl = null; + BotPlanningSearchSourceMetadata.prototype.favIconUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningSearchSourceMetadata.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningSearchSourceMetadata.prototype, "_provider", { + get: $util.oneOfGetter($oneOfFields = ["provider"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningSearchSourceMetadata.prototype, "_sourceUrl", { + get: $util.oneOfGetter($oneOfFields = ["sourceUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningSearchSourceMetadata.prototype, "_favIconUrl", { + get: $util.oneOfGetter($oneOfFields = ["favIconUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotPlanningSearchSourceMetadata.create = function create(properties) { + return new BotPlanningSearchSourceMetadata(properties); + }; + + BotPlanningSearchSourceMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.provider != null && Object.hasOwnProperty.call(m, "provider")) + w.uint32(16).int32(m.provider); + if (m.sourceUrl != null && Object.hasOwnProperty.call(m, "sourceUrl")) + w.uint32(26).string(m.sourceUrl); + if (m.favIconUrl != null && Object.hasOwnProperty.call(m, "favIconUrl")) + w.uint32(34).string(m.favIconUrl); + return w; + }; + + BotPlanningSearchSourceMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.provider = r.int32(); + break; + } + case 3: { + m.sourceUrl = r.string(); + break; + } + case 4: { + m.favIconUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPlanningSearchSourceMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata) + return d; + var m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata(); + if (d.title != null) { + m.title = String(d.title); + } + switch (d.provider) { + default: + if (typeof d.provider === "number") { + m.provider = d.provider; + break; + } + break; + case "UNKNOWN_PROVIDER": + case 0: + m.provider = 0; + break; + case "OTHER": + case 1: + m.provider = 1; + break; + case "GOOGLE": + case 2: + m.provider = 2; + break; + case "BING": + case 3: + m.provider = 3; + break; + } + if (d.sourceUrl != null) { + m.sourceUrl = String(d.sourceUrl); + } + if (d.favIconUrl != null) { + m.favIconUrl = String(d.favIconUrl); + } + return m; + }; + + BotPlanningSearchSourceMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.provider != null && m.hasOwnProperty("provider")) { + d.provider = o.enums === String ? $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider[m.provider] === undefined ? m.provider : $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider[m.provider] : m.provider; + if (o.oneofs) + d._provider = "provider"; + } + if (m.sourceUrl != null && m.hasOwnProperty("sourceUrl")) { + d.sourceUrl = m.sourceUrl; + if (o.oneofs) + d._sourceUrl = "sourceUrl"; + } + if (m.favIconUrl != null && m.hasOwnProperty("favIconUrl")) { + d.favIconUrl = m.favIconUrl; + if (o.oneofs) + d._favIconUrl = "favIconUrl"; + } + return d; + }; + + BotPlanningSearchSourceMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPlanningSearchSourceMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata"; + }; + + return BotPlanningSearchSourceMetadata; + })(); + + BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata = (function() { + + function BotPlanningSearchSourcesMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPlanningSearchSourcesMetadata.prototype.sourceTitle = null; + BotPlanningSearchSourcesMetadata.prototype.provider = null; + BotPlanningSearchSourcesMetadata.prototype.sourceUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningSearchSourcesMetadata.prototype, "_sourceTitle", { + get: $util.oneOfGetter($oneOfFields = ["sourceTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningSearchSourcesMetadata.prototype, "_provider", { + get: $util.oneOfGetter($oneOfFields = ["provider"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningSearchSourcesMetadata.prototype, "_sourceUrl", { + get: $util.oneOfGetter($oneOfFields = ["sourceUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotPlanningSearchSourcesMetadata.create = function create(properties) { + return new BotPlanningSearchSourcesMetadata(properties); + }; + + BotPlanningSearchSourcesMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sourceTitle != null && Object.hasOwnProperty.call(m, "sourceTitle")) + w.uint32(10).string(m.sourceTitle); + if (m.provider != null && Object.hasOwnProperty.call(m, "provider")) + w.uint32(16).int32(m.provider); + if (m.sourceUrl != null && Object.hasOwnProperty.call(m, "sourceUrl")) + w.uint32(26).string(m.sourceUrl); + return w; + }; + + BotPlanningSearchSourcesMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sourceTitle = r.string(); + break; + } + case 2: { + m.provider = r.int32(); + break; + } + case 3: { + m.sourceUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPlanningSearchSourcesMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata) + return d; + var m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata(); + if (d.sourceTitle != null) { + m.sourceTitle = String(d.sourceTitle); + } + switch (d.provider) { + default: + if (typeof d.provider === "number") { + m.provider = d.provider; + break; + } + break; + case "UNKNOWN": + case 0: + m.provider = 0; + break; + case "OTHER": + case 1: + m.provider = 1; + break; + case "GOOGLE": + case 2: + m.provider = 2; + break; + case "BING": + case 3: + m.provider = 3; + break; + } + if (d.sourceUrl != null) { + m.sourceUrl = String(d.sourceUrl); + } + return m; + }; + + BotPlanningSearchSourcesMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.sourceTitle != null && m.hasOwnProperty("sourceTitle")) { + d.sourceTitle = m.sourceTitle; + if (o.oneofs) + d._sourceTitle = "sourceTitle"; + } + if (m.provider != null && m.hasOwnProperty("provider")) { + d.provider = o.enums === String ? $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider[m.provider] === undefined ? m.provider : $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider[m.provider] : m.provider; + if (o.oneofs) + d._provider = "provider"; + } + if (m.sourceUrl != null && m.hasOwnProperty("sourceUrl")) { + d.sourceUrl = m.sourceUrl; + if (o.oneofs) + d._sourceUrl = "sourceUrl"; + } + return d; + }; + + BotPlanningSearchSourcesMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPlanningSearchSourcesMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata"; + }; + + BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "OTHER"] = 1; + values[valuesById[2] = "GOOGLE"] = 2; + values[valuesById[3] = "BING"] = 3; + return values; + })(); + + return BotPlanningSearchSourcesMetadata; + })(); + + BotPlanningStepMetadata.BotPlanningStepSectionMetadata = (function() { + + function BotPlanningStepSectionMetadata(p) { + this.sourcesMetadata = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPlanningStepSectionMetadata.prototype.sectionTitle = null; + BotPlanningStepSectionMetadata.prototype.sectionBody = null; + BotPlanningStepSectionMetadata.prototype.sourcesMetadata = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningStepSectionMetadata.prototype, "_sectionTitle", { + get: $util.oneOfGetter($oneOfFields = ["sectionTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPlanningStepSectionMetadata.prototype, "_sectionBody", { + get: $util.oneOfGetter($oneOfFields = ["sectionBody"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotPlanningStepSectionMetadata.create = function create(properties) { + return new BotPlanningStepSectionMetadata(properties); + }; + + BotPlanningStepSectionMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sectionTitle != null && Object.hasOwnProperty.call(m, "sectionTitle")) + w.uint32(10).string(m.sectionTitle); + if (m.sectionBody != null && Object.hasOwnProperty.call(m, "sectionBody")) + w.uint32(18).string(m.sectionBody); + if (m.sourcesMetadata != null && m.sourcesMetadata.length) { + for (var i = 0; i < m.sourcesMetadata.length; ++i) + $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.encode(m.sourcesMetadata[i], w.uint32(26).fork()).ldelim(); + } + return w; + }; + + BotPlanningStepSectionMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sectionTitle = r.string(); + break; + } + case 2: { + m.sectionBody = r.string(); + break; + } + case 3: { + if (!(m.sourcesMetadata && m.sourcesMetadata.length)) + m.sourcesMetadata = []; + m.sourcesMetadata.push($root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPlanningStepSectionMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata) + return d; + var m = new $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata(); + if (d.sectionTitle != null) { + m.sectionTitle = String(d.sectionTitle); + } + if (d.sectionBody != null) { + m.sectionBody = String(d.sectionBody); + } + if (d.sourcesMetadata) { + if (!Array.isArray(d.sourcesMetadata)) + throw TypeError(".proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.sourcesMetadata: array expected"); + m.sourcesMetadata = []; + for (var i = 0; i < d.sourcesMetadata.length; ++i) { + if (typeof d.sourcesMetadata[i] !== "object") + throw TypeError(".proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.sourcesMetadata: object expected"); + m.sourcesMetadata[i] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.fromObject(d.sourcesMetadata[i]); + } + } + return m; + }; + + BotPlanningStepSectionMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.sourcesMetadata = []; + } + if (m.sectionTitle != null && m.hasOwnProperty("sectionTitle")) { + d.sectionTitle = m.sectionTitle; + if (o.oneofs) + d._sectionTitle = "sectionTitle"; + } + if (m.sectionBody != null && m.hasOwnProperty("sectionBody")) { + d.sectionBody = m.sectionBody; + if (o.oneofs) + d._sectionBody = "sectionBody"; + } + if (m.sourcesMetadata && m.sourcesMetadata.length) { + d.sourcesMetadata = []; + for (var j = 0; j < m.sourcesMetadata.length; ++j) { + d.sourcesMetadata[j] = $root.proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.toObject(m.sourcesMetadata[j], o); + } + } + return d; + }; + + BotPlanningStepSectionMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPlanningStepSectionMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata"; + }; + + return BotPlanningStepSectionMetadata; + })(); + + BotPlanningStepMetadata.BotSearchSourceProvider = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_PROVIDER"] = 0; + values[valuesById[1] = "OTHER"] = 1; + values[valuesById[2] = "GOOGLE"] = 2; + values[valuesById[3] = "BING"] = 3; + return values; + })(); + + BotPlanningStepMetadata.PlanningStepStatus = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "PLANNED"] = 1; + values[valuesById[2] = "EXECUTING"] = 2; + values[valuesById[3] = "FINISHED"] = 3; + return values; + })(); + + return BotPlanningStepMetadata; + })(); + + return BotProgressIndicatorMetadata; + })(); + + proto.BotPromotionMessageMetadata = (function() { + + function BotPromotionMessageMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPromotionMessageMetadata.prototype.promotionType = null; + BotPromotionMessageMetadata.prototype.buttonTitle = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPromotionMessageMetadata.prototype, "_promotionType", { + get: $util.oneOfGetter($oneOfFields = ["promotionType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPromotionMessageMetadata.prototype, "_buttonTitle", { + get: $util.oneOfGetter($oneOfFields = ["buttonTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotPromotionMessageMetadata.create = function create(properties) { + return new BotPromotionMessageMetadata(properties); + }; + + BotPromotionMessageMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.promotionType != null && Object.hasOwnProperty.call(m, "promotionType")) + w.uint32(8).int32(m.promotionType); + if (m.buttonTitle != null && Object.hasOwnProperty.call(m, "buttonTitle")) + w.uint32(18).string(m.buttonTitle); + return w; + }; + + BotPromotionMessageMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotPromotionMessageMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.promotionType = r.int32(); + break; + } + case 2: { + m.buttonTitle = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPromotionMessageMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotPromotionMessageMetadata) + return d; + var m = new $root.proto.BotPromotionMessageMetadata(); + switch (d.promotionType) { + default: + if (typeof d.promotionType === "number") { + m.promotionType = d.promotionType; + break; + } + break; + case "UNKNOWN_TYPE": + case 0: + m.promotionType = 0; + break; + case "C50": + case 1: + m.promotionType = 1; + break; + case "SURVEY_PLATFORM": + case 2: + m.promotionType = 2; + break; + } + if (d.buttonTitle != null) { + m.buttonTitle = String(d.buttonTitle); + } + return m; + }; + + BotPromotionMessageMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.promotionType != null && m.hasOwnProperty("promotionType")) { + d.promotionType = o.enums === String ? $root.proto.BotPromotionMessageMetadata.BotPromotionType[m.promotionType] === undefined ? m.promotionType : $root.proto.BotPromotionMessageMetadata.BotPromotionType[m.promotionType] : m.promotionType; + if (o.oneofs) + d._promotionType = "promotionType"; + } + if (m.buttonTitle != null && m.hasOwnProperty("buttonTitle")) { + d.buttonTitle = m.buttonTitle; + if (o.oneofs) + d._buttonTitle = "buttonTitle"; + } + return d; + }; + + BotPromotionMessageMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPromotionMessageMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotPromotionMessageMetadata"; + }; + + BotPromotionMessageMetadata.BotPromotionType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_TYPE"] = 0; + values[valuesById[1] = "C50"] = 1; + values[valuesById[2] = "SURVEY_PLATFORM"] = 2; + return values; + })(); + + return BotPromotionMessageMetadata; + })(); + + proto.BotPromptSuggestion = (function() { + + function BotPromptSuggestion(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPromptSuggestion.prototype.prompt = null; + BotPromptSuggestion.prototype.promptId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPromptSuggestion.prototype, "_prompt", { + get: $util.oneOfGetter($oneOfFields = ["prompt"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotPromptSuggestion.prototype, "_promptId", { + get: $util.oneOfGetter($oneOfFields = ["promptId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotPromptSuggestion.create = function create(properties) { + return new BotPromptSuggestion(properties); + }; + + BotPromptSuggestion.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.prompt != null && Object.hasOwnProperty.call(m, "prompt")) + w.uint32(10).string(m.prompt); + if (m.promptId != null && Object.hasOwnProperty.call(m, "promptId")) + w.uint32(18).string(m.promptId); + return w; + }; + + BotPromptSuggestion.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotPromptSuggestion(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.prompt = r.string(); + break; + } + case 2: { + m.promptId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPromptSuggestion.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotPromptSuggestion) + return d; + var m = new $root.proto.BotPromptSuggestion(); + if (d.prompt != null) { + m.prompt = String(d.prompt); + } + if (d.promptId != null) { + m.promptId = String(d.promptId); + } + return m; + }; + + BotPromptSuggestion.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.prompt != null && m.hasOwnProperty("prompt")) { + d.prompt = m.prompt; + if (o.oneofs) + d._prompt = "prompt"; + } + if (m.promptId != null && m.hasOwnProperty("promptId")) { + d.promptId = m.promptId; + if (o.oneofs) + d._promptId = "promptId"; + } + return d; + }; + + BotPromptSuggestion.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPromptSuggestion.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotPromptSuggestion"; + }; + + return BotPromptSuggestion; + })(); + + proto.BotPromptSuggestions = (function() { + + function BotPromptSuggestions(p) { + this.suggestions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotPromptSuggestions.prototype.suggestions = $util.emptyArray; + + BotPromptSuggestions.create = function create(properties) { + return new BotPromptSuggestions(properties); + }; + + BotPromptSuggestions.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.suggestions != null && m.suggestions.length) { + for (var i = 0; i < m.suggestions.length; ++i) + $root.proto.BotPromptSuggestion.encode(m.suggestions[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + BotPromptSuggestions.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotPromptSuggestions(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.suggestions && m.suggestions.length)) + m.suggestions = []; + m.suggestions.push($root.proto.BotPromptSuggestion.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotPromptSuggestions.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotPromptSuggestions) + return d; + var m = new $root.proto.BotPromptSuggestions(); + if (d.suggestions) { + if (!Array.isArray(d.suggestions)) + throw TypeError(".proto.BotPromptSuggestions.suggestions: array expected"); + m.suggestions = []; + for (var i = 0; i < d.suggestions.length; ++i) { + if (typeof d.suggestions[i] !== "object") + throw TypeError(".proto.BotPromptSuggestions.suggestions: object expected"); + m.suggestions[i] = $root.proto.BotPromptSuggestion.fromObject(d.suggestions[i]); + } + } + return m; + }; + + BotPromptSuggestions.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.suggestions = []; + } + if (m.suggestions && m.suggestions.length) { + d.suggestions = []; + for (var j = 0; j < m.suggestions.length; ++j) { + d.suggestions[j] = $root.proto.BotPromptSuggestion.toObject(m.suggestions[j], o); + } + } + return d; + }; + + BotPromptSuggestions.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotPromptSuggestions.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotPromptSuggestions"; + }; + + return BotPromptSuggestions; + })(); + + proto.BotQuotaMetadata = (function() { + + function BotQuotaMetadata(p) { + this.botFeatureQuotaMetadata = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotQuotaMetadata.prototype.botFeatureQuotaMetadata = $util.emptyArray; + + BotQuotaMetadata.create = function create(properties) { + return new BotQuotaMetadata(properties); + }; + + BotQuotaMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.botFeatureQuotaMetadata != null && m.botFeatureQuotaMetadata.length) { + for (var i = 0; i < m.botFeatureQuotaMetadata.length; ++i) + $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata.encode(m.botFeatureQuotaMetadata[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + BotQuotaMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotQuotaMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.botFeatureQuotaMetadata && m.botFeatureQuotaMetadata.length)) + m.botFeatureQuotaMetadata = []; + m.botFeatureQuotaMetadata.push($root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotQuotaMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotQuotaMetadata) + return d; + var m = new $root.proto.BotQuotaMetadata(); + if (d.botFeatureQuotaMetadata) { + if (!Array.isArray(d.botFeatureQuotaMetadata)) + throw TypeError(".proto.BotQuotaMetadata.botFeatureQuotaMetadata: array expected"); + m.botFeatureQuotaMetadata = []; + for (var i = 0; i < d.botFeatureQuotaMetadata.length; ++i) { + if (typeof d.botFeatureQuotaMetadata[i] !== "object") + throw TypeError(".proto.BotQuotaMetadata.botFeatureQuotaMetadata: object expected"); + m.botFeatureQuotaMetadata[i] = $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata.fromObject(d.botFeatureQuotaMetadata[i]); + } + } + return m; + }; + + BotQuotaMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.botFeatureQuotaMetadata = []; + } + if (m.botFeatureQuotaMetadata && m.botFeatureQuotaMetadata.length) { + d.botFeatureQuotaMetadata = []; + for (var j = 0; j < m.botFeatureQuotaMetadata.length; ++j) { + d.botFeatureQuotaMetadata[j] = $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata.toObject(m.botFeatureQuotaMetadata[j], o); + } + } + return d; + }; + + BotQuotaMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotQuotaMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotQuotaMetadata"; + }; + + BotQuotaMetadata.BotFeatureQuotaMetadata = (function() { + + function BotFeatureQuotaMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotFeatureQuotaMetadata.prototype.featureType = null; + BotFeatureQuotaMetadata.prototype.remainingQuota = null; + BotFeatureQuotaMetadata.prototype.expirationTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeatureQuotaMetadata.prototype, "_featureType", { + get: $util.oneOfGetter($oneOfFields = ["featureType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeatureQuotaMetadata.prototype, "_remainingQuota", { + get: $util.oneOfGetter($oneOfFields = ["remainingQuota"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotFeatureQuotaMetadata.prototype, "_expirationTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["expirationTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotFeatureQuotaMetadata.create = function create(properties) { + return new BotFeatureQuotaMetadata(properties); + }; + + BotFeatureQuotaMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.featureType != null && Object.hasOwnProperty.call(m, "featureType")) + w.uint32(8).int32(m.featureType); + if (m.remainingQuota != null && Object.hasOwnProperty.call(m, "remainingQuota")) + w.uint32(16).uint32(m.remainingQuota); + if (m.expirationTimestamp != null && Object.hasOwnProperty.call(m, "expirationTimestamp")) + w.uint32(24).uint64(m.expirationTimestamp); + return w; + }; + + BotFeatureQuotaMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.featureType = r.int32(); + break; + } + case 2: { + m.remainingQuota = r.uint32(); + break; + } + case 3: { + m.expirationTimestamp = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotFeatureQuotaMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata) + return d; + var m = new $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata(); + switch (d.featureType) { + default: + if (typeof d.featureType === "number") { + m.featureType = d.featureType; + break; + } + break; + case "UNKNOWN_FEATURE": + case 0: + m.featureType = 0; + break; + case "REASONING_FEATURE": + case 1: + m.featureType = 1; + break; + } + if (d.remainingQuota != null) { + m.remainingQuota = d.remainingQuota >>> 0; + } + if (d.expirationTimestamp != null) { + if ($util.Long) + (m.expirationTimestamp = $util.Long.fromValue(d.expirationTimestamp)).unsigned = true; + else if (typeof d.expirationTimestamp === "string") + m.expirationTimestamp = parseInt(d.expirationTimestamp, 10); + else if (typeof d.expirationTimestamp === "number") + m.expirationTimestamp = d.expirationTimestamp; + else if (typeof d.expirationTimestamp === "object") + m.expirationTimestamp = new $util.LongBits(d.expirationTimestamp.low >>> 0, d.expirationTimestamp.high >>> 0).toNumber(true); + } + return m; + }; + + BotFeatureQuotaMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.featureType != null && m.hasOwnProperty("featureType")) { + d.featureType = o.enums === String ? $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType[m.featureType] === undefined ? m.featureType : $root.proto.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType[m.featureType] : m.featureType; + if (o.oneofs) + d._featureType = "featureType"; + } + if (m.remainingQuota != null && m.hasOwnProperty("remainingQuota")) { + d.remainingQuota = m.remainingQuota; + if (o.oneofs) + d._remainingQuota = "remainingQuota"; + } + if (m.expirationTimestamp != null && m.hasOwnProperty("expirationTimestamp")) { + if (typeof m.expirationTimestamp === "number") + d.expirationTimestamp = o.longs === String ? String(m.expirationTimestamp) : m.expirationTimestamp; + else + d.expirationTimestamp = o.longs === String ? longToString(m.expirationTimestamp, true) : o.longs === Number ? longToNumber(m.expirationTimestamp, true) : m.expirationTimestamp; + if (o.oneofs) + d._expirationTimestamp = "expirationTimestamp"; + } + return d; + }; + + BotFeatureQuotaMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotFeatureQuotaMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotQuotaMetadata.BotFeatureQuotaMetadata"; + }; + + BotFeatureQuotaMetadata.BotFeatureType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_FEATURE"] = 0; + values[valuesById[1] = "REASONING_FEATURE"] = 1; + return values; + })(); + + return BotFeatureQuotaMetadata; + })(); + + return BotQuotaMetadata; + })(); + + proto.BotReminderMetadata = (function() { + + function BotReminderMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotReminderMetadata.prototype.requestMessageKey = null; + BotReminderMetadata.prototype.action = null; + BotReminderMetadata.prototype.name = null; + BotReminderMetadata.prototype.nextTriggerTimestamp = null; + BotReminderMetadata.prototype.frequency = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotReminderMetadata.prototype, "_requestMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["requestMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotReminderMetadata.prototype, "_action", { + get: $util.oneOfGetter($oneOfFields = ["action"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotReminderMetadata.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotReminderMetadata.prototype, "_nextTriggerTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["nextTriggerTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotReminderMetadata.prototype, "_frequency", { + get: $util.oneOfGetter($oneOfFields = ["frequency"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotReminderMetadata.create = function create(properties) { + return new BotReminderMetadata(properties); + }; + + BotReminderMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.requestMessageKey != null && Object.hasOwnProperty.call(m, "requestMessageKey")) + $root.proto.MessageKey.encode(m.requestMessageKey, w.uint32(10).fork()).ldelim(); + if (m.action != null && Object.hasOwnProperty.call(m, "action")) + w.uint32(16).int32(m.action); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(26).string(m.name); + if (m.nextTriggerTimestamp != null && Object.hasOwnProperty.call(m, "nextTriggerTimestamp")) + w.uint32(32).uint64(m.nextTriggerTimestamp); + if (m.frequency != null && Object.hasOwnProperty.call(m, "frequency")) + w.uint32(40).int32(m.frequency); + return w; + }; + + BotReminderMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotReminderMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.requestMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.action = r.int32(); + break; + } + case 3: { + m.name = r.string(); + break; + } + case 4: { + m.nextTriggerTimestamp = r.uint64(); + break; + } + case 5: { + m.frequency = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotReminderMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotReminderMetadata) + return d; + var m = new $root.proto.BotReminderMetadata(); + if (d.requestMessageKey != null) { + if (typeof d.requestMessageKey !== "object") + throw TypeError(".proto.BotReminderMetadata.requestMessageKey: object expected"); + m.requestMessageKey = $root.proto.MessageKey.fromObject(d.requestMessageKey); + } + switch (d.action) { + default: + if (typeof d.action === "number") { + m.action = d.action; + break; + } + break; + case "NOTIFY": + case 1: + m.action = 1; + break; + case "CREATE": + case 2: + m.action = 2; + break; + case "DELETE": + case 3: + m.action = 3; + break; + case "UPDATE": + case 4: + m.action = 4; + break; + } + if (d.name != null) { + m.name = String(d.name); + } + if (d.nextTriggerTimestamp != null) { + if ($util.Long) + (m.nextTriggerTimestamp = $util.Long.fromValue(d.nextTriggerTimestamp)).unsigned = true; + else if (typeof d.nextTriggerTimestamp === "string") + m.nextTriggerTimestamp = parseInt(d.nextTriggerTimestamp, 10); + else if (typeof d.nextTriggerTimestamp === "number") + m.nextTriggerTimestamp = d.nextTriggerTimestamp; + else if (typeof d.nextTriggerTimestamp === "object") + m.nextTriggerTimestamp = new $util.LongBits(d.nextTriggerTimestamp.low >>> 0, d.nextTriggerTimestamp.high >>> 0).toNumber(true); + } + switch (d.frequency) { + default: + if (typeof d.frequency === "number") { + m.frequency = d.frequency; + break; + } + break; + case "ONCE": + case 1: + m.frequency = 1; + break; + case "DAILY": + case 2: + m.frequency = 2; + break; + case "WEEKLY": + case 3: + m.frequency = 3; + break; + case "BIWEEKLY": + case 4: + m.frequency = 4; + break; + case "MONTHLY": + case 5: + m.frequency = 5; + break; + } + return m; + }; + + BotReminderMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.requestMessageKey != null && m.hasOwnProperty("requestMessageKey")) { + d.requestMessageKey = $root.proto.MessageKey.toObject(m.requestMessageKey, o); + if (o.oneofs) + d._requestMessageKey = "requestMessageKey"; + } + if (m.action != null && m.hasOwnProperty("action")) { + d.action = o.enums === String ? $root.proto.BotReminderMetadata.ReminderAction[m.action] === undefined ? m.action : $root.proto.BotReminderMetadata.ReminderAction[m.action] : m.action; + if (o.oneofs) + d._action = "action"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.nextTriggerTimestamp != null && m.hasOwnProperty("nextTriggerTimestamp")) { + if (typeof m.nextTriggerTimestamp === "number") + d.nextTriggerTimestamp = o.longs === String ? String(m.nextTriggerTimestamp) : m.nextTriggerTimestamp; + else + d.nextTriggerTimestamp = o.longs === String ? longToString(m.nextTriggerTimestamp, true) : o.longs === Number ? longToNumber(m.nextTriggerTimestamp, true) : m.nextTriggerTimestamp; + if (o.oneofs) + d._nextTriggerTimestamp = "nextTriggerTimestamp"; + } + if (m.frequency != null && m.hasOwnProperty("frequency")) { + d.frequency = o.enums === String ? $root.proto.BotReminderMetadata.ReminderFrequency[m.frequency] === undefined ? m.frequency : $root.proto.BotReminderMetadata.ReminderFrequency[m.frequency] : m.frequency; + if (o.oneofs) + d._frequency = "frequency"; + } + return d; + }; + + BotReminderMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotReminderMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotReminderMetadata"; + }; + + BotReminderMetadata.ReminderAction = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "NOTIFY"] = 1; + values[valuesById[2] = "CREATE"] = 2; + values[valuesById[3] = "DELETE"] = 3; + values[valuesById[4] = "UPDATE"] = 4; + return values; + })(); + + BotReminderMetadata.ReminderFrequency = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "ONCE"] = 1; + values[valuesById[2] = "DAILY"] = 2; + values[valuesById[3] = "WEEKLY"] = 3; + values[valuesById[4] = "BIWEEKLY"] = 4; + values[valuesById[5] = "MONTHLY"] = 5; + return values; + })(); + + return BotReminderMetadata; + })(); + + proto.BotRenderingMetadata = (function() { + + function BotRenderingMetadata(p) { + this.keywords = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotRenderingMetadata.prototype.keywords = $util.emptyArray; + + BotRenderingMetadata.create = function create(properties) { + return new BotRenderingMetadata(properties); + }; + + BotRenderingMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.keywords != null && m.keywords.length) { + for (var i = 0; i < m.keywords.length; ++i) + $root.proto.BotRenderingMetadata.Keyword.encode(m.keywords[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + BotRenderingMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotRenderingMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.keywords && m.keywords.length)) + m.keywords = []; + m.keywords.push($root.proto.BotRenderingMetadata.Keyword.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotRenderingMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotRenderingMetadata) + return d; + var m = new $root.proto.BotRenderingMetadata(); + if (d.keywords) { + if (!Array.isArray(d.keywords)) + throw TypeError(".proto.BotRenderingMetadata.keywords: array expected"); + m.keywords = []; + for (var i = 0; i < d.keywords.length; ++i) { + if (typeof d.keywords[i] !== "object") + throw TypeError(".proto.BotRenderingMetadata.keywords: object expected"); + m.keywords[i] = $root.proto.BotRenderingMetadata.Keyword.fromObject(d.keywords[i]); + } + } + return m; + }; + + BotRenderingMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.keywords = []; + } + if (m.keywords && m.keywords.length) { + d.keywords = []; + for (var j = 0; j < m.keywords.length; ++j) { + d.keywords[j] = $root.proto.BotRenderingMetadata.Keyword.toObject(m.keywords[j], o); + } + } + return d; + }; + + BotRenderingMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotRenderingMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotRenderingMetadata"; + }; + + BotRenderingMetadata.Keyword = (function() { + + function Keyword(p) { + this.associatedPrompts = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Keyword.prototype.value = null; + Keyword.prototype.associatedPrompts = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Keyword.prototype, "_value", { + get: $util.oneOfGetter($oneOfFields = ["value"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Keyword.create = function create(properties) { + return new Keyword(properties); + }; + + Keyword.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.value != null && Object.hasOwnProperty.call(m, "value")) + w.uint32(10).string(m.value); + if (m.associatedPrompts != null && m.associatedPrompts.length) { + for (var i = 0; i < m.associatedPrompts.length; ++i) + w.uint32(18).string(m.associatedPrompts[i]); + } + return w; + }; + + Keyword.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotRenderingMetadata.Keyword(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.value = r.string(); + break; + } + case 2: { + if (!(m.associatedPrompts && m.associatedPrompts.length)) + m.associatedPrompts = []; + m.associatedPrompts.push(r.string()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Keyword.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotRenderingMetadata.Keyword) + return d; + var m = new $root.proto.BotRenderingMetadata.Keyword(); + if (d.value != null) { + m.value = String(d.value); + } + if (d.associatedPrompts) { + if (!Array.isArray(d.associatedPrompts)) + throw TypeError(".proto.BotRenderingMetadata.Keyword.associatedPrompts: array expected"); + m.associatedPrompts = []; + for (var i = 0; i < d.associatedPrompts.length; ++i) { + m.associatedPrompts[i] = String(d.associatedPrompts[i]); + } + } + return m; + }; + + Keyword.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.associatedPrompts = []; + } + if (m.value != null && m.hasOwnProperty("value")) { + d.value = m.value; + if (o.oneofs) + d._value = "value"; + } + if (m.associatedPrompts && m.associatedPrompts.length) { + d.associatedPrompts = []; + for (var j = 0; j < m.associatedPrompts.length; ++j) { + d.associatedPrompts[j] = m.associatedPrompts[j]; + } + } + return d; + }; + + Keyword.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Keyword.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotRenderingMetadata.Keyword"; + }; + + return Keyword; + })(); + + return BotRenderingMetadata; + })(); + + proto.BotSessionMetadata = (function() { + + function BotSessionMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotSessionMetadata.prototype.sessionId = null; + BotSessionMetadata.prototype.sessionSource = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSessionMetadata.prototype, "_sessionId", { + get: $util.oneOfGetter($oneOfFields = ["sessionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSessionMetadata.prototype, "_sessionSource", { + get: $util.oneOfGetter($oneOfFields = ["sessionSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotSessionMetadata.create = function create(properties) { + return new BotSessionMetadata(properties); + }; + + BotSessionMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sessionId != null && Object.hasOwnProperty.call(m, "sessionId")) + w.uint32(10).string(m.sessionId); + if (m.sessionSource != null && Object.hasOwnProperty.call(m, "sessionSource")) + w.uint32(16).int32(m.sessionSource); + return w; + }; + + BotSessionMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotSessionMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sessionId = r.string(); + break; + } + case 2: { + m.sessionSource = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotSessionMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotSessionMetadata) + return d; + var m = new $root.proto.BotSessionMetadata(); + if (d.sessionId != null) { + m.sessionId = String(d.sessionId); + } + switch (d.sessionSource) { + default: + if (typeof d.sessionSource === "number") { + m.sessionSource = d.sessionSource; + break; + } + break; + case "NONE": + case 0: + m.sessionSource = 0; + break; + case "NULL_STATE": + case 1: + m.sessionSource = 1; + break; + case "TYPEAHEAD": + case 2: + m.sessionSource = 2; + break; + case "USER_INPUT": + case 3: + m.sessionSource = 3; + break; + case "EMU_FLASH": + case 4: + m.sessionSource = 4; + break; + case "EMU_FLASH_FOLLOWUP": + case 5: + m.sessionSource = 5; + break; + case "VOICE": + case 6: + m.sessionSource = 6; + break; + } + return m; + }; + + BotSessionMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.sessionId != null && m.hasOwnProperty("sessionId")) { + d.sessionId = m.sessionId; + if (o.oneofs) + d._sessionId = "sessionId"; + } + if (m.sessionSource != null && m.hasOwnProperty("sessionSource")) { + d.sessionSource = o.enums === String ? $root.proto.BotSessionSource[m.sessionSource] === undefined ? m.sessionSource : $root.proto.BotSessionSource[m.sessionSource] : m.sessionSource; + if (o.oneofs) + d._sessionSource = "sessionSource"; + } + return d; + }; + + BotSessionMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotSessionMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotSessionMetadata"; + }; + + return BotSessionMetadata; + })(); + + proto.BotSessionSource = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "NULL_STATE"] = 1; + values[valuesById[2] = "TYPEAHEAD"] = 2; + values[valuesById[3] = "USER_INPUT"] = 3; + values[valuesById[4] = "EMU_FLASH"] = 4; + values[valuesById[5] = "EMU_FLASH_FOLLOWUP"] = 5; + values[valuesById[6] = "VOICE"] = 6; + return values; + })(); + + proto.BotSignatureVerificationMetadata = (function() { + + function BotSignatureVerificationMetadata(p) { + this.proofs = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotSignatureVerificationMetadata.prototype.proofs = $util.emptyArray; + + BotSignatureVerificationMetadata.create = function create(properties) { + return new BotSignatureVerificationMetadata(properties); + }; + + BotSignatureVerificationMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.proofs != null && m.proofs.length) { + for (var i = 0; i < m.proofs.length; ++i) + $root.proto.BotSignatureVerificationUseCaseProof.encode(m.proofs[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + BotSignatureVerificationMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotSignatureVerificationMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.proofs && m.proofs.length)) + m.proofs = []; + m.proofs.push($root.proto.BotSignatureVerificationUseCaseProof.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotSignatureVerificationMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotSignatureVerificationMetadata) + return d; + var m = new $root.proto.BotSignatureVerificationMetadata(); + if (d.proofs) { + if (!Array.isArray(d.proofs)) + throw TypeError(".proto.BotSignatureVerificationMetadata.proofs: array expected"); + m.proofs = []; + for (var i = 0; i < d.proofs.length; ++i) { + if (typeof d.proofs[i] !== "object") + throw TypeError(".proto.BotSignatureVerificationMetadata.proofs: object expected"); + m.proofs[i] = $root.proto.BotSignatureVerificationUseCaseProof.fromObject(d.proofs[i]); + } + } + return m; + }; + + BotSignatureVerificationMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.proofs = []; + } + if (m.proofs && m.proofs.length) { + d.proofs = []; + for (var j = 0; j < m.proofs.length; ++j) { + d.proofs[j] = $root.proto.BotSignatureVerificationUseCaseProof.toObject(m.proofs[j], o); + } + } + return d; + }; + + BotSignatureVerificationMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotSignatureVerificationMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotSignatureVerificationMetadata"; + }; + + return BotSignatureVerificationMetadata; + })(); + + proto.BotSignatureVerificationUseCaseProof = (function() { + + function BotSignatureVerificationUseCaseProof(p) { + this.certificateChain = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotSignatureVerificationUseCaseProof.prototype.version = null; + BotSignatureVerificationUseCaseProof.prototype.useCase = null; + BotSignatureVerificationUseCaseProof.prototype.signature = null; + BotSignatureVerificationUseCaseProof.prototype.certificateChain = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSignatureVerificationUseCaseProof.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSignatureVerificationUseCaseProof.prototype, "_useCase", { + get: $util.oneOfGetter($oneOfFields = ["useCase"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSignatureVerificationUseCaseProof.prototype, "_signature", { + get: $util.oneOfGetter($oneOfFields = ["signature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotSignatureVerificationUseCaseProof.create = function create(properties) { + return new BotSignatureVerificationUseCaseProof(properties); + }; + + BotSignatureVerificationUseCaseProof.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(8).int32(m.version); + if (m.useCase != null && Object.hasOwnProperty.call(m, "useCase")) + w.uint32(16).int32(m.useCase); + if (m.signature != null && Object.hasOwnProperty.call(m, "signature")) + w.uint32(26).bytes(m.signature); + if (m.certificateChain != null && m.certificateChain.length) { + for (var i = 0; i < m.certificateChain.length; ++i) + w.uint32(34).bytes(m.certificateChain[i]); + } + return w; + }; + + BotSignatureVerificationUseCaseProof.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotSignatureVerificationUseCaseProof(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.version = r.int32(); + break; + } + case 2: { + m.useCase = r.int32(); + break; + } + case 3: { + m.signature = r.bytes(); + break; + } + case 4: { + if (!(m.certificateChain && m.certificateChain.length)) + m.certificateChain = []; + m.certificateChain.push(r.bytes()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotSignatureVerificationUseCaseProof.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotSignatureVerificationUseCaseProof) + return d; + var m = new $root.proto.BotSignatureVerificationUseCaseProof(); + if (d.version != null) { + m.version = d.version | 0; + } + switch (d.useCase) { + default: + if (typeof d.useCase === "number") { + m.useCase = d.useCase; + break; + } + break; + case "UNSPECIFIED": + case 0: + m.useCase = 0; + break; + case "WA_BOT_MSG": + case 1: + m.useCase = 1; + break; + } + if (d.signature != null) { + if (typeof d.signature === "string") + $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0); + else if (d.signature.length >= 0) + m.signature = d.signature; + } + if (d.certificateChain) { + if (!Array.isArray(d.certificateChain)) + throw TypeError(".proto.BotSignatureVerificationUseCaseProof.certificateChain: array expected"); + m.certificateChain = []; + for (var i = 0; i < d.certificateChain.length; ++i) { + if (typeof d.certificateChain[i] === "string") + $util.base64.decode(d.certificateChain[i], m.certificateChain[i] = $util.newBuffer($util.base64.length(d.certificateChain[i])), 0); + else if (d.certificateChain[i].length >= 0) + m.certificateChain[i] = d.certificateChain[i]; + } + } + return m; + }; + + BotSignatureVerificationUseCaseProof.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.certificateChain = []; + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = m.version; + if (o.oneofs) + d._version = "version"; + } + if (m.useCase != null && m.hasOwnProperty("useCase")) { + d.useCase = o.enums === String ? $root.proto.BotSignatureVerificationUseCaseProof.BotSignatureUseCase[m.useCase] === undefined ? m.useCase : $root.proto.BotSignatureVerificationUseCaseProof.BotSignatureUseCase[m.useCase] : m.useCase; + if (o.oneofs) + d._useCase = "useCase"; + } + if (m.signature != null && m.hasOwnProperty("signature")) { + d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature; + if (o.oneofs) + d._signature = "signature"; + } + if (m.certificateChain && m.certificateChain.length) { + d.certificateChain = []; + for (var j = 0; j < m.certificateChain.length; ++j) { + d.certificateChain[j] = o.bytes === String ? $util.base64.encode(m.certificateChain[j], 0, m.certificateChain[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.certificateChain[j]) : m.certificateChain[j]; + } + } + return d; + }; + + BotSignatureVerificationUseCaseProof.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotSignatureVerificationUseCaseProof.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotSignatureVerificationUseCaseProof"; + }; + + BotSignatureVerificationUseCaseProof.BotSignatureUseCase = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNSPECIFIED"] = 0; + values[valuesById[1] = "WA_BOT_MSG"] = 1; + return values; + })(); + + return BotSignatureVerificationUseCaseProof; + })(); + + proto.BotSourcesMetadata = (function() { + + function BotSourcesMetadata(p) { + this.sources = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotSourcesMetadata.prototype.sources = $util.emptyArray; + + BotSourcesMetadata.create = function create(properties) { + return new BotSourcesMetadata(properties); + }; + + BotSourcesMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sources != null && m.sources.length) { + for (var i = 0; i < m.sources.length; ++i) + $root.proto.BotSourcesMetadata.BotSourceItem.encode(m.sources[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + BotSourcesMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotSourcesMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.sources && m.sources.length)) + m.sources = []; + m.sources.push($root.proto.BotSourcesMetadata.BotSourceItem.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotSourcesMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotSourcesMetadata) + return d; + var m = new $root.proto.BotSourcesMetadata(); + if (d.sources) { + if (!Array.isArray(d.sources)) + throw TypeError(".proto.BotSourcesMetadata.sources: array expected"); + m.sources = []; + for (var i = 0; i < d.sources.length; ++i) { + if (typeof d.sources[i] !== "object") + throw TypeError(".proto.BotSourcesMetadata.sources: object expected"); + m.sources[i] = $root.proto.BotSourcesMetadata.BotSourceItem.fromObject(d.sources[i]); + } + } + return m; + }; + + BotSourcesMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.sources = []; + } + if (m.sources && m.sources.length) { + d.sources = []; + for (var j = 0; j < m.sources.length; ++j) { + d.sources[j] = $root.proto.BotSourcesMetadata.BotSourceItem.toObject(m.sources[j], o); + } + } + return d; + }; + + BotSourcesMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotSourcesMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotSourcesMetadata"; + }; + + BotSourcesMetadata.BotSourceItem = (function() { + + function BotSourceItem(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotSourceItem.prototype.provider = null; + BotSourceItem.prototype.thumbnailCdnUrl = null; + BotSourceItem.prototype.sourceProviderUrl = null; + BotSourceItem.prototype.sourceQuery = null; + BotSourceItem.prototype.faviconCdnUrl = null; + BotSourceItem.prototype.citationNumber = null; + BotSourceItem.prototype.sourceTitle = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSourceItem.prototype, "_provider", { + get: $util.oneOfGetter($oneOfFields = ["provider"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSourceItem.prototype, "_thumbnailCdnUrl", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailCdnUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSourceItem.prototype, "_sourceProviderUrl", { + get: $util.oneOfGetter($oneOfFields = ["sourceProviderUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSourceItem.prototype, "_sourceQuery", { + get: $util.oneOfGetter($oneOfFields = ["sourceQuery"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSourceItem.prototype, "_faviconCdnUrl", { + get: $util.oneOfGetter($oneOfFields = ["faviconCdnUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSourceItem.prototype, "_citationNumber", { + get: $util.oneOfGetter($oneOfFields = ["citationNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSourceItem.prototype, "_sourceTitle", { + get: $util.oneOfGetter($oneOfFields = ["sourceTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotSourceItem.create = function create(properties) { + return new BotSourceItem(properties); + }; + + BotSourceItem.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.provider != null && Object.hasOwnProperty.call(m, "provider")) + w.uint32(8).int32(m.provider); + if (m.thumbnailCdnUrl != null && Object.hasOwnProperty.call(m, "thumbnailCdnUrl")) + w.uint32(18).string(m.thumbnailCdnUrl); + if (m.sourceProviderUrl != null && Object.hasOwnProperty.call(m, "sourceProviderUrl")) + w.uint32(26).string(m.sourceProviderUrl); + if (m.sourceQuery != null && Object.hasOwnProperty.call(m, "sourceQuery")) + w.uint32(34).string(m.sourceQuery); + if (m.faviconCdnUrl != null && Object.hasOwnProperty.call(m, "faviconCdnUrl")) + w.uint32(42).string(m.faviconCdnUrl); + if (m.citationNumber != null && Object.hasOwnProperty.call(m, "citationNumber")) + w.uint32(48).uint32(m.citationNumber); + if (m.sourceTitle != null && Object.hasOwnProperty.call(m, "sourceTitle")) + w.uint32(58).string(m.sourceTitle); + return w; + }; + + BotSourceItem.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotSourcesMetadata.BotSourceItem(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.provider = r.int32(); + break; + } + case 2: { + m.thumbnailCdnUrl = r.string(); + break; + } + case 3: { + m.sourceProviderUrl = r.string(); + break; + } + case 4: { + m.sourceQuery = r.string(); + break; + } + case 5: { + m.faviconCdnUrl = r.string(); + break; + } + case 6: { + m.citationNumber = r.uint32(); + break; + } + case 7: { + m.sourceTitle = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotSourceItem.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotSourcesMetadata.BotSourceItem) + return d; + var m = new $root.proto.BotSourcesMetadata.BotSourceItem(); + switch (d.provider) { + default: + if (typeof d.provider === "number") { + m.provider = d.provider; + break; + } + break; + case "UNKNOWN": + case 0: + m.provider = 0; + break; + case "BING": + case 1: + m.provider = 1; + break; + case "GOOGLE": + case 2: + m.provider = 2; + break; + case "SUPPORT": + case 3: + m.provider = 3; + break; + case "OTHER": + case 4: + m.provider = 4; + break; + } + if (d.thumbnailCdnUrl != null) { + m.thumbnailCdnUrl = String(d.thumbnailCdnUrl); + } + if (d.sourceProviderUrl != null) { + m.sourceProviderUrl = String(d.sourceProviderUrl); + } + if (d.sourceQuery != null) { + m.sourceQuery = String(d.sourceQuery); + } + if (d.faviconCdnUrl != null) { + m.faviconCdnUrl = String(d.faviconCdnUrl); + } + if (d.citationNumber != null) { + m.citationNumber = d.citationNumber >>> 0; + } + if (d.sourceTitle != null) { + m.sourceTitle = String(d.sourceTitle); + } + return m; + }; + + BotSourceItem.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.provider != null && m.hasOwnProperty("provider")) { + d.provider = o.enums === String ? $root.proto.BotSourcesMetadata.BotSourceItem.SourceProvider[m.provider] === undefined ? m.provider : $root.proto.BotSourcesMetadata.BotSourceItem.SourceProvider[m.provider] : m.provider; + if (o.oneofs) + d._provider = "provider"; + } + if (m.thumbnailCdnUrl != null && m.hasOwnProperty("thumbnailCdnUrl")) { + d.thumbnailCdnUrl = m.thumbnailCdnUrl; + if (o.oneofs) + d._thumbnailCdnUrl = "thumbnailCdnUrl"; + } + if (m.sourceProviderUrl != null && m.hasOwnProperty("sourceProviderUrl")) { + d.sourceProviderUrl = m.sourceProviderUrl; + if (o.oneofs) + d._sourceProviderUrl = "sourceProviderUrl"; + } + if (m.sourceQuery != null && m.hasOwnProperty("sourceQuery")) { + d.sourceQuery = m.sourceQuery; + if (o.oneofs) + d._sourceQuery = "sourceQuery"; + } + if (m.faviconCdnUrl != null && m.hasOwnProperty("faviconCdnUrl")) { + d.faviconCdnUrl = m.faviconCdnUrl; + if (o.oneofs) + d._faviconCdnUrl = "faviconCdnUrl"; + } + if (m.citationNumber != null && m.hasOwnProperty("citationNumber")) { + d.citationNumber = m.citationNumber; + if (o.oneofs) + d._citationNumber = "citationNumber"; + } + if (m.sourceTitle != null && m.hasOwnProperty("sourceTitle")) { + d.sourceTitle = m.sourceTitle; + if (o.oneofs) + d._sourceTitle = "sourceTitle"; + } + return d; + }; + + BotSourceItem.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotSourceItem.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotSourcesMetadata.BotSourceItem"; + }; + + BotSourceItem.SourceProvider = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "BING"] = 1; + values[valuesById[2] = "GOOGLE"] = 2; + values[valuesById[3] = "SUPPORT"] = 3; + values[valuesById[4] = "OTHER"] = 4; + return values; + })(); + + return BotSourceItem; + })(); + + return BotSourcesMetadata; + })(); + + proto.BotSuggestedPromptMetadata = (function() { + + function BotSuggestedPromptMetadata(p) { + this.suggestedPrompts = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotSuggestedPromptMetadata.prototype.suggestedPrompts = $util.emptyArray; + BotSuggestedPromptMetadata.prototype.selectedPromptIndex = null; + BotSuggestedPromptMetadata.prototype.promptSuggestions = null; + BotSuggestedPromptMetadata.prototype.selectedPromptId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSuggestedPromptMetadata.prototype, "_selectedPromptIndex", { + get: $util.oneOfGetter($oneOfFields = ["selectedPromptIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSuggestedPromptMetadata.prototype, "_promptSuggestions", { + get: $util.oneOfGetter($oneOfFields = ["promptSuggestions"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotSuggestedPromptMetadata.prototype, "_selectedPromptId", { + get: $util.oneOfGetter($oneOfFields = ["selectedPromptId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotSuggestedPromptMetadata.create = function create(properties) { + return new BotSuggestedPromptMetadata(properties); + }; + + BotSuggestedPromptMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.suggestedPrompts != null && m.suggestedPrompts.length) { + for (var i = 0; i < m.suggestedPrompts.length; ++i) + w.uint32(10).string(m.suggestedPrompts[i]); + } + if (m.selectedPromptIndex != null && Object.hasOwnProperty.call(m, "selectedPromptIndex")) + w.uint32(16).uint32(m.selectedPromptIndex); + if (m.promptSuggestions != null && Object.hasOwnProperty.call(m, "promptSuggestions")) + $root.proto.BotPromptSuggestions.encode(m.promptSuggestions, w.uint32(26).fork()).ldelim(); + if (m.selectedPromptId != null && Object.hasOwnProperty.call(m, "selectedPromptId")) + w.uint32(34).string(m.selectedPromptId); + return w; + }; + + BotSuggestedPromptMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotSuggestedPromptMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.suggestedPrompts && m.suggestedPrompts.length)) + m.suggestedPrompts = []; + m.suggestedPrompts.push(r.string()); + break; + } + case 2: { + m.selectedPromptIndex = r.uint32(); + break; + } + case 3: { + m.promptSuggestions = $root.proto.BotPromptSuggestions.decode(r, r.uint32()); + break; + } + case 4: { + m.selectedPromptId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotSuggestedPromptMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotSuggestedPromptMetadata) + return d; + var m = new $root.proto.BotSuggestedPromptMetadata(); + if (d.suggestedPrompts) { + if (!Array.isArray(d.suggestedPrompts)) + throw TypeError(".proto.BotSuggestedPromptMetadata.suggestedPrompts: array expected"); + m.suggestedPrompts = []; + for (var i = 0; i < d.suggestedPrompts.length; ++i) { + m.suggestedPrompts[i] = String(d.suggestedPrompts[i]); + } + } + if (d.selectedPromptIndex != null) { + m.selectedPromptIndex = d.selectedPromptIndex >>> 0; + } + if (d.promptSuggestions != null) { + if (typeof d.promptSuggestions !== "object") + throw TypeError(".proto.BotSuggestedPromptMetadata.promptSuggestions: object expected"); + m.promptSuggestions = $root.proto.BotPromptSuggestions.fromObject(d.promptSuggestions); + } + if (d.selectedPromptId != null) { + m.selectedPromptId = String(d.selectedPromptId); + } + return m; + }; + + BotSuggestedPromptMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.suggestedPrompts = []; + } + if (m.suggestedPrompts && m.suggestedPrompts.length) { + d.suggestedPrompts = []; + for (var j = 0; j < m.suggestedPrompts.length; ++j) { + d.suggestedPrompts[j] = m.suggestedPrompts[j]; + } + } + if (m.selectedPromptIndex != null && m.hasOwnProperty("selectedPromptIndex")) { + d.selectedPromptIndex = m.selectedPromptIndex; + if (o.oneofs) + d._selectedPromptIndex = "selectedPromptIndex"; + } + if (m.promptSuggestions != null && m.hasOwnProperty("promptSuggestions")) { + d.promptSuggestions = $root.proto.BotPromptSuggestions.toObject(m.promptSuggestions, o); + if (o.oneofs) + d._promptSuggestions = "promptSuggestions"; + } + if (m.selectedPromptId != null && m.hasOwnProperty("selectedPromptId")) { + d.selectedPromptId = m.selectedPromptId; + if (o.oneofs) + d._selectedPromptId = "selectedPromptId"; + } + return d; + }; + + BotSuggestedPromptMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotSuggestedPromptMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotSuggestedPromptMetadata"; + }; + + return BotSuggestedPromptMetadata; + })(); + + proto.BotUnifiedResponseMutation = (function() { + + function BotUnifiedResponseMutation(p) { + this.mediaDetailsMetadataList = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotUnifiedResponseMutation.prototype.sbsMetadata = null; + BotUnifiedResponseMutation.prototype.mediaDetailsMetadataList = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotUnifiedResponseMutation.prototype, "_sbsMetadata", { + get: $util.oneOfGetter($oneOfFields = ["sbsMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotUnifiedResponseMutation.create = function create(properties) { + return new BotUnifiedResponseMutation(properties); + }; + + BotUnifiedResponseMutation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sbsMetadata != null && Object.hasOwnProperty.call(m, "sbsMetadata")) + $root.proto.BotUnifiedResponseMutation.SideBySideMetadata.encode(m.sbsMetadata, w.uint32(10).fork()).ldelim(); + if (m.mediaDetailsMetadataList != null && m.mediaDetailsMetadataList.length) { + for (var i = 0; i < m.mediaDetailsMetadataList.length; ++i) + $root.proto.BotUnifiedResponseMutation.MediaDetailsMetadata.encode(m.mediaDetailsMetadataList[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + BotUnifiedResponseMutation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotUnifiedResponseMutation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sbsMetadata = $root.proto.BotUnifiedResponseMutation.SideBySideMetadata.decode(r, r.uint32()); + break; + } + case 2: { + if (!(m.mediaDetailsMetadataList && m.mediaDetailsMetadataList.length)) + m.mediaDetailsMetadataList = []; + m.mediaDetailsMetadataList.push($root.proto.BotUnifiedResponseMutation.MediaDetailsMetadata.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotUnifiedResponseMutation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotUnifiedResponseMutation) + return d; + var m = new $root.proto.BotUnifiedResponseMutation(); + if (d.sbsMetadata != null) { + if (typeof d.sbsMetadata !== "object") + throw TypeError(".proto.BotUnifiedResponseMutation.sbsMetadata: object expected"); + m.sbsMetadata = $root.proto.BotUnifiedResponseMutation.SideBySideMetadata.fromObject(d.sbsMetadata); + } + if (d.mediaDetailsMetadataList) { + if (!Array.isArray(d.mediaDetailsMetadataList)) + throw TypeError(".proto.BotUnifiedResponseMutation.mediaDetailsMetadataList: array expected"); + m.mediaDetailsMetadataList = []; + for (var i = 0; i < d.mediaDetailsMetadataList.length; ++i) { + if (typeof d.mediaDetailsMetadataList[i] !== "object") + throw TypeError(".proto.BotUnifiedResponseMutation.mediaDetailsMetadataList: object expected"); + m.mediaDetailsMetadataList[i] = $root.proto.BotUnifiedResponseMutation.MediaDetailsMetadata.fromObject(d.mediaDetailsMetadataList[i]); + } + } + return m; + }; + + BotUnifiedResponseMutation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.mediaDetailsMetadataList = []; + } + if (m.sbsMetadata != null && m.hasOwnProperty("sbsMetadata")) { + d.sbsMetadata = $root.proto.BotUnifiedResponseMutation.SideBySideMetadata.toObject(m.sbsMetadata, o); + if (o.oneofs) + d._sbsMetadata = "sbsMetadata"; + } + if (m.mediaDetailsMetadataList && m.mediaDetailsMetadataList.length) { + d.mediaDetailsMetadataList = []; + for (var j = 0; j < m.mediaDetailsMetadataList.length; ++j) { + d.mediaDetailsMetadataList[j] = $root.proto.BotUnifiedResponseMutation.MediaDetailsMetadata.toObject(m.mediaDetailsMetadataList[j], o); + } + } + return d; + }; + + BotUnifiedResponseMutation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotUnifiedResponseMutation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotUnifiedResponseMutation"; + }; + + BotUnifiedResponseMutation.MediaDetailsMetadata = (function() { + + function MediaDetailsMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MediaDetailsMetadata.prototype.id = null; + MediaDetailsMetadata.prototype.highResMedia = null; + MediaDetailsMetadata.prototype.previewMedia = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaDetailsMetadata.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaDetailsMetadata.prototype, "_highResMedia", { + get: $util.oneOfGetter($oneOfFields = ["highResMedia"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaDetailsMetadata.prototype, "_previewMedia", { + get: $util.oneOfGetter($oneOfFields = ["previewMedia"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MediaDetailsMetadata.create = function create(properties) { + return new MediaDetailsMetadata(properties); + }; + + MediaDetailsMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(10).string(m.id); + if (m.highResMedia != null && Object.hasOwnProperty.call(m, "highResMedia")) + $root.proto.BotMediaMetadata.encode(m.highResMedia, w.uint32(18).fork()).ldelim(); + if (m.previewMedia != null && Object.hasOwnProperty.call(m, "previewMedia")) + $root.proto.BotMediaMetadata.encode(m.previewMedia, w.uint32(26).fork()).ldelim(); + return w; + }; + + MediaDetailsMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotUnifiedResponseMutation.MediaDetailsMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.string(); + break; + } + case 2: { + m.highResMedia = $root.proto.BotMediaMetadata.decode(r, r.uint32()); + break; + } + case 3: { + m.previewMedia = $root.proto.BotMediaMetadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MediaDetailsMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotUnifiedResponseMutation.MediaDetailsMetadata) + return d; + var m = new $root.proto.BotUnifiedResponseMutation.MediaDetailsMetadata(); + if (d.id != null) { + m.id = String(d.id); + } + if (d.highResMedia != null) { + if (typeof d.highResMedia !== "object") + throw TypeError(".proto.BotUnifiedResponseMutation.MediaDetailsMetadata.highResMedia: object expected"); + m.highResMedia = $root.proto.BotMediaMetadata.fromObject(d.highResMedia); + } + if (d.previewMedia != null) { + if (typeof d.previewMedia !== "object") + throw TypeError(".proto.BotUnifiedResponseMutation.MediaDetailsMetadata.previewMedia: object expected"); + m.previewMedia = $root.proto.BotMediaMetadata.fromObject(d.previewMedia); + } + return m; + }; + + MediaDetailsMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.highResMedia != null && m.hasOwnProperty("highResMedia")) { + d.highResMedia = $root.proto.BotMediaMetadata.toObject(m.highResMedia, o); + if (o.oneofs) + d._highResMedia = "highResMedia"; + } + if (m.previewMedia != null && m.hasOwnProperty("previewMedia")) { + d.previewMedia = $root.proto.BotMediaMetadata.toObject(m.previewMedia, o); + if (o.oneofs) + d._previewMedia = "previewMedia"; + } + return d; + }; + + MediaDetailsMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MediaDetailsMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotUnifiedResponseMutation.MediaDetailsMetadata"; + }; + + return MediaDetailsMetadata; + })(); + + BotUnifiedResponseMutation.SideBySideMetadata = (function() { + + function SideBySideMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SideBySideMetadata.prototype.primaryResponseId = null; + SideBySideMetadata.prototype.surveyCtaHasRendered = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideMetadata.prototype, "_primaryResponseId", { + get: $util.oneOfGetter($oneOfFields = ["primaryResponseId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SideBySideMetadata.prototype, "_surveyCtaHasRendered", { + get: $util.oneOfGetter($oneOfFields = ["surveyCtaHasRendered"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SideBySideMetadata.create = function create(properties) { + return new SideBySideMetadata(properties); + }; + + SideBySideMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.primaryResponseId != null && Object.hasOwnProperty.call(m, "primaryResponseId")) + w.uint32(10).string(m.primaryResponseId); + if (m.surveyCtaHasRendered != null && Object.hasOwnProperty.call(m, "surveyCtaHasRendered")) + w.uint32(16).bool(m.surveyCtaHasRendered); + return w; + }; + + SideBySideMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.BotUnifiedResponseMutation.SideBySideMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.primaryResponseId = r.string(); + break; + } + case 2: { + m.surveyCtaHasRendered = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SideBySideMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.BotUnifiedResponseMutation.SideBySideMetadata) + return d; + var m = new $root.proto.BotUnifiedResponseMutation.SideBySideMetadata(); + if (d.primaryResponseId != null) { + m.primaryResponseId = String(d.primaryResponseId); + } + if (d.surveyCtaHasRendered != null) { + m.surveyCtaHasRendered = Boolean(d.surveyCtaHasRendered); + } + return m; + }; + + SideBySideMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.primaryResponseId != null && m.hasOwnProperty("primaryResponseId")) { + d.primaryResponseId = m.primaryResponseId; + if (o.oneofs) + d._primaryResponseId = "primaryResponseId"; + } + if (m.surveyCtaHasRendered != null && m.hasOwnProperty("surveyCtaHasRendered")) { + d.surveyCtaHasRendered = m.surveyCtaHasRendered; + if (o.oneofs) + d._surveyCtaHasRendered = "surveyCtaHasRendered"; + } + return d; + }; + + SideBySideMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SideBySideMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.BotUnifiedResponseMutation.SideBySideMetadata"; + }; + + return SideBySideMetadata; + })(); + + return BotUnifiedResponseMutation; + })(); + + proto.CallLogRecord = (function() { + + function CallLogRecord(p) { + this.participants = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CallLogRecord.prototype.callResult = null; + CallLogRecord.prototype.isDndMode = null; + CallLogRecord.prototype.silenceReason = null; + CallLogRecord.prototype.duration = null; + CallLogRecord.prototype.startTime = null; + CallLogRecord.prototype.isIncoming = null; + CallLogRecord.prototype.isVideo = null; + CallLogRecord.prototype.isCallLink = null; + CallLogRecord.prototype.callLinkToken = null; + CallLogRecord.prototype.scheduledCallId = null; + CallLogRecord.prototype.callId = null; + CallLogRecord.prototype.callCreatorJid = null; + CallLogRecord.prototype.groupJid = null; + CallLogRecord.prototype.participants = $util.emptyArray; + CallLogRecord.prototype.callType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_callResult", { + get: $util.oneOfGetter($oneOfFields = ["callResult"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_isDndMode", { + get: $util.oneOfGetter($oneOfFields = ["isDndMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_silenceReason", { + get: $util.oneOfGetter($oneOfFields = ["silenceReason"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_duration", { + get: $util.oneOfGetter($oneOfFields = ["duration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_startTime", { + get: $util.oneOfGetter($oneOfFields = ["startTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_isIncoming", { + get: $util.oneOfGetter($oneOfFields = ["isIncoming"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_isVideo", { + get: $util.oneOfGetter($oneOfFields = ["isVideo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_isCallLink", { + get: $util.oneOfGetter($oneOfFields = ["isCallLink"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_callLinkToken", { + get: $util.oneOfGetter($oneOfFields = ["callLinkToken"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_scheduledCallId", { + get: $util.oneOfGetter($oneOfFields = ["scheduledCallId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_callId", { + get: $util.oneOfGetter($oneOfFields = ["callId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_callCreatorJid", { + get: $util.oneOfGetter($oneOfFields = ["callCreatorJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_groupJid", { + get: $util.oneOfGetter($oneOfFields = ["groupJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogRecord.prototype, "_callType", { + get: $util.oneOfGetter($oneOfFields = ["callType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CallLogRecord.create = function create(properties) { + return new CallLogRecord(properties); + }; + + CallLogRecord.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.callResult != null && Object.hasOwnProperty.call(m, "callResult")) + w.uint32(8).int32(m.callResult); + if (m.isDndMode != null && Object.hasOwnProperty.call(m, "isDndMode")) + w.uint32(16).bool(m.isDndMode); + if (m.silenceReason != null && Object.hasOwnProperty.call(m, "silenceReason")) + w.uint32(24).int32(m.silenceReason); + if (m.duration != null && Object.hasOwnProperty.call(m, "duration")) + w.uint32(32).int64(m.duration); + if (m.startTime != null && Object.hasOwnProperty.call(m, "startTime")) + w.uint32(40).int64(m.startTime); + if (m.isIncoming != null && Object.hasOwnProperty.call(m, "isIncoming")) + w.uint32(48).bool(m.isIncoming); + if (m.isVideo != null && Object.hasOwnProperty.call(m, "isVideo")) + w.uint32(56).bool(m.isVideo); + if (m.isCallLink != null && Object.hasOwnProperty.call(m, "isCallLink")) + w.uint32(64).bool(m.isCallLink); + if (m.callLinkToken != null && Object.hasOwnProperty.call(m, "callLinkToken")) + w.uint32(74).string(m.callLinkToken); + if (m.scheduledCallId != null && Object.hasOwnProperty.call(m, "scheduledCallId")) + w.uint32(82).string(m.scheduledCallId); + if (m.callId != null && Object.hasOwnProperty.call(m, "callId")) + w.uint32(90).string(m.callId); + if (m.callCreatorJid != null && Object.hasOwnProperty.call(m, "callCreatorJid")) + w.uint32(98).string(m.callCreatorJid); + if (m.groupJid != null && Object.hasOwnProperty.call(m, "groupJid")) + w.uint32(106).string(m.groupJid); + if (m.participants != null && m.participants.length) { + for (var i = 0; i < m.participants.length; ++i) + $root.proto.CallLogRecord.ParticipantInfo.encode(m.participants[i], w.uint32(114).fork()).ldelim(); + } + if (m.callType != null && Object.hasOwnProperty.call(m, "callType")) + w.uint32(120).int32(m.callType); + return w; + }; + + CallLogRecord.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CallLogRecord(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.callResult = r.int32(); + break; + } + case 2: { + m.isDndMode = r.bool(); + break; + } + case 3: { + m.silenceReason = r.int32(); + break; + } + case 4: { + m.duration = r.int64(); + break; + } + case 5: { + m.startTime = r.int64(); + break; + } + case 6: { + m.isIncoming = r.bool(); + break; + } + case 7: { + m.isVideo = r.bool(); + break; + } + case 8: { + m.isCallLink = r.bool(); + break; + } + case 9: { + m.callLinkToken = r.string(); + break; + } + case 10: { + m.scheduledCallId = r.string(); + break; + } + case 11: { + m.callId = r.string(); + break; + } + case 12: { + m.callCreatorJid = r.string(); + break; + } + case 13: { + m.groupJid = r.string(); + break; + } + case 14: { + if (!(m.participants && m.participants.length)) + m.participants = []; + m.participants.push($root.proto.CallLogRecord.ParticipantInfo.decode(r, r.uint32())); + break; + } + case 15: { + m.callType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CallLogRecord.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CallLogRecord) + return d; + var m = new $root.proto.CallLogRecord(); + switch (d.callResult) { + default: + if (typeof d.callResult === "number") { + m.callResult = d.callResult; + break; + } + break; + case "CONNECTED": + case 0: + m.callResult = 0; + break; + case "REJECTED": + case 1: + m.callResult = 1; + break; + case "CANCELLED": + case 2: + m.callResult = 2; + break; + case "ACCEPTEDELSEWHERE": + case 3: + m.callResult = 3; + break; + case "MISSED": + case 4: + m.callResult = 4; + break; + case "INVALID": + case 5: + m.callResult = 5; + break; + case "UNAVAILABLE": + case 6: + m.callResult = 6; + break; + case "UPCOMING": + case 7: + m.callResult = 7; + break; + case "FAILED": + case 8: + m.callResult = 8; + break; + case "ABANDONED": + case 9: + m.callResult = 9; + break; + case "ONGOING": + case 10: + m.callResult = 10; + break; + } + if (d.isDndMode != null) { + m.isDndMode = Boolean(d.isDndMode); + } + switch (d.silenceReason) { + default: + if (typeof d.silenceReason === "number") { + m.silenceReason = d.silenceReason; + break; + } + break; + case "NONE": + case 0: + m.silenceReason = 0; + break; + case "SCHEDULED": + case 1: + m.silenceReason = 1; + break; + case "PRIVACY": + case 2: + m.silenceReason = 2; + break; + case "LIGHTWEIGHT": + case 3: + m.silenceReason = 3; + break; + } + if (d.duration != null) { + if ($util.Long) + (m.duration = $util.Long.fromValue(d.duration)).unsigned = false; + else if (typeof d.duration === "string") + m.duration = parseInt(d.duration, 10); + else if (typeof d.duration === "number") + m.duration = d.duration; + else if (typeof d.duration === "object") + m.duration = new $util.LongBits(d.duration.low >>> 0, d.duration.high >>> 0).toNumber(); + } + if (d.startTime != null) { + if ($util.Long) + (m.startTime = $util.Long.fromValue(d.startTime)).unsigned = false; + else if (typeof d.startTime === "string") + m.startTime = parseInt(d.startTime, 10); + else if (typeof d.startTime === "number") + m.startTime = d.startTime; + else if (typeof d.startTime === "object") + m.startTime = new $util.LongBits(d.startTime.low >>> 0, d.startTime.high >>> 0).toNumber(); + } + if (d.isIncoming != null) { + m.isIncoming = Boolean(d.isIncoming); + } + if (d.isVideo != null) { + m.isVideo = Boolean(d.isVideo); + } + if (d.isCallLink != null) { + m.isCallLink = Boolean(d.isCallLink); + } + if (d.callLinkToken != null) { + m.callLinkToken = String(d.callLinkToken); + } + if (d.scheduledCallId != null) { + m.scheduledCallId = String(d.scheduledCallId); + } + if (d.callId != null) { + m.callId = String(d.callId); + } + if (d.callCreatorJid != null) { + m.callCreatorJid = String(d.callCreatorJid); + } + if (d.groupJid != null) { + m.groupJid = String(d.groupJid); + } + if (d.participants) { + if (!Array.isArray(d.participants)) + throw TypeError(".proto.CallLogRecord.participants: array expected"); + m.participants = []; + for (var i = 0; i < d.participants.length; ++i) { + if (typeof d.participants[i] !== "object") + throw TypeError(".proto.CallLogRecord.participants: object expected"); + m.participants[i] = $root.proto.CallLogRecord.ParticipantInfo.fromObject(d.participants[i]); + } + } + switch (d.callType) { + default: + if (typeof d.callType === "number") { + m.callType = d.callType; + break; + } + break; + case "REGULAR": + case 0: + m.callType = 0; + break; + case "SCHEDULED_CALL": + case 1: + m.callType = 1; + break; + case "VOICE_CHAT": + case 2: + m.callType = 2; + break; + } + return m; + }; + + CallLogRecord.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.participants = []; + } + if (m.callResult != null && m.hasOwnProperty("callResult")) { + d.callResult = o.enums === String ? $root.proto.CallLogRecord.CallResult[m.callResult] === undefined ? m.callResult : $root.proto.CallLogRecord.CallResult[m.callResult] : m.callResult; + if (o.oneofs) + d._callResult = "callResult"; + } + if (m.isDndMode != null && m.hasOwnProperty("isDndMode")) { + d.isDndMode = m.isDndMode; + if (o.oneofs) + d._isDndMode = "isDndMode"; + } + if (m.silenceReason != null && m.hasOwnProperty("silenceReason")) { + d.silenceReason = o.enums === String ? $root.proto.CallLogRecord.SilenceReason[m.silenceReason] === undefined ? m.silenceReason : $root.proto.CallLogRecord.SilenceReason[m.silenceReason] : m.silenceReason; + if (o.oneofs) + d._silenceReason = "silenceReason"; + } + if (m.duration != null && m.hasOwnProperty("duration")) { + if (typeof m.duration === "number") + d.duration = o.longs === String ? String(m.duration) : m.duration; + else + d.duration = o.longs === String ? longToString(m.duration) : o.longs === Number ? longToNumber(m.duration) : m.duration; + if (o.oneofs) + d._duration = "duration"; + } + if (m.startTime != null && m.hasOwnProperty("startTime")) { + if (typeof m.startTime === "number") + d.startTime = o.longs === String ? String(m.startTime) : m.startTime; + else + d.startTime = o.longs === String ? longToString(m.startTime) : o.longs === Number ? longToNumber(m.startTime) : m.startTime; + if (o.oneofs) + d._startTime = "startTime"; + } + if (m.isIncoming != null && m.hasOwnProperty("isIncoming")) { + d.isIncoming = m.isIncoming; + if (o.oneofs) + d._isIncoming = "isIncoming"; + } + if (m.isVideo != null && m.hasOwnProperty("isVideo")) { + d.isVideo = m.isVideo; + if (o.oneofs) + d._isVideo = "isVideo"; + } + if (m.isCallLink != null && m.hasOwnProperty("isCallLink")) { + d.isCallLink = m.isCallLink; + if (o.oneofs) + d._isCallLink = "isCallLink"; + } + if (m.callLinkToken != null && m.hasOwnProperty("callLinkToken")) { + d.callLinkToken = m.callLinkToken; + if (o.oneofs) + d._callLinkToken = "callLinkToken"; + } + if (m.scheduledCallId != null && m.hasOwnProperty("scheduledCallId")) { + d.scheduledCallId = m.scheduledCallId; + if (o.oneofs) + d._scheduledCallId = "scheduledCallId"; + } + if (m.callId != null && m.hasOwnProperty("callId")) { + d.callId = m.callId; + if (o.oneofs) + d._callId = "callId"; + } + if (m.callCreatorJid != null && m.hasOwnProperty("callCreatorJid")) { + d.callCreatorJid = m.callCreatorJid; + if (o.oneofs) + d._callCreatorJid = "callCreatorJid"; + } + if (m.groupJid != null && m.hasOwnProperty("groupJid")) { + d.groupJid = m.groupJid; + if (o.oneofs) + d._groupJid = "groupJid"; + } + if (m.participants && m.participants.length) { + d.participants = []; + for (var j = 0; j < m.participants.length; ++j) { + d.participants[j] = $root.proto.CallLogRecord.ParticipantInfo.toObject(m.participants[j], o); + } + } + if (m.callType != null && m.hasOwnProperty("callType")) { + d.callType = o.enums === String ? $root.proto.CallLogRecord.CallType[m.callType] === undefined ? m.callType : $root.proto.CallLogRecord.CallType[m.callType] : m.callType; + if (o.oneofs) + d._callType = "callType"; + } + return d; + }; + + CallLogRecord.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CallLogRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CallLogRecord"; + }; + + CallLogRecord.CallResult = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "CONNECTED"] = 0; + values[valuesById[1] = "REJECTED"] = 1; + values[valuesById[2] = "CANCELLED"] = 2; + values[valuesById[3] = "ACCEPTEDELSEWHERE"] = 3; + values[valuesById[4] = "MISSED"] = 4; + values[valuesById[5] = "INVALID"] = 5; + values[valuesById[6] = "UNAVAILABLE"] = 6; + values[valuesById[7] = "UPCOMING"] = 7; + values[valuesById[8] = "FAILED"] = 8; + values[valuesById[9] = "ABANDONED"] = 9; + values[valuesById[10] = "ONGOING"] = 10; + return values; + })(); + + CallLogRecord.CallType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "REGULAR"] = 0; + values[valuesById[1] = "SCHEDULED_CALL"] = 1; + values[valuesById[2] = "VOICE_CHAT"] = 2; + return values; + })(); + + CallLogRecord.ParticipantInfo = (function() { + + function ParticipantInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ParticipantInfo.prototype.userJid = null; + ParticipantInfo.prototype.callResult = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ParticipantInfo.prototype, "_userJid", { + get: $util.oneOfGetter($oneOfFields = ["userJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ParticipantInfo.prototype, "_callResult", { + get: $util.oneOfGetter($oneOfFields = ["callResult"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ParticipantInfo.create = function create(properties) { + return new ParticipantInfo(properties); + }; + + ParticipantInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.userJid != null && Object.hasOwnProperty.call(m, "userJid")) + w.uint32(10).string(m.userJid); + if (m.callResult != null && Object.hasOwnProperty.call(m, "callResult")) + w.uint32(16).int32(m.callResult); + return w; + }; + + ParticipantInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CallLogRecord.ParticipantInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.userJid = r.string(); + break; + } + case 2: { + m.callResult = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ParticipantInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CallLogRecord.ParticipantInfo) + return d; + var m = new $root.proto.CallLogRecord.ParticipantInfo(); + if (d.userJid != null) { + m.userJid = String(d.userJid); + } + switch (d.callResult) { + default: + if (typeof d.callResult === "number") { + m.callResult = d.callResult; + break; + } + break; + case "CONNECTED": + case 0: + m.callResult = 0; + break; + case "REJECTED": + case 1: + m.callResult = 1; + break; + case "CANCELLED": + case 2: + m.callResult = 2; + break; + case "ACCEPTEDELSEWHERE": + case 3: + m.callResult = 3; + break; + case "MISSED": + case 4: + m.callResult = 4; + break; + case "INVALID": + case 5: + m.callResult = 5; + break; + case "UNAVAILABLE": + case 6: + m.callResult = 6; + break; + case "UPCOMING": + case 7: + m.callResult = 7; + break; + case "FAILED": + case 8: + m.callResult = 8; + break; + case "ABANDONED": + case 9: + m.callResult = 9; + break; + case "ONGOING": + case 10: + m.callResult = 10; + break; + } + return m; + }; + + ParticipantInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.userJid != null && m.hasOwnProperty("userJid")) { + d.userJid = m.userJid; + if (o.oneofs) + d._userJid = "userJid"; + } + if (m.callResult != null && m.hasOwnProperty("callResult")) { + d.callResult = o.enums === String ? $root.proto.CallLogRecord.CallResult[m.callResult] === undefined ? m.callResult : $root.proto.CallLogRecord.CallResult[m.callResult] : m.callResult; + if (o.oneofs) + d._callResult = "callResult"; + } + return d; + }; + + ParticipantInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ParticipantInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CallLogRecord.ParticipantInfo"; + }; + + return ParticipantInfo; + })(); + + CallLogRecord.SilenceReason = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "SCHEDULED"] = 1; + values[valuesById[2] = "PRIVACY"] = 2; + values[valuesById[3] = "LIGHTWEIGHT"] = 3; + return values; + })(); + + return CallLogRecord; + })(); + + proto.CertChain = (function() { + + function CertChain(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CertChain.prototype.leaf = null; + CertChain.prototype.intermediate = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CertChain.prototype, "_leaf", { + get: $util.oneOfGetter($oneOfFields = ["leaf"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CertChain.prototype, "_intermediate", { + get: $util.oneOfGetter($oneOfFields = ["intermediate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CertChain.create = function create(properties) { + return new CertChain(properties); + }; + + CertChain.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.leaf != null && Object.hasOwnProperty.call(m, "leaf")) + $root.proto.CertChain.NoiseCertificate.encode(m.leaf, w.uint32(10).fork()).ldelim(); + if (m.intermediate != null && Object.hasOwnProperty.call(m, "intermediate")) + $root.proto.CertChain.NoiseCertificate.encode(m.intermediate, w.uint32(18).fork()).ldelim(); + return w; + }; + + CertChain.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CertChain(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.leaf = $root.proto.CertChain.NoiseCertificate.decode(r, r.uint32()); + break; + } + case 2: { + m.intermediate = $root.proto.CertChain.NoiseCertificate.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CertChain.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CertChain) + return d; + var m = new $root.proto.CertChain(); + if (d.leaf != null) { + if (typeof d.leaf !== "object") + throw TypeError(".proto.CertChain.leaf: object expected"); + m.leaf = $root.proto.CertChain.NoiseCertificate.fromObject(d.leaf); + } + if (d.intermediate != null) { + if (typeof d.intermediate !== "object") + throw TypeError(".proto.CertChain.intermediate: object expected"); + m.intermediate = $root.proto.CertChain.NoiseCertificate.fromObject(d.intermediate); + } + return m; + }; + + CertChain.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.leaf != null && m.hasOwnProperty("leaf")) { + d.leaf = $root.proto.CertChain.NoiseCertificate.toObject(m.leaf, o); + if (o.oneofs) + d._leaf = "leaf"; + } + if (m.intermediate != null && m.hasOwnProperty("intermediate")) { + d.intermediate = $root.proto.CertChain.NoiseCertificate.toObject(m.intermediate, o); + if (o.oneofs) + d._intermediate = "intermediate"; + } + return d; + }; + + CertChain.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CertChain.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CertChain"; + }; + + CertChain.NoiseCertificate = (function() { + + function NoiseCertificate(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NoiseCertificate.prototype.details = null; + NoiseCertificate.prototype.signature = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoiseCertificate.prototype, "_details", { + get: $util.oneOfGetter($oneOfFields = ["details"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoiseCertificate.prototype, "_signature", { + get: $util.oneOfGetter($oneOfFields = ["signature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NoiseCertificate.create = function create(properties) { + return new NoiseCertificate(properties); + }; + + NoiseCertificate.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.details != null && Object.hasOwnProperty.call(m, "details")) + w.uint32(10).bytes(m.details); + if (m.signature != null && Object.hasOwnProperty.call(m, "signature")) + w.uint32(18).bytes(m.signature); + return w; + }; + + NoiseCertificate.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CertChain.NoiseCertificate(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.details = r.bytes(); + break; + } + case 2: { + m.signature = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NoiseCertificate.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CertChain.NoiseCertificate) + return d; + var m = new $root.proto.CertChain.NoiseCertificate(); + if (d.details != null) { + if (typeof d.details === "string") + $util.base64.decode(d.details, m.details = $util.newBuffer($util.base64.length(d.details)), 0); + else if (d.details.length >= 0) + m.details = d.details; + } + if (d.signature != null) { + if (typeof d.signature === "string") + $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0); + else if (d.signature.length >= 0) + m.signature = d.signature; + } + return m; + }; + + NoiseCertificate.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.details != null && m.hasOwnProperty("details")) { + d.details = o.bytes === String ? $util.base64.encode(m.details, 0, m.details.length) : o.bytes === Array ? Array.prototype.slice.call(m.details) : m.details; + if (o.oneofs) + d._details = "details"; + } + if (m.signature != null && m.hasOwnProperty("signature")) { + d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature; + if (o.oneofs) + d._signature = "signature"; + } + return d; + }; + + NoiseCertificate.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NoiseCertificate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CertChain.NoiseCertificate"; + }; + + NoiseCertificate.Details = (function() { + + function Details(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Details.prototype.serial = null; + Details.prototype.issuerSerial = null; + Details.prototype.key = null; + Details.prototype.notBefore = null; + Details.prototype.notAfter = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_serial", { + get: $util.oneOfGetter($oneOfFields = ["serial"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_issuerSerial", { + get: $util.oneOfGetter($oneOfFields = ["issuerSerial"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_notBefore", { + get: $util.oneOfGetter($oneOfFields = ["notBefore"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_notAfter", { + get: $util.oneOfGetter($oneOfFields = ["notAfter"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Details.create = function create(properties) { + return new Details(properties); + }; + + Details.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.serial != null && Object.hasOwnProperty.call(m, "serial")) + w.uint32(8).uint32(m.serial); + if (m.issuerSerial != null && Object.hasOwnProperty.call(m, "issuerSerial")) + w.uint32(16).uint32(m.issuerSerial); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + w.uint32(26).bytes(m.key); + if (m.notBefore != null && Object.hasOwnProperty.call(m, "notBefore")) + w.uint32(32).uint64(m.notBefore); + if (m.notAfter != null && Object.hasOwnProperty.call(m, "notAfter")) + w.uint32(40).uint64(m.notAfter); + return w; + }; + + Details.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CertChain.NoiseCertificate.Details(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.serial = r.uint32(); + break; + } + case 2: { + m.issuerSerial = r.uint32(); + break; + } + case 3: { + m.key = r.bytes(); + break; + } + case 4: { + m.notBefore = r.uint64(); + break; + } + case 5: { + m.notAfter = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Details.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CertChain.NoiseCertificate.Details) + return d; + var m = new $root.proto.CertChain.NoiseCertificate.Details(); + if (d.serial != null) { + m.serial = d.serial >>> 0; + } + if (d.issuerSerial != null) { + m.issuerSerial = d.issuerSerial >>> 0; + } + if (d.key != null) { + if (typeof d.key === "string") + $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0); + else if (d.key.length >= 0) + m.key = d.key; + } + if (d.notBefore != null) { + if ($util.Long) + (m.notBefore = $util.Long.fromValue(d.notBefore)).unsigned = true; + else if (typeof d.notBefore === "string") + m.notBefore = parseInt(d.notBefore, 10); + else if (typeof d.notBefore === "number") + m.notBefore = d.notBefore; + else if (typeof d.notBefore === "object") + m.notBefore = new $util.LongBits(d.notBefore.low >>> 0, d.notBefore.high >>> 0).toNumber(true); + } + if (d.notAfter != null) { + if ($util.Long) + (m.notAfter = $util.Long.fromValue(d.notAfter)).unsigned = true; + else if (typeof d.notAfter === "string") + m.notAfter = parseInt(d.notAfter, 10); + else if (typeof d.notAfter === "number") + m.notAfter = d.notAfter; + else if (typeof d.notAfter === "object") + m.notAfter = new $util.LongBits(d.notAfter.low >>> 0, d.notAfter.high >>> 0).toNumber(true); + } + return m; + }; + + Details.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.serial != null && m.hasOwnProperty("serial")) { + d.serial = m.serial; + if (o.oneofs) + d._serial = "serial"; + } + if (m.issuerSerial != null && m.hasOwnProperty("issuerSerial")) { + d.issuerSerial = m.issuerSerial; + if (o.oneofs) + d._issuerSerial = "issuerSerial"; + } + if (m.key != null && m.hasOwnProperty("key")) { + d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key; + if (o.oneofs) + d._key = "key"; + } + if (m.notBefore != null && m.hasOwnProperty("notBefore")) { + if (typeof m.notBefore === "number") + d.notBefore = o.longs === String ? String(m.notBefore) : m.notBefore; + else + d.notBefore = o.longs === String ? longToString(m.notBefore, true) : o.longs === Number ? longToNumber(m.notBefore, true) : m.notBefore; + if (o.oneofs) + d._notBefore = "notBefore"; + } + if (m.notAfter != null && m.hasOwnProperty("notAfter")) { + if (typeof m.notAfter === "number") + d.notAfter = o.longs === String ? String(m.notAfter) : m.notAfter; + else + d.notAfter = o.longs === String ? longToString(m.notAfter, true) : o.longs === Number ? longToNumber(m.notAfter, true) : m.notAfter; + if (o.oneofs) + d._notAfter = "notAfter"; + } + return d; + }; + + Details.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Details.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CertChain.NoiseCertificate.Details"; + }; + + return Details; + })(); + + return NoiseCertificate; + })(); + + return CertChain; + })(); + + proto.ChatLockSettings = (function() { + + function ChatLockSettings(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ChatLockSettings.prototype.hideLockedChats = null; + ChatLockSettings.prototype.secretCode = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ChatLockSettings.prototype, "_hideLockedChats", { + get: $util.oneOfGetter($oneOfFields = ["hideLockedChats"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ChatLockSettings.prototype, "_secretCode", { + get: $util.oneOfGetter($oneOfFields = ["secretCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ChatLockSettings.create = function create(properties) { + return new ChatLockSettings(properties); + }; + + ChatLockSettings.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.hideLockedChats != null && Object.hasOwnProperty.call(m, "hideLockedChats")) + w.uint32(8).bool(m.hideLockedChats); + if (m.secretCode != null && Object.hasOwnProperty.call(m, "secretCode")) + $root.proto.UserPassword.encode(m.secretCode, w.uint32(18).fork()).ldelim(); + return w; + }; + + ChatLockSettings.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ChatLockSettings(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.hideLockedChats = r.bool(); + break; + } + case 2: { + m.secretCode = $root.proto.UserPassword.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ChatLockSettings.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ChatLockSettings) + return d; + var m = new $root.proto.ChatLockSettings(); + if (d.hideLockedChats != null) { + m.hideLockedChats = Boolean(d.hideLockedChats); + } + if (d.secretCode != null) { + if (typeof d.secretCode !== "object") + throw TypeError(".proto.ChatLockSettings.secretCode: object expected"); + m.secretCode = $root.proto.UserPassword.fromObject(d.secretCode); + } + return m; + }; + + ChatLockSettings.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.hideLockedChats != null && m.hasOwnProperty("hideLockedChats")) { + d.hideLockedChats = m.hideLockedChats; + if (o.oneofs) + d._hideLockedChats = "hideLockedChats"; + } + if (m.secretCode != null && m.hasOwnProperty("secretCode")) { + d.secretCode = $root.proto.UserPassword.toObject(m.secretCode, o); + if (o.oneofs) + d._secretCode = "secretCode"; + } + return d; + }; + + ChatLockSettings.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ChatLockSettings.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ChatLockSettings"; + }; + + return ChatLockSettings; + })(); + + proto.ChatRowOpaqueData = (function() { + + function ChatRowOpaqueData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ChatRowOpaqueData.prototype.draftMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ChatRowOpaqueData.prototype, "_draftMessage", { + get: $util.oneOfGetter($oneOfFields = ["draftMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ChatRowOpaqueData.create = function create(properties) { + return new ChatRowOpaqueData(properties); + }; + + ChatRowOpaqueData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.draftMessage != null && Object.hasOwnProperty.call(m, "draftMessage")) + $root.proto.ChatRowOpaqueData.DraftMessage.encode(m.draftMessage, w.uint32(10).fork()).ldelim(); + return w; + }; + + ChatRowOpaqueData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ChatRowOpaqueData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.draftMessage = $root.proto.ChatRowOpaqueData.DraftMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ChatRowOpaqueData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ChatRowOpaqueData) + return d; + var m = new $root.proto.ChatRowOpaqueData(); + if (d.draftMessage != null) { + if (typeof d.draftMessage !== "object") + throw TypeError(".proto.ChatRowOpaqueData.draftMessage: object expected"); + m.draftMessage = $root.proto.ChatRowOpaqueData.DraftMessage.fromObject(d.draftMessage); + } + return m; + }; + + ChatRowOpaqueData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.draftMessage != null && m.hasOwnProperty("draftMessage")) { + d.draftMessage = $root.proto.ChatRowOpaqueData.DraftMessage.toObject(m.draftMessage, o); + if (o.oneofs) + d._draftMessage = "draftMessage"; + } + return d; + }; + + ChatRowOpaqueData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ChatRowOpaqueData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ChatRowOpaqueData"; + }; + + ChatRowOpaqueData.DraftMessage = (function() { + + function DraftMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DraftMessage.prototype.text = null; + DraftMessage.prototype.omittedUrl = null; + DraftMessage.prototype.ctwaContextLinkData = null; + DraftMessage.prototype.ctwaContext = null; + DraftMessage.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DraftMessage.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DraftMessage.prototype, "_omittedUrl", { + get: $util.oneOfGetter($oneOfFields = ["omittedUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DraftMessage.prototype, "_ctwaContextLinkData", { + get: $util.oneOfGetter($oneOfFields = ["ctwaContextLinkData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DraftMessage.prototype, "_ctwaContext", { + get: $util.oneOfGetter($oneOfFields = ["ctwaContext"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DraftMessage.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DraftMessage.create = function create(properties) { + return new DraftMessage(properties); + }; + + DraftMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + if (m.omittedUrl != null && Object.hasOwnProperty.call(m, "omittedUrl")) + w.uint32(18).string(m.omittedUrl); + if (m.ctwaContextLinkData != null && Object.hasOwnProperty.call(m, "ctwaContextLinkData")) + $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData.encode(m.ctwaContextLinkData, w.uint32(26).fork()).ldelim(); + if (m.ctwaContext != null && Object.hasOwnProperty.call(m, "ctwaContext")) + $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.encode(m.ctwaContext, w.uint32(34).fork()).ldelim(); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(40).int64(m.timestamp); + return w; + }; + + DraftMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ChatRowOpaqueData.DraftMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.text = r.string(); + break; + } + case 2: { + m.omittedUrl = r.string(); + break; + } + case 3: { + m.ctwaContextLinkData = $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData.decode(r, r.uint32()); + break; + } + case 4: { + m.ctwaContext = $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.decode(r, r.uint32()); + break; + } + case 5: { + m.timestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DraftMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ChatRowOpaqueData.DraftMessage) + return d; + var m = new $root.proto.ChatRowOpaqueData.DraftMessage(); + if (d.text != null) { + m.text = String(d.text); + } + if (d.omittedUrl != null) { + m.omittedUrl = String(d.omittedUrl); + } + if (d.ctwaContextLinkData != null) { + if (typeof d.ctwaContextLinkData !== "object") + throw TypeError(".proto.ChatRowOpaqueData.DraftMessage.ctwaContextLinkData: object expected"); + m.ctwaContextLinkData = $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData.fromObject(d.ctwaContextLinkData); + } + if (d.ctwaContext != null) { + if (typeof d.ctwaContext !== "object") + throw TypeError(".proto.ChatRowOpaqueData.DraftMessage.ctwaContext: object expected"); + m.ctwaContext = $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.fromObject(d.ctwaContext); + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + DraftMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.omittedUrl != null && m.hasOwnProperty("omittedUrl")) { + d.omittedUrl = m.omittedUrl; + if (o.oneofs) + d._omittedUrl = "omittedUrl"; + } + if (m.ctwaContextLinkData != null && m.hasOwnProperty("ctwaContextLinkData")) { + d.ctwaContextLinkData = $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData.toObject(m.ctwaContextLinkData, o); + if (o.oneofs) + d._ctwaContextLinkData = "ctwaContextLinkData"; + } + if (m.ctwaContext != null && m.hasOwnProperty("ctwaContext")) { + d.ctwaContext = $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.toObject(m.ctwaContext, o); + if (o.oneofs) + d._ctwaContext = "ctwaContext"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + DraftMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DraftMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ChatRowOpaqueData.DraftMessage"; + }; + + DraftMessage.CtwaContextData = (function() { + + function CtwaContextData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CtwaContextData.prototype.conversionSource = null; + CtwaContextData.prototype.conversionData = null; + CtwaContextData.prototype.sourceUrl = null; + CtwaContextData.prototype.sourceId = null; + CtwaContextData.prototype.sourceType = null; + CtwaContextData.prototype.title = null; + CtwaContextData.prototype.description = null; + CtwaContextData.prototype.thumbnail = null; + CtwaContextData.prototype.thumbnailUrl = null; + CtwaContextData.prototype.mediaType = null; + CtwaContextData.prototype.mediaUrl = null; + CtwaContextData.prototype.isSuspiciousLink = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_conversionSource", { + get: $util.oneOfGetter($oneOfFields = ["conversionSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_conversionData", { + get: $util.oneOfGetter($oneOfFields = ["conversionData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_sourceUrl", { + get: $util.oneOfGetter($oneOfFields = ["sourceUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_sourceId", { + get: $util.oneOfGetter($oneOfFields = ["sourceId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_sourceType", { + get: $util.oneOfGetter($oneOfFields = ["sourceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_thumbnail", { + get: $util.oneOfGetter($oneOfFields = ["thumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_thumbnailUrl", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_mediaType", { + get: $util.oneOfGetter($oneOfFields = ["mediaType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_mediaUrl", { + get: $util.oneOfGetter($oneOfFields = ["mediaUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextData.prototype, "_isSuspiciousLink", { + get: $util.oneOfGetter($oneOfFields = ["isSuspiciousLink"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CtwaContextData.create = function create(properties) { + return new CtwaContextData(properties); + }; + + CtwaContextData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.conversionSource != null && Object.hasOwnProperty.call(m, "conversionSource")) + w.uint32(10).string(m.conversionSource); + if (m.conversionData != null && Object.hasOwnProperty.call(m, "conversionData")) + w.uint32(18).bytes(m.conversionData); + if (m.sourceUrl != null && Object.hasOwnProperty.call(m, "sourceUrl")) + w.uint32(26).string(m.sourceUrl); + if (m.sourceId != null && Object.hasOwnProperty.call(m, "sourceId")) + w.uint32(34).string(m.sourceId); + if (m.sourceType != null && Object.hasOwnProperty.call(m, "sourceType")) + w.uint32(42).string(m.sourceType); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(50).string(m.title); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(58).string(m.description); + if (m.thumbnail != null && Object.hasOwnProperty.call(m, "thumbnail")) + w.uint32(66).string(m.thumbnail); + if (m.thumbnailUrl != null && Object.hasOwnProperty.call(m, "thumbnailUrl")) + w.uint32(74).string(m.thumbnailUrl); + if (m.mediaType != null && Object.hasOwnProperty.call(m, "mediaType")) + w.uint32(80).int32(m.mediaType); + if (m.mediaUrl != null && Object.hasOwnProperty.call(m, "mediaUrl")) + w.uint32(90).string(m.mediaUrl); + if (m.isSuspiciousLink != null && Object.hasOwnProperty.call(m, "isSuspiciousLink")) + w.uint32(96).bool(m.isSuspiciousLink); + return w; + }; + + CtwaContextData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.conversionSource = r.string(); + break; + } + case 2: { + m.conversionData = r.bytes(); + break; + } + case 3: { + m.sourceUrl = r.string(); + break; + } + case 4: { + m.sourceId = r.string(); + break; + } + case 5: { + m.sourceType = r.string(); + break; + } + case 6: { + m.title = r.string(); + break; + } + case 7: { + m.description = r.string(); + break; + } + case 8: { + m.thumbnail = r.string(); + break; + } + case 9: { + m.thumbnailUrl = r.string(); + break; + } + case 10: { + m.mediaType = r.int32(); + break; + } + case 11: { + m.mediaUrl = r.string(); + break; + } + case 12: { + m.isSuspiciousLink = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CtwaContextData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData) + return d; + var m = new $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData(); + if (d.conversionSource != null) { + m.conversionSource = String(d.conversionSource); + } + if (d.conversionData != null) { + if (typeof d.conversionData === "string") + $util.base64.decode(d.conversionData, m.conversionData = $util.newBuffer($util.base64.length(d.conversionData)), 0); + else if (d.conversionData.length >= 0) + m.conversionData = d.conversionData; + } + if (d.sourceUrl != null) { + m.sourceUrl = String(d.sourceUrl); + } + if (d.sourceId != null) { + m.sourceId = String(d.sourceId); + } + if (d.sourceType != null) { + m.sourceType = String(d.sourceType); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.thumbnail != null) { + m.thumbnail = String(d.thumbnail); + } + if (d.thumbnailUrl != null) { + m.thumbnailUrl = String(d.thumbnailUrl); + } + switch (d.mediaType) { + default: + if (typeof d.mediaType === "number") { + m.mediaType = d.mediaType; + break; + } + break; + case "NONE": + case 0: + m.mediaType = 0; + break; + case "IMAGE": + case 1: + m.mediaType = 1; + break; + case "VIDEO": + case 2: + m.mediaType = 2; + break; + } + if (d.mediaUrl != null) { + m.mediaUrl = String(d.mediaUrl); + } + if (d.isSuspiciousLink != null) { + m.isSuspiciousLink = Boolean(d.isSuspiciousLink); + } + return m; + }; + + CtwaContextData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.conversionSource != null && m.hasOwnProperty("conversionSource")) { + d.conversionSource = m.conversionSource; + if (o.oneofs) + d._conversionSource = "conversionSource"; + } + if (m.conversionData != null && m.hasOwnProperty("conversionData")) { + d.conversionData = o.bytes === String ? $util.base64.encode(m.conversionData, 0, m.conversionData.length) : o.bytes === Array ? Array.prototype.slice.call(m.conversionData) : m.conversionData; + if (o.oneofs) + d._conversionData = "conversionData"; + } + if (m.sourceUrl != null && m.hasOwnProperty("sourceUrl")) { + d.sourceUrl = m.sourceUrl; + if (o.oneofs) + d._sourceUrl = "sourceUrl"; + } + if (m.sourceId != null && m.hasOwnProperty("sourceId")) { + d.sourceId = m.sourceId; + if (o.oneofs) + d._sourceId = "sourceId"; + } + if (m.sourceType != null && m.hasOwnProperty("sourceType")) { + d.sourceType = m.sourceType; + if (o.oneofs) + d._sourceType = "sourceType"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.thumbnail != null && m.hasOwnProperty("thumbnail")) { + d.thumbnail = m.thumbnail; + if (o.oneofs) + d._thumbnail = "thumbnail"; + } + if (m.thumbnailUrl != null && m.hasOwnProperty("thumbnailUrl")) { + d.thumbnailUrl = m.thumbnailUrl; + if (o.oneofs) + d._thumbnailUrl = "thumbnailUrl"; + } + if (m.mediaType != null && m.hasOwnProperty("mediaType")) { + d.mediaType = o.enums === String ? $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.ContextInfoExternalAdReplyInfoMediaType[m.mediaType] === undefined ? m.mediaType : $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextData.ContextInfoExternalAdReplyInfoMediaType[m.mediaType] : m.mediaType; + if (o.oneofs) + d._mediaType = "mediaType"; + } + if (m.mediaUrl != null && m.hasOwnProperty("mediaUrl")) { + d.mediaUrl = m.mediaUrl; + if (o.oneofs) + d._mediaUrl = "mediaUrl"; + } + if (m.isSuspiciousLink != null && m.hasOwnProperty("isSuspiciousLink")) { + d.isSuspiciousLink = m.isSuspiciousLink; + if (o.oneofs) + d._isSuspiciousLink = "isSuspiciousLink"; + } + return d; + }; + + CtwaContextData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CtwaContextData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ChatRowOpaqueData.DraftMessage.CtwaContextData"; + }; + + CtwaContextData.ContextInfoExternalAdReplyInfoMediaType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "IMAGE"] = 1; + values[valuesById[2] = "VIDEO"] = 2; + return values; + })(); + + return CtwaContextData; + })(); + + DraftMessage.CtwaContextLinkData = (function() { + + function CtwaContextLinkData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CtwaContextLinkData.prototype.context = null; + CtwaContextLinkData.prototype.sourceUrl = null; + CtwaContextLinkData.prototype.icebreaker = null; + CtwaContextLinkData.prototype.phone = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextLinkData.prototype, "_context", { + get: $util.oneOfGetter($oneOfFields = ["context"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextLinkData.prototype, "_sourceUrl", { + get: $util.oneOfGetter($oneOfFields = ["sourceUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextLinkData.prototype, "_icebreaker", { + get: $util.oneOfGetter($oneOfFields = ["icebreaker"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaContextLinkData.prototype, "_phone", { + get: $util.oneOfGetter($oneOfFields = ["phone"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CtwaContextLinkData.create = function create(properties) { + return new CtwaContextLinkData(properties); + }; + + CtwaContextLinkData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.context != null && Object.hasOwnProperty.call(m, "context")) + w.uint32(10).string(m.context); + if (m.sourceUrl != null && Object.hasOwnProperty.call(m, "sourceUrl")) + w.uint32(18).string(m.sourceUrl); + if (m.icebreaker != null && Object.hasOwnProperty.call(m, "icebreaker")) + w.uint32(26).string(m.icebreaker); + if (m.phone != null && Object.hasOwnProperty.call(m, "phone")) + w.uint32(34).string(m.phone); + return w; + }; + + CtwaContextLinkData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.context = r.string(); + break; + } + case 2: { + m.sourceUrl = r.string(); + break; + } + case 3: { + m.icebreaker = r.string(); + break; + } + case 4: { + m.phone = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CtwaContextLinkData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData) + return d; + var m = new $root.proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData(); + if (d.context != null) { + m.context = String(d.context); + } + if (d.sourceUrl != null) { + m.sourceUrl = String(d.sourceUrl); + } + if (d.icebreaker != null) { + m.icebreaker = String(d.icebreaker); + } + if (d.phone != null) { + m.phone = String(d.phone); + } + return m; + }; + + CtwaContextLinkData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.context != null && m.hasOwnProperty("context")) { + d.context = m.context; + if (o.oneofs) + d._context = "context"; + } + if (m.sourceUrl != null && m.hasOwnProperty("sourceUrl")) { + d.sourceUrl = m.sourceUrl; + if (o.oneofs) + d._sourceUrl = "sourceUrl"; + } + if (m.icebreaker != null && m.hasOwnProperty("icebreaker")) { + d.icebreaker = m.icebreaker; + if (o.oneofs) + d._icebreaker = "icebreaker"; + } + if (m.phone != null && m.hasOwnProperty("phone")) { + d.phone = m.phone; + if (o.oneofs) + d._phone = "phone"; + } + return d; + }; + + CtwaContextLinkData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CtwaContextLinkData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ChatRowOpaqueData.DraftMessage.CtwaContextLinkData"; + }; + + return CtwaContextLinkData; + })(); + + return DraftMessage; + })(); + + return ChatRowOpaqueData; + })(); + + proto.Citation = (function() { + + function Citation(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Citation.prototype.title = ""; + Citation.prototype.subtitle = ""; + Citation.prototype.cmsId = ""; + Citation.prototype.imageUrl = ""; + + Citation.create = function create(properties) { + return new Citation(properties); + }; + + Citation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.subtitle != null && Object.hasOwnProperty.call(m, "subtitle")) + w.uint32(18).string(m.subtitle); + if (m.cmsId != null && Object.hasOwnProperty.call(m, "cmsId")) + w.uint32(26).string(m.cmsId); + if (m.imageUrl != null && Object.hasOwnProperty.call(m, "imageUrl")) + w.uint32(34).string(m.imageUrl); + return w; + }; + + Citation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Citation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.subtitle = r.string(); + break; + } + case 3: { + m.cmsId = r.string(); + break; + } + case 4: { + m.imageUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Citation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Citation) + return d; + var m = new $root.proto.Citation(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.subtitle != null) { + m.subtitle = String(d.subtitle); + } + if (d.cmsId != null) { + m.cmsId = String(d.cmsId); + } + if (d.imageUrl != null) { + m.imageUrl = String(d.imageUrl); + } + return m; + }; + + Citation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.title = ""; + d.subtitle = ""; + d.cmsId = ""; + d.imageUrl = ""; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + } + if (m.subtitle != null && m.hasOwnProperty("subtitle")) { + d.subtitle = m.subtitle; + } + if (m.cmsId != null && m.hasOwnProperty("cmsId")) { + d.cmsId = m.cmsId; + } + if (m.imageUrl != null && m.hasOwnProperty("imageUrl")) { + d.imageUrl = m.imageUrl; + } + return d; + }; + + Citation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Citation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Citation"; + }; + + return Citation; + })(); + + proto.ClientPairingProps = (function() { + + function ClientPairingProps(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ClientPairingProps.prototype.isChatDbLidMigrated = null; + ClientPairingProps.prototype.isSyncdPureLidSession = null; + ClientPairingProps.prototype.isSyncdSnapshotRecoveryEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPairingProps.prototype, "_isChatDbLidMigrated", { + get: $util.oneOfGetter($oneOfFields = ["isChatDbLidMigrated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPairingProps.prototype, "_isSyncdPureLidSession", { + get: $util.oneOfGetter($oneOfFields = ["isSyncdPureLidSession"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPairingProps.prototype, "_isSyncdSnapshotRecoveryEnabled", { + get: $util.oneOfGetter($oneOfFields = ["isSyncdSnapshotRecoveryEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ClientPairingProps.create = function create(properties) { + return new ClientPairingProps(properties); + }; + + ClientPairingProps.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isChatDbLidMigrated != null && Object.hasOwnProperty.call(m, "isChatDbLidMigrated")) + w.uint32(8).bool(m.isChatDbLidMigrated); + if (m.isSyncdPureLidSession != null && Object.hasOwnProperty.call(m, "isSyncdPureLidSession")) + w.uint32(16).bool(m.isSyncdPureLidSession); + if (m.isSyncdSnapshotRecoveryEnabled != null && Object.hasOwnProperty.call(m, "isSyncdSnapshotRecoveryEnabled")) + w.uint32(24).bool(m.isSyncdSnapshotRecoveryEnabled); + return w; + }; + + ClientPairingProps.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPairingProps(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isChatDbLidMigrated = r.bool(); + break; + } + case 2: { + m.isSyncdPureLidSession = r.bool(); + break; + } + case 3: { + m.isSyncdSnapshotRecoveryEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ClientPairingProps.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPairingProps) + return d; + var m = new $root.proto.ClientPairingProps(); + if (d.isChatDbLidMigrated != null) { + m.isChatDbLidMigrated = Boolean(d.isChatDbLidMigrated); + } + if (d.isSyncdPureLidSession != null) { + m.isSyncdPureLidSession = Boolean(d.isSyncdPureLidSession); + } + if (d.isSyncdSnapshotRecoveryEnabled != null) { + m.isSyncdSnapshotRecoveryEnabled = Boolean(d.isSyncdSnapshotRecoveryEnabled); + } + return m; + }; + + ClientPairingProps.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isChatDbLidMigrated != null && m.hasOwnProperty("isChatDbLidMigrated")) { + d.isChatDbLidMigrated = m.isChatDbLidMigrated; + if (o.oneofs) + d._isChatDbLidMigrated = "isChatDbLidMigrated"; + } + if (m.isSyncdPureLidSession != null && m.hasOwnProperty("isSyncdPureLidSession")) { + d.isSyncdPureLidSession = m.isSyncdPureLidSession; + if (o.oneofs) + d._isSyncdPureLidSession = "isSyncdPureLidSession"; + } + if (m.isSyncdSnapshotRecoveryEnabled != null && m.hasOwnProperty("isSyncdSnapshotRecoveryEnabled")) { + d.isSyncdSnapshotRecoveryEnabled = m.isSyncdSnapshotRecoveryEnabled; + if (o.oneofs) + d._isSyncdSnapshotRecoveryEnabled = "isSyncdSnapshotRecoveryEnabled"; + } + return d; + }; + + ClientPairingProps.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ClientPairingProps.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPairingProps"; + }; + + return ClientPairingProps; + })(); + + proto.ClientPayload = (function() { + + function ClientPayload(p) { + this.shards = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ClientPayload.prototype.username = null; + ClientPayload.prototype.passive = null; + ClientPayload.prototype.userAgent = null; + ClientPayload.prototype.webInfo = null; + ClientPayload.prototype.pushName = null; + ClientPayload.prototype.sessionId = null; + ClientPayload.prototype.shortConnect = null; + ClientPayload.prototype.connectType = null; + ClientPayload.prototype.connectReason = null; + ClientPayload.prototype.shards = $util.emptyArray; + ClientPayload.prototype.dnsSource = null; + ClientPayload.prototype.connectAttemptCount = null; + ClientPayload.prototype.device = null; + ClientPayload.prototype.devicePairingData = null; + ClientPayload.prototype.product = null; + ClientPayload.prototype.fbCat = null; + ClientPayload.prototype.fbUserAgent = null; + ClientPayload.prototype.oc = null; + ClientPayload.prototype.lc = null; + ClientPayload.prototype.iosAppExtension = null; + ClientPayload.prototype.fbAppId = null; + ClientPayload.prototype.fbDeviceId = null; + ClientPayload.prototype.pull = null; + ClientPayload.prototype.paddingBytes = null; + ClientPayload.prototype.yearClass = null; + ClientPayload.prototype.memClass = null; + ClientPayload.prototype.interopData = null; + ClientPayload.prototype.trafficAnonymization = null; + ClientPayload.prototype.lidDbMigrated = null; + ClientPayload.prototype.accountType = null; + ClientPayload.prototype.connectionSequenceInfo = null; + ClientPayload.prototype.paaLink = null; + ClientPayload.prototype.preacksCount = null; + ClientPayload.prototype.processingQueueSize = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_username", { + get: $util.oneOfGetter($oneOfFields = ["username"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_passive", { + get: $util.oneOfGetter($oneOfFields = ["passive"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_userAgent", { + get: $util.oneOfGetter($oneOfFields = ["userAgent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_webInfo", { + get: $util.oneOfGetter($oneOfFields = ["webInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_pushName", { + get: $util.oneOfGetter($oneOfFields = ["pushName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_sessionId", { + get: $util.oneOfGetter($oneOfFields = ["sessionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_shortConnect", { + get: $util.oneOfGetter($oneOfFields = ["shortConnect"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_connectType", { + get: $util.oneOfGetter($oneOfFields = ["connectType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_connectReason", { + get: $util.oneOfGetter($oneOfFields = ["connectReason"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_dnsSource", { + get: $util.oneOfGetter($oneOfFields = ["dnsSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_connectAttemptCount", { + get: $util.oneOfGetter($oneOfFields = ["connectAttemptCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_device", { + get: $util.oneOfGetter($oneOfFields = ["device"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_devicePairingData", { + get: $util.oneOfGetter($oneOfFields = ["devicePairingData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_product", { + get: $util.oneOfGetter($oneOfFields = ["product"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_fbCat", { + get: $util.oneOfGetter($oneOfFields = ["fbCat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_fbUserAgent", { + get: $util.oneOfGetter($oneOfFields = ["fbUserAgent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_oc", { + get: $util.oneOfGetter($oneOfFields = ["oc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_lc", { + get: $util.oneOfGetter($oneOfFields = ["lc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_iosAppExtension", { + get: $util.oneOfGetter($oneOfFields = ["iosAppExtension"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_fbAppId", { + get: $util.oneOfGetter($oneOfFields = ["fbAppId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_fbDeviceId", { + get: $util.oneOfGetter($oneOfFields = ["fbDeviceId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_pull", { + get: $util.oneOfGetter($oneOfFields = ["pull"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_paddingBytes", { + get: $util.oneOfGetter($oneOfFields = ["paddingBytes"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_yearClass", { + get: $util.oneOfGetter($oneOfFields = ["yearClass"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_memClass", { + get: $util.oneOfGetter($oneOfFields = ["memClass"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_interopData", { + get: $util.oneOfGetter($oneOfFields = ["interopData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_trafficAnonymization", { + get: $util.oneOfGetter($oneOfFields = ["trafficAnonymization"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_lidDbMigrated", { + get: $util.oneOfGetter($oneOfFields = ["lidDbMigrated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_accountType", { + get: $util.oneOfGetter($oneOfFields = ["accountType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_connectionSequenceInfo", { + get: $util.oneOfGetter($oneOfFields = ["connectionSequenceInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_paaLink", { + get: $util.oneOfGetter($oneOfFields = ["paaLink"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_preacksCount", { + get: $util.oneOfGetter($oneOfFields = ["preacksCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientPayload.prototype, "_processingQueueSize", { + get: $util.oneOfGetter($oneOfFields = ["processingQueueSize"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ClientPayload.create = function create(properties) { + return new ClientPayload(properties); + }; + + ClientPayload.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.username != null && Object.hasOwnProperty.call(m, "username")) + w.uint32(8).uint64(m.username); + if (m.passive != null && Object.hasOwnProperty.call(m, "passive")) + w.uint32(24).bool(m.passive); + if (m.userAgent != null && Object.hasOwnProperty.call(m, "userAgent")) + $root.proto.ClientPayload.UserAgent.encode(m.userAgent, w.uint32(42).fork()).ldelim(); + if (m.webInfo != null && Object.hasOwnProperty.call(m, "webInfo")) + $root.proto.ClientPayload.WebInfo.encode(m.webInfo, w.uint32(50).fork()).ldelim(); + if (m.pushName != null && Object.hasOwnProperty.call(m, "pushName")) + w.uint32(58).string(m.pushName); + if (m.sessionId != null && Object.hasOwnProperty.call(m, "sessionId")) + w.uint32(77).sfixed32(m.sessionId); + if (m.shortConnect != null && Object.hasOwnProperty.call(m, "shortConnect")) + w.uint32(80).bool(m.shortConnect); + if (m.connectType != null && Object.hasOwnProperty.call(m, "connectType")) + w.uint32(96).int32(m.connectType); + if (m.connectReason != null && Object.hasOwnProperty.call(m, "connectReason")) + w.uint32(104).int32(m.connectReason); + if (m.shards != null && m.shards.length) { + w.uint32(114).fork(); + for (var i = 0; i < m.shards.length; ++i) + w.int32(m.shards[i]); + w.ldelim(); + } + if (m.dnsSource != null && Object.hasOwnProperty.call(m, "dnsSource")) + $root.proto.ClientPayload.DNSSource.encode(m.dnsSource, w.uint32(122).fork()).ldelim(); + if (m.connectAttemptCount != null && Object.hasOwnProperty.call(m, "connectAttemptCount")) + w.uint32(128).uint32(m.connectAttemptCount); + if (m.device != null && Object.hasOwnProperty.call(m, "device")) + w.uint32(144).uint32(m.device); + if (m.devicePairingData != null && Object.hasOwnProperty.call(m, "devicePairingData")) + $root.proto.ClientPayload.DevicePairingRegistrationData.encode(m.devicePairingData, w.uint32(154).fork()).ldelim(); + if (m.product != null && Object.hasOwnProperty.call(m, "product")) + w.uint32(160).int32(m.product); + if (m.fbCat != null && Object.hasOwnProperty.call(m, "fbCat")) + w.uint32(170).bytes(m.fbCat); + if (m.fbUserAgent != null && Object.hasOwnProperty.call(m, "fbUserAgent")) + w.uint32(178).bytes(m.fbUserAgent); + if (m.oc != null && Object.hasOwnProperty.call(m, "oc")) + w.uint32(184).bool(m.oc); + if (m.lc != null && Object.hasOwnProperty.call(m, "lc")) + w.uint32(192).int32(m.lc); + if (m.iosAppExtension != null && Object.hasOwnProperty.call(m, "iosAppExtension")) + w.uint32(240).int32(m.iosAppExtension); + if (m.fbAppId != null && Object.hasOwnProperty.call(m, "fbAppId")) + w.uint32(248).uint64(m.fbAppId); + if (m.fbDeviceId != null && Object.hasOwnProperty.call(m, "fbDeviceId")) + w.uint32(258).bytes(m.fbDeviceId); + if (m.pull != null && Object.hasOwnProperty.call(m, "pull")) + w.uint32(264).bool(m.pull); + if (m.paddingBytes != null && Object.hasOwnProperty.call(m, "paddingBytes")) + w.uint32(274).bytes(m.paddingBytes); + if (m.yearClass != null && Object.hasOwnProperty.call(m, "yearClass")) + w.uint32(288).int32(m.yearClass); + if (m.memClass != null && Object.hasOwnProperty.call(m, "memClass")) + w.uint32(296).int32(m.memClass); + if (m.interopData != null && Object.hasOwnProperty.call(m, "interopData")) + $root.proto.ClientPayload.InteropData.encode(m.interopData, w.uint32(306).fork()).ldelim(); + if (m.trafficAnonymization != null && Object.hasOwnProperty.call(m, "trafficAnonymization")) + w.uint32(320).int32(m.trafficAnonymization); + if (m.lidDbMigrated != null && Object.hasOwnProperty.call(m, "lidDbMigrated")) + w.uint32(328).bool(m.lidDbMigrated); + if (m.accountType != null && Object.hasOwnProperty.call(m, "accountType")) + w.uint32(336).int32(m.accountType); + if (m.connectionSequenceInfo != null && Object.hasOwnProperty.call(m, "connectionSequenceInfo")) + w.uint32(349).sfixed32(m.connectionSequenceInfo); + if (m.paaLink != null && Object.hasOwnProperty.call(m, "paaLink")) + w.uint32(352).bool(m.paaLink); + if (m.preacksCount != null && Object.hasOwnProperty.call(m, "preacksCount")) + w.uint32(360).int32(m.preacksCount); + if (m.processingQueueSize != null && Object.hasOwnProperty.call(m, "processingQueueSize")) + w.uint32(368).int32(m.processingQueueSize); + return w; + }; + + ClientPayload.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.username = r.uint64(); + break; + } + case 3: { + m.passive = r.bool(); + break; + } + case 5: { + m.userAgent = $root.proto.ClientPayload.UserAgent.decode(r, r.uint32()); + break; + } + case 6: { + m.webInfo = $root.proto.ClientPayload.WebInfo.decode(r, r.uint32()); + break; + } + case 7: { + m.pushName = r.string(); + break; + } + case 9: { + m.sessionId = r.sfixed32(); + break; + } + case 10: { + m.shortConnect = r.bool(); + break; + } + case 12: { + m.connectType = r.int32(); + break; + } + case 13: { + m.connectReason = r.int32(); + break; + } + case 14: { + if (!(m.shards && m.shards.length)) + m.shards = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.shards.push(r.int32()); + } else + m.shards.push(r.int32()); + break; + } + case 15: { + m.dnsSource = $root.proto.ClientPayload.DNSSource.decode(r, r.uint32()); + break; + } + case 16: { + m.connectAttemptCount = r.uint32(); + break; + } + case 18: { + m.device = r.uint32(); + break; + } + case 19: { + m.devicePairingData = $root.proto.ClientPayload.DevicePairingRegistrationData.decode(r, r.uint32()); + break; + } + case 20: { + m.product = r.int32(); + break; + } + case 21: { + m.fbCat = r.bytes(); + break; + } + case 22: { + m.fbUserAgent = r.bytes(); + break; + } + case 23: { + m.oc = r.bool(); + break; + } + case 24: { + m.lc = r.int32(); + break; + } + case 30: { + m.iosAppExtension = r.int32(); + break; + } + case 31: { + m.fbAppId = r.uint64(); + break; + } + case 32: { + m.fbDeviceId = r.bytes(); + break; + } + case 33: { + m.pull = r.bool(); + break; + } + case 34: { + m.paddingBytes = r.bytes(); + break; + } + case 36: { + m.yearClass = r.int32(); + break; + } + case 37: { + m.memClass = r.int32(); + break; + } + case 38: { + m.interopData = $root.proto.ClientPayload.InteropData.decode(r, r.uint32()); + break; + } + case 40: { + m.trafficAnonymization = r.int32(); + break; + } + case 41: { + m.lidDbMigrated = r.bool(); + break; + } + case 42: { + m.accountType = r.int32(); + break; + } + case 43: { + m.connectionSequenceInfo = r.sfixed32(); + break; + } + case 44: { + m.paaLink = r.bool(); + break; + } + case 45: { + m.preacksCount = r.int32(); + break; + } + case 46: { + m.processingQueueSize = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ClientPayload.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload) + return d; + var m = new $root.proto.ClientPayload(); + if (d.username != null) { + if ($util.Long) + (m.username = $util.Long.fromValue(d.username)).unsigned = true; + else if (typeof d.username === "string") + m.username = parseInt(d.username, 10); + else if (typeof d.username === "number") + m.username = d.username; + else if (typeof d.username === "object") + m.username = new $util.LongBits(d.username.low >>> 0, d.username.high >>> 0).toNumber(true); + } + if (d.passive != null) { + m.passive = Boolean(d.passive); + } + if (d.userAgent != null) { + if (typeof d.userAgent !== "object") + throw TypeError(".proto.ClientPayload.userAgent: object expected"); + m.userAgent = $root.proto.ClientPayload.UserAgent.fromObject(d.userAgent); + } + if (d.webInfo != null) { + if (typeof d.webInfo !== "object") + throw TypeError(".proto.ClientPayload.webInfo: object expected"); + m.webInfo = $root.proto.ClientPayload.WebInfo.fromObject(d.webInfo); + } + if (d.pushName != null) { + m.pushName = String(d.pushName); + } + if (d.sessionId != null) { + m.sessionId = d.sessionId | 0; + } + if (d.shortConnect != null) { + m.shortConnect = Boolean(d.shortConnect); + } + switch (d.connectType) { + default: + if (typeof d.connectType === "number") { + m.connectType = d.connectType; + break; + } + break; + case "CELLULAR_UNKNOWN": + case 0: + m.connectType = 0; + break; + case "WIFI_UNKNOWN": + case 1: + m.connectType = 1; + break; + case "CELLULAR_EDGE": + case 100: + m.connectType = 100; + break; + case "CELLULAR_IDEN": + case 101: + m.connectType = 101; + break; + case "CELLULAR_UMTS": + case 102: + m.connectType = 102; + break; + case "CELLULAR_EVDO": + case 103: + m.connectType = 103; + break; + case "CELLULAR_GPRS": + case 104: + m.connectType = 104; + break; + case "CELLULAR_HSDPA": + case 105: + m.connectType = 105; + break; + case "CELLULAR_HSUPA": + case 106: + m.connectType = 106; + break; + case "CELLULAR_HSPA": + case 107: + m.connectType = 107; + break; + case "CELLULAR_CDMA": + case 108: + m.connectType = 108; + break; + case "CELLULAR_1XRTT": + case 109: + m.connectType = 109; + break; + case "CELLULAR_EHRPD": + case 110: + m.connectType = 110; + break; + case "CELLULAR_LTE": + case 111: + m.connectType = 111; + break; + case "CELLULAR_HSPAP": + case 112: + m.connectType = 112; + break; + } + switch (d.connectReason) { + default: + if (typeof d.connectReason === "number") { + m.connectReason = d.connectReason; + break; + } + break; + case "PUSH": + case 0: + m.connectReason = 0; + break; + case "USER_ACTIVATED": + case 1: + m.connectReason = 1; + break; + case "SCHEDULED": + case 2: + m.connectReason = 2; + break; + case "ERROR_RECONNECT": + case 3: + m.connectReason = 3; + break; + case "NETWORK_SWITCH": + case 4: + m.connectReason = 4; + break; + case "PING_RECONNECT": + case 5: + m.connectReason = 5; + break; + case "UNKNOWN": + case 6: + m.connectReason = 6; + break; + } + if (d.shards) { + if (!Array.isArray(d.shards)) + throw TypeError(".proto.ClientPayload.shards: array expected"); + m.shards = []; + for (var i = 0; i < d.shards.length; ++i) { + m.shards[i] = d.shards[i] | 0; + } + } + if (d.dnsSource != null) { + if (typeof d.dnsSource !== "object") + throw TypeError(".proto.ClientPayload.dnsSource: object expected"); + m.dnsSource = $root.proto.ClientPayload.DNSSource.fromObject(d.dnsSource); + } + if (d.connectAttemptCount != null) { + m.connectAttemptCount = d.connectAttemptCount >>> 0; + } + if (d.device != null) { + m.device = d.device >>> 0; + } + if (d.devicePairingData != null) { + if (typeof d.devicePairingData !== "object") + throw TypeError(".proto.ClientPayload.devicePairingData: object expected"); + m.devicePairingData = $root.proto.ClientPayload.DevicePairingRegistrationData.fromObject(d.devicePairingData); + } + switch (d.product) { + default: + if (typeof d.product === "number") { + m.product = d.product; + break; + } + break; + case "WHATSAPP": + case 0: + m.product = 0; + break; + case "MESSENGER": + case 1: + m.product = 1; + break; + case "INTEROP": + case 2: + m.product = 2; + break; + case "INTEROP_MSGR": + case 3: + m.product = 3; + break; + case "WHATSAPP_LID": + case 4: + m.product = 4; + break; + } + if (d.fbCat != null) { + if (typeof d.fbCat === "string") + $util.base64.decode(d.fbCat, m.fbCat = $util.newBuffer($util.base64.length(d.fbCat)), 0); + else if (d.fbCat.length >= 0) + m.fbCat = d.fbCat; + } + if (d.fbUserAgent != null) { + if (typeof d.fbUserAgent === "string") + $util.base64.decode(d.fbUserAgent, m.fbUserAgent = $util.newBuffer($util.base64.length(d.fbUserAgent)), 0); + else if (d.fbUserAgent.length >= 0) + m.fbUserAgent = d.fbUserAgent; + } + if (d.oc != null) { + m.oc = Boolean(d.oc); + } + if (d.lc != null) { + m.lc = d.lc | 0; + } + switch (d.iosAppExtension) { + default: + if (typeof d.iosAppExtension === "number") { + m.iosAppExtension = d.iosAppExtension; + break; + } + break; + case "SHARE_EXTENSION": + case 0: + m.iosAppExtension = 0; + break; + case "SERVICE_EXTENSION": + case 1: + m.iosAppExtension = 1; + break; + case "INTENTS_EXTENSION": + case 2: + m.iosAppExtension = 2; + break; + } + if (d.fbAppId != null) { + if ($util.Long) + (m.fbAppId = $util.Long.fromValue(d.fbAppId)).unsigned = true; + else if (typeof d.fbAppId === "string") + m.fbAppId = parseInt(d.fbAppId, 10); + else if (typeof d.fbAppId === "number") + m.fbAppId = d.fbAppId; + else if (typeof d.fbAppId === "object") + m.fbAppId = new $util.LongBits(d.fbAppId.low >>> 0, d.fbAppId.high >>> 0).toNumber(true); + } + if (d.fbDeviceId != null) { + if (typeof d.fbDeviceId === "string") + $util.base64.decode(d.fbDeviceId, m.fbDeviceId = $util.newBuffer($util.base64.length(d.fbDeviceId)), 0); + else if (d.fbDeviceId.length >= 0) + m.fbDeviceId = d.fbDeviceId; + } + if (d.pull != null) { + m.pull = Boolean(d.pull); + } + if (d.paddingBytes != null) { + if (typeof d.paddingBytes === "string") + $util.base64.decode(d.paddingBytes, m.paddingBytes = $util.newBuffer($util.base64.length(d.paddingBytes)), 0); + else if (d.paddingBytes.length >= 0) + m.paddingBytes = d.paddingBytes; + } + if (d.yearClass != null) { + m.yearClass = d.yearClass | 0; + } + if (d.memClass != null) { + m.memClass = d.memClass | 0; + } + if (d.interopData != null) { + if (typeof d.interopData !== "object") + throw TypeError(".proto.ClientPayload.interopData: object expected"); + m.interopData = $root.proto.ClientPayload.InteropData.fromObject(d.interopData); + } + switch (d.trafficAnonymization) { + default: + if (typeof d.trafficAnonymization === "number") { + m.trafficAnonymization = d.trafficAnonymization; + break; + } + break; + case "OFF": + case 0: + m.trafficAnonymization = 0; + break; + case "STANDARD": + case 1: + m.trafficAnonymization = 1; + break; + } + if (d.lidDbMigrated != null) { + m.lidDbMigrated = Boolean(d.lidDbMigrated); + } + switch (d.accountType) { + default: + if (typeof d.accountType === "number") { + m.accountType = d.accountType; + break; + } + break; + case "DEFAULT": + case 0: + m.accountType = 0; + break; + case "GUEST": + case 1: + m.accountType = 1; + break; + } + if (d.connectionSequenceInfo != null) { + m.connectionSequenceInfo = d.connectionSequenceInfo | 0; + } + if (d.paaLink != null) { + m.paaLink = Boolean(d.paaLink); + } + if (d.preacksCount != null) { + m.preacksCount = d.preacksCount | 0; + } + if (d.processingQueueSize != null) { + m.processingQueueSize = d.processingQueueSize | 0; + } + return m; + }; + + ClientPayload.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.shards = []; + } + if (m.username != null && m.hasOwnProperty("username")) { + if (typeof m.username === "number") + d.username = o.longs === String ? String(m.username) : m.username; + else + d.username = o.longs === String ? longToString(m.username, true) : o.longs === Number ? longToNumber(m.username, true) : m.username; + if (o.oneofs) + d._username = "username"; + } + if (m.passive != null && m.hasOwnProperty("passive")) { + d.passive = m.passive; + if (o.oneofs) + d._passive = "passive"; + } + if (m.userAgent != null && m.hasOwnProperty("userAgent")) { + d.userAgent = $root.proto.ClientPayload.UserAgent.toObject(m.userAgent, o); + if (o.oneofs) + d._userAgent = "userAgent"; + } + if (m.webInfo != null && m.hasOwnProperty("webInfo")) { + d.webInfo = $root.proto.ClientPayload.WebInfo.toObject(m.webInfo, o); + if (o.oneofs) + d._webInfo = "webInfo"; + } + if (m.pushName != null && m.hasOwnProperty("pushName")) { + d.pushName = m.pushName; + if (o.oneofs) + d._pushName = "pushName"; + } + if (m.sessionId != null && m.hasOwnProperty("sessionId")) { + d.sessionId = m.sessionId; + if (o.oneofs) + d._sessionId = "sessionId"; + } + if (m.shortConnect != null && m.hasOwnProperty("shortConnect")) { + d.shortConnect = m.shortConnect; + if (o.oneofs) + d._shortConnect = "shortConnect"; + } + if (m.connectType != null && m.hasOwnProperty("connectType")) { + d.connectType = o.enums === String ? $root.proto.ClientPayload.ConnectType[m.connectType] === undefined ? m.connectType : $root.proto.ClientPayload.ConnectType[m.connectType] : m.connectType; + if (o.oneofs) + d._connectType = "connectType"; + } + if (m.connectReason != null && m.hasOwnProperty("connectReason")) { + d.connectReason = o.enums === String ? $root.proto.ClientPayload.ConnectReason[m.connectReason] === undefined ? m.connectReason : $root.proto.ClientPayload.ConnectReason[m.connectReason] : m.connectReason; + if (o.oneofs) + d._connectReason = "connectReason"; + } + if (m.shards && m.shards.length) { + d.shards = []; + for (var j = 0; j < m.shards.length; ++j) { + d.shards[j] = m.shards[j]; + } + } + if (m.dnsSource != null && m.hasOwnProperty("dnsSource")) { + d.dnsSource = $root.proto.ClientPayload.DNSSource.toObject(m.dnsSource, o); + if (o.oneofs) + d._dnsSource = "dnsSource"; + } + if (m.connectAttemptCount != null && m.hasOwnProperty("connectAttemptCount")) { + d.connectAttemptCount = m.connectAttemptCount; + if (o.oneofs) + d._connectAttemptCount = "connectAttemptCount"; + } + if (m.device != null && m.hasOwnProperty("device")) { + d.device = m.device; + if (o.oneofs) + d._device = "device"; + } + if (m.devicePairingData != null && m.hasOwnProperty("devicePairingData")) { + d.devicePairingData = $root.proto.ClientPayload.DevicePairingRegistrationData.toObject(m.devicePairingData, o); + if (o.oneofs) + d._devicePairingData = "devicePairingData"; + } + if (m.product != null && m.hasOwnProperty("product")) { + d.product = o.enums === String ? $root.proto.ClientPayload.Product[m.product] === undefined ? m.product : $root.proto.ClientPayload.Product[m.product] : m.product; + if (o.oneofs) + d._product = "product"; + } + if (m.fbCat != null && m.hasOwnProperty("fbCat")) { + d.fbCat = o.bytes === String ? $util.base64.encode(m.fbCat, 0, m.fbCat.length) : o.bytes === Array ? Array.prototype.slice.call(m.fbCat) : m.fbCat; + if (o.oneofs) + d._fbCat = "fbCat"; + } + if (m.fbUserAgent != null && m.hasOwnProperty("fbUserAgent")) { + d.fbUserAgent = o.bytes === String ? $util.base64.encode(m.fbUserAgent, 0, m.fbUserAgent.length) : o.bytes === Array ? Array.prototype.slice.call(m.fbUserAgent) : m.fbUserAgent; + if (o.oneofs) + d._fbUserAgent = "fbUserAgent"; + } + if (m.oc != null && m.hasOwnProperty("oc")) { + d.oc = m.oc; + if (o.oneofs) + d._oc = "oc"; + } + if (m.lc != null && m.hasOwnProperty("lc")) { + d.lc = m.lc; + if (o.oneofs) + d._lc = "lc"; + } + if (m.iosAppExtension != null && m.hasOwnProperty("iosAppExtension")) { + d.iosAppExtension = o.enums === String ? $root.proto.ClientPayload.IOSAppExtension[m.iosAppExtension] === undefined ? m.iosAppExtension : $root.proto.ClientPayload.IOSAppExtension[m.iosAppExtension] : m.iosAppExtension; + if (o.oneofs) + d._iosAppExtension = "iosAppExtension"; + } + if (m.fbAppId != null && m.hasOwnProperty("fbAppId")) { + if (typeof m.fbAppId === "number") + d.fbAppId = o.longs === String ? String(m.fbAppId) : m.fbAppId; + else + d.fbAppId = o.longs === String ? longToString(m.fbAppId, true) : o.longs === Number ? longToNumber(m.fbAppId, true) : m.fbAppId; + if (o.oneofs) + d._fbAppId = "fbAppId"; + } + if (m.fbDeviceId != null && m.hasOwnProperty("fbDeviceId")) { + d.fbDeviceId = o.bytes === String ? $util.base64.encode(m.fbDeviceId, 0, m.fbDeviceId.length) : o.bytes === Array ? Array.prototype.slice.call(m.fbDeviceId) : m.fbDeviceId; + if (o.oneofs) + d._fbDeviceId = "fbDeviceId"; + } + if (m.pull != null && m.hasOwnProperty("pull")) { + d.pull = m.pull; + if (o.oneofs) + d._pull = "pull"; + } + if (m.paddingBytes != null && m.hasOwnProperty("paddingBytes")) { + d.paddingBytes = o.bytes === String ? $util.base64.encode(m.paddingBytes, 0, m.paddingBytes.length) : o.bytes === Array ? Array.prototype.slice.call(m.paddingBytes) : m.paddingBytes; + if (o.oneofs) + d._paddingBytes = "paddingBytes"; + } + if (m.yearClass != null && m.hasOwnProperty("yearClass")) { + d.yearClass = m.yearClass; + if (o.oneofs) + d._yearClass = "yearClass"; + } + if (m.memClass != null && m.hasOwnProperty("memClass")) { + d.memClass = m.memClass; + if (o.oneofs) + d._memClass = "memClass"; + } + if (m.interopData != null && m.hasOwnProperty("interopData")) { + d.interopData = $root.proto.ClientPayload.InteropData.toObject(m.interopData, o); + if (o.oneofs) + d._interopData = "interopData"; + } + if (m.trafficAnonymization != null && m.hasOwnProperty("trafficAnonymization")) { + d.trafficAnonymization = o.enums === String ? $root.proto.ClientPayload.TrafficAnonymization[m.trafficAnonymization] === undefined ? m.trafficAnonymization : $root.proto.ClientPayload.TrafficAnonymization[m.trafficAnonymization] : m.trafficAnonymization; + if (o.oneofs) + d._trafficAnonymization = "trafficAnonymization"; + } + if (m.lidDbMigrated != null && m.hasOwnProperty("lidDbMigrated")) { + d.lidDbMigrated = m.lidDbMigrated; + if (o.oneofs) + d._lidDbMigrated = "lidDbMigrated"; + } + if (m.accountType != null && m.hasOwnProperty("accountType")) { + d.accountType = o.enums === String ? $root.proto.ClientPayload.AccountType[m.accountType] === undefined ? m.accountType : $root.proto.ClientPayload.AccountType[m.accountType] : m.accountType; + if (o.oneofs) + d._accountType = "accountType"; + } + if (m.connectionSequenceInfo != null && m.hasOwnProperty("connectionSequenceInfo")) { + d.connectionSequenceInfo = m.connectionSequenceInfo; + if (o.oneofs) + d._connectionSequenceInfo = "connectionSequenceInfo"; + } + if (m.paaLink != null && m.hasOwnProperty("paaLink")) { + d.paaLink = m.paaLink; + if (o.oneofs) + d._paaLink = "paaLink"; + } + if (m.preacksCount != null && m.hasOwnProperty("preacksCount")) { + d.preacksCount = m.preacksCount; + if (o.oneofs) + d._preacksCount = "preacksCount"; + } + if (m.processingQueueSize != null && m.hasOwnProperty("processingQueueSize")) { + d.processingQueueSize = m.processingQueueSize; + if (o.oneofs) + d._processingQueueSize = "processingQueueSize"; + } + return d; + }; + + ClientPayload.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ClientPayload.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload"; + }; + + ClientPayload.AccountType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DEFAULT"] = 0; + values[valuesById[1] = "GUEST"] = 1; + return values; + })(); + + ClientPayload.ConnectReason = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "PUSH"] = 0; + values[valuesById[1] = "USER_ACTIVATED"] = 1; + values[valuesById[2] = "SCHEDULED"] = 2; + values[valuesById[3] = "ERROR_RECONNECT"] = 3; + values[valuesById[4] = "NETWORK_SWITCH"] = 4; + values[valuesById[5] = "PING_RECONNECT"] = 5; + values[valuesById[6] = "UNKNOWN"] = 6; + return values; + })(); + + ClientPayload.ConnectType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "CELLULAR_UNKNOWN"] = 0; + values[valuesById[1] = "WIFI_UNKNOWN"] = 1; + values[valuesById[100] = "CELLULAR_EDGE"] = 100; + values[valuesById[101] = "CELLULAR_IDEN"] = 101; + values[valuesById[102] = "CELLULAR_UMTS"] = 102; + values[valuesById[103] = "CELLULAR_EVDO"] = 103; + values[valuesById[104] = "CELLULAR_GPRS"] = 104; + values[valuesById[105] = "CELLULAR_HSDPA"] = 105; + values[valuesById[106] = "CELLULAR_HSUPA"] = 106; + values[valuesById[107] = "CELLULAR_HSPA"] = 107; + values[valuesById[108] = "CELLULAR_CDMA"] = 108; + values[valuesById[109] = "CELLULAR_1XRTT"] = 109; + values[valuesById[110] = "CELLULAR_EHRPD"] = 110; + values[valuesById[111] = "CELLULAR_LTE"] = 111; + values[valuesById[112] = "CELLULAR_HSPAP"] = 112; + return values; + })(); + + ClientPayload.DNSSource = (function() { + + function DNSSource(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DNSSource.prototype.dnsMethod = null; + DNSSource.prototype.appCached = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DNSSource.prototype, "_dnsMethod", { + get: $util.oneOfGetter($oneOfFields = ["dnsMethod"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DNSSource.prototype, "_appCached", { + get: $util.oneOfGetter($oneOfFields = ["appCached"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DNSSource.create = function create(properties) { + return new DNSSource(properties); + }; + + DNSSource.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.dnsMethod != null && Object.hasOwnProperty.call(m, "dnsMethod")) + w.uint32(120).int32(m.dnsMethod); + if (m.appCached != null && Object.hasOwnProperty.call(m, "appCached")) + w.uint32(128).bool(m.appCached); + return w; + }; + + DNSSource.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload.DNSSource(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 15: { + m.dnsMethod = r.int32(); + break; + } + case 16: { + m.appCached = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DNSSource.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload.DNSSource) + return d; + var m = new $root.proto.ClientPayload.DNSSource(); + switch (d.dnsMethod) { + default: + if (typeof d.dnsMethod === "number") { + m.dnsMethod = d.dnsMethod; + break; + } + break; + case "SYSTEM": + case 0: + m.dnsMethod = 0; + break; + case "GOOGLE": + case 1: + m.dnsMethod = 1; + break; + case "HARDCODED": + case 2: + m.dnsMethod = 2; + break; + case "OVERRIDE": + case 3: + m.dnsMethod = 3; + break; + case "FALLBACK": + case 4: + m.dnsMethod = 4; + break; + case "MNS": + case 5: + m.dnsMethod = 5; + break; + } + if (d.appCached != null) { + m.appCached = Boolean(d.appCached); + } + return m; + }; + + DNSSource.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.dnsMethod != null && m.hasOwnProperty("dnsMethod")) { + d.dnsMethod = o.enums === String ? $root.proto.ClientPayload.DNSSource.DNSResolutionMethod[m.dnsMethod] === undefined ? m.dnsMethod : $root.proto.ClientPayload.DNSSource.DNSResolutionMethod[m.dnsMethod] : m.dnsMethod; + if (o.oneofs) + d._dnsMethod = "dnsMethod"; + } + if (m.appCached != null && m.hasOwnProperty("appCached")) { + d.appCached = m.appCached; + if (o.oneofs) + d._appCached = "appCached"; + } + return d; + }; + + DNSSource.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DNSSource.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload.DNSSource"; + }; + + DNSSource.DNSResolutionMethod = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SYSTEM"] = 0; + values[valuesById[1] = "GOOGLE"] = 1; + values[valuesById[2] = "HARDCODED"] = 2; + values[valuesById[3] = "OVERRIDE"] = 3; + values[valuesById[4] = "FALLBACK"] = 4; + values[valuesById[5] = "MNS"] = 5; + return values; + })(); + + return DNSSource; + })(); + + ClientPayload.DevicePairingRegistrationData = (function() { + + function DevicePairingRegistrationData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DevicePairingRegistrationData.prototype.eRegid = null; + DevicePairingRegistrationData.prototype.eKeytype = null; + DevicePairingRegistrationData.prototype.eIdent = null; + DevicePairingRegistrationData.prototype.eSkeyId = null; + DevicePairingRegistrationData.prototype.eSkeyVal = null; + DevicePairingRegistrationData.prototype.eSkeySig = null; + DevicePairingRegistrationData.prototype.buildHash = null; + DevicePairingRegistrationData.prototype.deviceProps = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_eRegid", { + get: $util.oneOfGetter($oneOfFields = ["eRegid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_eKeytype", { + get: $util.oneOfGetter($oneOfFields = ["eKeytype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_eIdent", { + get: $util.oneOfGetter($oneOfFields = ["eIdent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_eSkeyId", { + get: $util.oneOfGetter($oneOfFields = ["eSkeyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_eSkeyVal", { + get: $util.oneOfGetter($oneOfFields = ["eSkeyVal"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_eSkeySig", { + get: $util.oneOfGetter($oneOfFields = ["eSkeySig"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_buildHash", { + get: $util.oneOfGetter($oneOfFields = ["buildHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DevicePairingRegistrationData.prototype, "_deviceProps", { + get: $util.oneOfGetter($oneOfFields = ["deviceProps"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DevicePairingRegistrationData.create = function create(properties) { + return new DevicePairingRegistrationData(properties); + }; + + DevicePairingRegistrationData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.eRegid != null && Object.hasOwnProperty.call(m, "eRegid")) + w.uint32(10).bytes(m.eRegid); + if (m.eKeytype != null && Object.hasOwnProperty.call(m, "eKeytype")) + w.uint32(18).bytes(m.eKeytype); + if (m.eIdent != null && Object.hasOwnProperty.call(m, "eIdent")) + w.uint32(26).bytes(m.eIdent); + if (m.eSkeyId != null && Object.hasOwnProperty.call(m, "eSkeyId")) + w.uint32(34).bytes(m.eSkeyId); + if (m.eSkeyVal != null && Object.hasOwnProperty.call(m, "eSkeyVal")) + w.uint32(42).bytes(m.eSkeyVal); + if (m.eSkeySig != null && Object.hasOwnProperty.call(m, "eSkeySig")) + w.uint32(50).bytes(m.eSkeySig); + if (m.buildHash != null && Object.hasOwnProperty.call(m, "buildHash")) + w.uint32(58).bytes(m.buildHash); + if (m.deviceProps != null && Object.hasOwnProperty.call(m, "deviceProps")) + w.uint32(66).bytes(m.deviceProps); + return w; + }; + + DevicePairingRegistrationData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload.DevicePairingRegistrationData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.eRegid = r.bytes(); + break; + } + case 2: { + m.eKeytype = r.bytes(); + break; + } + case 3: { + m.eIdent = r.bytes(); + break; + } + case 4: { + m.eSkeyId = r.bytes(); + break; + } + case 5: { + m.eSkeyVal = r.bytes(); + break; + } + case 6: { + m.eSkeySig = r.bytes(); + break; + } + case 7: { + m.buildHash = r.bytes(); + break; + } + case 8: { + m.deviceProps = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DevicePairingRegistrationData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload.DevicePairingRegistrationData) + return d; + var m = new $root.proto.ClientPayload.DevicePairingRegistrationData(); + if (d.eRegid != null) { + if (typeof d.eRegid === "string") + $util.base64.decode(d.eRegid, m.eRegid = $util.newBuffer($util.base64.length(d.eRegid)), 0); + else if (d.eRegid.length >= 0) + m.eRegid = d.eRegid; + } + if (d.eKeytype != null) { + if (typeof d.eKeytype === "string") + $util.base64.decode(d.eKeytype, m.eKeytype = $util.newBuffer($util.base64.length(d.eKeytype)), 0); + else if (d.eKeytype.length >= 0) + m.eKeytype = d.eKeytype; + } + if (d.eIdent != null) { + if (typeof d.eIdent === "string") + $util.base64.decode(d.eIdent, m.eIdent = $util.newBuffer($util.base64.length(d.eIdent)), 0); + else if (d.eIdent.length >= 0) + m.eIdent = d.eIdent; + } + if (d.eSkeyId != null) { + if (typeof d.eSkeyId === "string") + $util.base64.decode(d.eSkeyId, m.eSkeyId = $util.newBuffer($util.base64.length(d.eSkeyId)), 0); + else if (d.eSkeyId.length >= 0) + m.eSkeyId = d.eSkeyId; + } + if (d.eSkeyVal != null) { + if (typeof d.eSkeyVal === "string") + $util.base64.decode(d.eSkeyVal, m.eSkeyVal = $util.newBuffer($util.base64.length(d.eSkeyVal)), 0); + else if (d.eSkeyVal.length >= 0) + m.eSkeyVal = d.eSkeyVal; + } + if (d.eSkeySig != null) { + if (typeof d.eSkeySig === "string") + $util.base64.decode(d.eSkeySig, m.eSkeySig = $util.newBuffer($util.base64.length(d.eSkeySig)), 0); + else if (d.eSkeySig.length >= 0) + m.eSkeySig = d.eSkeySig; + } + if (d.buildHash != null) { + if (typeof d.buildHash === "string") + $util.base64.decode(d.buildHash, m.buildHash = $util.newBuffer($util.base64.length(d.buildHash)), 0); + else if (d.buildHash.length >= 0) + m.buildHash = d.buildHash; + } + if (d.deviceProps != null) { + if (typeof d.deviceProps === "string") + $util.base64.decode(d.deviceProps, m.deviceProps = $util.newBuffer($util.base64.length(d.deviceProps)), 0); + else if (d.deviceProps.length >= 0) + m.deviceProps = d.deviceProps; + } + return m; + }; + + DevicePairingRegistrationData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.eRegid != null && m.hasOwnProperty("eRegid")) { + d.eRegid = o.bytes === String ? $util.base64.encode(m.eRegid, 0, m.eRegid.length) : o.bytes === Array ? Array.prototype.slice.call(m.eRegid) : m.eRegid; + if (o.oneofs) + d._eRegid = "eRegid"; + } + if (m.eKeytype != null && m.hasOwnProperty("eKeytype")) { + d.eKeytype = o.bytes === String ? $util.base64.encode(m.eKeytype, 0, m.eKeytype.length) : o.bytes === Array ? Array.prototype.slice.call(m.eKeytype) : m.eKeytype; + if (o.oneofs) + d._eKeytype = "eKeytype"; + } + if (m.eIdent != null && m.hasOwnProperty("eIdent")) { + d.eIdent = o.bytes === String ? $util.base64.encode(m.eIdent, 0, m.eIdent.length) : o.bytes === Array ? Array.prototype.slice.call(m.eIdent) : m.eIdent; + if (o.oneofs) + d._eIdent = "eIdent"; + } + if (m.eSkeyId != null && m.hasOwnProperty("eSkeyId")) { + d.eSkeyId = o.bytes === String ? $util.base64.encode(m.eSkeyId, 0, m.eSkeyId.length) : o.bytes === Array ? Array.prototype.slice.call(m.eSkeyId) : m.eSkeyId; + if (o.oneofs) + d._eSkeyId = "eSkeyId"; + } + if (m.eSkeyVal != null && m.hasOwnProperty("eSkeyVal")) { + d.eSkeyVal = o.bytes === String ? $util.base64.encode(m.eSkeyVal, 0, m.eSkeyVal.length) : o.bytes === Array ? Array.prototype.slice.call(m.eSkeyVal) : m.eSkeyVal; + if (o.oneofs) + d._eSkeyVal = "eSkeyVal"; + } + if (m.eSkeySig != null && m.hasOwnProperty("eSkeySig")) { + d.eSkeySig = o.bytes === String ? $util.base64.encode(m.eSkeySig, 0, m.eSkeySig.length) : o.bytes === Array ? Array.prototype.slice.call(m.eSkeySig) : m.eSkeySig; + if (o.oneofs) + d._eSkeySig = "eSkeySig"; + } + if (m.buildHash != null && m.hasOwnProperty("buildHash")) { + d.buildHash = o.bytes === String ? $util.base64.encode(m.buildHash, 0, m.buildHash.length) : o.bytes === Array ? Array.prototype.slice.call(m.buildHash) : m.buildHash; + if (o.oneofs) + d._buildHash = "buildHash"; + } + if (m.deviceProps != null && m.hasOwnProperty("deviceProps")) { + d.deviceProps = o.bytes === String ? $util.base64.encode(m.deviceProps, 0, m.deviceProps.length) : o.bytes === Array ? Array.prototype.slice.call(m.deviceProps) : m.deviceProps; + if (o.oneofs) + d._deviceProps = "deviceProps"; + } + return d; + }; + + DevicePairingRegistrationData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DevicePairingRegistrationData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload.DevicePairingRegistrationData"; + }; + + return DevicePairingRegistrationData; + })(); + + ClientPayload.IOSAppExtension = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SHARE_EXTENSION"] = 0; + values[valuesById[1] = "SERVICE_EXTENSION"] = 1; + values[valuesById[2] = "INTENTS_EXTENSION"] = 2; + return values; + })(); + + ClientPayload.InteropData = (function() { + + function InteropData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InteropData.prototype.accountId = null; + InteropData.prototype.token = null; + InteropData.prototype.enableReadReceipts = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteropData.prototype, "_accountId", { + get: $util.oneOfGetter($oneOfFields = ["accountId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteropData.prototype, "_token", { + get: $util.oneOfGetter($oneOfFields = ["token"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteropData.prototype, "_enableReadReceipts", { + get: $util.oneOfGetter($oneOfFields = ["enableReadReceipts"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InteropData.create = function create(properties) { + return new InteropData(properties); + }; + + InteropData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.accountId != null && Object.hasOwnProperty.call(m, "accountId")) + w.uint32(8).uint64(m.accountId); + if (m.token != null && Object.hasOwnProperty.call(m, "token")) + w.uint32(18).bytes(m.token); + if (m.enableReadReceipts != null && Object.hasOwnProperty.call(m, "enableReadReceipts")) + w.uint32(24).bool(m.enableReadReceipts); + return w; + }; + + InteropData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload.InteropData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.accountId = r.uint64(); + break; + } + case 2: { + m.token = r.bytes(); + break; + } + case 3: { + m.enableReadReceipts = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InteropData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload.InteropData) + return d; + var m = new $root.proto.ClientPayload.InteropData(); + if (d.accountId != null) { + if ($util.Long) + (m.accountId = $util.Long.fromValue(d.accountId)).unsigned = true; + else if (typeof d.accountId === "string") + m.accountId = parseInt(d.accountId, 10); + else if (typeof d.accountId === "number") + m.accountId = d.accountId; + else if (typeof d.accountId === "object") + m.accountId = new $util.LongBits(d.accountId.low >>> 0, d.accountId.high >>> 0).toNumber(true); + } + if (d.token != null) { + if (typeof d.token === "string") + $util.base64.decode(d.token, m.token = $util.newBuffer($util.base64.length(d.token)), 0); + else if (d.token.length >= 0) + m.token = d.token; + } + if (d.enableReadReceipts != null) { + m.enableReadReceipts = Boolean(d.enableReadReceipts); + } + return m; + }; + + InteropData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.accountId != null && m.hasOwnProperty("accountId")) { + if (typeof m.accountId === "number") + d.accountId = o.longs === String ? String(m.accountId) : m.accountId; + else + d.accountId = o.longs === String ? longToString(m.accountId, true) : o.longs === Number ? longToNumber(m.accountId, true) : m.accountId; + if (o.oneofs) + d._accountId = "accountId"; + } + if (m.token != null && m.hasOwnProperty("token")) { + d.token = o.bytes === String ? $util.base64.encode(m.token, 0, m.token.length) : o.bytes === Array ? Array.prototype.slice.call(m.token) : m.token; + if (o.oneofs) + d._token = "token"; + } + if (m.enableReadReceipts != null && m.hasOwnProperty("enableReadReceipts")) { + d.enableReadReceipts = m.enableReadReceipts; + if (o.oneofs) + d._enableReadReceipts = "enableReadReceipts"; + } + return d; + }; + + InteropData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InteropData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload.InteropData"; + }; + + return InteropData; + })(); + + ClientPayload.Product = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "WHATSAPP"] = 0; + values[valuesById[1] = "MESSENGER"] = 1; + values[valuesById[2] = "INTEROP"] = 2; + values[valuesById[3] = "INTEROP_MSGR"] = 3; + values[valuesById[4] = "WHATSAPP_LID"] = 4; + return values; + })(); + + ClientPayload.TrafficAnonymization = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "OFF"] = 0; + values[valuesById[1] = "STANDARD"] = 1; + return values; + })(); + + ClientPayload.UserAgent = (function() { + + function UserAgent(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UserAgent.prototype.platform = null; + UserAgent.prototype.appVersion = null; + UserAgent.prototype.mcc = null; + UserAgent.prototype.mnc = null; + UserAgent.prototype.osVersion = null; + UserAgent.prototype.manufacturer = null; + UserAgent.prototype.device = null; + UserAgent.prototype.osBuildNumber = null; + UserAgent.prototype.phoneId = null; + UserAgent.prototype.releaseChannel = null; + UserAgent.prototype.localeLanguageIso6391 = null; + UserAgent.prototype.localeCountryIso31661Alpha2 = null; + UserAgent.prototype.deviceBoard = null; + UserAgent.prototype.deviceExpId = null; + UserAgent.prototype.deviceType = null; + UserAgent.prototype.deviceModelType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_platform", { + get: $util.oneOfGetter($oneOfFields = ["platform"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_appVersion", { + get: $util.oneOfGetter($oneOfFields = ["appVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_mcc", { + get: $util.oneOfGetter($oneOfFields = ["mcc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_mnc", { + get: $util.oneOfGetter($oneOfFields = ["mnc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_osVersion", { + get: $util.oneOfGetter($oneOfFields = ["osVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_manufacturer", { + get: $util.oneOfGetter($oneOfFields = ["manufacturer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_device", { + get: $util.oneOfGetter($oneOfFields = ["device"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_osBuildNumber", { + get: $util.oneOfGetter($oneOfFields = ["osBuildNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_phoneId", { + get: $util.oneOfGetter($oneOfFields = ["phoneId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_releaseChannel", { + get: $util.oneOfGetter($oneOfFields = ["releaseChannel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_localeLanguageIso6391", { + get: $util.oneOfGetter($oneOfFields = ["localeLanguageIso6391"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_localeCountryIso31661Alpha2", { + get: $util.oneOfGetter($oneOfFields = ["localeCountryIso31661Alpha2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_deviceBoard", { + get: $util.oneOfGetter($oneOfFields = ["deviceBoard"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_deviceExpId", { + get: $util.oneOfGetter($oneOfFields = ["deviceExpId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_deviceType", { + get: $util.oneOfGetter($oneOfFields = ["deviceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserAgent.prototype, "_deviceModelType", { + get: $util.oneOfGetter($oneOfFields = ["deviceModelType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UserAgent.create = function create(properties) { + return new UserAgent(properties); + }; + + UserAgent.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.platform != null && Object.hasOwnProperty.call(m, "platform")) + w.uint32(8).int32(m.platform); + if (m.appVersion != null && Object.hasOwnProperty.call(m, "appVersion")) + $root.proto.ClientPayload.UserAgent.AppVersion.encode(m.appVersion, w.uint32(18).fork()).ldelim(); + if (m.mcc != null && Object.hasOwnProperty.call(m, "mcc")) + w.uint32(26).string(m.mcc); + if (m.mnc != null && Object.hasOwnProperty.call(m, "mnc")) + w.uint32(34).string(m.mnc); + if (m.osVersion != null && Object.hasOwnProperty.call(m, "osVersion")) + w.uint32(42).string(m.osVersion); + if (m.manufacturer != null && Object.hasOwnProperty.call(m, "manufacturer")) + w.uint32(50).string(m.manufacturer); + if (m.device != null && Object.hasOwnProperty.call(m, "device")) + w.uint32(58).string(m.device); + if (m.osBuildNumber != null && Object.hasOwnProperty.call(m, "osBuildNumber")) + w.uint32(66).string(m.osBuildNumber); + if (m.phoneId != null && Object.hasOwnProperty.call(m, "phoneId")) + w.uint32(74).string(m.phoneId); + if (m.releaseChannel != null && Object.hasOwnProperty.call(m, "releaseChannel")) + w.uint32(80).int32(m.releaseChannel); + if (m.localeLanguageIso6391 != null && Object.hasOwnProperty.call(m, "localeLanguageIso6391")) + w.uint32(90).string(m.localeLanguageIso6391); + if (m.localeCountryIso31661Alpha2 != null && Object.hasOwnProperty.call(m, "localeCountryIso31661Alpha2")) + w.uint32(98).string(m.localeCountryIso31661Alpha2); + if (m.deviceBoard != null && Object.hasOwnProperty.call(m, "deviceBoard")) + w.uint32(106).string(m.deviceBoard); + if (m.deviceExpId != null && Object.hasOwnProperty.call(m, "deviceExpId")) + w.uint32(114).string(m.deviceExpId); + if (m.deviceType != null && Object.hasOwnProperty.call(m, "deviceType")) + w.uint32(120).int32(m.deviceType); + if (m.deviceModelType != null && Object.hasOwnProperty.call(m, "deviceModelType")) + w.uint32(130).string(m.deviceModelType); + return w; + }; + + UserAgent.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload.UserAgent(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.platform = r.int32(); + break; + } + case 2: { + m.appVersion = $root.proto.ClientPayload.UserAgent.AppVersion.decode(r, r.uint32()); + break; + } + case 3: { + m.mcc = r.string(); + break; + } + case 4: { + m.mnc = r.string(); + break; + } + case 5: { + m.osVersion = r.string(); + break; + } + case 6: { + m.manufacturer = r.string(); + break; + } + case 7: { + m.device = r.string(); + break; + } + case 8: { + m.osBuildNumber = r.string(); + break; + } + case 9: { + m.phoneId = r.string(); + break; + } + case 10: { + m.releaseChannel = r.int32(); + break; + } + case 11: { + m.localeLanguageIso6391 = r.string(); + break; + } + case 12: { + m.localeCountryIso31661Alpha2 = r.string(); + break; + } + case 13: { + m.deviceBoard = r.string(); + break; + } + case 14: { + m.deviceExpId = r.string(); + break; + } + case 15: { + m.deviceType = r.int32(); + break; + } + case 16: { + m.deviceModelType = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UserAgent.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload.UserAgent) + return d; + var m = new $root.proto.ClientPayload.UserAgent(); + switch (d.platform) { + default: + if (typeof d.platform === "number") { + m.platform = d.platform; + break; + } + break; + case "ANDROID": + case 0: + m.platform = 0; + break; + case "IOS": + case 1: + m.platform = 1; + break; + case "WINDOWS_PHONE": + case 2: + m.platform = 2; + break; + case "BLACKBERRY": + case 3: + m.platform = 3; + break; + case "BLACKBERRYX": + case 4: + m.platform = 4; + break; + case "S40": + case 5: + m.platform = 5; + break; + case "S60": + case 6: + m.platform = 6; + break; + case "PYTHON_CLIENT": + case 7: + m.platform = 7; + break; + case "TIZEN": + case 8: + m.platform = 8; + break; + case "ENTERPRISE": + case 9: + m.platform = 9; + break; + case "SMB_ANDROID": + case 10: + m.platform = 10; + break; + case "KAIOS": + case 11: + m.platform = 11; + break; + case "SMB_IOS": + case 12: + m.platform = 12; + break; + case "WINDOWS": + case 13: + m.platform = 13; + break; + case "WEB": + case 14: + m.platform = 14; + break; + case "PORTAL": + case 15: + m.platform = 15; + break; + case "GREEN_ANDROID": + case 16: + m.platform = 16; + break; + case "GREEN_IPHONE": + case 17: + m.platform = 17; + break; + case "BLUE_ANDROID": + case 18: + m.platform = 18; + break; + case "BLUE_IPHONE": + case 19: + m.platform = 19; + break; + case "FBLITE_ANDROID": + case 20: + m.platform = 20; + break; + case "MLITE_ANDROID": + case 21: + m.platform = 21; + break; + case "IGLITE_ANDROID": + case 22: + m.platform = 22; + break; + case "PAGE": + case 23: + m.platform = 23; + break; + case "MACOS": + case 24: + m.platform = 24; + break; + case "OCULUS_MSG": + case 25: + m.platform = 25; + break; + case "OCULUS_CALL": + case 26: + m.platform = 26; + break; + case "MILAN": + case 27: + m.platform = 27; + break; + case "CAPI": + case 28: + m.platform = 28; + break; + case "WEAROS": + case 29: + m.platform = 29; + break; + case "ARDEVICE": + case 30: + m.platform = 30; + break; + case "VRDEVICE": + case 31: + m.platform = 31; + break; + case "BLUE_WEB": + case 32: + m.platform = 32; + break; + case "IPAD": + case 33: + m.platform = 33; + break; + case "TEST": + case 34: + m.platform = 34; + break; + case "SMART_GLASSES": + case 35: + m.platform = 35; + break; + case "BLUE_VR": + case 36: + m.platform = 36; + break; + case "AR_WRIST": + case 37: + m.platform = 37; + break; + } + if (d.appVersion != null) { + if (typeof d.appVersion !== "object") + throw TypeError(".proto.ClientPayload.UserAgent.appVersion: object expected"); + m.appVersion = $root.proto.ClientPayload.UserAgent.AppVersion.fromObject(d.appVersion); + } + if (d.mcc != null) { + m.mcc = String(d.mcc); + } + if (d.mnc != null) { + m.mnc = String(d.mnc); + } + if (d.osVersion != null) { + m.osVersion = String(d.osVersion); + } + if (d.manufacturer != null) { + m.manufacturer = String(d.manufacturer); + } + if (d.device != null) { + m.device = String(d.device); + } + if (d.osBuildNumber != null) { + m.osBuildNumber = String(d.osBuildNumber); + } + if (d.phoneId != null) { + m.phoneId = String(d.phoneId); + } + switch (d.releaseChannel) { + default: + if (typeof d.releaseChannel === "number") { + m.releaseChannel = d.releaseChannel; + break; + } + break; + case "RELEASE": + case 0: + m.releaseChannel = 0; + break; + case "BETA": + case 1: + m.releaseChannel = 1; + break; + case "ALPHA": + case 2: + m.releaseChannel = 2; + break; + case "DEBUG": + case 3: + m.releaseChannel = 3; + break; + } + if (d.localeLanguageIso6391 != null) { + m.localeLanguageIso6391 = String(d.localeLanguageIso6391); + } + if (d.localeCountryIso31661Alpha2 != null) { + m.localeCountryIso31661Alpha2 = String(d.localeCountryIso31661Alpha2); + } + if (d.deviceBoard != null) { + m.deviceBoard = String(d.deviceBoard); + } + if (d.deviceExpId != null) { + m.deviceExpId = String(d.deviceExpId); + } + switch (d.deviceType) { + default: + if (typeof d.deviceType === "number") { + m.deviceType = d.deviceType; + break; + } + break; + case "PHONE": + case 0: + m.deviceType = 0; + break; + case "TABLET": + case 1: + m.deviceType = 1; + break; + case "DESKTOP": + case 2: + m.deviceType = 2; + break; + case "WEARABLE": + case 3: + m.deviceType = 3; + break; + case "VR": + case 4: + m.deviceType = 4; + break; + } + if (d.deviceModelType != null) { + m.deviceModelType = String(d.deviceModelType); + } + return m; + }; + + UserAgent.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.platform != null && m.hasOwnProperty("platform")) { + d.platform = o.enums === String ? $root.proto.ClientPayload.UserAgent.Platform[m.platform] === undefined ? m.platform : $root.proto.ClientPayload.UserAgent.Platform[m.platform] : m.platform; + if (o.oneofs) + d._platform = "platform"; + } + if (m.appVersion != null && m.hasOwnProperty("appVersion")) { + d.appVersion = $root.proto.ClientPayload.UserAgent.AppVersion.toObject(m.appVersion, o); + if (o.oneofs) + d._appVersion = "appVersion"; + } + if (m.mcc != null && m.hasOwnProperty("mcc")) { + d.mcc = m.mcc; + if (o.oneofs) + d._mcc = "mcc"; + } + if (m.mnc != null && m.hasOwnProperty("mnc")) { + d.mnc = m.mnc; + if (o.oneofs) + d._mnc = "mnc"; + } + if (m.osVersion != null && m.hasOwnProperty("osVersion")) { + d.osVersion = m.osVersion; + if (o.oneofs) + d._osVersion = "osVersion"; + } + if (m.manufacturer != null && m.hasOwnProperty("manufacturer")) { + d.manufacturer = m.manufacturer; + if (o.oneofs) + d._manufacturer = "manufacturer"; + } + if (m.device != null && m.hasOwnProperty("device")) { + d.device = m.device; + if (o.oneofs) + d._device = "device"; + } + if (m.osBuildNumber != null && m.hasOwnProperty("osBuildNumber")) { + d.osBuildNumber = m.osBuildNumber; + if (o.oneofs) + d._osBuildNumber = "osBuildNumber"; + } + if (m.phoneId != null && m.hasOwnProperty("phoneId")) { + d.phoneId = m.phoneId; + if (o.oneofs) + d._phoneId = "phoneId"; + } + if (m.releaseChannel != null && m.hasOwnProperty("releaseChannel")) { + d.releaseChannel = o.enums === String ? $root.proto.ClientPayload.UserAgent.ReleaseChannel[m.releaseChannel] === undefined ? m.releaseChannel : $root.proto.ClientPayload.UserAgent.ReleaseChannel[m.releaseChannel] : m.releaseChannel; + if (o.oneofs) + d._releaseChannel = "releaseChannel"; + } + if (m.localeLanguageIso6391 != null && m.hasOwnProperty("localeLanguageIso6391")) { + d.localeLanguageIso6391 = m.localeLanguageIso6391; + if (o.oneofs) + d._localeLanguageIso6391 = "localeLanguageIso6391"; + } + if (m.localeCountryIso31661Alpha2 != null && m.hasOwnProperty("localeCountryIso31661Alpha2")) { + d.localeCountryIso31661Alpha2 = m.localeCountryIso31661Alpha2; + if (o.oneofs) + d._localeCountryIso31661Alpha2 = "localeCountryIso31661Alpha2"; + } + if (m.deviceBoard != null && m.hasOwnProperty("deviceBoard")) { + d.deviceBoard = m.deviceBoard; + if (o.oneofs) + d._deviceBoard = "deviceBoard"; + } + if (m.deviceExpId != null && m.hasOwnProperty("deviceExpId")) { + d.deviceExpId = m.deviceExpId; + if (o.oneofs) + d._deviceExpId = "deviceExpId"; + } + if (m.deviceType != null && m.hasOwnProperty("deviceType")) { + d.deviceType = o.enums === String ? $root.proto.ClientPayload.UserAgent.DeviceType[m.deviceType] === undefined ? m.deviceType : $root.proto.ClientPayload.UserAgent.DeviceType[m.deviceType] : m.deviceType; + if (o.oneofs) + d._deviceType = "deviceType"; + } + if (m.deviceModelType != null && m.hasOwnProperty("deviceModelType")) { + d.deviceModelType = m.deviceModelType; + if (o.oneofs) + d._deviceModelType = "deviceModelType"; + } + return d; + }; + + UserAgent.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UserAgent.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload.UserAgent"; + }; + + UserAgent.AppVersion = (function() { + + function AppVersion(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppVersion.prototype.primary = null; + AppVersion.prototype.secondary = null; + AppVersion.prototype.tertiary = null; + AppVersion.prototype.quaternary = null; + AppVersion.prototype.quinary = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_primary", { + get: $util.oneOfGetter($oneOfFields = ["primary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_secondary", { + get: $util.oneOfGetter($oneOfFields = ["secondary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_tertiary", { + get: $util.oneOfGetter($oneOfFields = ["tertiary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_quaternary", { + get: $util.oneOfGetter($oneOfFields = ["quaternary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_quinary", { + get: $util.oneOfGetter($oneOfFields = ["quinary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AppVersion.create = function create(properties) { + return new AppVersion(properties); + }; + + AppVersion.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.primary != null && Object.hasOwnProperty.call(m, "primary")) + w.uint32(8).uint32(m.primary); + if (m.secondary != null && Object.hasOwnProperty.call(m, "secondary")) + w.uint32(16).uint32(m.secondary); + if (m.tertiary != null && Object.hasOwnProperty.call(m, "tertiary")) + w.uint32(24).uint32(m.tertiary); + if (m.quaternary != null && Object.hasOwnProperty.call(m, "quaternary")) + w.uint32(32).uint32(m.quaternary); + if (m.quinary != null && Object.hasOwnProperty.call(m, "quinary")) + w.uint32(40).uint32(m.quinary); + return w; + }; + + AppVersion.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload.UserAgent.AppVersion(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.primary = r.uint32(); + break; + } + case 2: { + m.secondary = r.uint32(); + break; + } + case 3: { + m.tertiary = r.uint32(); + break; + } + case 4: { + m.quaternary = r.uint32(); + break; + } + case 5: { + m.quinary = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppVersion.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload.UserAgent.AppVersion) + return d; + var m = new $root.proto.ClientPayload.UserAgent.AppVersion(); + if (d.primary != null) { + m.primary = d.primary >>> 0; + } + if (d.secondary != null) { + m.secondary = d.secondary >>> 0; + } + if (d.tertiary != null) { + m.tertiary = d.tertiary >>> 0; + } + if (d.quaternary != null) { + m.quaternary = d.quaternary >>> 0; + } + if (d.quinary != null) { + m.quinary = d.quinary >>> 0; + } + return m; + }; + + AppVersion.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.primary != null && m.hasOwnProperty("primary")) { + d.primary = m.primary; + if (o.oneofs) + d._primary = "primary"; + } + if (m.secondary != null && m.hasOwnProperty("secondary")) { + d.secondary = m.secondary; + if (o.oneofs) + d._secondary = "secondary"; + } + if (m.tertiary != null && m.hasOwnProperty("tertiary")) { + d.tertiary = m.tertiary; + if (o.oneofs) + d._tertiary = "tertiary"; + } + if (m.quaternary != null && m.hasOwnProperty("quaternary")) { + d.quaternary = m.quaternary; + if (o.oneofs) + d._quaternary = "quaternary"; + } + if (m.quinary != null && m.hasOwnProperty("quinary")) { + d.quinary = m.quinary; + if (o.oneofs) + d._quinary = "quinary"; + } + return d; + }; + + AppVersion.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppVersion.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload.UserAgent.AppVersion"; + }; + + return AppVersion; + })(); + + UserAgent.DeviceType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "PHONE"] = 0; + values[valuesById[1] = "TABLET"] = 1; + values[valuesById[2] = "DESKTOP"] = 2; + values[valuesById[3] = "WEARABLE"] = 3; + values[valuesById[4] = "VR"] = 4; + return values; + })(); + + UserAgent.Platform = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ANDROID"] = 0; + values[valuesById[1] = "IOS"] = 1; + values[valuesById[2] = "WINDOWS_PHONE"] = 2; + values[valuesById[3] = "BLACKBERRY"] = 3; + values[valuesById[4] = "BLACKBERRYX"] = 4; + values[valuesById[5] = "S40"] = 5; + values[valuesById[6] = "S60"] = 6; + values[valuesById[7] = "PYTHON_CLIENT"] = 7; + values[valuesById[8] = "TIZEN"] = 8; + values[valuesById[9] = "ENTERPRISE"] = 9; + values[valuesById[10] = "SMB_ANDROID"] = 10; + values[valuesById[11] = "KAIOS"] = 11; + values[valuesById[12] = "SMB_IOS"] = 12; + values[valuesById[13] = "WINDOWS"] = 13; + values[valuesById[14] = "WEB"] = 14; + values[valuesById[15] = "PORTAL"] = 15; + values[valuesById[16] = "GREEN_ANDROID"] = 16; + values[valuesById[17] = "GREEN_IPHONE"] = 17; + values[valuesById[18] = "BLUE_ANDROID"] = 18; + values[valuesById[19] = "BLUE_IPHONE"] = 19; + values[valuesById[20] = "FBLITE_ANDROID"] = 20; + values[valuesById[21] = "MLITE_ANDROID"] = 21; + values[valuesById[22] = "IGLITE_ANDROID"] = 22; + values[valuesById[23] = "PAGE"] = 23; + values[valuesById[24] = "MACOS"] = 24; + values[valuesById[25] = "OCULUS_MSG"] = 25; + values[valuesById[26] = "OCULUS_CALL"] = 26; + values[valuesById[27] = "MILAN"] = 27; + values[valuesById[28] = "CAPI"] = 28; + values[valuesById[29] = "WEAROS"] = 29; + values[valuesById[30] = "ARDEVICE"] = 30; + values[valuesById[31] = "VRDEVICE"] = 31; + values[valuesById[32] = "BLUE_WEB"] = 32; + values[valuesById[33] = "IPAD"] = 33; + values[valuesById[34] = "TEST"] = 34; + values[valuesById[35] = "SMART_GLASSES"] = 35; + values[valuesById[36] = "BLUE_VR"] = 36; + values[valuesById[37] = "AR_WRIST"] = 37; + return values; + })(); + + UserAgent.ReleaseChannel = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "RELEASE"] = 0; + values[valuesById[1] = "BETA"] = 1; + values[valuesById[2] = "ALPHA"] = 2; + values[valuesById[3] = "DEBUG"] = 3; + return values; + })(); + + return UserAgent; + })(); + + ClientPayload.WebInfo = (function() { + + function WebInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WebInfo.prototype.refToken = null; + WebInfo.prototype.version = null; + WebInfo.prototype.webdPayload = null; + WebInfo.prototype.webSubPlatform = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebInfo.prototype, "_refToken", { + get: $util.oneOfGetter($oneOfFields = ["refToken"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebInfo.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebInfo.prototype, "_webdPayload", { + get: $util.oneOfGetter($oneOfFields = ["webdPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebInfo.prototype, "_webSubPlatform", { + get: $util.oneOfGetter($oneOfFields = ["webSubPlatform"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WebInfo.create = function create(properties) { + return new WebInfo(properties); + }; + + WebInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.refToken != null && Object.hasOwnProperty.call(m, "refToken")) + w.uint32(10).string(m.refToken); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(18).string(m.version); + if (m.webdPayload != null && Object.hasOwnProperty.call(m, "webdPayload")) + $root.proto.ClientPayload.WebInfo.WebdPayload.encode(m.webdPayload, w.uint32(26).fork()).ldelim(); + if (m.webSubPlatform != null && Object.hasOwnProperty.call(m, "webSubPlatform")) + w.uint32(32).int32(m.webSubPlatform); + return w; + }; + + WebInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload.WebInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.refToken = r.string(); + break; + } + case 2: { + m.version = r.string(); + break; + } + case 3: { + m.webdPayload = $root.proto.ClientPayload.WebInfo.WebdPayload.decode(r, r.uint32()); + break; + } + case 4: { + m.webSubPlatform = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WebInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload.WebInfo) + return d; + var m = new $root.proto.ClientPayload.WebInfo(); + if (d.refToken != null) { + m.refToken = String(d.refToken); + } + if (d.version != null) { + m.version = String(d.version); + } + if (d.webdPayload != null) { + if (typeof d.webdPayload !== "object") + throw TypeError(".proto.ClientPayload.WebInfo.webdPayload: object expected"); + m.webdPayload = $root.proto.ClientPayload.WebInfo.WebdPayload.fromObject(d.webdPayload); + } + switch (d.webSubPlatform) { + default: + if (typeof d.webSubPlatform === "number") { + m.webSubPlatform = d.webSubPlatform; + break; + } + break; + case "WEB_BROWSER": + case 0: + m.webSubPlatform = 0; + break; + case "APP_STORE": + case 1: + m.webSubPlatform = 1; + break; + case "WIN_STORE": + case 2: + m.webSubPlatform = 2; + break; + case "DARWIN": + case 3: + m.webSubPlatform = 3; + break; + case "WIN32": + case 4: + m.webSubPlatform = 4; + break; + case "WIN_HYBRID": + case 5: + m.webSubPlatform = 5; + break; + } + return m; + }; + + WebInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.refToken != null && m.hasOwnProperty("refToken")) { + d.refToken = m.refToken; + if (o.oneofs) + d._refToken = "refToken"; + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = m.version; + if (o.oneofs) + d._version = "version"; + } + if (m.webdPayload != null && m.hasOwnProperty("webdPayload")) { + d.webdPayload = $root.proto.ClientPayload.WebInfo.WebdPayload.toObject(m.webdPayload, o); + if (o.oneofs) + d._webdPayload = "webdPayload"; + } + if (m.webSubPlatform != null && m.hasOwnProperty("webSubPlatform")) { + d.webSubPlatform = o.enums === String ? $root.proto.ClientPayload.WebInfo.WebSubPlatform[m.webSubPlatform] === undefined ? m.webSubPlatform : $root.proto.ClientPayload.WebInfo.WebSubPlatform[m.webSubPlatform] : m.webSubPlatform; + if (o.oneofs) + d._webSubPlatform = "webSubPlatform"; + } + return d; + }; + + WebInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WebInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload.WebInfo"; + }; + + WebInfo.WebSubPlatform = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "WEB_BROWSER"] = 0; + values[valuesById[1] = "APP_STORE"] = 1; + values[valuesById[2] = "WIN_STORE"] = 2; + values[valuesById[3] = "DARWIN"] = 3; + values[valuesById[4] = "WIN32"] = 4; + values[valuesById[5] = "WIN_HYBRID"] = 5; + return values; + })(); + + WebInfo.WebdPayload = (function() { + + function WebdPayload(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WebdPayload.prototype.usesParticipantInKey = null; + WebdPayload.prototype.supportsStarredMessages = null; + WebdPayload.prototype.supportsDocumentMessages = null; + WebdPayload.prototype.supportsUrlMessages = null; + WebdPayload.prototype.supportsMediaRetry = null; + WebdPayload.prototype.supportsE2EImage = null; + WebdPayload.prototype.supportsE2EVideo = null; + WebdPayload.prototype.supportsE2EAudio = null; + WebdPayload.prototype.supportsE2EDocument = null; + WebdPayload.prototype.documentTypes = null; + WebdPayload.prototype.features = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_usesParticipantInKey", { + get: $util.oneOfGetter($oneOfFields = ["usesParticipantInKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsStarredMessages", { + get: $util.oneOfGetter($oneOfFields = ["supportsStarredMessages"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsDocumentMessages", { + get: $util.oneOfGetter($oneOfFields = ["supportsDocumentMessages"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsUrlMessages", { + get: $util.oneOfGetter($oneOfFields = ["supportsUrlMessages"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsMediaRetry", { + get: $util.oneOfGetter($oneOfFields = ["supportsMediaRetry"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsE2EImage", { + get: $util.oneOfGetter($oneOfFields = ["supportsE2EImage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsE2EVideo", { + get: $util.oneOfGetter($oneOfFields = ["supportsE2EVideo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsE2EAudio", { + get: $util.oneOfGetter($oneOfFields = ["supportsE2EAudio"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_supportsE2EDocument", { + get: $util.oneOfGetter($oneOfFields = ["supportsE2EDocument"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_documentTypes", { + get: $util.oneOfGetter($oneOfFields = ["documentTypes"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebdPayload.prototype, "_features", { + get: $util.oneOfGetter($oneOfFields = ["features"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WebdPayload.create = function create(properties) { + return new WebdPayload(properties); + }; + + WebdPayload.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.usesParticipantInKey != null && Object.hasOwnProperty.call(m, "usesParticipantInKey")) + w.uint32(8).bool(m.usesParticipantInKey); + if (m.supportsStarredMessages != null && Object.hasOwnProperty.call(m, "supportsStarredMessages")) + w.uint32(16).bool(m.supportsStarredMessages); + if (m.supportsDocumentMessages != null && Object.hasOwnProperty.call(m, "supportsDocumentMessages")) + w.uint32(24).bool(m.supportsDocumentMessages); + if (m.supportsUrlMessages != null && Object.hasOwnProperty.call(m, "supportsUrlMessages")) + w.uint32(32).bool(m.supportsUrlMessages); + if (m.supportsMediaRetry != null && Object.hasOwnProperty.call(m, "supportsMediaRetry")) + w.uint32(40).bool(m.supportsMediaRetry); + if (m.supportsE2EImage != null && Object.hasOwnProperty.call(m, "supportsE2EImage")) + w.uint32(48).bool(m.supportsE2EImage); + if (m.supportsE2EVideo != null && Object.hasOwnProperty.call(m, "supportsE2EVideo")) + w.uint32(56).bool(m.supportsE2EVideo); + if (m.supportsE2EAudio != null && Object.hasOwnProperty.call(m, "supportsE2EAudio")) + w.uint32(64).bool(m.supportsE2EAudio); + if (m.supportsE2EDocument != null && Object.hasOwnProperty.call(m, "supportsE2EDocument")) + w.uint32(72).bool(m.supportsE2EDocument); + if (m.documentTypes != null && Object.hasOwnProperty.call(m, "documentTypes")) + w.uint32(82).string(m.documentTypes); + if (m.features != null && Object.hasOwnProperty.call(m, "features")) + w.uint32(90).bytes(m.features); + return w; + }; + + WebdPayload.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ClientPayload.WebInfo.WebdPayload(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.usesParticipantInKey = r.bool(); + break; + } + case 2: { + m.supportsStarredMessages = r.bool(); + break; + } + case 3: { + m.supportsDocumentMessages = r.bool(); + break; + } + case 4: { + m.supportsUrlMessages = r.bool(); + break; + } + case 5: { + m.supportsMediaRetry = r.bool(); + break; + } + case 6: { + m.supportsE2EImage = r.bool(); + break; + } + case 7: { + m.supportsE2EVideo = r.bool(); + break; + } + case 8: { + m.supportsE2EAudio = r.bool(); + break; + } + case 9: { + m.supportsE2EDocument = r.bool(); + break; + } + case 10: { + m.documentTypes = r.string(); + break; + } + case 11: { + m.features = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WebdPayload.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ClientPayload.WebInfo.WebdPayload) + return d; + var m = new $root.proto.ClientPayload.WebInfo.WebdPayload(); + if (d.usesParticipantInKey != null) { + m.usesParticipantInKey = Boolean(d.usesParticipantInKey); + } + if (d.supportsStarredMessages != null) { + m.supportsStarredMessages = Boolean(d.supportsStarredMessages); + } + if (d.supportsDocumentMessages != null) { + m.supportsDocumentMessages = Boolean(d.supportsDocumentMessages); + } + if (d.supportsUrlMessages != null) { + m.supportsUrlMessages = Boolean(d.supportsUrlMessages); + } + if (d.supportsMediaRetry != null) { + m.supportsMediaRetry = Boolean(d.supportsMediaRetry); + } + if (d.supportsE2EImage != null) { + m.supportsE2EImage = Boolean(d.supportsE2EImage); + } + if (d.supportsE2EVideo != null) { + m.supportsE2EVideo = Boolean(d.supportsE2EVideo); + } + if (d.supportsE2EAudio != null) { + m.supportsE2EAudio = Boolean(d.supportsE2EAudio); + } + if (d.supportsE2EDocument != null) { + m.supportsE2EDocument = Boolean(d.supportsE2EDocument); + } + if (d.documentTypes != null) { + m.documentTypes = String(d.documentTypes); + } + if (d.features != null) { + if (typeof d.features === "string") + $util.base64.decode(d.features, m.features = $util.newBuffer($util.base64.length(d.features)), 0); + else if (d.features.length >= 0) + m.features = d.features; + } + return m; + }; + + WebdPayload.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.usesParticipantInKey != null && m.hasOwnProperty("usesParticipantInKey")) { + d.usesParticipantInKey = m.usesParticipantInKey; + if (o.oneofs) + d._usesParticipantInKey = "usesParticipantInKey"; + } + if (m.supportsStarredMessages != null && m.hasOwnProperty("supportsStarredMessages")) { + d.supportsStarredMessages = m.supportsStarredMessages; + if (o.oneofs) + d._supportsStarredMessages = "supportsStarredMessages"; + } + if (m.supportsDocumentMessages != null && m.hasOwnProperty("supportsDocumentMessages")) { + d.supportsDocumentMessages = m.supportsDocumentMessages; + if (o.oneofs) + d._supportsDocumentMessages = "supportsDocumentMessages"; + } + if (m.supportsUrlMessages != null && m.hasOwnProperty("supportsUrlMessages")) { + d.supportsUrlMessages = m.supportsUrlMessages; + if (o.oneofs) + d._supportsUrlMessages = "supportsUrlMessages"; + } + if (m.supportsMediaRetry != null && m.hasOwnProperty("supportsMediaRetry")) { + d.supportsMediaRetry = m.supportsMediaRetry; + if (o.oneofs) + d._supportsMediaRetry = "supportsMediaRetry"; + } + if (m.supportsE2EImage != null && m.hasOwnProperty("supportsE2EImage")) { + d.supportsE2EImage = m.supportsE2EImage; + if (o.oneofs) + d._supportsE2EImage = "supportsE2EImage"; + } + if (m.supportsE2EVideo != null && m.hasOwnProperty("supportsE2EVideo")) { + d.supportsE2EVideo = m.supportsE2EVideo; + if (o.oneofs) + d._supportsE2EVideo = "supportsE2EVideo"; + } + if (m.supportsE2EAudio != null && m.hasOwnProperty("supportsE2EAudio")) { + d.supportsE2EAudio = m.supportsE2EAudio; + if (o.oneofs) + d._supportsE2EAudio = "supportsE2EAudio"; + } + if (m.supportsE2EDocument != null && m.hasOwnProperty("supportsE2EDocument")) { + d.supportsE2EDocument = m.supportsE2EDocument; + if (o.oneofs) + d._supportsE2EDocument = "supportsE2EDocument"; + } + if (m.documentTypes != null && m.hasOwnProperty("documentTypes")) { + d.documentTypes = m.documentTypes; + if (o.oneofs) + d._documentTypes = "documentTypes"; + } + if (m.features != null && m.hasOwnProperty("features")) { + d.features = o.bytes === String ? $util.base64.encode(m.features, 0, m.features.length) : o.bytes === Array ? Array.prototype.slice.call(m.features) : m.features; + if (o.oneofs) + d._features = "features"; + } + return d; + }; + + WebdPayload.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WebdPayload.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ClientPayload.WebInfo.WebdPayload"; + }; + + return WebdPayload; + })(); + + return WebInfo; + })(); + + return ClientPayload; + })(); + + proto.CollectionName = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "COLLECTION_NAME_UNKNOWN"] = 0; + values[valuesById[1] = "REGULAR"] = 1; + values[valuesById[2] = "REGULAR_LOW"] = 2; + values[valuesById[3] = "REGULAR_HIGH"] = 3; + values[valuesById[4] = "CRITICAL_BLOCK"] = 4; + values[valuesById[5] = "CRITICAL_UNBLOCK_LOW"] = 5; + return values; + })(); + + proto.CommentMetadata = (function() { + + function CommentMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CommentMetadata.prototype.commentParentKey = null; + CommentMetadata.prototype.replyCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CommentMetadata.prototype, "_commentParentKey", { + get: $util.oneOfGetter($oneOfFields = ["commentParentKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CommentMetadata.prototype, "_replyCount", { + get: $util.oneOfGetter($oneOfFields = ["replyCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CommentMetadata.create = function create(properties) { + return new CommentMetadata(properties); + }; + + CommentMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.commentParentKey != null && Object.hasOwnProperty.call(m, "commentParentKey")) + $root.proto.MessageKey.encode(m.commentParentKey, w.uint32(10).fork()).ldelim(); + if (m.replyCount != null && Object.hasOwnProperty.call(m, "replyCount")) + w.uint32(16).uint32(m.replyCount); + return w; + }; + + CommentMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CommentMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.commentParentKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.replyCount = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CommentMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CommentMetadata) + return d; + var m = new $root.proto.CommentMetadata(); + if (d.commentParentKey != null) { + if (typeof d.commentParentKey !== "object") + throw TypeError(".proto.CommentMetadata.commentParentKey: object expected"); + m.commentParentKey = $root.proto.MessageKey.fromObject(d.commentParentKey); + } + if (d.replyCount != null) { + m.replyCount = d.replyCount >>> 0; + } + return m; + }; + + CommentMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.commentParentKey != null && m.hasOwnProperty("commentParentKey")) { + d.commentParentKey = $root.proto.MessageKey.toObject(m.commentParentKey, o); + if (o.oneofs) + d._commentParentKey = "commentParentKey"; + } + if (m.replyCount != null && m.hasOwnProperty("replyCount")) { + d.replyCount = m.replyCount; + if (o.oneofs) + d._replyCount = "replyCount"; + } + return d; + }; + + CommentMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CommentMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CommentMetadata"; + }; + + return CommentMetadata; + })(); + + proto.CompanionCommitment = (function() { + + function CompanionCommitment(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CompanionCommitment.prototype.hash = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionCommitment.prototype, "_hash", { + get: $util.oneOfGetter($oneOfFields = ["hash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CompanionCommitment.create = function create(properties) { + return new CompanionCommitment(properties); + }; + + CompanionCommitment.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.hash != null && Object.hasOwnProperty.call(m, "hash")) + w.uint32(10).bytes(m.hash); + return w; + }; + + CompanionCommitment.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CompanionCommitment(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.hash = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CompanionCommitment.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CompanionCommitment) + return d; + var m = new $root.proto.CompanionCommitment(); + if (d.hash != null) { + if (typeof d.hash === "string") + $util.base64.decode(d.hash, m.hash = $util.newBuffer($util.base64.length(d.hash)), 0); + else if (d.hash.length >= 0) + m.hash = d.hash; + } + return m; + }; + + CompanionCommitment.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.hash != null && m.hasOwnProperty("hash")) { + d.hash = o.bytes === String ? $util.base64.encode(m.hash, 0, m.hash.length) : o.bytes === Array ? Array.prototype.slice.call(m.hash) : m.hash; + if (o.oneofs) + d._hash = "hash"; + } + return d; + }; + + CompanionCommitment.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CompanionCommitment.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CompanionCommitment"; + }; + + return CompanionCommitment; + })(); + + proto.CompanionEphemeralIdentity = (function() { + + function CompanionEphemeralIdentity(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CompanionEphemeralIdentity.prototype.publicKey = null; + CompanionEphemeralIdentity.prototype.deviceType = null; + CompanionEphemeralIdentity.prototype.ref = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionEphemeralIdentity.prototype, "_publicKey", { + get: $util.oneOfGetter($oneOfFields = ["publicKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionEphemeralIdentity.prototype, "_deviceType", { + get: $util.oneOfGetter($oneOfFields = ["deviceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionEphemeralIdentity.prototype, "_ref", { + get: $util.oneOfGetter($oneOfFields = ["ref"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CompanionEphemeralIdentity.create = function create(properties) { + return new CompanionEphemeralIdentity(properties); + }; + + CompanionEphemeralIdentity.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.publicKey != null && Object.hasOwnProperty.call(m, "publicKey")) + w.uint32(10).bytes(m.publicKey); + if (m.deviceType != null && Object.hasOwnProperty.call(m, "deviceType")) + w.uint32(16).int32(m.deviceType); + if (m.ref != null && Object.hasOwnProperty.call(m, "ref")) + w.uint32(26).string(m.ref); + return w; + }; + + CompanionEphemeralIdentity.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.CompanionEphemeralIdentity(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.publicKey = r.bytes(); + break; + } + case 2: { + m.deviceType = r.int32(); + break; + } + case 3: { + m.ref = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CompanionEphemeralIdentity.fromObject = function fromObject(d) { + if (d instanceof $root.proto.CompanionEphemeralIdentity) + return d; + var m = new $root.proto.CompanionEphemeralIdentity(); + if (d.publicKey != null) { + if (typeof d.publicKey === "string") + $util.base64.decode(d.publicKey, m.publicKey = $util.newBuffer($util.base64.length(d.publicKey)), 0); + else if (d.publicKey.length >= 0) + m.publicKey = d.publicKey; + } + switch (d.deviceType) { + default: + if (typeof d.deviceType === "number") { + m.deviceType = d.deviceType; + break; + } + break; + case "UNKNOWN": + case 0: + m.deviceType = 0; + break; + case "CHROME": + case 1: + m.deviceType = 1; + break; + case "FIREFOX": + case 2: + m.deviceType = 2; + break; + case "IE": + case 3: + m.deviceType = 3; + break; + case "OPERA": + case 4: + m.deviceType = 4; + break; + case "SAFARI": + case 5: + m.deviceType = 5; + break; + case "EDGE": + case 6: + m.deviceType = 6; + break; + case "DESKTOP": + case 7: + m.deviceType = 7; + break; + case "IPAD": + case 8: + m.deviceType = 8; + break; + case "ANDROID_TABLET": + case 9: + m.deviceType = 9; + break; + case "OHANA": + case 10: + m.deviceType = 10; + break; + case "ALOHA": + case 11: + m.deviceType = 11; + break; + case "CATALINA": + case 12: + m.deviceType = 12; + break; + case "TCL_TV": + case 13: + m.deviceType = 13; + break; + case "IOS_PHONE": + case 14: + m.deviceType = 14; + break; + case "IOS_CATALYST": + case 15: + m.deviceType = 15; + break; + case "ANDROID_PHONE": + case 16: + m.deviceType = 16; + break; + case "ANDROID_AMBIGUOUS": + case 17: + m.deviceType = 17; + break; + case "WEAR_OS": + case 18: + m.deviceType = 18; + break; + case "AR_WRIST": + case 19: + m.deviceType = 19; + break; + case "AR_DEVICE": + case 20: + m.deviceType = 20; + break; + case "UWP": + case 21: + m.deviceType = 21; + break; + case "VR": + case 22: + m.deviceType = 22; + break; + case "CLOUD_API": + case 23: + m.deviceType = 23; + break; + case "SMARTGLASSES": + case 24: + m.deviceType = 24; + break; + } + if (d.ref != null) { + m.ref = String(d.ref); + } + return m; + }; + + CompanionEphemeralIdentity.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.publicKey != null && m.hasOwnProperty("publicKey")) { + d.publicKey = o.bytes === String ? $util.base64.encode(m.publicKey, 0, m.publicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.publicKey) : m.publicKey; + if (o.oneofs) + d._publicKey = "publicKey"; + } + if (m.deviceType != null && m.hasOwnProperty("deviceType")) { + d.deviceType = o.enums === String ? $root.proto.DeviceProps.PlatformType[m.deviceType] === undefined ? m.deviceType : $root.proto.DeviceProps.PlatformType[m.deviceType] : m.deviceType; + if (o.oneofs) + d._deviceType = "deviceType"; + } + if (m.ref != null && m.hasOwnProperty("ref")) { + d.ref = m.ref; + if (o.oneofs) + d._ref = "ref"; + } + return d; + }; + + CompanionEphemeralIdentity.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CompanionEphemeralIdentity.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.CompanionEphemeralIdentity"; + }; + + return CompanionEphemeralIdentity; + })(); + + proto.Config = (function() { + + function Config(p) { + this.field = {}; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Config.prototype.field = $util.emptyObject; + Config.prototype.version = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Config.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Config.create = function create(properties) { + return new Config(properties); + }; + + Config.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.field != null && Object.hasOwnProperty.call(m, "field")) { + for (var ks = Object.keys(m.field), i = 0; i < ks.length; ++i) { + w.uint32(10).fork().uint32(8).uint32(ks[i]); + $root.proto.Field.encode(m.field[ks[i]], w.uint32(18).fork()).ldelim().ldelim(); + } + } + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(16).uint32(m.version); + return w; + }; + + Config.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Config(), k, value; + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (m.field === $util.emptyObject) + m.field = {}; + var c2 = r.uint32() + r.pos; + k = 0; + value = null; + while (r.pos < c2) { + var tag2 = r.uint32(); + switch (tag2 >>> 3) { + case 1: + k = r.uint32(); + break; + case 2: + value = $root.proto.Field.decode(r, r.uint32()); + break; + default: + r.skipType(tag2 & 7); + break; + } + } + m.field[k] = value; + break; + } + case 2: { + m.version = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Config.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Config) + return d; + var m = new $root.proto.Config(); + if (d.field) { + if (typeof d.field !== "object") + throw TypeError(".proto.Config.field: object expected"); + m.field = {}; + for (var ks = Object.keys(d.field), i = 0; i < ks.length; ++i) { + if (typeof d.field[ks[i]] !== "object") + throw TypeError(".proto.Config.field: object expected"); + m.field[ks[i]] = $root.proto.Field.fromObject(d.field[ks[i]]); + } + } + if (d.version != null) { + m.version = d.version >>> 0; + } + return m; + }; + + Config.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.objects || o.defaults) { + d.field = {}; + } + var ks2; + if (m.field && (ks2 = Object.keys(m.field)).length) { + d.field = {}; + for (var j = 0; j < ks2.length; ++j) { + d.field[ks2[j]] = $root.proto.Field.toObject(m.field[ks2[j]], o); + } + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = m.version; + if (o.oneofs) + d._version = "version"; + } + return d; + }; + + Config.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Config.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Config"; + }; + + return Config; + })(); + + proto.ContextInfo = (function() { + + function ContextInfo(p) { + this.mentionedJid = []; + this.groupMentions = []; + this.statusAttributions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ContextInfo.prototype.stanzaId = null; + ContextInfo.prototype.participant = null; + ContextInfo.prototype.quotedMessage = null; + ContextInfo.prototype.remoteJid = null; + ContextInfo.prototype.mentionedJid = $util.emptyArray; + ContextInfo.prototype.conversionSource = null; + ContextInfo.prototype.conversionData = null; + ContextInfo.prototype.conversionDelaySeconds = null; + ContextInfo.prototype.forwardingScore = null; + ContextInfo.prototype.isForwarded = null; + ContextInfo.prototype.quotedAd = null; + ContextInfo.prototype.placeholderKey = null; + ContextInfo.prototype.expiration = null; + ContextInfo.prototype.ephemeralSettingTimestamp = null; + ContextInfo.prototype.ephemeralSharedSecret = null; + ContextInfo.prototype.externalAdReply = null; + ContextInfo.prototype.entryPointConversionSource = null; + ContextInfo.prototype.entryPointConversionApp = null; + ContextInfo.prototype.entryPointConversionDelaySeconds = null; + ContextInfo.prototype.disappearingMode = null; + ContextInfo.prototype.actionLink = null; + ContextInfo.prototype.groupSubject = null; + ContextInfo.prototype.parentGroupJid = null; + ContextInfo.prototype.trustBannerType = null; + ContextInfo.prototype.trustBannerAction = null; + ContextInfo.prototype.isSampled = null; + ContextInfo.prototype.groupMentions = $util.emptyArray; + ContextInfo.prototype.utm = null; + ContextInfo.prototype.forwardedNewsletterMessageInfo = null; + ContextInfo.prototype.businessMessageForwardInfo = null; + ContextInfo.prototype.smbClientCampaignId = null; + ContextInfo.prototype.smbServerCampaignId = null; + ContextInfo.prototype.dataSharingContext = null; + ContextInfo.prototype.alwaysShowAdAttribution = null; + ContextInfo.prototype.featureEligibilities = null; + ContextInfo.prototype.entryPointConversionExternalSource = null; + ContextInfo.prototype.entryPointConversionExternalMedium = null; + ContextInfo.prototype.ctwaSignals = null; + ContextInfo.prototype.ctwaPayload = null; + ContextInfo.prototype.forwardedAiBotMessageInfo = null; + ContextInfo.prototype.statusAttributionType = null; + ContextInfo.prototype.urlTrackingMap = null; + ContextInfo.prototype.pairedMediaType = null; + ContextInfo.prototype.rankingVersion = null; + ContextInfo.prototype.memberLabel = null; + ContextInfo.prototype.isQuestion = null; + ContextInfo.prototype.statusSourceType = null; + ContextInfo.prototype.statusAttributions = $util.emptyArray; + ContextInfo.prototype.isGroupStatus = null; + ContextInfo.prototype.forwardOrigin = null; + ContextInfo.prototype.questionReplyQuotedMessage = null; + ContextInfo.prototype.statusAudienceMetadata = null; + ContextInfo.prototype.nonJidMentions = null; + ContextInfo.prototype.quotedType = null; + ContextInfo.prototype.botMessageSharingInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_stanzaId", { + get: $util.oneOfGetter($oneOfFields = ["stanzaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_participant", { + get: $util.oneOfGetter($oneOfFields = ["participant"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_quotedMessage", { + get: $util.oneOfGetter($oneOfFields = ["quotedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_remoteJid", { + get: $util.oneOfGetter($oneOfFields = ["remoteJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_conversionSource", { + get: $util.oneOfGetter($oneOfFields = ["conversionSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_conversionData", { + get: $util.oneOfGetter($oneOfFields = ["conversionData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_conversionDelaySeconds", { + get: $util.oneOfGetter($oneOfFields = ["conversionDelaySeconds"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_forwardingScore", { + get: $util.oneOfGetter($oneOfFields = ["forwardingScore"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_isForwarded", { + get: $util.oneOfGetter($oneOfFields = ["isForwarded"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_quotedAd", { + get: $util.oneOfGetter($oneOfFields = ["quotedAd"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_placeholderKey", { + get: $util.oneOfGetter($oneOfFields = ["placeholderKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_expiration", { + get: $util.oneOfGetter($oneOfFields = ["expiration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_ephemeralSettingTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralSettingTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_ephemeralSharedSecret", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralSharedSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_externalAdReply", { + get: $util.oneOfGetter($oneOfFields = ["externalAdReply"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_entryPointConversionSource", { + get: $util.oneOfGetter($oneOfFields = ["entryPointConversionSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_entryPointConversionApp", { + get: $util.oneOfGetter($oneOfFields = ["entryPointConversionApp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_entryPointConversionDelaySeconds", { + get: $util.oneOfGetter($oneOfFields = ["entryPointConversionDelaySeconds"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_disappearingMode", { + get: $util.oneOfGetter($oneOfFields = ["disappearingMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_actionLink", { + get: $util.oneOfGetter($oneOfFields = ["actionLink"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_groupSubject", { + get: $util.oneOfGetter($oneOfFields = ["groupSubject"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_parentGroupJid", { + get: $util.oneOfGetter($oneOfFields = ["parentGroupJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_trustBannerType", { + get: $util.oneOfGetter($oneOfFields = ["trustBannerType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_trustBannerAction", { + get: $util.oneOfGetter($oneOfFields = ["trustBannerAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_isSampled", { + get: $util.oneOfGetter($oneOfFields = ["isSampled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_utm", { + get: $util.oneOfGetter($oneOfFields = ["utm"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_forwardedNewsletterMessageInfo", { + get: $util.oneOfGetter($oneOfFields = ["forwardedNewsletterMessageInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_businessMessageForwardInfo", { + get: $util.oneOfGetter($oneOfFields = ["businessMessageForwardInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_smbClientCampaignId", { + get: $util.oneOfGetter($oneOfFields = ["smbClientCampaignId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_smbServerCampaignId", { + get: $util.oneOfGetter($oneOfFields = ["smbServerCampaignId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_dataSharingContext", { + get: $util.oneOfGetter($oneOfFields = ["dataSharingContext"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_alwaysShowAdAttribution", { + get: $util.oneOfGetter($oneOfFields = ["alwaysShowAdAttribution"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_featureEligibilities", { + get: $util.oneOfGetter($oneOfFields = ["featureEligibilities"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_entryPointConversionExternalSource", { + get: $util.oneOfGetter($oneOfFields = ["entryPointConversionExternalSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_entryPointConversionExternalMedium", { + get: $util.oneOfGetter($oneOfFields = ["entryPointConversionExternalMedium"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_ctwaSignals", { + get: $util.oneOfGetter($oneOfFields = ["ctwaSignals"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_ctwaPayload", { + get: $util.oneOfGetter($oneOfFields = ["ctwaPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_forwardedAiBotMessageInfo", { + get: $util.oneOfGetter($oneOfFields = ["forwardedAiBotMessageInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_statusAttributionType", { + get: $util.oneOfGetter($oneOfFields = ["statusAttributionType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_urlTrackingMap", { + get: $util.oneOfGetter($oneOfFields = ["urlTrackingMap"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_pairedMediaType", { + get: $util.oneOfGetter($oneOfFields = ["pairedMediaType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_rankingVersion", { + get: $util.oneOfGetter($oneOfFields = ["rankingVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_memberLabel", { + get: $util.oneOfGetter($oneOfFields = ["memberLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_isQuestion", { + get: $util.oneOfGetter($oneOfFields = ["isQuestion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_statusSourceType", { + get: $util.oneOfGetter($oneOfFields = ["statusSourceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_isGroupStatus", { + get: $util.oneOfGetter($oneOfFields = ["isGroupStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_forwardOrigin", { + get: $util.oneOfGetter($oneOfFields = ["forwardOrigin"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_questionReplyQuotedMessage", { + get: $util.oneOfGetter($oneOfFields = ["questionReplyQuotedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_statusAudienceMetadata", { + get: $util.oneOfGetter($oneOfFields = ["statusAudienceMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_nonJidMentions", { + get: $util.oneOfGetter($oneOfFields = ["nonJidMentions"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_quotedType", { + get: $util.oneOfGetter($oneOfFields = ["quotedType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContextInfo.prototype, "_botMessageSharingInfo", { + get: $util.oneOfGetter($oneOfFields = ["botMessageSharingInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ContextInfo.create = function create(properties) { + return new ContextInfo(properties); + }; + + ContextInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.stanzaId != null && Object.hasOwnProperty.call(m, "stanzaId")) + w.uint32(10).string(m.stanzaId); + if (m.participant != null && Object.hasOwnProperty.call(m, "participant")) + w.uint32(18).string(m.participant); + if (m.quotedMessage != null && Object.hasOwnProperty.call(m, "quotedMessage")) + $root.proto.Message.encode(m.quotedMessage, w.uint32(26).fork()).ldelim(); + if (m.remoteJid != null && Object.hasOwnProperty.call(m, "remoteJid")) + w.uint32(34).string(m.remoteJid); + if (m.mentionedJid != null && m.mentionedJid.length) { + for (var i = 0; i < m.mentionedJid.length; ++i) + w.uint32(122).string(m.mentionedJid[i]); + } + if (m.conversionSource != null && Object.hasOwnProperty.call(m, "conversionSource")) + w.uint32(146).string(m.conversionSource); + if (m.conversionData != null && Object.hasOwnProperty.call(m, "conversionData")) + w.uint32(154).bytes(m.conversionData); + if (m.conversionDelaySeconds != null && Object.hasOwnProperty.call(m, "conversionDelaySeconds")) + w.uint32(160).uint32(m.conversionDelaySeconds); + if (m.forwardingScore != null && Object.hasOwnProperty.call(m, "forwardingScore")) + w.uint32(168).uint32(m.forwardingScore); + if (m.isForwarded != null && Object.hasOwnProperty.call(m, "isForwarded")) + w.uint32(176).bool(m.isForwarded); + if (m.quotedAd != null && Object.hasOwnProperty.call(m, "quotedAd")) + $root.proto.ContextInfo.AdReplyInfo.encode(m.quotedAd, w.uint32(186).fork()).ldelim(); + if (m.placeholderKey != null && Object.hasOwnProperty.call(m, "placeholderKey")) + $root.proto.MessageKey.encode(m.placeholderKey, w.uint32(194).fork()).ldelim(); + if (m.expiration != null && Object.hasOwnProperty.call(m, "expiration")) + w.uint32(200).uint32(m.expiration); + if (m.ephemeralSettingTimestamp != null && Object.hasOwnProperty.call(m, "ephemeralSettingTimestamp")) + w.uint32(208).int64(m.ephemeralSettingTimestamp); + if (m.ephemeralSharedSecret != null && Object.hasOwnProperty.call(m, "ephemeralSharedSecret")) + w.uint32(218).bytes(m.ephemeralSharedSecret); + if (m.externalAdReply != null && Object.hasOwnProperty.call(m, "externalAdReply")) + $root.proto.ContextInfo.ExternalAdReplyInfo.encode(m.externalAdReply, w.uint32(226).fork()).ldelim(); + if (m.entryPointConversionSource != null && Object.hasOwnProperty.call(m, "entryPointConversionSource")) + w.uint32(234).string(m.entryPointConversionSource); + if (m.entryPointConversionApp != null && Object.hasOwnProperty.call(m, "entryPointConversionApp")) + w.uint32(242).string(m.entryPointConversionApp); + if (m.entryPointConversionDelaySeconds != null && Object.hasOwnProperty.call(m, "entryPointConversionDelaySeconds")) + w.uint32(248).uint32(m.entryPointConversionDelaySeconds); + if (m.disappearingMode != null && Object.hasOwnProperty.call(m, "disappearingMode")) + $root.proto.DisappearingMode.encode(m.disappearingMode, w.uint32(258).fork()).ldelim(); + if (m.actionLink != null && Object.hasOwnProperty.call(m, "actionLink")) + $root.proto.ActionLink.encode(m.actionLink, w.uint32(266).fork()).ldelim(); + if (m.groupSubject != null && Object.hasOwnProperty.call(m, "groupSubject")) + w.uint32(274).string(m.groupSubject); + if (m.parentGroupJid != null && Object.hasOwnProperty.call(m, "parentGroupJid")) + w.uint32(282).string(m.parentGroupJid); + if (m.trustBannerType != null && Object.hasOwnProperty.call(m, "trustBannerType")) + w.uint32(298).string(m.trustBannerType); + if (m.trustBannerAction != null && Object.hasOwnProperty.call(m, "trustBannerAction")) + w.uint32(304).uint32(m.trustBannerAction); + if (m.isSampled != null && Object.hasOwnProperty.call(m, "isSampled")) + w.uint32(312).bool(m.isSampled); + if (m.groupMentions != null && m.groupMentions.length) { + for (var i = 0; i < m.groupMentions.length; ++i) + $root.proto.GroupMention.encode(m.groupMentions[i], w.uint32(322).fork()).ldelim(); + } + if (m.utm != null && Object.hasOwnProperty.call(m, "utm")) + $root.proto.ContextInfo.UTMInfo.encode(m.utm, w.uint32(330).fork()).ldelim(); + if (m.forwardedNewsletterMessageInfo != null && Object.hasOwnProperty.call(m, "forwardedNewsletterMessageInfo")) + $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.encode(m.forwardedNewsletterMessageInfo, w.uint32(346).fork()).ldelim(); + if (m.businessMessageForwardInfo != null && Object.hasOwnProperty.call(m, "businessMessageForwardInfo")) + $root.proto.ContextInfo.BusinessMessageForwardInfo.encode(m.businessMessageForwardInfo, w.uint32(354).fork()).ldelim(); + if (m.smbClientCampaignId != null && Object.hasOwnProperty.call(m, "smbClientCampaignId")) + w.uint32(362).string(m.smbClientCampaignId); + if (m.smbServerCampaignId != null && Object.hasOwnProperty.call(m, "smbServerCampaignId")) + w.uint32(370).string(m.smbServerCampaignId); + if (m.dataSharingContext != null && Object.hasOwnProperty.call(m, "dataSharingContext")) + $root.proto.ContextInfo.DataSharingContext.encode(m.dataSharingContext, w.uint32(378).fork()).ldelim(); + if (m.alwaysShowAdAttribution != null && Object.hasOwnProperty.call(m, "alwaysShowAdAttribution")) + w.uint32(384).bool(m.alwaysShowAdAttribution); + if (m.featureEligibilities != null && Object.hasOwnProperty.call(m, "featureEligibilities")) + $root.proto.ContextInfo.FeatureEligibilities.encode(m.featureEligibilities, w.uint32(394).fork()).ldelim(); + if (m.entryPointConversionExternalSource != null && Object.hasOwnProperty.call(m, "entryPointConversionExternalSource")) + w.uint32(402).string(m.entryPointConversionExternalSource); + if (m.entryPointConversionExternalMedium != null && Object.hasOwnProperty.call(m, "entryPointConversionExternalMedium")) + w.uint32(410).string(m.entryPointConversionExternalMedium); + if (m.ctwaSignals != null && Object.hasOwnProperty.call(m, "ctwaSignals")) + w.uint32(434).string(m.ctwaSignals); + if (m.ctwaPayload != null && Object.hasOwnProperty.call(m, "ctwaPayload")) + w.uint32(442).bytes(m.ctwaPayload); + if (m.forwardedAiBotMessageInfo != null && Object.hasOwnProperty.call(m, "forwardedAiBotMessageInfo")) + $root.proto.ForwardedAIBotMessageInfo.encode(m.forwardedAiBotMessageInfo, w.uint32(450).fork()).ldelim(); + if (m.statusAttributionType != null && Object.hasOwnProperty.call(m, "statusAttributionType")) + w.uint32(456).int32(m.statusAttributionType); + if (m.urlTrackingMap != null && Object.hasOwnProperty.call(m, "urlTrackingMap")) + $root.proto.UrlTrackingMap.encode(m.urlTrackingMap, w.uint32(466).fork()).ldelim(); + if (m.pairedMediaType != null && Object.hasOwnProperty.call(m, "pairedMediaType")) + w.uint32(472).int32(m.pairedMediaType); + if (m.rankingVersion != null && Object.hasOwnProperty.call(m, "rankingVersion")) + w.uint32(480).uint32(m.rankingVersion); + if (m.memberLabel != null && Object.hasOwnProperty.call(m, "memberLabel")) + $root.proto.MemberLabel.encode(m.memberLabel, w.uint32(498).fork()).ldelim(); + if (m.isQuestion != null && Object.hasOwnProperty.call(m, "isQuestion")) + w.uint32(504).bool(m.isQuestion); + if (m.statusSourceType != null && Object.hasOwnProperty.call(m, "statusSourceType")) + w.uint32(512).int32(m.statusSourceType); + if (m.statusAttributions != null && m.statusAttributions.length) { + for (var i = 0; i < m.statusAttributions.length; ++i) + $root.proto.StatusAttribution.encode(m.statusAttributions[i], w.uint32(522).fork()).ldelim(); + } + if (m.isGroupStatus != null && Object.hasOwnProperty.call(m, "isGroupStatus")) + w.uint32(528).bool(m.isGroupStatus); + if (m.forwardOrigin != null && Object.hasOwnProperty.call(m, "forwardOrigin")) + w.uint32(536).int32(m.forwardOrigin); + if (m.questionReplyQuotedMessage != null && Object.hasOwnProperty.call(m, "questionReplyQuotedMessage")) + $root.proto.ContextInfo.QuestionReplyQuotedMessage.encode(m.questionReplyQuotedMessage, w.uint32(546).fork()).ldelim(); + if (m.statusAudienceMetadata != null && Object.hasOwnProperty.call(m, "statusAudienceMetadata")) + $root.proto.ContextInfo.StatusAudienceMetadata.encode(m.statusAudienceMetadata, w.uint32(554).fork()).ldelim(); + if (m.nonJidMentions != null && Object.hasOwnProperty.call(m, "nonJidMentions")) + w.uint32(560).uint32(m.nonJidMentions); + if (m.quotedType != null && Object.hasOwnProperty.call(m, "quotedType")) + w.uint32(568).int32(m.quotedType); + if (m.botMessageSharingInfo != null && Object.hasOwnProperty.call(m, "botMessageSharingInfo")) + $root.proto.BotMessageSharingInfo.encode(m.botMessageSharingInfo, w.uint32(578).fork()).ldelim(); + return w; + }; + + ContextInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.stanzaId = r.string(); + break; + } + case 2: { + m.participant = r.string(); + break; + } + case 3: { + m.quotedMessage = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 4: { + m.remoteJid = r.string(); + break; + } + case 15: { + if (!(m.mentionedJid && m.mentionedJid.length)) + m.mentionedJid = []; + m.mentionedJid.push(r.string()); + break; + } + case 18: { + m.conversionSource = r.string(); + break; + } + case 19: { + m.conversionData = r.bytes(); + break; + } + case 20: { + m.conversionDelaySeconds = r.uint32(); + break; + } + case 21: { + m.forwardingScore = r.uint32(); + break; + } + case 22: { + m.isForwarded = r.bool(); + break; + } + case 23: { + m.quotedAd = $root.proto.ContextInfo.AdReplyInfo.decode(r, r.uint32()); + break; + } + case 24: { + m.placeholderKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 25: { + m.expiration = r.uint32(); + break; + } + case 26: { + m.ephemeralSettingTimestamp = r.int64(); + break; + } + case 27: { + m.ephemeralSharedSecret = r.bytes(); + break; + } + case 28: { + m.externalAdReply = $root.proto.ContextInfo.ExternalAdReplyInfo.decode(r, r.uint32()); + break; + } + case 29: { + m.entryPointConversionSource = r.string(); + break; + } + case 30: { + m.entryPointConversionApp = r.string(); + break; + } + case 31: { + m.entryPointConversionDelaySeconds = r.uint32(); + break; + } + case 32: { + m.disappearingMode = $root.proto.DisappearingMode.decode(r, r.uint32()); + break; + } + case 33: { + m.actionLink = $root.proto.ActionLink.decode(r, r.uint32()); + break; + } + case 34: { + m.groupSubject = r.string(); + break; + } + case 35: { + m.parentGroupJid = r.string(); + break; + } + case 37: { + m.trustBannerType = r.string(); + break; + } + case 38: { + m.trustBannerAction = r.uint32(); + break; + } + case 39: { + m.isSampled = r.bool(); + break; + } + case 40: { + if (!(m.groupMentions && m.groupMentions.length)) + m.groupMentions = []; + m.groupMentions.push($root.proto.GroupMention.decode(r, r.uint32())); + break; + } + case 41: { + m.utm = $root.proto.ContextInfo.UTMInfo.decode(r, r.uint32()); + break; + } + case 43: { + m.forwardedNewsletterMessageInfo = $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.decode(r, r.uint32()); + break; + } + case 44: { + m.businessMessageForwardInfo = $root.proto.ContextInfo.BusinessMessageForwardInfo.decode(r, r.uint32()); + break; + } + case 45: { + m.smbClientCampaignId = r.string(); + break; + } + case 46: { + m.smbServerCampaignId = r.string(); + break; + } + case 47: { + m.dataSharingContext = $root.proto.ContextInfo.DataSharingContext.decode(r, r.uint32()); + break; + } + case 48: { + m.alwaysShowAdAttribution = r.bool(); + break; + } + case 49: { + m.featureEligibilities = $root.proto.ContextInfo.FeatureEligibilities.decode(r, r.uint32()); + break; + } + case 50: { + m.entryPointConversionExternalSource = r.string(); + break; + } + case 51: { + m.entryPointConversionExternalMedium = r.string(); + break; + } + case 54: { + m.ctwaSignals = r.string(); + break; + } + case 55: { + m.ctwaPayload = r.bytes(); + break; + } + case 56: { + m.forwardedAiBotMessageInfo = $root.proto.ForwardedAIBotMessageInfo.decode(r, r.uint32()); + break; + } + case 57: { + m.statusAttributionType = r.int32(); + break; + } + case 58: { + m.urlTrackingMap = $root.proto.UrlTrackingMap.decode(r, r.uint32()); + break; + } + case 59: { + m.pairedMediaType = r.int32(); + break; + } + case 60: { + m.rankingVersion = r.uint32(); + break; + } + case 62: { + m.memberLabel = $root.proto.MemberLabel.decode(r, r.uint32()); + break; + } + case 63: { + m.isQuestion = r.bool(); + break; + } + case 64: { + m.statusSourceType = r.int32(); + break; + } + case 65: { + if (!(m.statusAttributions && m.statusAttributions.length)) + m.statusAttributions = []; + m.statusAttributions.push($root.proto.StatusAttribution.decode(r, r.uint32())); + break; + } + case 66: { + m.isGroupStatus = r.bool(); + break; + } + case 67: { + m.forwardOrigin = r.int32(); + break; + } + case 68: { + m.questionReplyQuotedMessage = $root.proto.ContextInfo.QuestionReplyQuotedMessage.decode(r, r.uint32()); + break; + } + case 69: { + m.statusAudienceMetadata = $root.proto.ContextInfo.StatusAudienceMetadata.decode(r, r.uint32()); + break; + } + case 70: { + m.nonJidMentions = r.uint32(); + break; + } + case 71: { + m.quotedType = r.int32(); + break; + } + case 72: { + m.botMessageSharingInfo = $root.proto.BotMessageSharingInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ContextInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo) + return d; + var m = new $root.proto.ContextInfo(); + if (d.stanzaId != null) { + m.stanzaId = String(d.stanzaId); + } + if (d.participant != null) { + m.participant = String(d.participant); + } + if (d.quotedMessage != null) { + if (typeof d.quotedMessage !== "object") + throw TypeError(".proto.ContextInfo.quotedMessage: object expected"); + m.quotedMessage = $root.proto.Message.fromObject(d.quotedMessage); + } + if (d.remoteJid != null) { + m.remoteJid = String(d.remoteJid); + } + if (d.mentionedJid) { + if (!Array.isArray(d.mentionedJid)) + throw TypeError(".proto.ContextInfo.mentionedJid: array expected"); + m.mentionedJid = []; + for (var i = 0; i < d.mentionedJid.length; ++i) { + m.mentionedJid[i] = String(d.mentionedJid[i]); + } + } + if (d.conversionSource != null) { + m.conversionSource = String(d.conversionSource); + } + if (d.conversionData != null) { + if (typeof d.conversionData === "string") + $util.base64.decode(d.conversionData, m.conversionData = $util.newBuffer($util.base64.length(d.conversionData)), 0); + else if (d.conversionData.length >= 0) + m.conversionData = d.conversionData; + } + if (d.conversionDelaySeconds != null) { + m.conversionDelaySeconds = d.conversionDelaySeconds >>> 0; + } + if (d.forwardingScore != null) { + m.forwardingScore = d.forwardingScore >>> 0; + } + if (d.isForwarded != null) { + m.isForwarded = Boolean(d.isForwarded); + } + if (d.quotedAd != null) { + if (typeof d.quotedAd !== "object") + throw TypeError(".proto.ContextInfo.quotedAd: object expected"); + m.quotedAd = $root.proto.ContextInfo.AdReplyInfo.fromObject(d.quotedAd); + } + if (d.placeholderKey != null) { + if (typeof d.placeholderKey !== "object") + throw TypeError(".proto.ContextInfo.placeholderKey: object expected"); + m.placeholderKey = $root.proto.MessageKey.fromObject(d.placeholderKey); + } + if (d.expiration != null) { + m.expiration = d.expiration >>> 0; + } + if (d.ephemeralSettingTimestamp != null) { + if ($util.Long) + (m.ephemeralSettingTimestamp = $util.Long.fromValue(d.ephemeralSettingTimestamp)).unsigned = false; + else if (typeof d.ephemeralSettingTimestamp === "string") + m.ephemeralSettingTimestamp = parseInt(d.ephemeralSettingTimestamp, 10); + else if (typeof d.ephemeralSettingTimestamp === "number") + m.ephemeralSettingTimestamp = d.ephemeralSettingTimestamp; + else if (typeof d.ephemeralSettingTimestamp === "object") + m.ephemeralSettingTimestamp = new $util.LongBits(d.ephemeralSettingTimestamp.low >>> 0, d.ephemeralSettingTimestamp.high >>> 0).toNumber(); + } + if (d.ephemeralSharedSecret != null) { + if (typeof d.ephemeralSharedSecret === "string") + $util.base64.decode(d.ephemeralSharedSecret, m.ephemeralSharedSecret = $util.newBuffer($util.base64.length(d.ephemeralSharedSecret)), 0); + else if (d.ephemeralSharedSecret.length >= 0) + m.ephemeralSharedSecret = d.ephemeralSharedSecret; + } + if (d.externalAdReply != null) { + if (typeof d.externalAdReply !== "object") + throw TypeError(".proto.ContextInfo.externalAdReply: object expected"); + m.externalAdReply = $root.proto.ContextInfo.ExternalAdReplyInfo.fromObject(d.externalAdReply); + } + if (d.entryPointConversionSource != null) { + m.entryPointConversionSource = String(d.entryPointConversionSource); + } + if (d.entryPointConversionApp != null) { + m.entryPointConversionApp = String(d.entryPointConversionApp); + } + if (d.entryPointConversionDelaySeconds != null) { + m.entryPointConversionDelaySeconds = d.entryPointConversionDelaySeconds >>> 0; + } + if (d.disappearingMode != null) { + if (typeof d.disappearingMode !== "object") + throw TypeError(".proto.ContextInfo.disappearingMode: object expected"); + m.disappearingMode = $root.proto.DisappearingMode.fromObject(d.disappearingMode); + } + if (d.actionLink != null) { + if (typeof d.actionLink !== "object") + throw TypeError(".proto.ContextInfo.actionLink: object expected"); + m.actionLink = $root.proto.ActionLink.fromObject(d.actionLink); + } + if (d.groupSubject != null) { + m.groupSubject = String(d.groupSubject); + } + if (d.parentGroupJid != null) { + m.parentGroupJid = String(d.parentGroupJid); + } + if (d.trustBannerType != null) { + m.trustBannerType = String(d.trustBannerType); + } + if (d.trustBannerAction != null) { + m.trustBannerAction = d.trustBannerAction >>> 0; + } + if (d.isSampled != null) { + m.isSampled = Boolean(d.isSampled); + } + if (d.groupMentions) { + if (!Array.isArray(d.groupMentions)) + throw TypeError(".proto.ContextInfo.groupMentions: array expected"); + m.groupMentions = []; + for (var i = 0; i < d.groupMentions.length; ++i) { + if (typeof d.groupMentions[i] !== "object") + throw TypeError(".proto.ContextInfo.groupMentions: object expected"); + m.groupMentions[i] = $root.proto.GroupMention.fromObject(d.groupMentions[i]); + } + } + if (d.utm != null) { + if (typeof d.utm !== "object") + throw TypeError(".proto.ContextInfo.utm: object expected"); + m.utm = $root.proto.ContextInfo.UTMInfo.fromObject(d.utm); + } + if (d.forwardedNewsletterMessageInfo != null) { + if (typeof d.forwardedNewsletterMessageInfo !== "object") + throw TypeError(".proto.ContextInfo.forwardedNewsletterMessageInfo: object expected"); + m.forwardedNewsletterMessageInfo = $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.fromObject(d.forwardedNewsletterMessageInfo); + } + if (d.businessMessageForwardInfo != null) { + if (typeof d.businessMessageForwardInfo !== "object") + throw TypeError(".proto.ContextInfo.businessMessageForwardInfo: object expected"); + m.businessMessageForwardInfo = $root.proto.ContextInfo.BusinessMessageForwardInfo.fromObject(d.businessMessageForwardInfo); + } + if (d.smbClientCampaignId != null) { + m.smbClientCampaignId = String(d.smbClientCampaignId); + } + if (d.smbServerCampaignId != null) { + m.smbServerCampaignId = String(d.smbServerCampaignId); + } + if (d.dataSharingContext != null) { + if (typeof d.dataSharingContext !== "object") + throw TypeError(".proto.ContextInfo.dataSharingContext: object expected"); + m.dataSharingContext = $root.proto.ContextInfo.DataSharingContext.fromObject(d.dataSharingContext); + } + if (d.alwaysShowAdAttribution != null) { + m.alwaysShowAdAttribution = Boolean(d.alwaysShowAdAttribution); + } + if (d.featureEligibilities != null) { + if (typeof d.featureEligibilities !== "object") + throw TypeError(".proto.ContextInfo.featureEligibilities: object expected"); + m.featureEligibilities = $root.proto.ContextInfo.FeatureEligibilities.fromObject(d.featureEligibilities); + } + if (d.entryPointConversionExternalSource != null) { + m.entryPointConversionExternalSource = String(d.entryPointConversionExternalSource); + } + if (d.entryPointConversionExternalMedium != null) { + m.entryPointConversionExternalMedium = String(d.entryPointConversionExternalMedium); + } + if (d.ctwaSignals != null) { + m.ctwaSignals = String(d.ctwaSignals); + } + if (d.ctwaPayload != null) { + if (typeof d.ctwaPayload === "string") + $util.base64.decode(d.ctwaPayload, m.ctwaPayload = $util.newBuffer($util.base64.length(d.ctwaPayload)), 0); + else if (d.ctwaPayload.length >= 0) + m.ctwaPayload = d.ctwaPayload; + } + if (d.forwardedAiBotMessageInfo != null) { + if (typeof d.forwardedAiBotMessageInfo !== "object") + throw TypeError(".proto.ContextInfo.forwardedAiBotMessageInfo: object expected"); + m.forwardedAiBotMessageInfo = $root.proto.ForwardedAIBotMessageInfo.fromObject(d.forwardedAiBotMessageInfo); + } + switch (d.statusAttributionType) { + default: + if (typeof d.statusAttributionType === "number") { + m.statusAttributionType = d.statusAttributionType; + break; + } + break; + case "NONE": + case 0: + m.statusAttributionType = 0; + break; + case "RESHARED_FROM_MENTION": + case 1: + m.statusAttributionType = 1; + break; + case "RESHARED_FROM_POST": + case 2: + m.statusAttributionType = 2; + break; + case "RESHARED_FROM_POST_MANY_TIMES": + case 3: + m.statusAttributionType = 3; + break; + case "FORWARDED_FROM_STATUS": + case 4: + m.statusAttributionType = 4; + break; + } + if (d.urlTrackingMap != null) { + if (typeof d.urlTrackingMap !== "object") + throw TypeError(".proto.ContextInfo.urlTrackingMap: object expected"); + m.urlTrackingMap = $root.proto.UrlTrackingMap.fromObject(d.urlTrackingMap); + } + switch (d.pairedMediaType) { + default: + if (typeof d.pairedMediaType === "number") { + m.pairedMediaType = d.pairedMediaType; + break; + } + break; + case "NOT_PAIRED_MEDIA": + case 0: + m.pairedMediaType = 0; + break; + case "SD_VIDEO_PARENT": + case 1: + m.pairedMediaType = 1; + break; + case "HD_VIDEO_CHILD": + case 2: + m.pairedMediaType = 2; + break; + case "SD_IMAGE_PARENT": + case 3: + m.pairedMediaType = 3; + break; + case "HD_IMAGE_CHILD": + case 4: + m.pairedMediaType = 4; + break; + case "MOTION_PHOTO_PARENT": + case 5: + m.pairedMediaType = 5; + break; + case "MOTION_PHOTO_CHILD": + case 6: + m.pairedMediaType = 6; + break; + case "HEVC_VIDEO_PARENT": + case 7: + m.pairedMediaType = 7; + break; + case "HEVC_VIDEO_CHILD": + case 8: + m.pairedMediaType = 8; + break; + } + if (d.rankingVersion != null) { + m.rankingVersion = d.rankingVersion >>> 0; + } + if (d.memberLabel != null) { + if (typeof d.memberLabel !== "object") + throw TypeError(".proto.ContextInfo.memberLabel: object expected"); + m.memberLabel = $root.proto.MemberLabel.fromObject(d.memberLabel); + } + if (d.isQuestion != null) { + m.isQuestion = Boolean(d.isQuestion); + } + switch (d.statusSourceType) { + default: + if (typeof d.statusSourceType === "number") { + m.statusSourceType = d.statusSourceType; + break; + } + break; + case "IMAGE": + case 0: + m.statusSourceType = 0; + break; + case "VIDEO": + case 1: + m.statusSourceType = 1; + break; + case "GIF": + case 2: + m.statusSourceType = 2; + break; + case "AUDIO": + case 3: + m.statusSourceType = 3; + break; + case "TEXT": + case 4: + m.statusSourceType = 4; + break; + case "MUSIC_STANDALONE": + case 5: + m.statusSourceType = 5; + break; + } + if (d.statusAttributions) { + if (!Array.isArray(d.statusAttributions)) + throw TypeError(".proto.ContextInfo.statusAttributions: array expected"); + m.statusAttributions = []; + for (var i = 0; i < d.statusAttributions.length; ++i) { + if (typeof d.statusAttributions[i] !== "object") + throw TypeError(".proto.ContextInfo.statusAttributions: object expected"); + m.statusAttributions[i] = $root.proto.StatusAttribution.fromObject(d.statusAttributions[i]); + } + } + if (d.isGroupStatus != null) { + m.isGroupStatus = Boolean(d.isGroupStatus); + } + switch (d.forwardOrigin) { + default: + if (typeof d.forwardOrigin === "number") { + m.forwardOrigin = d.forwardOrigin; + break; + } + break; + case "UNKNOWN": + case 0: + m.forwardOrigin = 0; + break; + case "CHAT": + case 1: + m.forwardOrigin = 1; + break; + case "STATUS": + case 2: + m.forwardOrigin = 2; + break; + case "CHANNELS": + case 3: + m.forwardOrigin = 3; + break; + case "META_AI": + case 4: + m.forwardOrigin = 4; + break; + case "UGC": + case 5: + m.forwardOrigin = 5; + break; + } + if (d.questionReplyQuotedMessage != null) { + if (typeof d.questionReplyQuotedMessage !== "object") + throw TypeError(".proto.ContextInfo.questionReplyQuotedMessage: object expected"); + m.questionReplyQuotedMessage = $root.proto.ContextInfo.QuestionReplyQuotedMessage.fromObject(d.questionReplyQuotedMessage); + } + if (d.statusAudienceMetadata != null) { + if (typeof d.statusAudienceMetadata !== "object") + throw TypeError(".proto.ContextInfo.statusAudienceMetadata: object expected"); + m.statusAudienceMetadata = $root.proto.ContextInfo.StatusAudienceMetadata.fromObject(d.statusAudienceMetadata); + } + if (d.nonJidMentions != null) { + m.nonJidMentions = d.nonJidMentions >>> 0; + } + switch (d.quotedType) { + default: + if (typeof d.quotedType === "number") { + m.quotedType = d.quotedType; + break; + } + break; + case "EXPLICIT": + case 0: + m.quotedType = 0; + break; + case "AUTO": + case 1: + m.quotedType = 1; + break; + } + if (d.botMessageSharingInfo != null) { + if (typeof d.botMessageSharingInfo !== "object") + throw TypeError(".proto.ContextInfo.botMessageSharingInfo: object expected"); + m.botMessageSharingInfo = $root.proto.BotMessageSharingInfo.fromObject(d.botMessageSharingInfo); + } + return m; + }; + + ContextInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.mentionedJid = []; + d.groupMentions = []; + d.statusAttributions = []; + } + if (m.stanzaId != null && m.hasOwnProperty("stanzaId")) { + d.stanzaId = m.stanzaId; + if (o.oneofs) + d._stanzaId = "stanzaId"; + } + if (m.participant != null && m.hasOwnProperty("participant")) { + d.participant = m.participant; + if (o.oneofs) + d._participant = "participant"; + } + if (m.quotedMessage != null && m.hasOwnProperty("quotedMessage")) { + d.quotedMessage = $root.proto.Message.toObject(m.quotedMessage, o); + if (o.oneofs) + d._quotedMessage = "quotedMessage"; + } + if (m.remoteJid != null && m.hasOwnProperty("remoteJid")) { + d.remoteJid = m.remoteJid; + if (o.oneofs) + d._remoteJid = "remoteJid"; + } + if (m.mentionedJid && m.mentionedJid.length) { + d.mentionedJid = []; + for (var j = 0; j < m.mentionedJid.length; ++j) { + d.mentionedJid[j] = m.mentionedJid[j]; + } + } + if (m.conversionSource != null && m.hasOwnProperty("conversionSource")) { + d.conversionSource = m.conversionSource; + if (o.oneofs) + d._conversionSource = "conversionSource"; + } + if (m.conversionData != null && m.hasOwnProperty("conversionData")) { + d.conversionData = o.bytes === String ? $util.base64.encode(m.conversionData, 0, m.conversionData.length) : o.bytes === Array ? Array.prototype.slice.call(m.conversionData) : m.conversionData; + if (o.oneofs) + d._conversionData = "conversionData"; + } + if (m.conversionDelaySeconds != null && m.hasOwnProperty("conversionDelaySeconds")) { + d.conversionDelaySeconds = m.conversionDelaySeconds; + if (o.oneofs) + d._conversionDelaySeconds = "conversionDelaySeconds"; + } + if (m.forwardingScore != null && m.hasOwnProperty("forwardingScore")) { + d.forwardingScore = m.forwardingScore; + if (o.oneofs) + d._forwardingScore = "forwardingScore"; + } + if (m.isForwarded != null && m.hasOwnProperty("isForwarded")) { + d.isForwarded = m.isForwarded; + if (o.oneofs) + d._isForwarded = "isForwarded"; + } + if (m.quotedAd != null && m.hasOwnProperty("quotedAd")) { + d.quotedAd = $root.proto.ContextInfo.AdReplyInfo.toObject(m.quotedAd, o); + if (o.oneofs) + d._quotedAd = "quotedAd"; + } + if (m.placeholderKey != null && m.hasOwnProperty("placeholderKey")) { + d.placeholderKey = $root.proto.MessageKey.toObject(m.placeholderKey, o); + if (o.oneofs) + d._placeholderKey = "placeholderKey"; + } + if (m.expiration != null && m.hasOwnProperty("expiration")) { + d.expiration = m.expiration; + if (o.oneofs) + d._expiration = "expiration"; + } + if (m.ephemeralSettingTimestamp != null && m.hasOwnProperty("ephemeralSettingTimestamp")) { + if (typeof m.ephemeralSettingTimestamp === "number") + d.ephemeralSettingTimestamp = o.longs === String ? String(m.ephemeralSettingTimestamp) : m.ephemeralSettingTimestamp; + else + d.ephemeralSettingTimestamp = o.longs === String ? longToString(m.ephemeralSettingTimestamp) : o.longs === Number ? longToNumber(m.ephemeralSettingTimestamp) : m.ephemeralSettingTimestamp; + if (o.oneofs) + d._ephemeralSettingTimestamp = "ephemeralSettingTimestamp"; + } + if (m.ephemeralSharedSecret != null && m.hasOwnProperty("ephemeralSharedSecret")) { + d.ephemeralSharedSecret = o.bytes === String ? $util.base64.encode(m.ephemeralSharedSecret, 0, m.ephemeralSharedSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.ephemeralSharedSecret) : m.ephemeralSharedSecret; + if (o.oneofs) + d._ephemeralSharedSecret = "ephemeralSharedSecret"; + } + if (m.externalAdReply != null && m.hasOwnProperty("externalAdReply")) { + d.externalAdReply = $root.proto.ContextInfo.ExternalAdReplyInfo.toObject(m.externalAdReply, o); + if (o.oneofs) + d._externalAdReply = "externalAdReply"; + } + if (m.entryPointConversionSource != null && m.hasOwnProperty("entryPointConversionSource")) { + d.entryPointConversionSource = m.entryPointConversionSource; + if (o.oneofs) + d._entryPointConversionSource = "entryPointConversionSource"; + } + if (m.entryPointConversionApp != null && m.hasOwnProperty("entryPointConversionApp")) { + d.entryPointConversionApp = m.entryPointConversionApp; + if (o.oneofs) + d._entryPointConversionApp = "entryPointConversionApp"; + } + if (m.entryPointConversionDelaySeconds != null && m.hasOwnProperty("entryPointConversionDelaySeconds")) { + d.entryPointConversionDelaySeconds = m.entryPointConversionDelaySeconds; + if (o.oneofs) + d._entryPointConversionDelaySeconds = "entryPointConversionDelaySeconds"; + } + if (m.disappearingMode != null && m.hasOwnProperty("disappearingMode")) { + d.disappearingMode = $root.proto.DisappearingMode.toObject(m.disappearingMode, o); + if (o.oneofs) + d._disappearingMode = "disappearingMode"; + } + if (m.actionLink != null && m.hasOwnProperty("actionLink")) { + d.actionLink = $root.proto.ActionLink.toObject(m.actionLink, o); + if (o.oneofs) + d._actionLink = "actionLink"; + } + if (m.groupSubject != null && m.hasOwnProperty("groupSubject")) { + d.groupSubject = m.groupSubject; + if (o.oneofs) + d._groupSubject = "groupSubject"; + } + if (m.parentGroupJid != null && m.hasOwnProperty("parentGroupJid")) { + d.parentGroupJid = m.parentGroupJid; + if (o.oneofs) + d._parentGroupJid = "parentGroupJid"; + } + if (m.trustBannerType != null && m.hasOwnProperty("trustBannerType")) { + d.trustBannerType = m.trustBannerType; + if (o.oneofs) + d._trustBannerType = "trustBannerType"; + } + if (m.trustBannerAction != null && m.hasOwnProperty("trustBannerAction")) { + d.trustBannerAction = m.trustBannerAction; + if (o.oneofs) + d._trustBannerAction = "trustBannerAction"; + } + if (m.isSampled != null && m.hasOwnProperty("isSampled")) { + d.isSampled = m.isSampled; + if (o.oneofs) + d._isSampled = "isSampled"; + } + if (m.groupMentions && m.groupMentions.length) { + d.groupMentions = []; + for (var j = 0; j < m.groupMentions.length; ++j) { + d.groupMentions[j] = $root.proto.GroupMention.toObject(m.groupMentions[j], o); + } + } + if (m.utm != null && m.hasOwnProperty("utm")) { + d.utm = $root.proto.ContextInfo.UTMInfo.toObject(m.utm, o); + if (o.oneofs) + d._utm = "utm"; + } + if (m.forwardedNewsletterMessageInfo != null && m.hasOwnProperty("forwardedNewsletterMessageInfo")) { + d.forwardedNewsletterMessageInfo = $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.toObject(m.forwardedNewsletterMessageInfo, o); + if (o.oneofs) + d._forwardedNewsletterMessageInfo = "forwardedNewsletterMessageInfo"; + } + if (m.businessMessageForwardInfo != null && m.hasOwnProperty("businessMessageForwardInfo")) { + d.businessMessageForwardInfo = $root.proto.ContextInfo.BusinessMessageForwardInfo.toObject(m.businessMessageForwardInfo, o); + if (o.oneofs) + d._businessMessageForwardInfo = "businessMessageForwardInfo"; + } + if (m.smbClientCampaignId != null && m.hasOwnProperty("smbClientCampaignId")) { + d.smbClientCampaignId = m.smbClientCampaignId; + if (o.oneofs) + d._smbClientCampaignId = "smbClientCampaignId"; + } + if (m.smbServerCampaignId != null && m.hasOwnProperty("smbServerCampaignId")) { + d.smbServerCampaignId = m.smbServerCampaignId; + if (o.oneofs) + d._smbServerCampaignId = "smbServerCampaignId"; + } + if (m.dataSharingContext != null && m.hasOwnProperty("dataSharingContext")) { + d.dataSharingContext = $root.proto.ContextInfo.DataSharingContext.toObject(m.dataSharingContext, o); + if (o.oneofs) + d._dataSharingContext = "dataSharingContext"; + } + if (m.alwaysShowAdAttribution != null && m.hasOwnProperty("alwaysShowAdAttribution")) { + d.alwaysShowAdAttribution = m.alwaysShowAdAttribution; + if (o.oneofs) + d._alwaysShowAdAttribution = "alwaysShowAdAttribution"; + } + if (m.featureEligibilities != null && m.hasOwnProperty("featureEligibilities")) { + d.featureEligibilities = $root.proto.ContextInfo.FeatureEligibilities.toObject(m.featureEligibilities, o); + if (o.oneofs) + d._featureEligibilities = "featureEligibilities"; + } + if (m.entryPointConversionExternalSource != null && m.hasOwnProperty("entryPointConversionExternalSource")) { + d.entryPointConversionExternalSource = m.entryPointConversionExternalSource; + if (o.oneofs) + d._entryPointConversionExternalSource = "entryPointConversionExternalSource"; + } + if (m.entryPointConversionExternalMedium != null && m.hasOwnProperty("entryPointConversionExternalMedium")) { + d.entryPointConversionExternalMedium = m.entryPointConversionExternalMedium; + if (o.oneofs) + d._entryPointConversionExternalMedium = "entryPointConversionExternalMedium"; + } + if (m.ctwaSignals != null && m.hasOwnProperty("ctwaSignals")) { + d.ctwaSignals = m.ctwaSignals; + if (o.oneofs) + d._ctwaSignals = "ctwaSignals"; + } + if (m.ctwaPayload != null && m.hasOwnProperty("ctwaPayload")) { + d.ctwaPayload = o.bytes === String ? $util.base64.encode(m.ctwaPayload, 0, m.ctwaPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.ctwaPayload) : m.ctwaPayload; + if (o.oneofs) + d._ctwaPayload = "ctwaPayload"; + } + if (m.forwardedAiBotMessageInfo != null && m.hasOwnProperty("forwardedAiBotMessageInfo")) { + d.forwardedAiBotMessageInfo = $root.proto.ForwardedAIBotMessageInfo.toObject(m.forwardedAiBotMessageInfo, o); + if (o.oneofs) + d._forwardedAiBotMessageInfo = "forwardedAiBotMessageInfo"; + } + if (m.statusAttributionType != null && m.hasOwnProperty("statusAttributionType")) { + d.statusAttributionType = o.enums === String ? $root.proto.ContextInfo.StatusAttributionType[m.statusAttributionType] === undefined ? m.statusAttributionType : $root.proto.ContextInfo.StatusAttributionType[m.statusAttributionType] : m.statusAttributionType; + if (o.oneofs) + d._statusAttributionType = "statusAttributionType"; + } + if (m.urlTrackingMap != null && m.hasOwnProperty("urlTrackingMap")) { + d.urlTrackingMap = $root.proto.UrlTrackingMap.toObject(m.urlTrackingMap, o); + if (o.oneofs) + d._urlTrackingMap = "urlTrackingMap"; + } + if (m.pairedMediaType != null && m.hasOwnProperty("pairedMediaType")) { + d.pairedMediaType = o.enums === String ? $root.proto.ContextInfo.PairedMediaType[m.pairedMediaType] === undefined ? m.pairedMediaType : $root.proto.ContextInfo.PairedMediaType[m.pairedMediaType] : m.pairedMediaType; + if (o.oneofs) + d._pairedMediaType = "pairedMediaType"; + } + if (m.rankingVersion != null && m.hasOwnProperty("rankingVersion")) { + d.rankingVersion = m.rankingVersion; + if (o.oneofs) + d._rankingVersion = "rankingVersion"; + } + if (m.memberLabel != null && m.hasOwnProperty("memberLabel")) { + d.memberLabel = $root.proto.MemberLabel.toObject(m.memberLabel, o); + if (o.oneofs) + d._memberLabel = "memberLabel"; + } + if (m.isQuestion != null && m.hasOwnProperty("isQuestion")) { + d.isQuestion = m.isQuestion; + if (o.oneofs) + d._isQuestion = "isQuestion"; + } + if (m.statusSourceType != null && m.hasOwnProperty("statusSourceType")) { + d.statusSourceType = o.enums === String ? $root.proto.ContextInfo.StatusSourceType[m.statusSourceType] === undefined ? m.statusSourceType : $root.proto.ContextInfo.StatusSourceType[m.statusSourceType] : m.statusSourceType; + if (o.oneofs) + d._statusSourceType = "statusSourceType"; + } + if (m.statusAttributions && m.statusAttributions.length) { + d.statusAttributions = []; + for (var j = 0; j < m.statusAttributions.length; ++j) { + d.statusAttributions[j] = $root.proto.StatusAttribution.toObject(m.statusAttributions[j], o); + } + } + if (m.isGroupStatus != null && m.hasOwnProperty("isGroupStatus")) { + d.isGroupStatus = m.isGroupStatus; + if (o.oneofs) + d._isGroupStatus = "isGroupStatus"; + } + if (m.forwardOrigin != null && m.hasOwnProperty("forwardOrigin")) { + d.forwardOrigin = o.enums === String ? $root.proto.ContextInfo.ForwardOrigin[m.forwardOrigin] === undefined ? m.forwardOrigin : $root.proto.ContextInfo.ForwardOrigin[m.forwardOrigin] : m.forwardOrigin; + if (o.oneofs) + d._forwardOrigin = "forwardOrigin"; + } + if (m.questionReplyQuotedMessage != null && m.hasOwnProperty("questionReplyQuotedMessage")) { + d.questionReplyQuotedMessage = $root.proto.ContextInfo.QuestionReplyQuotedMessage.toObject(m.questionReplyQuotedMessage, o); + if (o.oneofs) + d._questionReplyQuotedMessage = "questionReplyQuotedMessage"; + } + if (m.statusAudienceMetadata != null && m.hasOwnProperty("statusAudienceMetadata")) { + d.statusAudienceMetadata = $root.proto.ContextInfo.StatusAudienceMetadata.toObject(m.statusAudienceMetadata, o); + if (o.oneofs) + d._statusAudienceMetadata = "statusAudienceMetadata"; + } + if (m.nonJidMentions != null && m.hasOwnProperty("nonJidMentions")) { + d.nonJidMentions = m.nonJidMentions; + if (o.oneofs) + d._nonJidMentions = "nonJidMentions"; + } + if (m.quotedType != null && m.hasOwnProperty("quotedType")) { + d.quotedType = o.enums === String ? $root.proto.ContextInfo.QuotedType[m.quotedType] === undefined ? m.quotedType : $root.proto.ContextInfo.QuotedType[m.quotedType] : m.quotedType; + if (o.oneofs) + d._quotedType = "quotedType"; + } + if (m.botMessageSharingInfo != null && m.hasOwnProperty("botMessageSharingInfo")) { + d.botMessageSharingInfo = $root.proto.BotMessageSharingInfo.toObject(m.botMessageSharingInfo, o); + if (o.oneofs) + d._botMessageSharingInfo = "botMessageSharingInfo"; + } + return d; + }; + + ContextInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ContextInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo"; + }; + + ContextInfo.AdReplyInfo = (function() { + + function AdReplyInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AdReplyInfo.prototype.advertiserName = null; + AdReplyInfo.prototype.mediaType = null; + AdReplyInfo.prototype.jpegThumbnail = null; + AdReplyInfo.prototype.caption = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AdReplyInfo.prototype, "_advertiserName", { + get: $util.oneOfGetter($oneOfFields = ["advertiserName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AdReplyInfo.prototype, "_mediaType", { + get: $util.oneOfGetter($oneOfFields = ["mediaType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AdReplyInfo.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AdReplyInfo.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AdReplyInfo.create = function create(properties) { + return new AdReplyInfo(properties); + }; + + AdReplyInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.advertiserName != null && Object.hasOwnProperty.call(m, "advertiserName")) + w.uint32(10).string(m.advertiserName); + if (m.mediaType != null && Object.hasOwnProperty.call(m, "mediaType")) + w.uint32(16).int32(m.mediaType); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(130).bytes(m.jpegThumbnail); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(138).string(m.caption); + return w; + }; + + AdReplyInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.AdReplyInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.advertiserName = r.string(); + break; + } + case 2: { + m.mediaType = r.int32(); + break; + } + case 16: { + m.jpegThumbnail = r.bytes(); + break; + } + case 17: { + m.caption = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AdReplyInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.AdReplyInfo) + return d; + var m = new $root.proto.ContextInfo.AdReplyInfo(); + if (d.advertiserName != null) { + m.advertiserName = String(d.advertiserName); + } + switch (d.mediaType) { + default: + if (typeof d.mediaType === "number") { + m.mediaType = d.mediaType; + break; + } + break; + case "NONE": + case 0: + m.mediaType = 0; + break; + case "IMAGE": + case 1: + m.mediaType = 1; + break; + case "VIDEO": + case 2: + m.mediaType = 2; + break; + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + return m; + }; + + AdReplyInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.advertiserName != null && m.hasOwnProperty("advertiserName")) { + d.advertiserName = m.advertiserName; + if (o.oneofs) + d._advertiserName = "advertiserName"; + } + if (m.mediaType != null && m.hasOwnProperty("mediaType")) { + d.mediaType = o.enums === String ? $root.proto.ContextInfo.AdReplyInfo.MediaType[m.mediaType] === undefined ? m.mediaType : $root.proto.ContextInfo.AdReplyInfo.MediaType[m.mediaType] : m.mediaType; + if (o.oneofs) + d._mediaType = "mediaType"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + return d; + }; + + AdReplyInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AdReplyInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.AdReplyInfo"; + }; + + AdReplyInfo.MediaType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "IMAGE"] = 1; + values[valuesById[2] = "VIDEO"] = 2; + return values; + })(); + + return AdReplyInfo; + })(); + + ContextInfo.BusinessMessageForwardInfo = (function() { + + function BusinessMessageForwardInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BusinessMessageForwardInfo.prototype.businessOwnerJid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BusinessMessageForwardInfo.prototype, "_businessOwnerJid", { + get: $util.oneOfGetter($oneOfFields = ["businessOwnerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BusinessMessageForwardInfo.create = function create(properties) { + return new BusinessMessageForwardInfo(properties); + }; + + BusinessMessageForwardInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.businessOwnerJid != null && Object.hasOwnProperty.call(m, "businessOwnerJid")) + w.uint32(10).string(m.businessOwnerJid); + return w; + }; + + BusinessMessageForwardInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.BusinessMessageForwardInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.businessOwnerJid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BusinessMessageForwardInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.BusinessMessageForwardInfo) + return d; + var m = new $root.proto.ContextInfo.BusinessMessageForwardInfo(); + if (d.businessOwnerJid != null) { + m.businessOwnerJid = String(d.businessOwnerJid); + } + return m; + }; + + BusinessMessageForwardInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.businessOwnerJid != null && m.hasOwnProperty("businessOwnerJid")) { + d.businessOwnerJid = m.businessOwnerJid; + if (o.oneofs) + d._businessOwnerJid = "businessOwnerJid"; + } + return d; + }; + + BusinessMessageForwardInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BusinessMessageForwardInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.BusinessMessageForwardInfo"; + }; + + return BusinessMessageForwardInfo; + })(); + + ContextInfo.DataSharingContext = (function() { + + function DataSharingContext(p) { + this.parameters = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DataSharingContext.prototype.showMmDisclosure = null; + DataSharingContext.prototype.encryptedSignalTokenConsented = null; + DataSharingContext.prototype.parameters = $util.emptyArray; + DataSharingContext.prototype.dataSharingFlags = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DataSharingContext.prototype, "_showMmDisclosure", { + get: $util.oneOfGetter($oneOfFields = ["showMmDisclosure"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DataSharingContext.prototype, "_encryptedSignalTokenConsented", { + get: $util.oneOfGetter($oneOfFields = ["encryptedSignalTokenConsented"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DataSharingContext.prototype, "_dataSharingFlags", { + get: $util.oneOfGetter($oneOfFields = ["dataSharingFlags"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DataSharingContext.create = function create(properties) { + return new DataSharingContext(properties); + }; + + DataSharingContext.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.showMmDisclosure != null && Object.hasOwnProperty.call(m, "showMmDisclosure")) + w.uint32(8).bool(m.showMmDisclosure); + if (m.encryptedSignalTokenConsented != null && Object.hasOwnProperty.call(m, "encryptedSignalTokenConsented")) + w.uint32(18).string(m.encryptedSignalTokenConsented); + if (m.parameters != null && m.parameters.length) { + for (var i = 0; i < m.parameters.length; ++i) + $root.proto.ContextInfo.DataSharingContext.Parameters.encode(m.parameters[i], w.uint32(26).fork()).ldelim(); + } + if (m.dataSharingFlags != null && Object.hasOwnProperty.call(m, "dataSharingFlags")) + w.uint32(32).int32(m.dataSharingFlags); + return w; + }; + + DataSharingContext.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.DataSharingContext(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.showMmDisclosure = r.bool(); + break; + } + case 2: { + m.encryptedSignalTokenConsented = r.string(); + break; + } + case 3: { + if (!(m.parameters && m.parameters.length)) + m.parameters = []; + m.parameters.push($root.proto.ContextInfo.DataSharingContext.Parameters.decode(r, r.uint32())); + break; + } + case 4: { + m.dataSharingFlags = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DataSharingContext.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.DataSharingContext) + return d; + var m = new $root.proto.ContextInfo.DataSharingContext(); + if (d.showMmDisclosure != null) { + m.showMmDisclosure = Boolean(d.showMmDisclosure); + } + if (d.encryptedSignalTokenConsented != null) { + m.encryptedSignalTokenConsented = String(d.encryptedSignalTokenConsented); + } + if (d.parameters) { + if (!Array.isArray(d.parameters)) + throw TypeError(".proto.ContextInfo.DataSharingContext.parameters: array expected"); + m.parameters = []; + for (var i = 0; i < d.parameters.length; ++i) { + if (typeof d.parameters[i] !== "object") + throw TypeError(".proto.ContextInfo.DataSharingContext.parameters: object expected"); + m.parameters[i] = $root.proto.ContextInfo.DataSharingContext.Parameters.fromObject(d.parameters[i]); + } + } + if (d.dataSharingFlags != null) { + m.dataSharingFlags = d.dataSharingFlags | 0; + } + return m; + }; + + DataSharingContext.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.parameters = []; + } + if (m.showMmDisclosure != null && m.hasOwnProperty("showMmDisclosure")) { + d.showMmDisclosure = m.showMmDisclosure; + if (o.oneofs) + d._showMmDisclosure = "showMmDisclosure"; + } + if (m.encryptedSignalTokenConsented != null && m.hasOwnProperty("encryptedSignalTokenConsented")) { + d.encryptedSignalTokenConsented = m.encryptedSignalTokenConsented; + if (o.oneofs) + d._encryptedSignalTokenConsented = "encryptedSignalTokenConsented"; + } + if (m.parameters && m.parameters.length) { + d.parameters = []; + for (var j = 0; j < m.parameters.length; ++j) { + d.parameters[j] = $root.proto.ContextInfo.DataSharingContext.Parameters.toObject(m.parameters[j], o); + } + } + if (m.dataSharingFlags != null && m.hasOwnProperty("dataSharingFlags")) { + d.dataSharingFlags = m.dataSharingFlags; + if (o.oneofs) + d._dataSharingFlags = "dataSharingFlags"; + } + return d; + }; + + DataSharingContext.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DataSharingContext.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.DataSharingContext"; + }; + + DataSharingContext.DataSharingFlags = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "SHOW_MM_DISCLOSURE_ON_CLICK"] = 1; + values[valuesById[2] = "SHOW_MM_DISCLOSURE_ON_READ"] = 2; + return values; + })(); + + DataSharingContext.Parameters = (function() { + + function Parameters(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Parameters.prototype.key = null; + Parameters.prototype.stringData = null; + Parameters.prototype.intData = null; + Parameters.prototype.floatData = null; + Parameters.prototype.contents = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Parameters.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Parameters.prototype, "_stringData", { + get: $util.oneOfGetter($oneOfFields = ["stringData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Parameters.prototype, "_intData", { + get: $util.oneOfGetter($oneOfFields = ["intData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Parameters.prototype, "_floatData", { + get: $util.oneOfGetter($oneOfFields = ["floatData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Parameters.prototype, "_contents", { + get: $util.oneOfGetter($oneOfFields = ["contents"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Parameters.create = function create(properties) { + return new Parameters(properties); + }; + + Parameters.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + w.uint32(10).string(m.key); + if (m.stringData != null && Object.hasOwnProperty.call(m, "stringData")) + w.uint32(18).string(m.stringData); + if (m.intData != null && Object.hasOwnProperty.call(m, "intData")) + w.uint32(24).int64(m.intData); + if (m.floatData != null && Object.hasOwnProperty.call(m, "floatData")) + w.uint32(37).float(m.floatData); + if (m.contents != null && Object.hasOwnProperty.call(m, "contents")) + $root.proto.ContextInfo.DataSharingContext.Parameters.encode(m.contents, w.uint32(42).fork()).ldelim(); + return w; + }; + + Parameters.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.DataSharingContext.Parameters(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = r.string(); + break; + } + case 2: { + m.stringData = r.string(); + break; + } + case 3: { + m.intData = r.int64(); + break; + } + case 4: { + m.floatData = r.float(); + break; + } + case 5: { + m.contents = $root.proto.ContextInfo.DataSharingContext.Parameters.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Parameters.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.DataSharingContext.Parameters) + return d; + var m = new $root.proto.ContextInfo.DataSharingContext.Parameters(); + if (d.key != null) { + m.key = String(d.key); + } + if (d.stringData != null) { + m.stringData = String(d.stringData); + } + if (d.intData != null) { + if ($util.Long) + (m.intData = $util.Long.fromValue(d.intData)).unsigned = false; + else if (typeof d.intData === "string") + m.intData = parseInt(d.intData, 10); + else if (typeof d.intData === "number") + m.intData = d.intData; + else if (typeof d.intData === "object") + m.intData = new $util.LongBits(d.intData.low >>> 0, d.intData.high >>> 0).toNumber(); + } + if (d.floatData != null) { + m.floatData = Number(d.floatData); + } + if (d.contents != null) { + if (typeof d.contents !== "object") + throw TypeError(".proto.ContextInfo.DataSharingContext.Parameters.contents: object expected"); + m.contents = $root.proto.ContextInfo.DataSharingContext.Parameters.fromObject(d.contents); + } + return m; + }; + + Parameters.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = m.key; + if (o.oneofs) + d._key = "key"; + } + if (m.stringData != null && m.hasOwnProperty("stringData")) { + d.stringData = m.stringData; + if (o.oneofs) + d._stringData = "stringData"; + } + if (m.intData != null && m.hasOwnProperty("intData")) { + if (typeof m.intData === "number") + d.intData = o.longs === String ? String(m.intData) : m.intData; + else + d.intData = o.longs === String ? longToString(m.intData) : o.longs === Number ? longToNumber(m.intData) : m.intData; + if (o.oneofs) + d._intData = "intData"; + } + if (m.floatData != null && m.hasOwnProperty("floatData")) { + d.floatData = o.json && !isFinite(m.floatData) ? String(m.floatData) : m.floatData; + if (o.oneofs) + d._floatData = "floatData"; + } + if (m.contents != null && m.hasOwnProperty("contents")) { + d.contents = $root.proto.ContextInfo.DataSharingContext.Parameters.toObject(m.contents, o); + if (o.oneofs) + d._contents = "contents"; + } + return d; + }; + + Parameters.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Parameters.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.DataSharingContext.Parameters"; + }; + + return Parameters; + })(); + + return DataSharingContext; + })(); + + ContextInfo.ExternalAdReplyInfo = (function() { + + function ExternalAdReplyInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ExternalAdReplyInfo.prototype.title = null; + ExternalAdReplyInfo.prototype.body = null; + ExternalAdReplyInfo.prototype.mediaType = null; + ExternalAdReplyInfo.prototype.thumbnailUrl = null; + ExternalAdReplyInfo.prototype.mediaUrl = null; + ExternalAdReplyInfo.prototype.thumbnail = null; + ExternalAdReplyInfo.prototype.sourceType = null; + ExternalAdReplyInfo.prototype.sourceId = null; + ExternalAdReplyInfo.prototype.sourceUrl = null; + ExternalAdReplyInfo.prototype.containsAutoReply = null; + ExternalAdReplyInfo.prototype.renderLargerThumbnail = null; + ExternalAdReplyInfo.prototype.showAdAttribution = null; + ExternalAdReplyInfo.prototype.ctwaClid = null; + ExternalAdReplyInfo.prototype.ref = null; + ExternalAdReplyInfo.prototype.clickToWhatsappCall = null; + ExternalAdReplyInfo.prototype.adContextPreviewDismissed = null; + ExternalAdReplyInfo.prototype.sourceApp = null; + ExternalAdReplyInfo.prototype.automatedGreetingMessageShown = null; + ExternalAdReplyInfo.prototype.greetingMessageBody = null; + ExternalAdReplyInfo.prototype.ctaPayload = null; + ExternalAdReplyInfo.prototype.disableNudge = null; + ExternalAdReplyInfo.prototype.originalImageUrl = null; + ExternalAdReplyInfo.prototype.automatedGreetingMessageCtaType = null; + ExternalAdReplyInfo.prototype.wtwaAdFormat = null; + ExternalAdReplyInfo.prototype.adType = null; + ExternalAdReplyInfo.prototype.wtwaWebsiteUrl = null; + ExternalAdReplyInfo.prototype.adPreviewUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_body", { + get: $util.oneOfGetter($oneOfFields = ["body"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_mediaType", { + get: $util.oneOfGetter($oneOfFields = ["mediaType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_thumbnailUrl", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_mediaUrl", { + get: $util.oneOfGetter($oneOfFields = ["mediaUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_thumbnail", { + get: $util.oneOfGetter($oneOfFields = ["thumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_sourceType", { + get: $util.oneOfGetter($oneOfFields = ["sourceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_sourceId", { + get: $util.oneOfGetter($oneOfFields = ["sourceId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_sourceUrl", { + get: $util.oneOfGetter($oneOfFields = ["sourceUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_containsAutoReply", { + get: $util.oneOfGetter($oneOfFields = ["containsAutoReply"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_renderLargerThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["renderLargerThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_showAdAttribution", { + get: $util.oneOfGetter($oneOfFields = ["showAdAttribution"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_ctwaClid", { + get: $util.oneOfGetter($oneOfFields = ["ctwaClid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_ref", { + get: $util.oneOfGetter($oneOfFields = ["ref"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_clickToWhatsappCall", { + get: $util.oneOfGetter($oneOfFields = ["clickToWhatsappCall"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_adContextPreviewDismissed", { + get: $util.oneOfGetter($oneOfFields = ["adContextPreviewDismissed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_sourceApp", { + get: $util.oneOfGetter($oneOfFields = ["sourceApp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_automatedGreetingMessageShown", { + get: $util.oneOfGetter($oneOfFields = ["automatedGreetingMessageShown"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_greetingMessageBody", { + get: $util.oneOfGetter($oneOfFields = ["greetingMessageBody"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_ctaPayload", { + get: $util.oneOfGetter($oneOfFields = ["ctaPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_disableNudge", { + get: $util.oneOfGetter($oneOfFields = ["disableNudge"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_originalImageUrl", { + get: $util.oneOfGetter($oneOfFields = ["originalImageUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_automatedGreetingMessageCtaType", { + get: $util.oneOfGetter($oneOfFields = ["automatedGreetingMessageCtaType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_wtwaAdFormat", { + get: $util.oneOfGetter($oneOfFields = ["wtwaAdFormat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_adType", { + get: $util.oneOfGetter($oneOfFields = ["adType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_wtwaWebsiteUrl", { + get: $util.oneOfGetter($oneOfFields = ["wtwaWebsiteUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalAdReplyInfo.prototype, "_adPreviewUrl", { + get: $util.oneOfGetter($oneOfFields = ["adPreviewUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ExternalAdReplyInfo.create = function create(properties) { + return new ExternalAdReplyInfo(properties); + }; + + ExternalAdReplyInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.body != null && Object.hasOwnProperty.call(m, "body")) + w.uint32(18).string(m.body); + if (m.mediaType != null && Object.hasOwnProperty.call(m, "mediaType")) + w.uint32(24).int32(m.mediaType); + if (m.thumbnailUrl != null && Object.hasOwnProperty.call(m, "thumbnailUrl")) + w.uint32(34).string(m.thumbnailUrl); + if (m.mediaUrl != null && Object.hasOwnProperty.call(m, "mediaUrl")) + w.uint32(42).string(m.mediaUrl); + if (m.thumbnail != null && Object.hasOwnProperty.call(m, "thumbnail")) + w.uint32(50).bytes(m.thumbnail); + if (m.sourceType != null && Object.hasOwnProperty.call(m, "sourceType")) + w.uint32(58).string(m.sourceType); + if (m.sourceId != null && Object.hasOwnProperty.call(m, "sourceId")) + w.uint32(66).string(m.sourceId); + if (m.sourceUrl != null && Object.hasOwnProperty.call(m, "sourceUrl")) + w.uint32(74).string(m.sourceUrl); + if (m.containsAutoReply != null && Object.hasOwnProperty.call(m, "containsAutoReply")) + w.uint32(80).bool(m.containsAutoReply); + if (m.renderLargerThumbnail != null && Object.hasOwnProperty.call(m, "renderLargerThumbnail")) + w.uint32(88).bool(m.renderLargerThumbnail); + if (m.showAdAttribution != null && Object.hasOwnProperty.call(m, "showAdAttribution")) + w.uint32(96).bool(m.showAdAttribution); + if (m.ctwaClid != null && Object.hasOwnProperty.call(m, "ctwaClid")) + w.uint32(106).string(m.ctwaClid); + if (m.ref != null && Object.hasOwnProperty.call(m, "ref")) + w.uint32(114).string(m.ref); + if (m.clickToWhatsappCall != null && Object.hasOwnProperty.call(m, "clickToWhatsappCall")) + w.uint32(120).bool(m.clickToWhatsappCall); + if (m.adContextPreviewDismissed != null && Object.hasOwnProperty.call(m, "adContextPreviewDismissed")) + w.uint32(128).bool(m.adContextPreviewDismissed); + if (m.sourceApp != null && Object.hasOwnProperty.call(m, "sourceApp")) + w.uint32(138).string(m.sourceApp); + if (m.automatedGreetingMessageShown != null && Object.hasOwnProperty.call(m, "automatedGreetingMessageShown")) + w.uint32(144).bool(m.automatedGreetingMessageShown); + if (m.greetingMessageBody != null && Object.hasOwnProperty.call(m, "greetingMessageBody")) + w.uint32(154).string(m.greetingMessageBody); + if (m.ctaPayload != null && Object.hasOwnProperty.call(m, "ctaPayload")) + w.uint32(162).string(m.ctaPayload); + if (m.disableNudge != null && Object.hasOwnProperty.call(m, "disableNudge")) + w.uint32(168).bool(m.disableNudge); + if (m.originalImageUrl != null && Object.hasOwnProperty.call(m, "originalImageUrl")) + w.uint32(178).string(m.originalImageUrl); + if (m.automatedGreetingMessageCtaType != null && Object.hasOwnProperty.call(m, "automatedGreetingMessageCtaType")) + w.uint32(186).string(m.automatedGreetingMessageCtaType); + if (m.wtwaAdFormat != null && Object.hasOwnProperty.call(m, "wtwaAdFormat")) + w.uint32(192).bool(m.wtwaAdFormat); + if (m.adType != null && Object.hasOwnProperty.call(m, "adType")) + w.uint32(200).int32(m.adType); + if (m.wtwaWebsiteUrl != null && Object.hasOwnProperty.call(m, "wtwaWebsiteUrl")) + w.uint32(210).string(m.wtwaWebsiteUrl); + if (m.adPreviewUrl != null && Object.hasOwnProperty.call(m, "adPreviewUrl")) + w.uint32(218).string(m.adPreviewUrl); + return w; + }; + + ExternalAdReplyInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.ExternalAdReplyInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.body = r.string(); + break; + } + case 3: { + m.mediaType = r.int32(); + break; + } + case 4: { + m.thumbnailUrl = r.string(); + break; + } + case 5: { + m.mediaUrl = r.string(); + break; + } + case 6: { + m.thumbnail = r.bytes(); + break; + } + case 7: { + m.sourceType = r.string(); + break; + } + case 8: { + m.sourceId = r.string(); + break; + } + case 9: { + m.sourceUrl = r.string(); + break; + } + case 10: { + m.containsAutoReply = r.bool(); + break; + } + case 11: { + m.renderLargerThumbnail = r.bool(); + break; + } + case 12: { + m.showAdAttribution = r.bool(); + break; + } + case 13: { + m.ctwaClid = r.string(); + break; + } + case 14: { + m.ref = r.string(); + break; + } + case 15: { + m.clickToWhatsappCall = r.bool(); + break; + } + case 16: { + m.adContextPreviewDismissed = r.bool(); + break; + } + case 17: { + m.sourceApp = r.string(); + break; + } + case 18: { + m.automatedGreetingMessageShown = r.bool(); + break; + } + case 19: { + m.greetingMessageBody = r.string(); + break; + } + case 20: { + m.ctaPayload = r.string(); + break; + } + case 21: { + m.disableNudge = r.bool(); + break; + } + case 22: { + m.originalImageUrl = r.string(); + break; + } + case 23: { + m.automatedGreetingMessageCtaType = r.string(); + break; + } + case 24: { + m.wtwaAdFormat = r.bool(); + break; + } + case 25: { + m.adType = r.int32(); + break; + } + case 26: { + m.wtwaWebsiteUrl = r.string(); + break; + } + case 27: { + m.adPreviewUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ExternalAdReplyInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.ExternalAdReplyInfo) + return d; + var m = new $root.proto.ContextInfo.ExternalAdReplyInfo(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.body != null) { + m.body = String(d.body); + } + switch (d.mediaType) { + default: + if (typeof d.mediaType === "number") { + m.mediaType = d.mediaType; + break; + } + break; + case "NONE": + case 0: + m.mediaType = 0; + break; + case "IMAGE": + case 1: + m.mediaType = 1; + break; + case "VIDEO": + case 2: + m.mediaType = 2; + break; + } + if (d.thumbnailUrl != null) { + m.thumbnailUrl = String(d.thumbnailUrl); + } + if (d.mediaUrl != null) { + m.mediaUrl = String(d.mediaUrl); + } + if (d.thumbnail != null) { + if (typeof d.thumbnail === "string") + $util.base64.decode(d.thumbnail, m.thumbnail = $util.newBuffer($util.base64.length(d.thumbnail)), 0); + else if (d.thumbnail.length >= 0) + m.thumbnail = d.thumbnail; + } + if (d.sourceType != null) { + m.sourceType = String(d.sourceType); + } + if (d.sourceId != null) { + m.sourceId = String(d.sourceId); + } + if (d.sourceUrl != null) { + m.sourceUrl = String(d.sourceUrl); + } + if (d.containsAutoReply != null) { + m.containsAutoReply = Boolean(d.containsAutoReply); + } + if (d.renderLargerThumbnail != null) { + m.renderLargerThumbnail = Boolean(d.renderLargerThumbnail); + } + if (d.showAdAttribution != null) { + m.showAdAttribution = Boolean(d.showAdAttribution); + } + if (d.ctwaClid != null) { + m.ctwaClid = String(d.ctwaClid); + } + if (d.ref != null) { + m.ref = String(d.ref); + } + if (d.clickToWhatsappCall != null) { + m.clickToWhatsappCall = Boolean(d.clickToWhatsappCall); + } + if (d.adContextPreviewDismissed != null) { + m.adContextPreviewDismissed = Boolean(d.adContextPreviewDismissed); + } + if (d.sourceApp != null) { + m.sourceApp = String(d.sourceApp); + } + if (d.automatedGreetingMessageShown != null) { + m.automatedGreetingMessageShown = Boolean(d.automatedGreetingMessageShown); + } + if (d.greetingMessageBody != null) { + m.greetingMessageBody = String(d.greetingMessageBody); + } + if (d.ctaPayload != null) { + m.ctaPayload = String(d.ctaPayload); + } + if (d.disableNudge != null) { + m.disableNudge = Boolean(d.disableNudge); + } + if (d.originalImageUrl != null) { + m.originalImageUrl = String(d.originalImageUrl); + } + if (d.automatedGreetingMessageCtaType != null) { + m.automatedGreetingMessageCtaType = String(d.automatedGreetingMessageCtaType); + } + if (d.wtwaAdFormat != null) { + m.wtwaAdFormat = Boolean(d.wtwaAdFormat); + } + switch (d.adType) { + default: + if (typeof d.adType === "number") { + m.adType = d.adType; + break; + } + break; + case "CTWA": + case 0: + m.adType = 0; + break; + case "CAWC": + case 1: + m.adType = 1; + break; + } + if (d.wtwaWebsiteUrl != null) { + m.wtwaWebsiteUrl = String(d.wtwaWebsiteUrl); + } + if (d.adPreviewUrl != null) { + m.adPreviewUrl = String(d.adPreviewUrl); + } + return m; + }; + + ExternalAdReplyInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.body != null && m.hasOwnProperty("body")) { + d.body = m.body; + if (o.oneofs) + d._body = "body"; + } + if (m.mediaType != null && m.hasOwnProperty("mediaType")) { + d.mediaType = o.enums === String ? $root.proto.ContextInfo.ExternalAdReplyInfo.MediaType[m.mediaType] === undefined ? m.mediaType : $root.proto.ContextInfo.ExternalAdReplyInfo.MediaType[m.mediaType] : m.mediaType; + if (o.oneofs) + d._mediaType = "mediaType"; + } + if (m.thumbnailUrl != null && m.hasOwnProperty("thumbnailUrl")) { + d.thumbnailUrl = m.thumbnailUrl; + if (o.oneofs) + d._thumbnailUrl = "thumbnailUrl"; + } + if (m.mediaUrl != null && m.hasOwnProperty("mediaUrl")) { + d.mediaUrl = m.mediaUrl; + if (o.oneofs) + d._mediaUrl = "mediaUrl"; + } + if (m.thumbnail != null && m.hasOwnProperty("thumbnail")) { + d.thumbnail = o.bytes === String ? $util.base64.encode(m.thumbnail, 0, m.thumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnail) : m.thumbnail; + if (o.oneofs) + d._thumbnail = "thumbnail"; + } + if (m.sourceType != null && m.hasOwnProperty("sourceType")) { + d.sourceType = m.sourceType; + if (o.oneofs) + d._sourceType = "sourceType"; + } + if (m.sourceId != null && m.hasOwnProperty("sourceId")) { + d.sourceId = m.sourceId; + if (o.oneofs) + d._sourceId = "sourceId"; + } + if (m.sourceUrl != null && m.hasOwnProperty("sourceUrl")) { + d.sourceUrl = m.sourceUrl; + if (o.oneofs) + d._sourceUrl = "sourceUrl"; + } + if (m.containsAutoReply != null && m.hasOwnProperty("containsAutoReply")) { + d.containsAutoReply = m.containsAutoReply; + if (o.oneofs) + d._containsAutoReply = "containsAutoReply"; + } + if (m.renderLargerThumbnail != null && m.hasOwnProperty("renderLargerThumbnail")) { + d.renderLargerThumbnail = m.renderLargerThumbnail; + if (o.oneofs) + d._renderLargerThumbnail = "renderLargerThumbnail"; + } + if (m.showAdAttribution != null && m.hasOwnProperty("showAdAttribution")) { + d.showAdAttribution = m.showAdAttribution; + if (o.oneofs) + d._showAdAttribution = "showAdAttribution"; + } + if (m.ctwaClid != null && m.hasOwnProperty("ctwaClid")) { + d.ctwaClid = m.ctwaClid; + if (o.oneofs) + d._ctwaClid = "ctwaClid"; + } + if (m.ref != null && m.hasOwnProperty("ref")) { + d.ref = m.ref; + if (o.oneofs) + d._ref = "ref"; + } + if (m.clickToWhatsappCall != null && m.hasOwnProperty("clickToWhatsappCall")) { + d.clickToWhatsappCall = m.clickToWhatsappCall; + if (o.oneofs) + d._clickToWhatsappCall = "clickToWhatsappCall"; + } + if (m.adContextPreviewDismissed != null && m.hasOwnProperty("adContextPreviewDismissed")) { + d.adContextPreviewDismissed = m.adContextPreviewDismissed; + if (o.oneofs) + d._adContextPreviewDismissed = "adContextPreviewDismissed"; + } + if (m.sourceApp != null && m.hasOwnProperty("sourceApp")) { + d.sourceApp = m.sourceApp; + if (o.oneofs) + d._sourceApp = "sourceApp"; + } + if (m.automatedGreetingMessageShown != null && m.hasOwnProperty("automatedGreetingMessageShown")) { + d.automatedGreetingMessageShown = m.automatedGreetingMessageShown; + if (o.oneofs) + d._automatedGreetingMessageShown = "automatedGreetingMessageShown"; + } + if (m.greetingMessageBody != null && m.hasOwnProperty("greetingMessageBody")) { + d.greetingMessageBody = m.greetingMessageBody; + if (o.oneofs) + d._greetingMessageBody = "greetingMessageBody"; + } + if (m.ctaPayload != null && m.hasOwnProperty("ctaPayload")) { + d.ctaPayload = m.ctaPayload; + if (o.oneofs) + d._ctaPayload = "ctaPayload"; + } + if (m.disableNudge != null && m.hasOwnProperty("disableNudge")) { + d.disableNudge = m.disableNudge; + if (o.oneofs) + d._disableNudge = "disableNudge"; + } + if (m.originalImageUrl != null && m.hasOwnProperty("originalImageUrl")) { + d.originalImageUrl = m.originalImageUrl; + if (o.oneofs) + d._originalImageUrl = "originalImageUrl"; + } + if (m.automatedGreetingMessageCtaType != null && m.hasOwnProperty("automatedGreetingMessageCtaType")) { + d.automatedGreetingMessageCtaType = m.automatedGreetingMessageCtaType; + if (o.oneofs) + d._automatedGreetingMessageCtaType = "automatedGreetingMessageCtaType"; + } + if (m.wtwaAdFormat != null && m.hasOwnProperty("wtwaAdFormat")) { + d.wtwaAdFormat = m.wtwaAdFormat; + if (o.oneofs) + d._wtwaAdFormat = "wtwaAdFormat"; + } + if (m.adType != null && m.hasOwnProperty("adType")) { + d.adType = o.enums === String ? $root.proto.ContextInfo.ExternalAdReplyInfo.AdType[m.adType] === undefined ? m.adType : $root.proto.ContextInfo.ExternalAdReplyInfo.AdType[m.adType] : m.adType; + if (o.oneofs) + d._adType = "adType"; + } + if (m.wtwaWebsiteUrl != null && m.hasOwnProperty("wtwaWebsiteUrl")) { + d.wtwaWebsiteUrl = m.wtwaWebsiteUrl; + if (o.oneofs) + d._wtwaWebsiteUrl = "wtwaWebsiteUrl"; + } + if (m.adPreviewUrl != null && m.hasOwnProperty("adPreviewUrl")) { + d.adPreviewUrl = m.adPreviewUrl; + if (o.oneofs) + d._adPreviewUrl = "adPreviewUrl"; + } + return d; + }; + + ExternalAdReplyInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ExternalAdReplyInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.ExternalAdReplyInfo"; + }; + + ExternalAdReplyInfo.AdType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "CTWA"] = 0; + values[valuesById[1] = "CAWC"] = 1; + return values; + })(); + + ExternalAdReplyInfo.MediaType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "IMAGE"] = 1; + values[valuesById[2] = "VIDEO"] = 2; + return values; + })(); + + return ExternalAdReplyInfo; + })(); + + ContextInfo.FeatureEligibilities = (function() { + + function FeatureEligibilities(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + FeatureEligibilities.prototype.cannotBeReactedTo = null; + FeatureEligibilities.prototype.cannotBeRanked = null; + FeatureEligibilities.prototype.canRequestFeedback = null; + FeatureEligibilities.prototype.canBeReshared = null; + FeatureEligibilities.prototype.canReceiveMultiReact = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FeatureEligibilities.prototype, "_cannotBeReactedTo", { + get: $util.oneOfGetter($oneOfFields = ["cannotBeReactedTo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FeatureEligibilities.prototype, "_cannotBeRanked", { + get: $util.oneOfGetter($oneOfFields = ["cannotBeRanked"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FeatureEligibilities.prototype, "_canRequestFeedback", { + get: $util.oneOfGetter($oneOfFields = ["canRequestFeedback"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FeatureEligibilities.prototype, "_canBeReshared", { + get: $util.oneOfGetter($oneOfFields = ["canBeReshared"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FeatureEligibilities.prototype, "_canReceiveMultiReact", { + get: $util.oneOfGetter($oneOfFields = ["canReceiveMultiReact"]), + set: $util.oneOfSetter($oneOfFields) + }); + + FeatureEligibilities.create = function create(properties) { + return new FeatureEligibilities(properties); + }; + + FeatureEligibilities.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.cannotBeReactedTo != null && Object.hasOwnProperty.call(m, "cannotBeReactedTo")) + w.uint32(8).bool(m.cannotBeReactedTo); + if (m.cannotBeRanked != null && Object.hasOwnProperty.call(m, "cannotBeRanked")) + w.uint32(16).bool(m.cannotBeRanked); + if (m.canRequestFeedback != null && Object.hasOwnProperty.call(m, "canRequestFeedback")) + w.uint32(24).bool(m.canRequestFeedback); + if (m.canBeReshared != null && Object.hasOwnProperty.call(m, "canBeReshared")) + w.uint32(32).bool(m.canBeReshared); + if (m.canReceiveMultiReact != null && Object.hasOwnProperty.call(m, "canReceiveMultiReact")) + w.uint32(40).bool(m.canReceiveMultiReact); + return w; + }; + + FeatureEligibilities.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.FeatureEligibilities(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.cannotBeReactedTo = r.bool(); + break; + } + case 2: { + m.cannotBeRanked = r.bool(); + break; + } + case 3: { + m.canRequestFeedback = r.bool(); + break; + } + case 4: { + m.canBeReshared = r.bool(); + break; + } + case 5: { + m.canReceiveMultiReact = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + FeatureEligibilities.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.FeatureEligibilities) + return d; + var m = new $root.proto.ContextInfo.FeatureEligibilities(); + if (d.cannotBeReactedTo != null) { + m.cannotBeReactedTo = Boolean(d.cannotBeReactedTo); + } + if (d.cannotBeRanked != null) { + m.cannotBeRanked = Boolean(d.cannotBeRanked); + } + if (d.canRequestFeedback != null) { + m.canRequestFeedback = Boolean(d.canRequestFeedback); + } + if (d.canBeReshared != null) { + m.canBeReshared = Boolean(d.canBeReshared); + } + if (d.canReceiveMultiReact != null) { + m.canReceiveMultiReact = Boolean(d.canReceiveMultiReact); + } + return m; + }; + + FeatureEligibilities.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.cannotBeReactedTo != null && m.hasOwnProperty("cannotBeReactedTo")) { + d.cannotBeReactedTo = m.cannotBeReactedTo; + if (o.oneofs) + d._cannotBeReactedTo = "cannotBeReactedTo"; + } + if (m.cannotBeRanked != null && m.hasOwnProperty("cannotBeRanked")) { + d.cannotBeRanked = m.cannotBeRanked; + if (o.oneofs) + d._cannotBeRanked = "cannotBeRanked"; + } + if (m.canRequestFeedback != null && m.hasOwnProperty("canRequestFeedback")) { + d.canRequestFeedback = m.canRequestFeedback; + if (o.oneofs) + d._canRequestFeedback = "canRequestFeedback"; + } + if (m.canBeReshared != null && m.hasOwnProperty("canBeReshared")) { + d.canBeReshared = m.canBeReshared; + if (o.oneofs) + d._canBeReshared = "canBeReshared"; + } + if (m.canReceiveMultiReact != null && m.hasOwnProperty("canReceiveMultiReact")) { + d.canReceiveMultiReact = m.canReceiveMultiReact; + if (o.oneofs) + d._canReceiveMultiReact = "canReceiveMultiReact"; + } + return d; + }; + + FeatureEligibilities.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + FeatureEligibilities.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.FeatureEligibilities"; + }; + + return FeatureEligibilities; + })(); + + ContextInfo.ForwardOrigin = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "CHAT"] = 1; + values[valuesById[2] = "STATUS"] = 2; + values[valuesById[3] = "CHANNELS"] = 3; + values[valuesById[4] = "META_AI"] = 4; + values[valuesById[5] = "UGC"] = 5; + return values; + })(); + + ContextInfo.ForwardedNewsletterMessageInfo = (function() { + + function ForwardedNewsletterMessageInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ForwardedNewsletterMessageInfo.prototype.newsletterJid = null; + ForwardedNewsletterMessageInfo.prototype.serverMessageId = null; + ForwardedNewsletterMessageInfo.prototype.newsletterName = null; + ForwardedNewsletterMessageInfo.prototype.contentType = null; + ForwardedNewsletterMessageInfo.prototype.accessibilityText = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedNewsletterMessageInfo.prototype, "_newsletterJid", { + get: $util.oneOfGetter($oneOfFields = ["newsletterJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedNewsletterMessageInfo.prototype, "_serverMessageId", { + get: $util.oneOfGetter($oneOfFields = ["serverMessageId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedNewsletterMessageInfo.prototype, "_newsletterName", { + get: $util.oneOfGetter($oneOfFields = ["newsletterName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedNewsletterMessageInfo.prototype, "_contentType", { + get: $util.oneOfGetter($oneOfFields = ["contentType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedNewsletterMessageInfo.prototype, "_accessibilityText", { + get: $util.oneOfGetter($oneOfFields = ["accessibilityText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ForwardedNewsletterMessageInfo.create = function create(properties) { + return new ForwardedNewsletterMessageInfo(properties); + }; + + ForwardedNewsletterMessageInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.newsletterJid != null && Object.hasOwnProperty.call(m, "newsletterJid")) + w.uint32(10).string(m.newsletterJid); + if (m.serverMessageId != null && Object.hasOwnProperty.call(m, "serverMessageId")) + w.uint32(16).int32(m.serverMessageId); + if (m.newsletterName != null && Object.hasOwnProperty.call(m, "newsletterName")) + w.uint32(26).string(m.newsletterName); + if (m.contentType != null && Object.hasOwnProperty.call(m, "contentType")) + w.uint32(32).int32(m.contentType); + if (m.accessibilityText != null && Object.hasOwnProperty.call(m, "accessibilityText")) + w.uint32(42).string(m.accessibilityText); + return w; + }; + + ForwardedNewsletterMessageInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.ForwardedNewsletterMessageInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.newsletterJid = r.string(); + break; + } + case 2: { + m.serverMessageId = r.int32(); + break; + } + case 3: { + m.newsletterName = r.string(); + break; + } + case 4: { + m.contentType = r.int32(); + break; + } + case 5: { + m.accessibilityText = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ForwardedNewsletterMessageInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.ForwardedNewsletterMessageInfo) + return d; + var m = new $root.proto.ContextInfo.ForwardedNewsletterMessageInfo(); + if (d.newsletterJid != null) { + m.newsletterJid = String(d.newsletterJid); + } + if (d.serverMessageId != null) { + m.serverMessageId = d.serverMessageId | 0; + } + if (d.newsletterName != null) { + m.newsletterName = String(d.newsletterName); + } + switch (d.contentType) { + default: + if (typeof d.contentType === "number") { + m.contentType = d.contentType; + break; + } + break; + case "UPDATE": + case 1: + m.contentType = 1; + break; + case "UPDATE_CARD": + case 2: + m.contentType = 2; + break; + case "LINK_CARD": + case 3: + m.contentType = 3; + break; + } + if (d.accessibilityText != null) { + m.accessibilityText = String(d.accessibilityText); + } + return m; + }; + + ForwardedNewsletterMessageInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.newsletterJid != null && m.hasOwnProperty("newsletterJid")) { + d.newsletterJid = m.newsletterJid; + if (o.oneofs) + d._newsletterJid = "newsletterJid"; + } + if (m.serverMessageId != null && m.hasOwnProperty("serverMessageId")) { + d.serverMessageId = m.serverMessageId; + if (o.oneofs) + d._serverMessageId = "serverMessageId"; + } + if (m.newsletterName != null && m.hasOwnProperty("newsletterName")) { + d.newsletterName = m.newsletterName; + if (o.oneofs) + d._newsletterName = "newsletterName"; + } + if (m.contentType != null && m.hasOwnProperty("contentType")) { + d.contentType = o.enums === String ? $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.ContentType[m.contentType] === undefined ? m.contentType : $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.ContentType[m.contentType] : m.contentType; + if (o.oneofs) + d._contentType = "contentType"; + } + if (m.accessibilityText != null && m.hasOwnProperty("accessibilityText")) { + d.accessibilityText = m.accessibilityText; + if (o.oneofs) + d._accessibilityText = "accessibilityText"; + } + return d; + }; + + ForwardedNewsletterMessageInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ForwardedNewsletterMessageInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.ForwardedNewsletterMessageInfo"; + }; + + ForwardedNewsletterMessageInfo.ContentType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "UPDATE"] = 1; + values[valuesById[2] = "UPDATE_CARD"] = 2; + values[valuesById[3] = "LINK_CARD"] = 3; + return values; + })(); + + return ForwardedNewsletterMessageInfo; + })(); + + ContextInfo.PairedMediaType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NOT_PAIRED_MEDIA"] = 0; + values[valuesById[1] = "SD_VIDEO_PARENT"] = 1; + values[valuesById[2] = "HD_VIDEO_CHILD"] = 2; + values[valuesById[3] = "SD_IMAGE_PARENT"] = 3; + values[valuesById[4] = "HD_IMAGE_CHILD"] = 4; + values[valuesById[5] = "MOTION_PHOTO_PARENT"] = 5; + values[valuesById[6] = "MOTION_PHOTO_CHILD"] = 6; + values[valuesById[7] = "HEVC_VIDEO_PARENT"] = 7; + values[valuesById[8] = "HEVC_VIDEO_CHILD"] = 8; + return values; + })(); + + ContextInfo.QuestionReplyQuotedMessage = (function() { + + function QuestionReplyQuotedMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + QuestionReplyQuotedMessage.prototype.serverQuestionId = null; + QuestionReplyQuotedMessage.prototype.quotedQuestion = null; + QuestionReplyQuotedMessage.prototype.quotedResponse = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuestionReplyQuotedMessage.prototype, "_serverQuestionId", { + get: $util.oneOfGetter($oneOfFields = ["serverQuestionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuestionReplyQuotedMessage.prototype, "_quotedQuestion", { + get: $util.oneOfGetter($oneOfFields = ["quotedQuestion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuestionReplyQuotedMessage.prototype, "_quotedResponse", { + get: $util.oneOfGetter($oneOfFields = ["quotedResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + QuestionReplyQuotedMessage.create = function create(properties) { + return new QuestionReplyQuotedMessage(properties); + }; + + QuestionReplyQuotedMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.serverQuestionId != null && Object.hasOwnProperty.call(m, "serverQuestionId")) + w.uint32(8).int32(m.serverQuestionId); + if (m.quotedQuestion != null && Object.hasOwnProperty.call(m, "quotedQuestion")) + $root.proto.Message.encode(m.quotedQuestion, w.uint32(18).fork()).ldelim(); + if (m.quotedResponse != null && Object.hasOwnProperty.call(m, "quotedResponse")) + $root.proto.Message.encode(m.quotedResponse, w.uint32(26).fork()).ldelim(); + return w; + }; + + QuestionReplyQuotedMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.QuestionReplyQuotedMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.serverQuestionId = r.int32(); + break; + } + case 2: { + m.quotedQuestion = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 3: { + m.quotedResponse = $root.proto.Message.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + QuestionReplyQuotedMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.QuestionReplyQuotedMessage) + return d; + var m = new $root.proto.ContextInfo.QuestionReplyQuotedMessage(); + if (d.serverQuestionId != null) { + m.serverQuestionId = d.serverQuestionId | 0; + } + if (d.quotedQuestion != null) { + if (typeof d.quotedQuestion !== "object") + throw TypeError(".proto.ContextInfo.QuestionReplyQuotedMessage.quotedQuestion: object expected"); + m.quotedQuestion = $root.proto.Message.fromObject(d.quotedQuestion); + } + if (d.quotedResponse != null) { + if (typeof d.quotedResponse !== "object") + throw TypeError(".proto.ContextInfo.QuestionReplyQuotedMessage.quotedResponse: object expected"); + m.quotedResponse = $root.proto.Message.fromObject(d.quotedResponse); + } + return m; + }; + + QuestionReplyQuotedMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.serverQuestionId != null && m.hasOwnProperty("serverQuestionId")) { + d.serverQuestionId = m.serverQuestionId; + if (o.oneofs) + d._serverQuestionId = "serverQuestionId"; + } + if (m.quotedQuestion != null && m.hasOwnProperty("quotedQuestion")) { + d.quotedQuestion = $root.proto.Message.toObject(m.quotedQuestion, o); + if (o.oneofs) + d._quotedQuestion = "quotedQuestion"; + } + if (m.quotedResponse != null && m.hasOwnProperty("quotedResponse")) { + d.quotedResponse = $root.proto.Message.toObject(m.quotedResponse, o); + if (o.oneofs) + d._quotedResponse = "quotedResponse"; + } + return d; + }; + + QuestionReplyQuotedMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + QuestionReplyQuotedMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.QuestionReplyQuotedMessage"; + }; + + return QuestionReplyQuotedMessage; + })(); + + ContextInfo.QuotedType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "EXPLICIT"] = 0; + values[valuesById[1] = "AUTO"] = 1; + return values; + })(); + + ContextInfo.StatusAttributionType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "RESHARED_FROM_MENTION"] = 1; + values[valuesById[2] = "RESHARED_FROM_POST"] = 2; + values[valuesById[3] = "RESHARED_FROM_POST_MANY_TIMES"] = 3; + values[valuesById[4] = "FORWARDED_FROM_STATUS"] = 4; + return values; + })(); + + ContextInfo.StatusAudienceMetadata = (function() { + + function StatusAudienceMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusAudienceMetadata.prototype.audienceType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusAudienceMetadata.prototype, "_audienceType", { + get: $util.oneOfGetter($oneOfFields = ["audienceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusAudienceMetadata.create = function create(properties) { + return new StatusAudienceMetadata(properties); + }; + + StatusAudienceMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.audienceType != null && Object.hasOwnProperty.call(m, "audienceType")) + w.uint32(8).int32(m.audienceType); + return w; + }; + + StatusAudienceMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.StatusAudienceMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.audienceType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusAudienceMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.StatusAudienceMetadata) + return d; + var m = new $root.proto.ContextInfo.StatusAudienceMetadata(); + switch (d.audienceType) { + default: + if (typeof d.audienceType === "number") { + m.audienceType = d.audienceType; + break; + } + break; + case "UNKNOWN": + case 0: + m.audienceType = 0; + break; + case "CLOSE_FRIENDS": + case 1: + m.audienceType = 1; + break; + } + return m; + }; + + StatusAudienceMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.audienceType != null && m.hasOwnProperty("audienceType")) { + d.audienceType = o.enums === String ? $root.proto.ContextInfo.StatusAudienceMetadata.AudienceType[m.audienceType] === undefined ? m.audienceType : $root.proto.ContextInfo.StatusAudienceMetadata.AudienceType[m.audienceType] : m.audienceType; + if (o.oneofs) + d._audienceType = "audienceType"; + } + return d; + }; + + StatusAudienceMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusAudienceMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.StatusAudienceMetadata"; + }; + + StatusAudienceMetadata.AudienceType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "CLOSE_FRIENDS"] = 1; + return values; + })(); + + return StatusAudienceMetadata; + })(); + + ContextInfo.StatusSourceType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "IMAGE"] = 0; + values[valuesById[1] = "VIDEO"] = 1; + values[valuesById[2] = "GIF"] = 2; + values[valuesById[3] = "AUDIO"] = 3; + values[valuesById[4] = "TEXT"] = 4; + values[valuesById[5] = "MUSIC_STANDALONE"] = 5; + return values; + })(); + + ContextInfo.UTMInfo = (function() { + + function UTMInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UTMInfo.prototype.utmSource = null; + UTMInfo.prototype.utmCampaign = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UTMInfo.prototype, "_utmSource", { + get: $util.oneOfGetter($oneOfFields = ["utmSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UTMInfo.prototype, "_utmCampaign", { + get: $util.oneOfGetter($oneOfFields = ["utmCampaign"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UTMInfo.create = function create(properties) { + return new UTMInfo(properties); + }; + + UTMInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.utmSource != null && Object.hasOwnProperty.call(m, "utmSource")) + w.uint32(10).string(m.utmSource); + if (m.utmCampaign != null && Object.hasOwnProperty.call(m, "utmCampaign")) + w.uint32(18).string(m.utmCampaign); + return w; + }; + + UTMInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ContextInfo.UTMInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.utmSource = r.string(); + break; + } + case 2: { + m.utmCampaign = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UTMInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ContextInfo.UTMInfo) + return d; + var m = new $root.proto.ContextInfo.UTMInfo(); + if (d.utmSource != null) { + m.utmSource = String(d.utmSource); + } + if (d.utmCampaign != null) { + m.utmCampaign = String(d.utmCampaign); + } + return m; + }; + + UTMInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.utmSource != null && m.hasOwnProperty("utmSource")) { + d.utmSource = m.utmSource; + if (o.oneofs) + d._utmSource = "utmSource"; + } + if (m.utmCampaign != null && m.hasOwnProperty("utmCampaign")) { + d.utmCampaign = m.utmCampaign; + if (o.oneofs) + d._utmCampaign = "utmCampaign"; + } + return d; + }; + + UTMInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UTMInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ContextInfo.UTMInfo"; + }; + + return UTMInfo; + })(); + + return ContextInfo; + })(); + + proto.Conversation = (function() { + + function Conversation(p) { + this.messages = []; + this.participant = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Conversation.prototype.id = ""; + Conversation.prototype.messages = $util.emptyArray; + Conversation.prototype.newJid = null; + Conversation.prototype.oldJid = null; + Conversation.prototype.lastMsgTimestamp = null; + Conversation.prototype.unreadCount = null; + Conversation.prototype.readOnly = null; + Conversation.prototype.endOfHistoryTransfer = null; + Conversation.prototype.ephemeralExpiration = null; + Conversation.prototype.ephemeralSettingTimestamp = null; + Conversation.prototype.endOfHistoryTransferType = null; + Conversation.prototype.conversationTimestamp = null; + Conversation.prototype.name = null; + Conversation.prototype.pHash = null; + Conversation.prototype.notSpam = null; + Conversation.prototype.archived = null; + Conversation.prototype.disappearingMode = null; + Conversation.prototype.unreadMentionCount = null; + Conversation.prototype.markedAsUnread = null; + Conversation.prototype.participant = $util.emptyArray; + Conversation.prototype.tcToken = null; + Conversation.prototype.tcTokenTimestamp = null; + Conversation.prototype.contactPrimaryIdentityKey = null; + Conversation.prototype.pinned = null; + Conversation.prototype.muteEndTime = null; + Conversation.prototype.wallpaper = null; + Conversation.prototype.mediaVisibility = null; + Conversation.prototype.tcTokenSenderTimestamp = null; + Conversation.prototype.suspended = null; + Conversation.prototype.terminated = null; + Conversation.prototype.createdAt = null; + Conversation.prototype.createdBy = null; + Conversation.prototype.description = null; + Conversation.prototype.support = null; + Conversation.prototype.isParentGroup = null; + Conversation.prototype.parentGroupId = null; + Conversation.prototype.isDefaultSubgroup = null; + Conversation.prototype.displayName = null; + Conversation.prototype.pnJid = null; + Conversation.prototype.shareOwnPn = null; + Conversation.prototype.pnhDuplicateLidThread = null; + Conversation.prototype.lidJid = null; + Conversation.prototype.username = null; + Conversation.prototype.lidOriginType = null; + Conversation.prototype.commentsCount = null; + Conversation.prototype.locked = null; + Conversation.prototype.systemMessageToInsert = null; + Conversation.prototype.capiCreatedGroup = null; + Conversation.prototype.accountLid = null; + Conversation.prototype.limitSharing = null; + Conversation.prototype.limitSharingSettingTimestamp = null; + Conversation.prototype.limitSharingTrigger = null; + Conversation.prototype.limitSharingInitiatedByMe = null; + Conversation.prototype.maibaAiThreadEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_newJid", { + get: $util.oneOfGetter($oneOfFields = ["newJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_oldJid", { + get: $util.oneOfGetter($oneOfFields = ["oldJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_lastMsgTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["lastMsgTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_unreadCount", { + get: $util.oneOfGetter($oneOfFields = ["unreadCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_readOnly", { + get: $util.oneOfGetter($oneOfFields = ["readOnly"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_endOfHistoryTransfer", { + get: $util.oneOfGetter($oneOfFields = ["endOfHistoryTransfer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_ephemeralExpiration", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralExpiration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_ephemeralSettingTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralSettingTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_endOfHistoryTransferType", { + get: $util.oneOfGetter($oneOfFields = ["endOfHistoryTransferType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_conversationTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["conversationTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_pHash", { + get: $util.oneOfGetter($oneOfFields = ["pHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_notSpam", { + get: $util.oneOfGetter($oneOfFields = ["notSpam"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_archived", { + get: $util.oneOfGetter($oneOfFields = ["archived"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_disappearingMode", { + get: $util.oneOfGetter($oneOfFields = ["disappearingMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_unreadMentionCount", { + get: $util.oneOfGetter($oneOfFields = ["unreadMentionCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_markedAsUnread", { + get: $util.oneOfGetter($oneOfFields = ["markedAsUnread"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_tcToken", { + get: $util.oneOfGetter($oneOfFields = ["tcToken"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_tcTokenTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["tcTokenTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_contactPrimaryIdentityKey", { + get: $util.oneOfGetter($oneOfFields = ["contactPrimaryIdentityKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_pinned", { + get: $util.oneOfGetter($oneOfFields = ["pinned"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_muteEndTime", { + get: $util.oneOfGetter($oneOfFields = ["muteEndTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_wallpaper", { + get: $util.oneOfGetter($oneOfFields = ["wallpaper"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_mediaVisibility", { + get: $util.oneOfGetter($oneOfFields = ["mediaVisibility"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_tcTokenSenderTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["tcTokenSenderTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_suspended", { + get: $util.oneOfGetter($oneOfFields = ["suspended"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_terminated", { + get: $util.oneOfGetter($oneOfFields = ["terminated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_createdAt", { + get: $util.oneOfGetter($oneOfFields = ["createdAt"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_createdBy", { + get: $util.oneOfGetter($oneOfFields = ["createdBy"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_support", { + get: $util.oneOfGetter($oneOfFields = ["support"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_isParentGroup", { + get: $util.oneOfGetter($oneOfFields = ["isParentGroup"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_parentGroupId", { + get: $util.oneOfGetter($oneOfFields = ["parentGroupId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_isDefaultSubgroup", { + get: $util.oneOfGetter($oneOfFields = ["isDefaultSubgroup"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_displayName", { + get: $util.oneOfGetter($oneOfFields = ["displayName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_pnJid", { + get: $util.oneOfGetter($oneOfFields = ["pnJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_shareOwnPn", { + get: $util.oneOfGetter($oneOfFields = ["shareOwnPn"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_pnhDuplicateLidThread", { + get: $util.oneOfGetter($oneOfFields = ["pnhDuplicateLidThread"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_lidJid", { + get: $util.oneOfGetter($oneOfFields = ["lidJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_username", { + get: $util.oneOfGetter($oneOfFields = ["username"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_lidOriginType", { + get: $util.oneOfGetter($oneOfFields = ["lidOriginType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_commentsCount", { + get: $util.oneOfGetter($oneOfFields = ["commentsCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_locked", { + get: $util.oneOfGetter($oneOfFields = ["locked"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_systemMessageToInsert", { + get: $util.oneOfGetter($oneOfFields = ["systemMessageToInsert"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_capiCreatedGroup", { + get: $util.oneOfGetter($oneOfFields = ["capiCreatedGroup"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_accountLid", { + get: $util.oneOfGetter($oneOfFields = ["accountLid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_limitSharing", { + get: $util.oneOfGetter($oneOfFields = ["limitSharing"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_limitSharingSettingTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["limitSharingSettingTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_limitSharingTrigger", { + get: $util.oneOfGetter($oneOfFields = ["limitSharingTrigger"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_limitSharingInitiatedByMe", { + get: $util.oneOfGetter($oneOfFields = ["limitSharingInitiatedByMe"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Conversation.prototype, "_maibaAiThreadEnabled", { + get: $util.oneOfGetter($oneOfFields = ["maibaAiThreadEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Conversation.create = function create(properties) { + return new Conversation(properties); + }; + + Conversation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(10).string(m.id); + if (m.messages != null && m.messages.length) { + for (var i = 0; i < m.messages.length; ++i) + $root.proto.HistorySyncMsg.encode(m.messages[i], w.uint32(18).fork()).ldelim(); + } + if (m.newJid != null && Object.hasOwnProperty.call(m, "newJid")) + w.uint32(26).string(m.newJid); + if (m.oldJid != null && Object.hasOwnProperty.call(m, "oldJid")) + w.uint32(34).string(m.oldJid); + if (m.lastMsgTimestamp != null && Object.hasOwnProperty.call(m, "lastMsgTimestamp")) + w.uint32(40).uint64(m.lastMsgTimestamp); + if (m.unreadCount != null && Object.hasOwnProperty.call(m, "unreadCount")) + w.uint32(48).uint32(m.unreadCount); + if (m.readOnly != null && Object.hasOwnProperty.call(m, "readOnly")) + w.uint32(56).bool(m.readOnly); + if (m.endOfHistoryTransfer != null && Object.hasOwnProperty.call(m, "endOfHistoryTransfer")) + w.uint32(64).bool(m.endOfHistoryTransfer); + if (m.ephemeralExpiration != null && Object.hasOwnProperty.call(m, "ephemeralExpiration")) + w.uint32(72).uint32(m.ephemeralExpiration); + if (m.ephemeralSettingTimestamp != null && Object.hasOwnProperty.call(m, "ephemeralSettingTimestamp")) + w.uint32(80).int64(m.ephemeralSettingTimestamp); + if (m.endOfHistoryTransferType != null && Object.hasOwnProperty.call(m, "endOfHistoryTransferType")) + w.uint32(88).int32(m.endOfHistoryTransferType); + if (m.conversationTimestamp != null && Object.hasOwnProperty.call(m, "conversationTimestamp")) + w.uint32(96).uint64(m.conversationTimestamp); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(106).string(m.name); + if (m.pHash != null && Object.hasOwnProperty.call(m, "pHash")) + w.uint32(114).string(m.pHash); + if (m.notSpam != null && Object.hasOwnProperty.call(m, "notSpam")) + w.uint32(120).bool(m.notSpam); + if (m.archived != null && Object.hasOwnProperty.call(m, "archived")) + w.uint32(128).bool(m.archived); + if (m.disappearingMode != null && Object.hasOwnProperty.call(m, "disappearingMode")) + $root.proto.DisappearingMode.encode(m.disappearingMode, w.uint32(138).fork()).ldelim(); + if (m.unreadMentionCount != null && Object.hasOwnProperty.call(m, "unreadMentionCount")) + w.uint32(144).uint32(m.unreadMentionCount); + if (m.markedAsUnread != null && Object.hasOwnProperty.call(m, "markedAsUnread")) + w.uint32(152).bool(m.markedAsUnread); + if (m.participant != null && m.participant.length) { + for (var i = 0; i < m.participant.length; ++i) + $root.proto.GroupParticipant.encode(m.participant[i], w.uint32(162).fork()).ldelim(); + } + if (m.tcToken != null && Object.hasOwnProperty.call(m, "tcToken")) + w.uint32(170).bytes(m.tcToken); + if (m.tcTokenTimestamp != null && Object.hasOwnProperty.call(m, "tcTokenTimestamp")) + w.uint32(176).uint64(m.tcTokenTimestamp); + if (m.contactPrimaryIdentityKey != null && Object.hasOwnProperty.call(m, "contactPrimaryIdentityKey")) + w.uint32(186).bytes(m.contactPrimaryIdentityKey); + if (m.pinned != null && Object.hasOwnProperty.call(m, "pinned")) + w.uint32(192).uint32(m.pinned); + if (m.muteEndTime != null && Object.hasOwnProperty.call(m, "muteEndTime")) + w.uint32(200).uint64(m.muteEndTime); + if (m.wallpaper != null && Object.hasOwnProperty.call(m, "wallpaper")) + $root.proto.WallpaperSettings.encode(m.wallpaper, w.uint32(210).fork()).ldelim(); + if (m.mediaVisibility != null && Object.hasOwnProperty.call(m, "mediaVisibility")) + w.uint32(216).int32(m.mediaVisibility); + if (m.tcTokenSenderTimestamp != null && Object.hasOwnProperty.call(m, "tcTokenSenderTimestamp")) + w.uint32(224).uint64(m.tcTokenSenderTimestamp); + if (m.suspended != null && Object.hasOwnProperty.call(m, "suspended")) + w.uint32(232).bool(m.suspended); + if (m.terminated != null && Object.hasOwnProperty.call(m, "terminated")) + w.uint32(240).bool(m.terminated); + if (m.createdAt != null && Object.hasOwnProperty.call(m, "createdAt")) + w.uint32(248).uint64(m.createdAt); + if (m.createdBy != null && Object.hasOwnProperty.call(m, "createdBy")) + w.uint32(258).string(m.createdBy); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(266).string(m.description); + if (m.support != null && Object.hasOwnProperty.call(m, "support")) + w.uint32(272).bool(m.support); + if (m.isParentGroup != null && Object.hasOwnProperty.call(m, "isParentGroup")) + w.uint32(280).bool(m.isParentGroup); + if (m.isDefaultSubgroup != null && Object.hasOwnProperty.call(m, "isDefaultSubgroup")) + w.uint32(288).bool(m.isDefaultSubgroup); + if (m.parentGroupId != null && Object.hasOwnProperty.call(m, "parentGroupId")) + w.uint32(298).string(m.parentGroupId); + if (m.displayName != null && Object.hasOwnProperty.call(m, "displayName")) + w.uint32(306).string(m.displayName); + if (m.pnJid != null && Object.hasOwnProperty.call(m, "pnJid")) + w.uint32(314).string(m.pnJid); + if (m.shareOwnPn != null && Object.hasOwnProperty.call(m, "shareOwnPn")) + w.uint32(320).bool(m.shareOwnPn); + if (m.pnhDuplicateLidThread != null && Object.hasOwnProperty.call(m, "pnhDuplicateLidThread")) + w.uint32(328).bool(m.pnhDuplicateLidThread); + if (m.lidJid != null && Object.hasOwnProperty.call(m, "lidJid")) + w.uint32(338).string(m.lidJid); + if (m.username != null && Object.hasOwnProperty.call(m, "username")) + w.uint32(346).string(m.username); + if (m.lidOriginType != null && Object.hasOwnProperty.call(m, "lidOriginType")) + w.uint32(354).string(m.lidOriginType); + if (m.commentsCount != null && Object.hasOwnProperty.call(m, "commentsCount")) + w.uint32(360).uint32(m.commentsCount); + if (m.locked != null && Object.hasOwnProperty.call(m, "locked")) + w.uint32(368).bool(m.locked); + if (m.systemMessageToInsert != null && Object.hasOwnProperty.call(m, "systemMessageToInsert")) + w.uint32(376).int32(m.systemMessageToInsert); + if (m.capiCreatedGroup != null && Object.hasOwnProperty.call(m, "capiCreatedGroup")) + w.uint32(384).bool(m.capiCreatedGroup); + if (m.accountLid != null && Object.hasOwnProperty.call(m, "accountLid")) + w.uint32(394).string(m.accountLid); + if (m.limitSharing != null && Object.hasOwnProperty.call(m, "limitSharing")) + w.uint32(400).bool(m.limitSharing); + if (m.limitSharingSettingTimestamp != null && Object.hasOwnProperty.call(m, "limitSharingSettingTimestamp")) + w.uint32(408).int64(m.limitSharingSettingTimestamp); + if (m.limitSharingTrigger != null && Object.hasOwnProperty.call(m, "limitSharingTrigger")) + w.uint32(416).int32(m.limitSharingTrigger); + if (m.limitSharingInitiatedByMe != null && Object.hasOwnProperty.call(m, "limitSharingInitiatedByMe")) + w.uint32(424).bool(m.limitSharingInitiatedByMe); + if (m.maibaAiThreadEnabled != null && Object.hasOwnProperty.call(m, "maibaAiThreadEnabled")) + w.uint32(432).bool(m.maibaAiThreadEnabled); + return w; + }; + + Conversation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Conversation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.string(); + break; + } + case 2: { + if (!(m.messages && m.messages.length)) + m.messages = []; + m.messages.push($root.proto.HistorySyncMsg.decode(r, r.uint32())); + break; + } + case 3: { + m.newJid = r.string(); + break; + } + case 4: { + m.oldJid = r.string(); + break; + } + case 5: { + m.lastMsgTimestamp = r.uint64(); + break; + } + case 6: { + m.unreadCount = r.uint32(); + break; + } + case 7: { + m.readOnly = r.bool(); + break; + } + case 8: { + m.endOfHistoryTransfer = r.bool(); + break; + } + case 9: { + m.ephemeralExpiration = r.uint32(); + break; + } + case 10: { + m.ephemeralSettingTimestamp = r.int64(); + break; + } + case 11: { + m.endOfHistoryTransferType = r.int32(); + break; + } + case 12: { + m.conversationTimestamp = r.uint64(); + break; + } + case 13: { + m.name = r.string(); + break; + } + case 14: { + m.pHash = r.string(); + break; + } + case 15: { + m.notSpam = r.bool(); + break; + } + case 16: { + m.archived = r.bool(); + break; + } + case 17: { + m.disappearingMode = $root.proto.DisappearingMode.decode(r, r.uint32()); + break; + } + case 18: { + m.unreadMentionCount = r.uint32(); + break; + } + case 19: { + m.markedAsUnread = r.bool(); + break; + } + case 20: { + if (!(m.participant && m.participant.length)) + m.participant = []; + m.participant.push($root.proto.GroupParticipant.decode(r, r.uint32())); + break; + } + case 21: { + m.tcToken = r.bytes(); + break; + } + case 22: { + m.tcTokenTimestamp = r.uint64(); + break; + } + case 23: { + m.contactPrimaryIdentityKey = r.bytes(); + break; + } + case 24: { + m.pinned = r.uint32(); + break; + } + case 25: { + m.muteEndTime = r.uint64(); + break; + } + case 26: { + m.wallpaper = $root.proto.WallpaperSettings.decode(r, r.uint32()); + break; + } + case 27: { + m.mediaVisibility = r.int32(); + break; + } + case 28: { + m.tcTokenSenderTimestamp = r.uint64(); + break; + } + case 29: { + m.suspended = r.bool(); + break; + } + case 30: { + m.terminated = r.bool(); + break; + } + case 31: { + m.createdAt = r.uint64(); + break; + } + case 32: { + m.createdBy = r.string(); + break; + } + case 33: { + m.description = r.string(); + break; + } + case 34: { + m.support = r.bool(); + break; + } + case 35: { + m.isParentGroup = r.bool(); + break; + } + case 37: { + m.parentGroupId = r.string(); + break; + } + case 36: { + m.isDefaultSubgroup = r.bool(); + break; + } + case 38: { + m.displayName = r.string(); + break; + } + case 39: { + m.pnJid = r.string(); + break; + } + case 40: { + m.shareOwnPn = r.bool(); + break; + } + case 41: { + m.pnhDuplicateLidThread = r.bool(); + break; + } + case 42: { + m.lidJid = r.string(); + break; + } + case 43: { + m.username = r.string(); + break; + } + case 44: { + m.lidOriginType = r.string(); + break; + } + case 45: { + m.commentsCount = r.uint32(); + break; + } + case 46: { + m.locked = r.bool(); + break; + } + case 47: { + m.systemMessageToInsert = r.int32(); + break; + } + case 48: { + m.capiCreatedGroup = r.bool(); + break; + } + case 49: { + m.accountLid = r.string(); + break; + } + case 50: { + m.limitSharing = r.bool(); + break; + } + case 51: { + m.limitSharingSettingTimestamp = r.int64(); + break; + } + case 52: { + m.limitSharingTrigger = r.int32(); + break; + } + case 53: { + m.limitSharingInitiatedByMe = r.bool(); + break; + } + case 54: { + m.maibaAiThreadEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Conversation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Conversation) + return d; + var m = new $root.proto.Conversation(); + if (d.id != null) { + m.id = String(d.id); + } + if (d.messages) { + if (!Array.isArray(d.messages)) + throw TypeError(".proto.Conversation.messages: array expected"); + m.messages = []; + for (var i = 0; i < d.messages.length; ++i) { + if (typeof d.messages[i] !== "object") + throw TypeError(".proto.Conversation.messages: object expected"); + m.messages[i] = $root.proto.HistorySyncMsg.fromObject(d.messages[i]); + } + } + if (d.newJid != null) { + m.newJid = String(d.newJid); + } + if (d.oldJid != null) { + m.oldJid = String(d.oldJid); + } + if (d.lastMsgTimestamp != null) { + if ($util.Long) + (m.lastMsgTimestamp = $util.Long.fromValue(d.lastMsgTimestamp)).unsigned = true; + else if (typeof d.lastMsgTimestamp === "string") + m.lastMsgTimestamp = parseInt(d.lastMsgTimestamp, 10); + else if (typeof d.lastMsgTimestamp === "number") + m.lastMsgTimestamp = d.lastMsgTimestamp; + else if (typeof d.lastMsgTimestamp === "object") + m.lastMsgTimestamp = new $util.LongBits(d.lastMsgTimestamp.low >>> 0, d.lastMsgTimestamp.high >>> 0).toNumber(true); + } + if (d.unreadCount != null) { + m.unreadCount = d.unreadCount >>> 0; + } + if (d.readOnly != null) { + m.readOnly = Boolean(d.readOnly); + } + if (d.endOfHistoryTransfer != null) { + m.endOfHistoryTransfer = Boolean(d.endOfHistoryTransfer); + } + if (d.ephemeralExpiration != null) { + m.ephemeralExpiration = d.ephemeralExpiration >>> 0; + } + if (d.ephemeralSettingTimestamp != null) { + if ($util.Long) + (m.ephemeralSettingTimestamp = $util.Long.fromValue(d.ephemeralSettingTimestamp)).unsigned = false; + else if (typeof d.ephemeralSettingTimestamp === "string") + m.ephemeralSettingTimestamp = parseInt(d.ephemeralSettingTimestamp, 10); + else if (typeof d.ephemeralSettingTimestamp === "number") + m.ephemeralSettingTimestamp = d.ephemeralSettingTimestamp; + else if (typeof d.ephemeralSettingTimestamp === "object") + m.ephemeralSettingTimestamp = new $util.LongBits(d.ephemeralSettingTimestamp.low >>> 0, d.ephemeralSettingTimestamp.high >>> 0).toNumber(); + } + switch (d.endOfHistoryTransferType) { + default: + if (typeof d.endOfHistoryTransferType === "number") { + m.endOfHistoryTransferType = d.endOfHistoryTransferType; + break; + } + break; + case "COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY": + case 0: + m.endOfHistoryTransferType = 0; + break; + case "COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY": + case 1: + m.endOfHistoryTransferType = 1; + break; + case "COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY": + case 2: + m.endOfHistoryTransferType = 2; + break; + } + if (d.conversationTimestamp != null) { + if ($util.Long) + (m.conversationTimestamp = $util.Long.fromValue(d.conversationTimestamp)).unsigned = true; + else if (typeof d.conversationTimestamp === "string") + m.conversationTimestamp = parseInt(d.conversationTimestamp, 10); + else if (typeof d.conversationTimestamp === "number") + m.conversationTimestamp = d.conversationTimestamp; + else if (typeof d.conversationTimestamp === "object") + m.conversationTimestamp = new $util.LongBits(d.conversationTimestamp.low >>> 0, d.conversationTimestamp.high >>> 0).toNumber(true); + } + if (d.name != null) { + m.name = String(d.name); + } + if (d.pHash != null) { + m.pHash = String(d.pHash); + } + if (d.notSpam != null) { + m.notSpam = Boolean(d.notSpam); + } + if (d.archived != null) { + m.archived = Boolean(d.archived); + } + if (d.disappearingMode != null) { + if (typeof d.disappearingMode !== "object") + throw TypeError(".proto.Conversation.disappearingMode: object expected"); + m.disappearingMode = $root.proto.DisappearingMode.fromObject(d.disappearingMode); + } + if (d.unreadMentionCount != null) { + m.unreadMentionCount = d.unreadMentionCount >>> 0; + } + if (d.markedAsUnread != null) { + m.markedAsUnread = Boolean(d.markedAsUnread); + } + if (d.participant) { + if (!Array.isArray(d.participant)) + throw TypeError(".proto.Conversation.participant: array expected"); + m.participant = []; + for (var i = 0; i < d.participant.length; ++i) { + if (typeof d.participant[i] !== "object") + throw TypeError(".proto.Conversation.participant: object expected"); + m.participant[i] = $root.proto.GroupParticipant.fromObject(d.participant[i]); + } + } + if (d.tcToken != null) { + if (typeof d.tcToken === "string") + $util.base64.decode(d.tcToken, m.tcToken = $util.newBuffer($util.base64.length(d.tcToken)), 0); + else if (d.tcToken.length >= 0) + m.tcToken = d.tcToken; + } + if (d.tcTokenTimestamp != null) { + if ($util.Long) + (m.tcTokenTimestamp = $util.Long.fromValue(d.tcTokenTimestamp)).unsigned = true; + else if (typeof d.tcTokenTimestamp === "string") + m.tcTokenTimestamp = parseInt(d.tcTokenTimestamp, 10); + else if (typeof d.tcTokenTimestamp === "number") + m.tcTokenTimestamp = d.tcTokenTimestamp; + else if (typeof d.tcTokenTimestamp === "object") + m.tcTokenTimestamp = new $util.LongBits(d.tcTokenTimestamp.low >>> 0, d.tcTokenTimestamp.high >>> 0).toNumber(true); + } + if (d.contactPrimaryIdentityKey != null) { + if (typeof d.contactPrimaryIdentityKey === "string") + $util.base64.decode(d.contactPrimaryIdentityKey, m.contactPrimaryIdentityKey = $util.newBuffer($util.base64.length(d.contactPrimaryIdentityKey)), 0); + else if (d.contactPrimaryIdentityKey.length >= 0) + m.contactPrimaryIdentityKey = d.contactPrimaryIdentityKey; + } + if (d.pinned != null) { + m.pinned = d.pinned >>> 0; + } + if (d.muteEndTime != null) { + if ($util.Long) + (m.muteEndTime = $util.Long.fromValue(d.muteEndTime)).unsigned = true; + else if (typeof d.muteEndTime === "string") + m.muteEndTime = parseInt(d.muteEndTime, 10); + else if (typeof d.muteEndTime === "number") + m.muteEndTime = d.muteEndTime; + else if (typeof d.muteEndTime === "object") + m.muteEndTime = new $util.LongBits(d.muteEndTime.low >>> 0, d.muteEndTime.high >>> 0).toNumber(true); + } + if (d.wallpaper != null) { + if (typeof d.wallpaper !== "object") + throw TypeError(".proto.Conversation.wallpaper: object expected"); + m.wallpaper = $root.proto.WallpaperSettings.fromObject(d.wallpaper); + } + switch (d.mediaVisibility) { + default: + if (typeof d.mediaVisibility === "number") { + m.mediaVisibility = d.mediaVisibility; + break; + } + break; + case "DEFAULT": + case 0: + m.mediaVisibility = 0; + break; + case "OFF": + case 1: + m.mediaVisibility = 1; + break; + case "ON": + case 2: + m.mediaVisibility = 2; + break; + } + if (d.tcTokenSenderTimestamp != null) { + if ($util.Long) + (m.tcTokenSenderTimestamp = $util.Long.fromValue(d.tcTokenSenderTimestamp)).unsigned = true; + else if (typeof d.tcTokenSenderTimestamp === "string") + m.tcTokenSenderTimestamp = parseInt(d.tcTokenSenderTimestamp, 10); + else if (typeof d.tcTokenSenderTimestamp === "number") + m.tcTokenSenderTimestamp = d.tcTokenSenderTimestamp; + else if (typeof d.tcTokenSenderTimestamp === "object") + m.tcTokenSenderTimestamp = new $util.LongBits(d.tcTokenSenderTimestamp.low >>> 0, d.tcTokenSenderTimestamp.high >>> 0).toNumber(true); + } + if (d.suspended != null) { + m.suspended = Boolean(d.suspended); + } + if (d.terminated != null) { + m.terminated = Boolean(d.terminated); + } + if (d.createdAt != null) { + if ($util.Long) + (m.createdAt = $util.Long.fromValue(d.createdAt)).unsigned = true; + else if (typeof d.createdAt === "string") + m.createdAt = parseInt(d.createdAt, 10); + else if (typeof d.createdAt === "number") + m.createdAt = d.createdAt; + else if (typeof d.createdAt === "object") + m.createdAt = new $util.LongBits(d.createdAt.low >>> 0, d.createdAt.high >>> 0).toNumber(true); + } + if (d.createdBy != null) { + m.createdBy = String(d.createdBy); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.support != null) { + m.support = Boolean(d.support); + } + if (d.isParentGroup != null) { + m.isParentGroup = Boolean(d.isParentGroup); + } + if (d.parentGroupId != null) { + m.parentGroupId = String(d.parentGroupId); + } + if (d.isDefaultSubgroup != null) { + m.isDefaultSubgroup = Boolean(d.isDefaultSubgroup); + } + if (d.displayName != null) { + m.displayName = String(d.displayName); + } + if (d.pnJid != null) { + m.pnJid = String(d.pnJid); + } + if (d.shareOwnPn != null) { + m.shareOwnPn = Boolean(d.shareOwnPn); + } + if (d.pnhDuplicateLidThread != null) { + m.pnhDuplicateLidThread = Boolean(d.pnhDuplicateLidThread); + } + if (d.lidJid != null) { + m.lidJid = String(d.lidJid); + } + if (d.username != null) { + m.username = String(d.username); + } + if (d.lidOriginType != null) { + m.lidOriginType = String(d.lidOriginType); + } + if (d.commentsCount != null) { + m.commentsCount = d.commentsCount >>> 0; + } + if (d.locked != null) { + m.locked = Boolean(d.locked); + } + switch (d.systemMessageToInsert) { + default: + if (typeof d.systemMessageToInsert === "number") { + m.systemMessageToInsert = d.systemMessageToInsert; + break; + } + break; + case "E2EE_MSG": + case 1: + m.systemMessageToInsert = 1; + break; + case "NE2EE_SELF": + case 2: + m.systemMessageToInsert = 2; + break; + case "NE2EE_OTHER": + case 3: + m.systemMessageToInsert = 3; + break; + } + if (d.capiCreatedGroup != null) { + m.capiCreatedGroup = Boolean(d.capiCreatedGroup); + } + if (d.accountLid != null) { + m.accountLid = String(d.accountLid); + } + if (d.limitSharing != null) { + m.limitSharing = Boolean(d.limitSharing); + } + if (d.limitSharingSettingTimestamp != null) { + if ($util.Long) + (m.limitSharingSettingTimestamp = $util.Long.fromValue(d.limitSharingSettingTimestamp)).unsigned = false; + else if (typeof d.limitSharingSettingTimestamp === "string") + m.limitSharingSettingTimestamp = parseInt(d.limitSharingSettingTimestamp, 10); + else if (typeof d.limitSharingSettingTimestamp === "number") + m.limitSharingSettingTimestamp = d.limitSharingSettingTimestamp; + else if (typeof d.limitSharingSettingTimestamp === "object") + m.limitSharingSettingTimestamp = new $util.LongBits(d.limitSharingSettingTimestamp.low >>> 0, d.limitSharingSettingTimestamp.high >>> 0).toNumber(); + } + switch (d.limitSharingTrigger) { + default: + if (typeof d.limitSharingTrigger === "number") { + m.limitSharingTrigger = d.limitSharingTrigger; + break; + } + break; + case "UNKNOWN": + case 0: + m.limitSharingTrigger = 0; + break; + case "CHAT_SETTING": + case 1: + m.limitSharingTrigger = 1; + break; + case "BIZ_SUPPORTS_FB_HOSTING": + case 2: + m.limitSharingTrigger = 2; + break; + case "UNKNOWN_GROUP": + case 3: + m.limitSharingTrigger = 3; + break; + } + if (d.limitSharingInitiatedByMe != null) { + m.limitSharingInitiatedByMe = Boolean(d.limitSharingInitiatedByMe); + } + if (d.maibaAiThreadEnabled != null) { + m.maibaAiThreadEnabled = Boolean(d.maibaAiThreadEnabled); + } + return m; + }; + + Conversation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.messages = []; + d.participant = []; + } + if (o.defaults) { + d.id = ""; + } + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + } + if (m.messages && m.messages.length) { + d.messages = []; + for (var j = 0; j < m.messages.length; ++j) { + d.messages[j] = $root.proto.HistorySyncMsg.toObject(m.messages[j], o); + } + } + if (m.newJid != null && m.hasOwnProperty("newJid")) { + d.newJid = m.newJid; + if (o.oneofs) + d._newJid = "newJid"; + } + if (m.oldJid != null && m.hasOwnProperty("oldJid")) { + d.oldJid = m.oldJid; + if (o.oneofs) + d._oldJid = "oldJid"; + } + if (m.lastMsgTimestamp != null && m.hasOwnProperty("lastMsgTimestamp")) { + if (typeof m.lastMsgTimestamp === "number") + d.lastMsgTimestamp = o.longs === String ? String(m.lastMsgTimestamp) : m.lastMsgTimestamp; + else + d.lastMsgTimestamp = o.longs === String ? longToString(m.lastMsgTimestamp, true) : o.longs === Number ? longToNumber(m.lastMsgTimestamp, true) : m.lastMsgTimestamp; + if (o.oneofs) + d._lastMsgTimestamp = "lastMsgTimestamp"; + } + if (m.unreadCount != null && m.hasOwnProperty("unreadCount")) { + d.unreadCount = m.unreadCount; + if (o.oneofs) + d._unreadCount = "unreadCount"; + } + if (m.readOnly != null && m.hasOwnProperty("readOnly")) { + d.readOnly = m.readOnly; + if (o.oneofs) + d._readOnly = "readOnly"; + } + if (m.endOfHistoryTransfer != null && m.hasOwnProperty("endOfHistoryTransfer")) { + d.endOfHistoryTransfer = m.endOfHistoryTransfer; + if (o.oneofs) + d._endOfHistoryTransfer = "endOfHistoryTransfer"; + } + if (m.ephemeralExpiration != null && m.hasOwnProperty("ephemeralExpiration")) { + d.ephemeralExpiration = m.ephemeralExpiration; + if (o.oneofs) + d._ephemeralExpiration = "ephemeralExpiration"; + } + if (m.ephemeralSettingTimestamp != null && m.hasOwnProperty("ephemeralSettingTimestamp")) { + if (typeof m.ephemeralSettingTimestamp === "number") + d.ephemeralSettingTimestamp = o.longs === String ? String(m.ephemeralSettingTimestamp) : m.ephemeralSettingTimestamp; + else + d.ephemeralSettingTimestamp = o.longs === String ? longToString(m.ephemeralSettingTimestamp) : o.longs === Number ? longToNumber(m.ephemeralSettingTimestamp) : m.ephemeralSettingTimestamp; + if (o.oneofs) + d._ephemeralSettingTimestamp = "ephemeralSettingTimestamp"; + } + if (m.endOfHistoryTransferType != null && m.hasOwnProperty("endOfHistoryTransferType")) { + d.endOfHistoryTransferType = o.enums === String ? $root.proto.Conversation.EndOfHistoryTransferType[m.endOfHistoryTransferType] === undefined ? m.endOfHistoryTransferType : $root.proto.Conversation.EndOfHistoryTransferType[m.endOfHistoryTransferType] : m.endOfHistoryTransferType; + if (o.oneofs) + d._endOfHistoryTransferType = "endOfHistoryTransferType"; + } + if (m.conversationTimestamp != null && m.hasOwnProperty("conversationTimestamp")) { + if (typeof m.conversationTimestamp === "number") + d.conversationTimestamp = o.longs === String ? String(m.conversationTimestamp) : m.conversationTimestamp; + else + d.conversationTimestamp = o.longs === String ? longToString(m.conversationTimestamp, true) : o.longs === Number ? longToNumber(m.conversationTimestamp, true) : m.conversationTimestamp; + if (o.oneofs) + d._conversationTimestamp = "conversationTimestamp"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.pHash != null && m.hasOwnProperty("pHash")) { + d.pHash = m.pHash; + if (o.oneofs) + d._pHash = "pHash"; + } + if (m.notSpam != null && m.hasOwnProperty("notSpam")) { + d.notSpam = m.notSpam; + if (o.oneofs) + d._notSpam = "notSpam"; + } + if (m.archived != null && m.hasOwnProperty("archived")) { + d.archived = m.archived; + if (o.oneofs) + d._archived = "archived"; + } + if (m.disappearingMode != null && m.hasOwnProperty("disappearingMode")) { + d.disappearingMode = $root.proto.DisappearingMode.toObject(m.disappearingMode, o); + if (o.oneofs) + d._disappearingMode = "disappearingMode"; + } + if (m.unreadMentionCount != null && m.hasOwnProperty("unreadMentionCount")) { + d.unreadMentionCount = m.unreadMentionCount; + if (o.oneofs) + d._unreadMentionCount = "unreadMentionCount"; + } + if (m.markedAsUnread != null && m.hasOwnProperty("markedAsUnread")) { + d.markedAsUnread = m.markedAsUnread; + if (o.oneofs) + d._markedAsUnread = "markedAsUnread"; + } + if (m.participant && m.participant.length) { + d.participant = []; + for (var j = 0; j < m.participant.length; ++j) { + d.participant[j] = $root.proto.GroupParticipant.toObject(m.participant[j], o); + } + } + if (m.tcToken != null && m.hasOwnProperty("tcToken")) { + d.tcToken = o.bytes === String ? $util.base64.encode(m.tcToken, 0, m.tcToken.length) : o.bytes === Array ? Array.prototype.slice.call(m.tcToken) : m.tcToken; + if (o.oneofs) + d._tcToken = "tcToken"; + } + if (m.tcTokenTimestamp != null && m.hasOwnProperty("tcTokenTimestamp")) { + if (typeof m.tcTokenTimestamp === "number") + d.tcTokenTimestamp = o.longs === String ? String(m.tcTokenTimestamp) : m.tcTokenTimestamp; + else + d.tcTokenTimestamp = o.longs === String ? longToString(m.tcTokenTimestamp, true) : o.longs === Number ? longToNumber(m.tcTokenTimestamp, true) : m.tcTokenTimestamp; + if (o.oneofs) + d._tcTokenTimestamp = "tcTokenTimestamp"; + } + if (m.contactPrimaryIdentityKey != null && m.hasOwnProperty("contactPrimaryIdentityKey")) { + d.contactPrimaryIdentityKey = o.bytes === String ? $util.base64.encode(m.contactPrimaryIdentityKey, 0, m.contactPrimaryIdentityKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.contactPrimaryIdentityKey) : m.contactPrimaryIdentityKey; + if (o.oneofs) + d._contactPrimaryIdentityKey = "contactPrimaryIdentityKey"; + } + if (m.pinned != null && m.hasOwnProperty("pinned")) { + d.pinned = m.pinned; + if (o.oneofs) + d._pinned = "pinned"; + } + if (m.muteEndTime != null && m.hasOwnProperty("muteEndTime")) { + if (typeof m.muteEndTime === "number") + d.muteEndTime = o.longs === String ? String(m.muteEndTime) : m.muteEndTime; + else + d.muteEndTime = o.longs === String ? longToString(m.muteEndTime, true) : o.longs === Number ? longToNumber(m.muteEndTime, true) : m.muteEndTime; + if (o.oneofs) + d._muteEndTime = "muteEndTime"; + } + if (m.wallpaper != null && m.hasOwnProperty("wallpaper")) { + d.wallpaper = $root.proto.WallpaperSettings.toObject(m.wallpaper, o); + if (o.oneofs) + d._wallpaper = "wallpaper"; + } + if (m.mediaVisibility != null && m.hasOwnProperty("mediaVisibility")) { + d.mediaVisibility = o.enums === String ? $root.proto.MediaVisibility[m.mediaVisibility] === undefined ? m.mediaVisibility : $root.proto.MediaVisibility[m.mediaVisibility] : m.mediaVisibility; + if (o.oneofs) + d._mediaVisibility = "mediaVisibility"; + } + if (m.tcTokenSenderTimestamp != null && m.hasOwnProperty("tcTokenSenderTimestamp")) { + if (typeof m.tcTokenSenderTimestamp === "number") + d.tcTokenSenderTimestamp = o.longs === String ? String(m.tcTokenSenderTimestamp) : m.tcTokenSenderTimestamp; + else + d.tcTokenSenderTimestamp = o.longs === String ? longToString(m.tcTokenSenderTimestamp, true) : o.longs === Number ? longToNumber(m.tcTokenSenderTimestamp, true) : m.tcTokenSenderTimestamp; + if (o.oneofs) + d._tcTokenSenderTimestamp = "tcTokenSenderTimestamp"; + } + if (m.suspended != null && m.hasOwnProperty("suspended")) { + d.suspended = m.suspended; + if (o.oneofs) + d._suspended = "suspended"; + } + if (m.terminated != null && m.hasOwnProperty("terminated")) { + d.terminated = m.terminated; + if (o.oneofs) + d._terminated = "terminated"; + } + if (m.createdAt != null && m.hasOwnProperty("createdAt")) { + if (typeof m.createdAt === "number") + d.createdAt = o.longs === String ? String(m.createdAt) : m.createdAt; + else + d.createdAt = o.longs === String ? longToString(m.createdAt, true) : o.longs === Number ? longToNumber(m.createdAt, true) : m.createdAt; + if (o.oneofs) + d._createdAt = "createdAt"; + } + if (m.createdBy != null && m.hasOwnProperty("createdBy")) { + d.createdBy = m.createdBy; + if (o.oneofs) + d._createdBy = "createdBy"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.support != null && m.hasOwnProperty("support")) { + d.support = m.support; + if (o.oneofs) + d._support = "support"; + } + if (m.isParentGroup != null && m.hasOwnProperty("isParentGroup")) { + d.isParentGroup = m.isParentGroup; + if (o.oneofs) + d._isParentGroup = "isParentGroup"; + } + if (m.isDefaultSubgroup != null && m.hasOwnProperty("isDefaultSubgroup")) { + d.isDefaultSubgroup = m.isDefaultSubgroup; + if (o.oneofs) + d._isDefaultSubgroup = "isDefaultSubgroup"; + } + if (m.parentGroupId != null && m.hasOwnProperty("parentGroupId")) { + d.parentGroupId = m.parentGroupId; + if (o.oneofs) + d._parentGroupId = "parentGroupId"; + } + if (m.displayName != null && m.hasOwnProperty("displayName")) { + d.displayName = m.displayName; + if (o.oneofs) + d._displayName = "displayName"; + } + if (m.pnJid != null && m.hasOwnProperty("pnJid")) { + d.pnJid = m.pnJid; + if (o.oneofs) + d._pnJid = "pnJid"; + } + if (m.shareOwnPn != null && m.hasOwnProperty("shareOwnPn")) { + d.shareOwnPn = m.shareOwnPn; + if (o.oneofs) + d._shareOwnPn = "shareOwnPn"; + } + if (m.pnhDuplicateLidThread != null && m.hasOwnProperty("pnhDuplicateLidThread")) { + d.pnhDuplicateLidThread = m.pnhDuplicateLidThread; + if (o.oneofs) + d._pnhDuplicateLidThread = "pnhDuplicateLidThread"; + } + if (m.lidJid != null && m.hasOwnProperty("lidJid")) { + d.lidJid = m.lidJid; + if (o.oneofs) + d._lidJid = "lidJid"; + } + if (m.username != null && m.hasOwnProperty("username")) { + d.username = m.username; + if (o.oneofs) + d._username = "username"; + } + if (m.lidOriginType != null && m.hasOwnProperty("lidOriginType")) { + d.lidOriginType = m.lidOriginType; + if (o.oneofs) + d._lidOriginType = "lidOriginType"; + } + if (m.commentsCount != null && m.hasOwnProperty("commentsCount")) { + d.commentsCount = m.commentsCount; + if (o.oneofs) + d._commentsCount = "commentsCount"; + } + if (m.locked != null && m.hasOwnProperty("locked")) { + d.locked = m.locked; + if (o.oneofs) + d._locked = "locked"; + } + if (m.systemMessageToInsert != null && m.hasOwnProperty("systemMessageToInsert")) { + d.systemMessageToInsert = o.enums === String ? $root.proto.PrivacySystemMessage[m.systemMessageToInsert] === undefined ? m.systemMessageToInsert : $root.proto.PrivacySystemMessage[m.systemMessageToInsert] : m.systemMessageToInsert; + if (o.oneofs) + d._systemMessageToInsert = "systemMessageToInsert"; + } + if (m.capiCreatedGroup != null && m.hasOwnProperty("capiCreatedGroup")) { + d.capiCreatedGroup = m.capiCreatedGroup; + if (o.oneofs) + d._capiCreatedGroup = "capiCreatedGroup"; + } + if (m.accountLid != null && m.hasOwnProperty("accountLid")) { + d.accountLid = m.accountLid; + if (o.oneofs) + d._accountLid = "accountLid"; + } + if (m.limitSharing != null && m.hasOwnProperty("limitSharing")) { + d.limitSharing = m.limitSharing; + if (o.oneofs) + d._limitSharing = "limitSharing"; + } + if (m.limitSharingSettingTimestamp != null && m.hasOwnProperty("limitSharingSettingTimestamp")) { + if (typeof m.limitSharingSettingTimestamp === "number") + d.limitSharingSettingTimestamp = o.longs === String ? String(m.limitSharingSettingTimestamp) : m.limitSharingSettingTimestamp; + else + d.limitSharingSettingTimestamp = o.longs === String ? longToString(m.limitSharingSettingTimestamp) : o.longs === Number ? longToNumber(m.limitSharingSettingTimestamp) : m.limitSharingSettingTimestamp; + if (o.oneofs) + d._limitSharingSettingTimestamp = "limitSharingSettingTimestamp"; + } + if (m.limitSharingTrigger != null && m.hasOwnProperty("limitSharingTrigger")) { + d.limitSharingTrigger = o.enums === String ? $root.proto.LimitSharing.TriggerType[m.limitSharingTrigger] === undefined ? m.limitSharingTrigger : $root.proto.LimitSharing.TriggerType[m.limitSharingTrigger] : m.limitSharingTrigger; + if (o.oneofs) + d._limitSharingTrigger = "limitSharingTrigger"; + } + if (m.limitSharingInitiatedByMe != null && m.hasOwnProperty("limitSharingInitiatedByMe")) { + d.limitSharingInitiatedByMe = m.limitSharingInitiatedByMe; + if (o.oneofs) + d._limitSharingInitiatedByMe = "limitSharingInitiatedByMe"; + } + if (m.maibaAiThreadEnabled != null && m.hasOwnProperty("maibaAiThreadEnabled")) { + d.maibaAiThreadEnabled = m.maibaAiThreadEnabled; + if (o.oneofs) + d._maibaAiThreadEnabled = "maibaAiThreadEnabled"; + } + return d; + }; + + Conversation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Conversation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Conversation"; + }; + + Conversation.EndOfHistoryTransferType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY"] = 0; + values[valuesById[1] = "COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY"] = 1; + values[valuesById[2] = "COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY"] = 2; + return values; + })(); + + return Conversation; + })(); + + proto.DeviceCapabilities = (function() { + + function DeviceCapabilities(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeviceCapabilities.prototype.chatLockSupportLevel = null; + DeviceCapabilities.prototype.lidMigration = null; + DeviceCapabilities.prototype.businessBroadcast = null; + DeviceCapabilities.prototype.userHasAvatar = null; + DeviceCapabilities.prototype.memberNameTagPrimarySupport = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceCapabilities.prototype, "_chatLockSupportLevel", { + get: $util.oneOfGetter($oneOfFields = ["chatLockSupportLevel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceCapabilities.prototype, "_lidMigration", { + get: $util.oneOfGetter($oneOfFields = ["lidMigration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceCapabilities.prototype, "_businessBroadcast", { + get: $util.oneOfGetter($oneOfFields = ["businessBroadcast"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceCapabilities.prototype, "_userHasAvatar", { + get: $util.oneOfGetter($oneOfFields = ["userHasAvatar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceCapabilities.prototype, "_memberNameTagPrimarySupport", { + get: $util.oneOfGetter($oneOfFields = ["memberNameTagPrimarySupport"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeviceCapabilities.create = function create(properties) { + return new DeviceCapabilities(properties); + }; + + DeviceCapabilities.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.chatLockSupportLevel != null && Object.hasOwnProperty.call(m, "chatLockSupportLevel")) + w.uint32(8).int32(m.chatLockSupportLevel); + if (m.lidMigration != null && Object.hasOwnProperty.call(m, "lidMigration")) + $root.proto.DeviceCapabilities.LIDMigration.encode(m.lidMigration, w.uint32(18).fork()).ldelim(); + if (m.businessBroadcast != null && Object.hasOwnProperty.call(m, "businessBroadcast")) + $root.proto.DeviceCapabilities.BusinessBroadcast.encode(m.businessBroadcast, w.uint32(26).fork()).ldelim(); + if (m.userHasAvatar != null && Object.hasOwnProperty.call(m, "userHasAvatar")) + $root.proto.DeviceCapabilities.UserHasAvatar.encode(m.userHasAvatar, w.uint32(34).fork()).ldelim(); + if (m.memberNameTagPrimarySupport != null && Object.hasOwnProperty.call(m, "memberNameTagPrimarySupport")) + w.uint32(40).int32(m.memberNameTagPrimarySupport); + return w; + }; + + DeviceCapabilities.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceCapabilities(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.chatLockSupportLevel = r.int32(); + break; + } + case 2: { + m.lidMigration = $root.proto.DeviceCapabilities.LIDMigration.decode(r, r.uint32()); + break; + } + case 3: { + m.businessBroadcast = $root.proto.DeviceCapabilities.BusinessBroadcast.decode(r, r.uint32()); + break; + } + case 4: { + m.userHasAvatar = $root.proto.DeviceCapabilities.UserHasAvatar.decode(r, r.uint32()); + break; + } + case 5: { + m.memberNameTagPrimarySupport = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeviceCapabilities.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceCapabilities) + return d; + var m = new $root.proto.DeviceCapabilities(); + switch (d.chatLockSupportLevel) { + default: + if (typeof d.chatLockSupportLevel === "number") { + m.chatLockSupportLevel = d.chatLockSupportLevel; + break; + } + break; + case "NONE": + case 0: + m.chatLockSupportLevel = 0; + break; + case "MINIMAL": + case 1: + m.chatLockSupportLevel = 1; + break; + case "FULL": + case 2: + m.chatLockSupportLevel = 2; + break; + } + if (d.lidMigration != null) { + if (typeof d.lidMigration !== "object") + throw TypeError(".proto.DeviceCapabilities.lidMigration: object expected"); + m.lidMigration = $root.proto.DeviceCapabilities.LIDMigration.fromObject(d.lidMigration); + } + if (d.businessBroadcast != null) { + if (typeof d.businessBroadcast !== "object") + throw TypeError(".proto.DeviceCapabilities.businessBroadcast: object expected"); + m.businessBroadcast = $root.proto.DeviceCapabilities.BusinessBroadcast.fromObject(d.businessBroadcast); + } + if (d.userHasAvatar != null) { + if (typeof d.userHasAvatar !== "object") + throw TypeError(".proto.DeviceCapabilities.userHasAvatar: object expected"); + m.userHasAvatar = $root.proto.DeviceCapabilities.UserHasAvatar.fromObject(d.userHasAvatar); + } + switch (d.memberNameTagPrimarySupport) { + default: + if (typeof d.memberNameTagPrimarySupport === "number") { + m.memberNameTagPrimarySupport = d.memberNameTagPrimarySupport; + break; + } + break; + case "DISABLED": + case 0: + m.memberNameTagPrimarySupport = 0; + break; + case "RECEIVER_ENABLED": + case 1: + m.memberNameTagPrimarySupport = 1; + break; + case "SENDER_ENABLED": + case 2: + m.memberNameTagPrimarySupport = 2; + break; + } + return m; + }; + + DeviceCapabilities.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.chatLockSupportLevel != null && m.hasOwnProperty("chatLockSupportLevel")) { + d.chatLockSupportLevel = o.enums === String ? $root.proto.DeviceCapabilities.ChatLockSupportLevel[m.chatLockSupportLevel] === undefined ? m.chatLockSupportLevel : $root.proto.DeviceCapabilities.ChatLockSupportLevel[m.chatLockSupportLevel] : m.chatLockSupportLevel; + if (o.oneofs) + d._chatLockSupportLevel = "chatLockSupportLevel"; + } + if (m.lidMigration != null && m.hasOwnProperty("lidMigration")) { + d.lidMigration = $root.proto.DeviceCapabilities.LIDMigration.toObject(m.lidMigration, o); + if (o.oneofs) + d._lidMigration = "lidMigration"; + } + if (m.businessBroadcast != null && m.hasOwnProperty("businessBroadcast")) { + d.businessBroadcast = $root.proto.DeviceCapabilities.BusinessBroadcast.toObject(m.businessBroadcast, o); + if (o.oneofs) + d._businessBroadcast = "businessBroadcast"; + } + if (m.userHasAvatar != null && m.hasOwnProperty("userHasAvatar")) { + d.userHasAvatar = $root.proto.DeviceCapabilities.UserHasAvatar.toObject(m.userHasAvatar, o); + if (o.oneofs) + d._userHasAvatar = "userHasAvatar"; + } + if (m.memberNameTagPrimarySupport != null && m.hasOwnProperty("memberNameTagPrimarySupport")) { + d.memberNameTagPrimarySupport = o.enums === String ? $root.proto.DeviceCapabilities.MemberNameTagPrimarySupport[m.memberNameTagPrimarySupport] === undefined ? m.memberNameTagPrimarySupport : $root.proto.DeviceCapabilities.MemberNameTagPrimarySupport[m.memberNameTagPrimarySupport] : m.memberNameTagPrimarySupport; + if (o.oneofs) + d._memberNameTagPrimarySupport = "memberNameTagPrimarySupport"; + } + return d; + }; + + DeviceCapabilities.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeviceCapabilities.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceCapabilities"; + }; + + DeviceCapabilities.BusinessBroadcast = (function() { + + function BusinessBroadcast(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BusinessBroadcast.prototype.importListEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BusinessBroadcast.prototype, "_importListEnabled", { + get: $util.oneOfGetter($oneOfFields = ["importListEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BusinessBroadcast.create = function create(properties) { + return new BusinessBroadcast(properties); + }; + + BusinessBroadcast.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.importListEnabled != null && Object.hasOwnProperty.call(m, "importListEnabled")) + w.uint32(8).bool(m.importListEnabled); + return w; + }; + + BusinessBroadcast.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceCapabilities.BusinessBroadcast(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.importListEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BusinessBroadcast.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceCapabilities.BusinessBroadcast) + return d; + var m = new $root.proto.DeviceCapabilities.BusinessBroadcast(); + if (d.importListEnabled != null) { + m.importListEnabled = Boolean(d.importListEnabled); + } + return m; + }; + + BusinessBroadcast.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.importListEnabled != null && m.hasOwnProperty("importListEnabled")) { + d.importListEnabled = m.importListEnabled; + if (o.oneofs) + d._importListEnabled = "importListEnabled"; + } + return d; + }; + + BusinessBroadcast.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BusinessBroadcast.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceCapabilities.BusinessBroadcast"; + }; + + return BusinessBroadcast; + })(); + + DeviceCapabilities.ChatLockSupportLevel = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "MINIMAL"] = 1; + values[valuesById[2] = "FULL"] = 2; + return values; + })(); + + DeviceCapabilities.LIDMigration = (function() { + + function LIDMigration(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LIDMigration.prototype.chatDbMigrationTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LIDMigration.prototype, "_chatDbMigrationTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["chatDbMigrationTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LIDMigration.create = function create(properties) { + return new LIDMigration(properties); + }; + + LIDMigration.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.chatDbMigrationTimestamp != null && Object.hasOwnProperty.call(m, "chatDbMigrationTimestamp")) + w.uint32(8).uint64(m.chatDbMigrationTimestamp); + return w; + }; + + LIDMigration.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceCapabilities.LIDMigration(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.chatDbMigrationTimestamp = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LIDMigration.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceCapabilities.LIDMigration) + return d; + var m = new $root.proto.DeviceCapabilities.LIDMigration(); + if (d.chatDbMigrationTimestamp != null) { + if ($util.Long) + (m.chatDbMigrationTimestamp = $util.Long.fromValue(d.chatDbMigrationTimestamp)).unsigned = true; + else if (typeof d.chatDbMigrationTimestamp === "string") + m.chatDbMigrationTimestamp = parseInt(d.chatDbMigrationTimestamp, 10); + else if (typeof d.chatDbMigrationTimestamp === "number") + m.chatDbMigrationTimestamp = d.chatDbMigrationTimestamp; + else if (typeof d.chatDbMigrationTimestamp === "object") + m.chatDbMigrationTimestamp = new $util.LongBits(d.chatDbMigrationTimestamp.low >>> 0, d.chatDbMigrationTimestamp.high >>> 0).toNumber(true); + } + return m; + }; + + LIDMigration.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.chatDbMigrationTimestamp != null && m.hasOwnProperty("chatDbMigrationTimestamp")) { + if (typeof m.chatDbMigrationTimestamp === "number") + d.chatDbMigrationTimestamp = o.longs === String ? String(m.chatDbMigrationTimestamp) : m.chatDbMigrationTimestamp; + else + d.chatDbMigrationTimestamp = o.longs === String ? longToString(m.chatDbMigrationTimestamp, true) : o.longs === Number ? longToNumber(m.chatDbMigrationTimestamp, true) : m.chatDbMigrationTimestamp; + if (o.oneofs) + d._chatDbMigrationTimestamp = "chatDbMigrationTimestamp"; + } + return d; + }; + + LIDMigration.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LIDMigration.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceCapabilities.LIDMigration"; + }; + + return LIDMigration; + })(); + + DeviceCapabilities.MemberNameTagPrimarySupport = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DISABLED"] = 0; + values[valuesById[1] = "RECEIVER_ENABLED"] = 1; + values[valuesById[2] = "SENDER_ENABLED"] = 2; + return values; + })(); + + DeviceCapabilities.UserHasAvatar = (function() { + + function UserHasAvatar(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UserHasAvatar.prototype.userHasAvatar = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserHasAvatar.prototype, "_userHasAvatar", { + get: $util.oneOfGetter($oneOfFields = ["userHasAvatar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UserHasAvatar.create = function create(properties) { + return new UserHasAvatar(properties); + }; + + UserHasAvatar.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.userHasAvatar != null && Object.hasOwnProperty.call(m, "userHasAvatar")) + w.uint32(8).bool(m.userHasAvatar); + return w; + }; + + UserHasAvatar.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceCapabilities.UserHasAvatar(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.userHasAvatar = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UserHasAvatar.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceCapabilities.UserHasAvatar) + return d; + var m = new $root.proto.DeviceCapabilities.UserHasAvatar(); + if (d.userHasAvatar != null) { + m.userHasAvatar = Boolean(d.userHasAvatar); + } + return m; + }; + + UserHasAvatar.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.userHasAvatar != null && m.hasOwnProperty("userHasAvatar")) { + d.userHasAvatar = m.userHasAvatar; + if (o.oneofs) + d._userHasAvatar = "userHasAvatar"; + } + return d; + }; + + UserHasAvatar.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UserHasAvatar.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceCapabilities.UserHasAvatar"; + }; + + return UserHasAvatar; + })(); + + return DeviceCapabilities; + })(); + + proto.DeviceConsistencyCodeMessage = (function() { + + function DeviceConsistencyCodeMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeviceConsistencyCodeMessage.prototype.generation = null; + DeviceConsistencyCodeMessage.prototype.signature = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceConsistencyCodeMessage.prototype, "_generation", { + get: $util.oneOfGetter($oneOfFields = ["generation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceConsistencyCodeMessage.prototype, "_signature", { + get: $util.oneOfGetter($oneOfFields = ["signature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeviceConsistencyCodeMessage.create = function create(properties) { + return new DeviceConsistencyCodeMessage(properties); + }; + + DeviceConsistencyCodeMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.generation != null && Object.hasOwnProperty.call(m, "generation")) + w.uint32(8).uint32(m.generation); + if (m.signature != null && Object.hasOwnProperty.call(m, "signature")) + w.uint32(18).bytes(m.signature); + return w; + }; + + DeviceConsistencyCodeMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceConsistencyCodeMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.generation = r.uint32(); + break; + } + case 2: { + m.signature = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeviceConsistencyCodeMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceConsistencyCodeMessage) + return d; + var m = new $root.proto.DeviceConsistencyCodeMessage(); + if (d.generation != null) { + m.generation = d.generation >>> 0; + } + if (d.signature != null) { + if (typeof d.signature === "string") + $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0); + else if (d.signature.length >= 0) + m.signature = d.signature; + } + return m; + }; + + DeviceConsistencyCodeMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.generation != null && m.hasOwnProperty("generation")) { + d.generation = m.generation; + if (o.oneofs) + d._generation = "generation"; + } + if (m.signature != null && m.hasOwnProperty("signature")) { + d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature; + if (o.oneofs) + d._signature = "signature"; + } + return d; + }; + + DeviceConsistencyCodeMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeviceConsistencyCodeMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceConsistencyCodeMessage"; + }; + + return DeviceConsistencyCodeMessage; + })(); + + proto.DeviceListMetadata = (function() { + + function DeviceListMetadata(p) { + this.senderKeyIndexes = []; + this.recipientKeyIndexes = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeviceListMetadata.prototype.senderKeyHash = null; + DeviceListMetadata.prototype.senderTimestamp = null; + DeviceListMetadata.prototype.senderKeyIndexes = $util.emptyArray; + DeviceListMetadata.prototype.senderAccountType = null; + DeviceListMetadata.prototype.receiverAccountType = null; + DeviceListMetadata.prototype.recipientKeyHash = null; + DeviceListMetadata.prototype.recipientTimestamp = null; + DeviceListMetadata.prototype.recipientKeyIndexes = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceListMetadata.prototype, "_senderKeyHash", { + get: $util.oneOfGetter($oneOfFields = ["senderKeyHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceListMetadata.prototype, "_senderTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceListMetadata.prototype, "_senderAccountType", { + get: $util.oneOfGetter($oneOfFields = ["senderAccountType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceListMetadata.prototype, "_receiverAccountType", { + get: $util.oneOfGetter($oneOfFields = ["receiverAccountType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceListMetadata.prototype, "_recipientKeyHash", { + get: $util.oneOfGetter($oneOfFields = ["recipientKeyHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceListMetadata.prototype, "_recipientTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["recipientTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeviceListMetadata.create = function create(properties) { + return new DeviceListMetadata(properties); + }; + + DeviceListMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.senderKeyHash != null && Object.hasOwnProperty.call(m, "senderKeyHash")) + w.uint32(10).bytes(m.senderKeyHash); + if (m.senderTimestamp != null && Object.hasOwnProperty.call(m, "senderTimestamp")) + w.uint32(16).uint64(m.senderTimestamp); + if (m.senderKeyIndexes != null && m.senderKeyIndexes.length) { + w.uint32(26).fork(); + for (var i = 0; i < m.senderKeyIndexes.length; ++i) + w.uint32(m.senderKeyIndexes[i]); + w.ldelim(); + } + if (m.senderAccountType != null && Object.hasOwnProperty.call(m, "senderAccountType")) + w.uint32(32).int32(m.senderAccountType); + if (m.receiverAccountType != null && Object.hasOwnProperty.call(m, "receiverAccountType")) + w.uint32(40).int32(m.receiverAccountType); + if (m.recipientKeyHash != null && Object.hasOwnProperty.call(m, "recipientKeyHash")) + w.uint32(66).bytes(m.recipientKeyHash); + if (m.recipientTimestamp != null && Object.hasOwnProperty.call(m, "recipientTimestamp")) + w.uint32(72).uint64(m.recipientTimestamp); + if (m.recipientKeyIndexes != null && m.recipientKeyIndexes.length) { + w.uint32(82).fork(); + for (var i = 0; i < m.recipientKeyIndexes.length; ++i) + w.uint32(m.recipientKeyIndexes[i]); + w.ldelim(); + } + return w; + }; + + DeviceListMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceListMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.senderKeyHash = r.bytes(); + break; + } + case 2: { + m.senderTimestamp = r.uint64(); + break; + } + case 3: { + if (!(m.senderKeyIndexes && m.senderKeyIndexes.length)) + m.senderKeyIndexes = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.senderKeyIndexes.push(r.uint32()); + } else + m.senderKeyIndexes.push(r.uint32()); + break; + } + case 4: { + m.senderAccountType = r.int32(); + break; + } + case 5: { + m.receiverAccountType = r.int32(); + break; + } + case 8: { + m.recipientKeyHash = r.bytes(); + break; + } + case 9: { + m.recipientTimestamp = r.uint64(); + break; + } + case 10: { + if (!(m.recipientKeyIndexes && m.recipientKeyIndexes.length)) + m.recipientKeyIndexes = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.recipientKeyIndexes.push(r.uint32()); + } else + m.recipientKeyIndexes.push(r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeviceListMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceListMetadata) + return d; + var m = new $root.proto.DeviceListMetadata(); + if (d.senderKeyHash != null) { + if (typeof d.senderKeyHash === "string") + $util.base64.decode(d.senderKeyHash, m.senderKeyHash = $util.newBuffer($util.base64.length(d.senderKeyHash)), 0); + else if (d.senderKeyHash.length >= 0) + m.senderKeyHash = d.senderKeyHash; + } + if (d.senderTimestamp != null) { + if ($util.Long) + (m.senderTimestamp = $util.Long.fromValue(d.senderTimestamp)).unsigned = true; + else if (typeof d.senderTimestamp === "string") + m.senderTimestamp = parseInt(d.senderTimestamp, 10); + else if (typeof d.senderTimestamp === "number") + m.senderTimestamp = d.senderTimestamp; + else if (typeof d.senderTimestamp === "object") + m.senderTimestamp = new $util.LongBits(d.senderTimestamp.low >>> 0, d.senderTimestamp.high >>> 0).toNumber(true); + } + if (d.senderKeyIndexes) { + if (!Array.isArray(d.senderKeyIndexes)) + throw TypeError(".proto.DeviceListMetadata.senderKeyIndexes: array expected"); + m.senderKeyIndexes = []; + for (var i = 0; i < d.senderKeyIndexes.length; ++i) { + m.senderKeyIndexes[i] = d.senderKeyIndexes[i] >>> 0; + } + } + switch (d.senderAccountType) { + default: + if (typeof d.senderAccountType === "number") { + m.senderAccountType = d.senderAccountType; + break; + } + break; + case "E2EE": + case 0: + m.senderAccountType = 0; + break; + case "HOSTED": + case 1: + m.senderAccountType = 1; + break; + } + switch (d.receiverAccountType) { + default: + if (typeof d.receiverAccountType === "number") { + m.receiverAccountType = d.receiverAccountType; + break; + } + break; + case "E2EE": + case 0: + m.receiverAccountType = 0; + break; + case "HOSTED": + case 1: + m.receiverAccountType = 1; + break; + } + if (d.recipientKeyHash != null) { + if (typeof d.recipientKeyHash === "string") + $util.base64.decode(d.recipientKeyHash, m.recipientKeyHash = $util.newBuffer($util.base64.length(d.recipientKeyHash)), 0); + else if (d.recipientKeyHash.length >= 0) + m.recipientKeyHash = d.recipientKeyHash; + } + if (d.recipientTimestamp != null) { + if ($util.Long) + (m.recipientTimestamp = $util.Long.fromValue(d.recipientTimestamp)).unsigned = true; + else if (typeof d.recipientTimestamp === "string") + m.recipientTimestamp = parseInt(d.recipientTimestamp, 10); + else if (typeof d.recipientTimestamp === "number") + m.recipientTimestamp = d.recipientTimestamp; + else if (typeof d.recipientTimestamp === "object") + m.recipientTimestamp = new $util.LongBits(d.recipientTimestamp.low >>> 0, d.recipientTimestamp.high >>> 0).toNumber(true); + } + if (d.recipientKeyIndexes) { + if (!Array.isArray(d.recipientKeyIndexes)) + throw TypeError(".proto.DeviceListMetadata.recipientKeyIndexes: array expected"); + m.recipientKeyIndexes = []; + for (var i = 0; i < d.recipientKeyIndexes.length; ++i) { + m.recipientKeyIndexes[i] = d.recipientKeyIndexes[i] >>> 0; + } + } + return m; + }; + + DeviceListMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.senderKeyIndexes = []; + d.recipientKeyIndexes = []; + } + if (m.senderKeyHash != null && m.hasOwnProperty("senderKeyHash")) { + d.senderKeyHash = o.bytes === String ? $util.base64.encode(m.senderKeyHash, 0, m.senderKeyHash.length) : o.bytes === Array ? Array.prototype.slice.call(m.senderKeyHash) : m.senderKeyHash; + if (o.oneofs) + d._senderKeyHash = "senderKeyHash"; + } + if (m.senderTimestamp != null && m.hasOwnProperty("senderTimestamp")) { + if (typeof m.senderTimestamp === "number") + d.senderTimestamp = o.longs === String ? String(m.senderTimestamp) : m.senderTimestamp; + else + d.senderTimestamp = o.longs === String ? longToString(m.senderTimestamp, true) : o.longs === Number ? longToNumber(m.senderTimestamp, true) : m.senderTimestamp; + if (o.oneofs) + d._senderTimestamp = "senderTimestamp"; + } + if (m.senderKeyIndexes && m.senderKeyIndexes.length) { + d.senderKeyIndexes = []; + for (var j = 0; j < m.senderKeyIndexes.length; ++j) { + d.senderKeyIndexes[j] = m.senderKeyIndexes[j]; + } + } + if (m.senderAccountType != null && m.hasOwnProperty("senderAccountType")) { + d.senderAccountType = o.enums === String ? $root.proto.ADVEncryptionType[m.senderAccountType] === undefined ? m.senderAccountType : $root.proto.ADVEncryptionType[m.senderAccountType] : m.senderAccountType; + if (o.oneofs) + d._senderAccountType = "senderAccountType"; + } + if (m.receiverAccountType != null && m.hasOwnProperty("receiverAccountType")) { + d.receiverAccountType = o.enums === String ? $root.proto.ADVEncryptionType[m.receiverAccountType] === undefined ? m.receiverAccountType : $root.proto.ADVEncryptionType[m.receiverAccountType] : m.receiverAccountType; + if (o.oneofs) + d._receiverAccountType = "receiverAccountType"; + } + if (m.recipientKeyHash != null && m.hasOwnProperty("recipientKeyHash")) { + d.recipientKeyHash = o.bytes === String ? $util.base64.encode(m.recipientKeyHash, 0, m.recipientKeyHash.length) : o.bytes === Array ? Array.prototype.slice.call(m.recipientKeyHash) : m.recipientKeyHash; + if (o.oneofs) + d._recipientKeyHash = "recipientKeyHash"; + } + if (m.recipientTimestamp != null && m.hasOwnProperty("recipientTimestamp")) { + if (typeof m.recipientTimestamp === "number") + d.recipientTimestamp = o.longs === String ? String(m.recipientTimestamp) : m.recipientTimestamp; + else + d.recipientTimestamp = o.longs === String ? longToString(m.recipientTimestamp, true) : o.longs === Number ? longToNumber(m.recipientTimestamp, true) : m.recipientTimestamp; + if (o.oneofs) + d._recipientTimestamp = "recipientTimestamp"; + } + if (m.recipientKeyIndexes && m.recipientKeyIndexes.length) { + d.recipientKeyIndexes = []; + for (var j = 0; j < m.recipientKeyIndexes.length; ++j) { + d.recipientKeyIndexes[j] = m.recipientKeyIndexes[j]; + } + } + return d; + }; + + DeviceListMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeviceListMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceListMetadata"; + }; + + return DeviceListMetadata; + })(); + + proto.DeviceProps = (function() { + + function DeviceProps(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeviceProps.prototype.os = null; + DeviceProps.prototype.version = null; + DeviceProps.prototype.platformType = null; + DeviceProps.prototype.requireFullSync = null; + DeviceProps.prototype.historySyncConfig = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceProps.prototype, "_os", { + get: $util.oneOfGetter($oneOfFields = ["os"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceProps.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceProps.prototype, "_platformType", { + get: $util.oneOfGetter($oneOfFields = ["platformType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceProps.prototype, "_requireFullSync", { + get: $util.oneOfGetter($oneOfFields = ["requireFullSync"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceProps.prototype, "_historySyncConfig", { + get: $util.oneOfGetter($oneOfFields = ["historySyncConfig"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeviceProps.create = function create(properties) { + return new DeviceProps(properties); + }; + + DeviceProps.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.os != null && Object.hasOwnProperty.call(m, "os")) + w.uint32(10).string(m.os); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + $root.proto.DeviceProps.AppVersion.encode(m.version, w.uint32(18).fork()).ldelim(); + if (m.platformType != null && Object.hasOwnProperty.call(m, "platformType")) + w.uint32(24).int32(m.platformType); + if (m.requireFullSync != null && Object.hasOwnProperty.call(m, "requireFullSync")) + w.uint32(32).bool(m.requireFullSync); + if (m.historySyncConfig != null && Object.hasOwnProperty.call(m, "historySyncConfig")) + $root.proto.DeviceProps.HistorySyncConfig.encode(m.historySyncConfig, w.uint32(42).fork()).ldelim(); + return w; + }; + + DeviceProps.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceProps(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.os = r.string(); + break; + } + case 2: { + m.version = $root.proto.DeviceProps.AppVersion.decode(r, r.uint32()); + break; + } + case 3: { + m.platformType = r.int32(); + break; + } + case 4: { + m.requireFullSync = r.bool(); + break; + } + case 5: { + m.historySyncConfig = $root.proto.DeviceProps.HistorySyncConfig.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeviceProps.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceProps) + return d; + var m = new $root.proto.DeviceProps(); + if (d.os != null) { + m.os = String(d.os); + } + if (d.version != null) { + if (typeof d.version !== "object") + throw TypeError(".proto.DeviceProps.version: object expected"); + m.version = $root.proto.DeviceProps.AppVersion.fromObject(d.version); + } + switch (d.platformType) { + default: + if (typeof d.platformType === "number") { + m.platformType = d.platformType; + break; + } + break; + case "UNKNOWN": + case 0: + m.platformType = 0; + break; + case "CHROME": + case 1: + m.platformType = 1; + break; + case "FIREFOX": + case 2: + m.platformType = 2; + break; + case "IE": + case 3: + m.platformType = 3; + break; + case "OPERA": + case 4: + m.platformType = 4; + break; + case "SAFARI": + case 5: + m.platformType = 5; + break; + case "EDGE": + case 6: + m.platformType = 6; + break; + case "DESKTOP": + case 7: + m.platformType = 7; + break; + case "IPAD": + case 8: + m.platformType = 8; + break; + case "ANDROID_TABLET": + case 9: + m.platformType = 9; + break; + case "OHANA": + case 10: + m.platformType = 10; + break; + case "ALOHA": + case 11: + m.platformType = 11; + break; + case "CATALINA": + case 12: + m.platformType = 12; + break; + case "TCL_TV": + case 13: + m.platformType = 13; + break; + case "IOS_PHONE": + case 14: + m.platformType = 14; + break; + case "IOS_CATALYST": + case 15: + m.platformType = 15; + break; + case "ANDROID_PHONE": + case 16: + m.platformType = 16; + break; + case "ANDROID_AMBIGUOUS": + case 17: + m.platformType = 17; + break; + case "WEAR_OS": + case 18: + m.platformType = 18; + break; + case "AR_WRIST": + case 19: + m.platformType = 19; + break; + case "AR_DEVICE": + case 20: + m.platformType = 20; + break; + case "UWP": + case 21: + m.platformType = 21; + break; + case "VR": + case 22: + m.platformType = 22; + break; + case "CLOUD_API": + case 23: + m.platformType = 23; + break; + case "SMARTGLASSES": + case 24: + m.platformType = 24; + break; + } + if (d.requireFullSync != null) { + m.requireFullSync = Boolean(d.requireFullSync); + } + if (d.historySyncConfig != null) { + if (typeof d.historySyncConfig !== "object") + throw TypeError(".proto.DeviceProps.historySyncConfig: object expected"); + m.historySyncConfig = $root.proto.DeviceProps.HistorySyncConfig.fromObject(d.historySyncConfig); + } + return m; + }; + + DeviceProps.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.os != null && m.hasOwnProperty("os")) { + d.os = m.os; + if (o.oneofs) + d._os = "os"; + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = $root.proto.DeviceProps.AppVersion.toObject(m.version, o); + if (o.oneofs) + d._version = "version"; + } + if (m.platformType != null && m.hasOwnProperty("platformType")) { + d.platformType = o.enums === String ? $root.proto.DeviceProps.PlatformType[m.platformType] === undefined ? m.platformType : $root.proto.DeviceProps.PlatformType[m.platformType] : m.platformType; + if (o.oneofs) + d._platformType = "platformType"; + } + if (m.requireFullSync != null && m.hasOwnProperty("requireFullSync")) { + d.requireFullSync = m.requireFullSync; + if (o.oneofs) + d._requireFullSync = "requireFullSync"; + } + if (m.historySyncConfig != null && m.hasOwnProperty("historySyncConfig")) { + d.historySyncConfig = $root.proto.DeviceProps.HistorySyncConfig.toObject(m.historySyncConfig, o); + if (o.oneofs) + d._historySyncConfig = "historySyncConfig"; + } + return d; + }; + + DeviceProps.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeviceProps.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceProps"; + }; + + DeviceProps.AppVersion = (function() { + + function AppVersion(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppVersion.prototype.primary = null; + AppVersion.prototype.secondary = null; + AppVersion.prototype.tertiary = null; + AppVersion.prototype.quaternary = null; + AppVersion.prototype.quinary = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_primary", { + get: $util.oneOfGetter($oneOfFields = ["primary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_secondary", { + get: $util.oneOfGetter($oneOfFields = ["secondary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_tertiary", { + get: $util.oneOfGetter($oneOfFields = ["tertiary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_quaternary", { + get: $util.oneOfGetter($oneOfFields = ["quaternary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppVersion.prototype, "_quinary", { + get: $util.oneOfGetter($oneOfFields = ["quinary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AppVersion.create = function create(properties) { + return new AppVersion(properties); + }; + + AppVersion.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.primary != null && Object.hasOwnProperty.call(m, "primary")) + w.uint32(8).uint32(m.primary); + if (m.secondary != null && Object.hasOwnProperty.call(m, "secondary")) + w.uint32(16).uint32(m.secondary); + if (m.tertiary != null && Object.hasOwnProperty.call(m, "tertiary")) + w.uint32(24).uint32(m.tertiary); + if (m.quaternary != null && Object.hasOwnProperty.call(m, "quaternary")) + w.uint32(32).uint32(m.quaternary); + if (m.quinary != null && Object.hasOwnProperty.call(m, "quinary")) + w.uint32(40).uint32(m.quinary); + return w; + }; + + AppVersion.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceProps.AppVersion(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.primary = r.uint32(); + break; + } + case 2: { + m.secondary = r.uint32(); + break; + } + case 3: { + m.tertiary = r.uint32(); + break; + } + case 4: { + m.quaternary = r.uint32(); + break; + } + case 5: { + m.quinary = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppVersion.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceProps.AppVersion) + return d; + var m = new $root.proto.DeviceProps.AppVersion(); + if (d.primary != null) { + m.primary = d.primary >>> 0; + } + if (d.secondary != null) { + m.secondary = d.secondary >>> 0; + } + if (d.tertiary != null) { + m.tertiary = d.tertiary >>> 0; + } + if (d.quaternary != null) { + m.quaternary = d.quaternary >>> 0; + } + if (d.quinary != null) { + m.quinary = d.quinary >>> 0; + } + return m; + }; + + AppVersion.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.primary != null && m.hasOwnProperty("primary")) { + d.primary = m.primary; + if (o.oneofs) + d._primary = "primary"; + } + if (m.secondary != null && m.hasOwnProperty("secondary")) { + d.secondary = m.secondary; + if (o.oneofs) + d._secondary = "secondary"; + } + if (m.tertiary != null && m.hasOwnProperty("tertiary")) { + d.tertiary = m.tertiary; + if (o.oneofs) + d._tertiary = "tertiary"; + } + if (m.quaternary != null && m.hasOwnProperty("quaternary")) { + d.quaternary = m.quaternary; + if (o.oneofs) + d._quaternary = "quaternary"; + } + if (m.quinary != null && m.hasOwnProperty("quinary")) { + d.quinary = m.quinary; + if (o.oneofs) + d._quinary = "quinary"; + } + return d; + }; + + AppVersion.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppVersion.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceProps.AppVersion"; + }; + + return AppVersion; + })(); + + DeviceProps.HistorySyncConfig = (function() { + + function HistorySyncConfig(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySyncConfig.prototype.fullSyncDaysLimit = null; + HistorySyncConfig.prototype.fullSyncSizeMbLimit = null; + HistorySyncConfig.prototype.storageQuotaMb = null; + HistorySyncConfig.prototype.inlineInitialPayloadInE2EeMsg = null; + HistorySyncConfig.prototype.recentSyncDaysLimit = null; + HistorySyncConfig.prototype.supportCallLogHistory = null; + HistorySyncConfig.prototype.supportBotUserAgentChatHistory = null; + HistorySyncConfig.prototype.supportCagReactionsAndPolls = null; + HistorySyncConfig.prototype.supportBizHostedMsg = null; + HistorySyncConfig.prototype.supportRecentSyncChunkMessageCountTuning = null; + HistorySyncConfig.prototype.supportHostedGroupMsg = null; + HistorySyncConfig.prototype.supportFbidBotChatHistory = null; + HistorySyncConfig.prototype.supportAddOnHistorySyncMigration = null; + HistorySyncConfig.prototype.supportMessageAssociation = null; + HistorySyncConfig.prototype.supportGroupHistory = null; + HistorySyncConfig.prototype.onDemandReady = null; + HistorySyncConfig.prototype.supportGuestChat = null; + HistorySyncConfig.prototype.completeOnDemandReady = null; + HistorySyncConfig.prototype.thumbnailSyncDaysLimit = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_fullSyncDaysLimit", { + get: $util.oneOfGetter($oneOfFields = ["fullSyncDaysLimit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_fullSyncSizeMbLimit", { + get: $util.oneOfGetter($oneOfFields = ["fullSyncSizeMbLimit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_storageQuotaMb", { + get: $util.oneOfGetter($oneOfFields = ["storageQuotaMb"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_inlineInitialPayloadInE2EeMsg", { + get: $util.oneOfGetter($oneOfFields = ["inlineInitialPayloadInE2EeMsg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_recentSyncDaysLimit", { + get: $util.oneOfGetter($oneOfFields = ["recentSyncDaysLimit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportCallLogHistory", { + get: $util.oneOfGetter($oneOfFields = ["supportCallLogHistory"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportBotUserAgentChatHistory", { + get: $util.oneOfGetter($oneOfFields = ["supportBotUserAgentChatHistory"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportCagReactionsAndPolls", { + get: $util.oneOfGetter($oneOfFields = ["supportCagReactionsAndPolls"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportBizHostedMsg", { + get: $util.oneOfGetter($oneOfFields = ["supportBizHostedMsg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportRecentSyncChunkMessageCountTuning", { + get: $util.oneOfGetter($oneOfFields = ["supportRecentSyncChunkMessageCountTuning"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportHostedGroupMsg", { + get: $util.oneOfGetter($oneOfFields = ["supportHostedGroupMsg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportFbidBotChatHistory", { + get: $util.oneOfGetter($oneOfFields = ["supportFbidBotChatHistory"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportAddOnHistorySyncMigration", { + get: $util.oneOfGetter($oneOfFields = ["supportAddOnHistorySyncMigration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportMessageAssociation", { + get: $util.oneOfGetter($oneOfFields = ["supportMessageAssociation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportGroupHistory", { + get: $util.oneOfGetter($oneOfFields = ["supportGroupHistory"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_onDemandReady", { + get: $util.oneOfGetter($oneOfFields = ["onDemandReady"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_supportGuestChat", { + get: $util.oneOfGetter($oneOfFields = ["supportGuestChat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_completeOnDemandReady", { + get: $util.oneOfGetter($oneOfFields = ["completeOnDemandReady"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncConfig.prototype, "_thumbnailSyncDaysLimit", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailSyncDaysLimit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySyncConfig.create = function create(properties) { + return new HistorySyncConfig(properties); + }; + + HistorySyncConfig.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fullSyncDaysLimit != null && Object.hasOwnProperty.call(m, "fullSyncDaysLimit")) + w.uint32(8).uint32(m.fullSyncDaysLimit); + if (m.fullSyncSizeMbLimit != null && Object.hasOwnProperty.call(m, "fullSyncSizeMbLimit")) + w.uint32(16).uint32(m.fullSyncSizeMbLimit); + if (m.storageQuotaMb != null && Object.hasOwnProperty.call(m, "storageQuotaMb")) + w.uint32(24).uint32(m.storageQuotaMb); + if (m.inlineInitialPayloadInE2EeMsg != null && Object.hasOwnProperty.call(m, "inlineInitialPayloadInE2EeMsg")) + w.uint32(32).bool(m.inlineInitialPayloadInE2EeMsg); + if (m.recentSyncDaysLimit != null && Object.hasOwnProperty.call(m, "recentSyncDaysLimit")) + w.uint32(40).uint32(m.recentSyncDaysLimit); + if (m.supportCallLogHistory != null && Object.hasOwnProperty.call(m, "supportCallLogHistory")) + w.uint32(48).bool(m.supportCallLogHistory); + if (m.supportBotUserAgentChatHistory != null && Object.hasOwnProperty.call(m, "supportBotUserAgentChatHistory")) + w.uint32(56).bool(m.supportBotUserAgentChatHistory); + if (m.supportCagReactionsAndPolls != null && Object.hasOwnProperty.call(m, "supportCagReactionsAndPolls")) + w.uint32(64).bool(m.supportCagReactionsAndPolls); + if (m.supportBizHostedMsg != null && Object.hasOwnProperty.call(m, "supportBizHostedMsg")) + w.uint32(72).bool(m.supportBizHostedMsg); + if (m.supportRecentSyncChunkMessageCountTuning != null && Object.hasOwnProperty.call(m, "supportRecentSyncChunkMessageCountTuning")) + w.uint32(80).bool(m.supportRecentSyncChunkMessageCountTuning); + if (m.supportHostedGroupMsg != null && Object.hasOwnProperty.call(m, "supportHostedGroupMsg")) + w.uint32(88).bool(m.supportHostedGroupMsg); + if (m.supportFbidBotChatHistory != null && Object.hasOwnProperty.call(m, "supportFbidBotChatHistory")) + w.uint32(96).bool(m.supportFbidBotChatHistory); + if (m.supportAddOnHistorySyncMigration != null && Object.hasOwnProperty.call(m, "supportAddOnHistorySyncMigration")) + w.uint32(104).bool(m.supportAddOnHistorySyncMigration); + if (m.supportMessageAssociation != null && Object.hasOwnProperty.call(m, "supportMessageAssociation")) + w.uint32(112).bool(m.supportMessageAssociation); + if (m.supportGroupHistory != null && Object.hasOwnProperty.call(m, "supportGroupHistory")) + w.uint32(120).bool(m.supportGroupHistory); + if (m.onDemandReady != null && Object.hasOwnProperty.call(m, "onDemandReady")) + w.uint32(128).bool(m.onDemandReady); + if (m.supportGuestChat != null && Object.hasOwnProperty.call(m, "supportGuestChat")) + w.uint32(136).bool(m.supportGuestChat); + if (m.completeOnDemandReady != null && Object.hasOwnProperty.call(m, "completeOnDemandReady")) + w.uint32(144).bool(m.completeOnDemandReady); + if (m.thumbnailSyncDaysLimit != null && Object.hasOwnProperty.call(m, "thumbnailSyncDaysLimit")) + w.uint32(152).uint32(m.thumbnailSyncDaysLimit); + return w; + }; + + HistorySyncConfig.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DeviceProps.HistorySyncConfig(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fullSyncDaysLimit = r.uint32(); + break; + } + case 2: { + m.fullSyncSizeMbLimit = r.uint32(); + break; + } + case 3: { + m.storageQuotaMb = r.uint32(); + break; + } + case 4: { + m.inlineInitialPayloadInE2EeMsg = r.bool(); + break; + } + case 5: { + m.recentSyncDaysLimit = r.uint32(); + break; + } + case 6: { + m.supportCallLogHistory = r.bool(); + break; + } + case 7: { + m.supportBotUserAgentChatHistory = r.bool(); + break; + } + case 8: { + m.supportCagReactionsAndPolls = r.bool(); + break; + } + case 9: { + m.supportBizHostedMsg = r.bool(); + break; + } + case 10: { + m.supportRecentSyncChunkMessageCountTuning = r.bool(); + break; + } + case 11: { + m.supportHostedGroupMsg = r.bool(); + break; + } + case 12: { + m.supportFbidBotChatHistory = r.bool(); + break; + } + case 13: { + m.supportAddOnHistorySyncMigration = r.bool(); + break; + } + case 14: { + m.supportMessageAssociation = r.bool(); + break; + } + case 15: { + m.supportGroupHistory = r.bool(); + break; + } + case 16: { + m.onDemandReady = r.bool(); + break; + } + case 17: { + m.supportGuestChat = r.bool(); + break; + } + case 18: { + m.completeOnDemandReady = r.bool(); + break; + } + case 19: { + m.thumbnailSyncDaysLimit = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySyncConfig.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DeviceProps.HistorySyncConfig) + return d; + var m = new $root.proto.DeviceProps.HistorySyncConfig(); + if (d.fullSyncDaysLimit != null) { + m.fullSyncDaysLimit = d.fullSyncDaysLimit >>> 0; + } + if (d.fullSyncSizeMbLimit != null) { + m.fullSyncSizeMbLimit = d.fullSyncSizeMbLimit >>> 0; + } + if (d.storageQuotaMb != null) { + m.storageQuotaMb = d.storageQuotaMb >>> 0; + } + if (d.inlineInitialPayloadInE2EeMsg != null) { + m.inlineInitialPayloadInE2EeMsg = Boolean(d.inlineInitialPayloadInE2EeMsg); + } + if (d.recentSyncDaysLimit != null) { + m.recentSyncDaysLimit = d.recentSyncDaysLimit >>> 0; + } + if (d.supportCallLogHistory != null) { + m.supportCallLogHistory = Boolean(d.supportCallLogHistory); + } + if (d.supportBotUserAgentChatHistory != null) { + m.supportBotUserAgentChatHistory = Boolean(d.supportBotUserAgentChatHistory); + } + if (d.supportCagReactionsAndPolls != null) { + m.supportCagReactionsAndPolls = Boolean(d.supportCagReactionsAndPolls); + } + if (d.supportBizHostedMsg != null) { + m.supportBizHostedMsg = Boolean(d.supportBizHostedMsg); + } + if (d.supportRecentSyncChunkMessageCountTuning != null) { + m.supportRecentSyncChunkMessageCountTuning = Boolean(d.supportRecentSyncChunkMessageCountTuning); + } + if (d.supportHostedGroupMsg != null) { + m.supportHostedGroupMsg = Boolean(d.supportHostedGroupMsg); + } + if (d.supportFbidBotChatHistory != null) { + m.supportFbidBotChatHistory = Boolean(d.supportFbidBotChatHistory); + } + if (d.supportAddOnHistorySyncMigration != null) { + m.supportAddOnHistorySyncMigration = Boolean(d.supportAddOnHistorySyncMigration); + } + if (d.supportMessageAssociation != null) { + m.supportMessageAssociation = Boolean(d.supportMessageAssociation); + } + if (d.supportGroupHistory != null) { + m.supportGroupHistory = Boolean(d.supportGroupHistory); + } + if (d.onDemandReady != null) { + m.onDemandReady = Boolean(d.onDemandReady); + } + if (d.supportGuestChat != null) { + m.supportGuestChat = Boolean(d.supportGuestChat); + } + if (d.completeOnDemandReady != null) { + m.completeOnDemandReady = Boolean(d.completeOnDemandReady); + } + if (d.thumbnailSyncDaysLimit != null) { + m.thumbnailSyncDaysLimit = d.thumbnailSyncDaysLimit >>> 0; + } + return m; + }; + + HistorySyncConfig.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fullSyncDaysLimit != null && m.hasOwnProperty("fullSyncDaysLimit")) { + d.fullSyncDaysLimit = m.fullSyncDaysLimit; + if (o.oneofs) + d._fullSyncDaysLimit = "fullSyncDaysLimit"; + } + if (m.fullSyncSizeMbLimit != null && m.hasOwnProperty("fullSyncSizeMbLimit")) { + d.fullSyncSizeMbLimit = m.fullSyncSizeMbLimit; + if (o.oneofs) + d._fullSyncSizeMbLimit = "fullSyncSizeMbLimit"; + } + if (m.storageQuotaMb != null && m.hasOwnProperty("storageQuotaMb")) { + d.storageQuotaMb = m.storageQuotaMb; + if (o.oneofs) + d._storageQuotaMb = "storageQuotaMb"; + } + if (m.inlineInitialPayloadInE2EeMsg != null && m.hasOwnProperty("inlineInitialPayloadInE2EeMsg")) { + d.inlineInitialPayloadInE2EeMsg = m.inlineInitialPayloadInE2EeMsg; + if (o.oneofs) + d._inlineInitialPayloadInE2EeMsg = "inlineInitialPayloadInE2EeMsg"; + } + if (m.recentSyncDaysLimit != null && m.hasOwnProperty("recentSyncDaysLimit")) { + d.recentSyncDaysLimit = m.recentSyncDaysLimit; + if (o.oneofs) + d._recentSyncDaysLimit = "recentSyncDaysLimit"; + } + if (m.supportCallLogHistory != null && m.hasOwnProperty("supportCallLogHistory")) { + d.supportCallLogHistory = m.supportCallLogHistory; + if (o.oneofs) + d._supportCallLogHistory = "supportCallLogHistory"; + } + if (m.supportBotUserAgentChatHistory != null && m.hasOwnProperty("supportBotUserAgentChatHistory")) { + d.supportBotUserAgentChatHistory = m.supportBotUserAgentChatHistory; + if (o.oneofs) + d._supportBotUserAgentChatHistory = "supportBotUserAgentChatHistory"; + } + if (m.supportCagReactionsAndPolls != null && m.hasOwnProperty("supportCagReactionsAndPolls")) { + d.supportCagReactionsAndPolls = m.supportCagReactionsAndPolls; + if (o.oneofs) + d._supportCagReactionsAndPolls = "supportCagReactionsAndPolls"; + } + if (m.supportBizHostedMsg != null && m.hasOwnProperty("supportBizHostedMsg")) { + d.supportBizHostedMsg = m.supportBizHostedMsg; + if (o.oneofs) + d._supportBizHostedMsg = "supportBizHostedMsg"; + } + if (m.supportRecentSyncChunkMessageCountTuning != null && m.hasOwnProperty("supportRecentSyncChunkMessageCountTuning")) { + d.supportRecentSyncChunkMessageCountTuning = m.supportRecentSyncChunkMessageCountTuning; + if (o.oneofs) + d._supportRecentSyncChunkMessageCountTuning = "supportRecentSyncChunkMessageCountTuning"; + } + if (m.supportHostedGroupMsg != null && m.hasOwnProperty("supportHostedGroupMsg")) { + d.supportHostedGroupMsg = m.supportHostedGroupMsg; + if (o.oneofs) + d._supportHostedGroupMsg = "supportHostedGroupMsg"; + } + if (m.supportFbidBotChatHistory != null && m.hasOwnProperty("supportFbidBotChatHistory")) { + d.supportFbidBotChatHistory = m.supportFbidBotChatHistory; + if (o.oneofs) + d._supportFbidBotChatHistory = "supportFbidBotChatHistory"; + } + if (m.supportAddOnHistorySyncMigration != null && m.hasOwnProperty("supportAddOnHistorySyncMigration")) { + d.supportAddOnHistorySyncMigration = m.supportAddOnHistorySyncMigration; + if (o.oneofs) + d._supportAddOnHistorySyncMigration = "supportAddOnHistorySyncMigration"; + } + if (m.supportMessageAssociation != null && m.hasOwnProperty("supportMessageAssociation")) { + d.supportMessageAssociation = m.supportMessageAssociation; + if (o.oneofs) + d._supportMessageAssociation = "supportMessageAssociation"; + } + if (m.supportGroupHistory != null && m.hasOwnProperty("supportGroupHistory")) { + d.supportGroupHistory = m.supportGroupHistory; + if (o.oneofs) + d._supportGroupHistory = "supportGroupHistory"; + } + if (m.onDemandReady != null && m.hasOwnProperty("onDemandReady")) { + d.onDemandReady = m.onDemandReady; + if (o.oneofs) + d._onDemandReady = "onDemandReady"; + } + if (m.supportGuestChat != null && m.hasOwnProperty("supportGuestChat")) { + d.supportGuestChat = m.supportGuestChat; + if (o.oneofs) + d._supportGuestChat = "supportGuestChat"; + } + if (m.completeOnDemandReady != null && m.hasOwnProperty("completeOnDemandReady")) { + d.completeOnDemandReady = m.completeOnDemandReady; + if (o.oneofs) + d._completeOnDemandReady = "completeOnDemandReady"; + } + if (m.thumbnailSyncDaysLimit != null && m.hasOwnProperty("thumbnailSyncDaysLimit")) { + d.thumbnailSyncDaysLimit = m.thumbnailSyncDaysLimit; + if (o.oneofs) + d._thumbnailSyncDaysLimit = "thumbnailSyncDaysLimit"; + } + return d; + }; + + HistorySyncConfig.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySyncConfig.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DeviceProps.HistorySyncConfig"; + }; + + return HistorySyncConfig; + })(); + + DeviceProps.PlatformType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "CHROME"] = 1; + values[valuesById[2] = "FIREFOX"] = 2; + values[valuesById[3] = "IE"] = 3; + values[valuesById[4] = "OPERA"] = 4; + values[valuesById[5] = "SAFARI"] = 5; + values[valuesById[6] = "EDGE"] = 6; + values[valuesById[7] = "DESKTOP"] = 7; + values[valuesById[8] = "IPAD"] = 8; + values[valuesById[9] = "ANDROID_TABLET"] = 9; + values[valuesById[10] = "OHANA"] = 10; + values[valuesById[11] = "ALOHA"] = 11; + values[valuesById[12] = "CATALINA"] = 12; + values[valuesById[13] = "TCL_TV"] = 13; + values[valuesById[14] = "IOS_PHONE"] = 14; + values[valuesById[15] = "IOS_CATALYST"] = 15; + values[valuesById[16] = "ANDROID_PHONE"] = 16; + values[valuesById[17] = "ANDROID_AMBIGUOUS"] = 17; + values[valuesById[18] = "WEAR_OS"] = 18; + values[valuesById[19] = "AR_WRIST"] = 19; + values[valuesById[20] = "AR_DEVICE"] = 20; + values[valuesById[21] = "UWP"] = 21; + values[valuesById[22] = "VR"] = 22; + values[valuesById[23] = "CLOUD_API"] = 23; + values[valuesById[24] = "SMARTGLASSES"] = 24; + return values; + })(); + + return DeviceProps; + })(); + + proto.DisappearingMode = (function() { + + function DisappearingMode(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DisappearingMode.prototype.initiator = null; + DisappearingMode.prototype.trigger = null; + DisappearingMode.prototype.initiatorDeviceJid = null; + DisappearingMode.prototype.initiatedByMe = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DisappearingMode.prototype, "_initiator", { + get: $util.oneOfGetter($oneOfFields = ["initiator"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DisappearingMode.prototype, "_trigger", { + get: $util.oneOfGetter($oneOfFields = ["trigger"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DisappearingMode.prototype, "_initiatorDeviceJid", { + get: $util.oneOfGetter($oneOfFields = ["initiatorDeviceJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DisappearingMode.prototype, "_initiatedByMe", { + get: $util.oneOfGetter($oneOfFields = ["initiatedByMe"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DisappearingMode.create = function create(properties) { + return new DisappearingMode(properties); + }; + + DisappearingMode.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.initiator != null && Object.hasOwnProperty.call(m, "initiator")) + w.uint32(8).int32(m.initiator); + if (m.trigger != null && Object.hasOwnProperty.call(m, "trigger")) + w.uint32(16).int32(m.trigger); + if (m.initiatorDeviceJid != null && Object.hasOwnProperty.call(m, "initiatorDeviceJid")) + w.uint32(26).string(m.initiatorDeviceJid); + if (m.initiatedByMe != null && Object.hasOwnProperty.call(m, "initiatedByMe")) + w.uint32(32).bool(m.initiatedByMe); + return w; + }; + + DisappearingMode.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.DisappearingMode(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.initiator = r.int32(); + break; + } + case 2: { + m.trigger = r.int32(); + break; + } + case 3: { + m.initiatorDeviceJid = r.string(); + break; + } + case 4: { + m.initiatedByMe = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DisappearingMode.fromObject = function fromObject(d) { + if (d instanceof $root.proto.DisappearingMode) + return d; + var m = new $root.proto.DisappearingMode(); + switch (d.initiator) { + default: + if (typeof d.initiator === "number") { + m.initiator = d.initiator; + break; + } + break; + case "CHANGED_IN_CHAT": + case 0: + m.initiator = 0; + break; + case "INITIATED_BY_ME": + case 1: + m.initiator = 1; + break; + case "INITIATED_BY_OTHER": + case 2: + m.initiator = 2; + break; + case "BIZ_UPGRADE_FB_HOSTING": + case 3: + m.initiator = 3; + break; + } + switch (d.trigger) { + default: + if (typeof d.trigger === "number") { + m.trigger = d.trigger; + break; + } + break; + case "UNKNOWN": + case 0: + m.trigger = 0; + break; + case "CHAT_SETTING": + case 1: + m.trigger = 1; + break; + case "ACCOUNT_SETTING": + case 2: + m.trigger = 2; + break; + case "BULK_CHANGE": + case 3: + m.trigger = 3; + break; + case "BIZ_SUPPORTS_FB_HOSTING": + case 4: + m.trigger = 4; + break; + case "UNKNOWN_GROUPS": + case 5: + m.trigger = 5; + break; + } + if (d.initiatorDeviceJid != null) { + m.initiatorDeviceJid = String(d.initiatorDeviceJid); + } + if (d.initiatedByMe != null) { + m.initiatedByMe = Boolean(d.initiatedByMe); + } + return m; + }; + + DisappearingMode.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.initiator != null && m.hasOwnProperty("initiator")) { + d.initiator = o.enums === String ? $root.proto.DisappearingMode.Initiator[m.initiator] === undefined ? m.initiator : $root.proto.DisappearingMode.Initiator[m.initiator] : m.initiator; + if (o.oneofs) + d._initiator = "initiator"; + } + if (m.trigger != null && m.hasOwnProperty("trigger")) { + d.trigger = o.enums === String ? $root.proto.DisappearingMode.Trigger[m.trigger] === undefined ? m.trigger : $root.proto.DisappearingMode.Trigger[m.trigger] : m.trigger; + if (o.oneofs) + d._trigger = "trigger"; + } + if (m.initiatorDeviceJid != null && m.hasOwnProperty("initiatorDeviceJid")) { + d.initiatorDeviceJid = m.initiatorDeviceJid; + if (o.oneofs) + d._initiatorDeviceJid = "initiatorDeviceJid"; + } + if (m.initiatedByMe != null && m.hasOwnProperty("initiatedByMe")) { + d.initiatedByMe = m.initiatedByMe; + if (o.oneofs) + d._initiatedByMe = "initiatedByMe"; + } + return d; + }; + + DisappearingMode.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DisappearingMode.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.DisappearingMode"; + }; + + DisappearingMode.Initiator = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "CHANGED_IN_CHAT"] = 0; + values[valuesById[1] = "INITIATED_BY_ME"] = 1; + values[valuesById[2] = "INITIATED_BY_OTHER"] = 2; + values[valuesById[3] = "BIZ_UPGRADE_FB_HOSTING"] = 3; + return values; + })(); + + DisappearingMode.Trigger = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "CHAT_SETTING"] = 1; + values[valuesById[2] = "ACCOUNT_SETTING"] = 2; + values[valuesById[3] = "BULK_CHANGE"] = 3; + values[valuesById[4] = "BIZ_SUPPORTS_FB_HOSTING"] = 4; + values[valuesById[5] = "UNKNOWN_GROUPS"] = 5; + return values; + })(); + + return DisappearingMode; + })(); + + proto.EmbeddedContent = (function() { + + function EmbeddedContent(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EmbeddedContent.prototype.embeddedMessage = null; + EmbeddedContent.prototype.embeddedMusic = null; + + let $oneOfFields; + + Object.defineProperty(EmbeddedContent.prototype, "content", { + get: $util.oneOfGetter($oneOfFields = ["embeddedMessage", "embeddedMusic"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EmbeddedContent.create = function create(properties) { + return new EmbeddedContent(properties); + }; + + EmbeddedContent.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.embeddedMessage != null && Object.hasOwnProperty.call(m, "embeddedMessage")) + $root.proto.EmbeddedMessage.encode(m.embeddedMessage, w.uint32(10).fork()).ldelim(); + if (m.embeddedMusic != null && Object.hasOwnProperty.call(m, "embeddedMusic")) + $root.proto.EmbeddedMusic.encode(m.embeddedMusic, w.uint32(18).fork()).ldelim(); + return w; + }; + + EmbeddedContent.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.EmbeddedContent(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.embeddedMessage = $root.proto.EmbeddedMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.embeddedMusic = $root.proto.EmbeddedMusic.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EmbeddedContent.fromObject = function fromObject(d) { + if (d instanceof $root.proto.EmbeddedContent) + return d; + var m = new $root.proto.EmbeddedContent(); + if (d.embeddedMessage != null) { + if (typeof d.embeddedMessage !== "object") + throw TypeError(".proto.EmbeddedContent.embeddedMessage: object expected"); + m.embeddedMessage = $root.proto.EmbeddedMessage.fromObject(d.embeddedMessage); + } + if (d.embeddedMusic != null) { + if (typeof d.embeddedMusic !== "object") + throw TypeError(".proto.EmbeddedContent.embeddedMusic: object expected"); + m.embeddedMusic = $root.proto.EmbeddedMusic.fromObject(d.embeddedMusic); + } + return m; + }; + + EmbeddedContent.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.embeddedMessage != null && m.hasOwnProperty("embeddedMessage")) { + d.embeddedMessage = $root.proto.EmbeddedMessage.toObject(m.embeddedMessage, o); + if (o.oneofs) + d.content = "embeddedMessage"; + } + if (m.embeddedMusic != null && m.hasOwnProperty("embeddedMusic")) { + d.embeddedMusic = $root.proto.EmbeddedMusic.toObject(m.embeddedMusic, o); + if (o.oneofs) + d.content = "embeddedMusic"; + } + return d; + }; + + EmbeddedContent.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EmbeddedContent.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.EmbeddedContent"; + }; + + return EmbeddedContent; + })(); + + proto.EmbeddedMessage = (function() { + + function EmbeddedMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EmbeddedMessage.prototype.stanzaId = null; + EmbeddedMessage.prototype.message = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMessage.prototype, "_stanzaId", { + get: $util.oneOfGetter($oneOfFields = ["stanzaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMessage.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EmbeddedMessage.create = function create(properties) { + return new EmbeddedMessage(properties); + }; + + EmbeddedMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.stanzaId != null && Object.hasOwnProperty.call(m, "stanzaId")) + w.uint32(10).string(m.stanzaId); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.Message.encode(m.message, w.uint32(18).fork()).ldelim(); + return w; + }; + + EmbeddedMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.EmbeddedMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.stanzaId = r.string(); + break; + } + case 2: { + m.message = $root.proto.Message.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EmbeddedMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.EmbeddedMessage) + return d; + var m = new $root.proto.EmbeddedMessage(); + if (d.stanzaId != null) { + m.stanzaId = String(d.stanzaId); + } + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.EmbeddedMessage.message: object expected"); + m.message = $root.proto.Message.fromObject(d.message); + } + return m; + }; + + EmbeddedMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.stanzaId != null && m.hasOwnProperty("stanzaId")) { + d.stanzaId = m.stanzaId; + if (o.oneofs) + d._stanzaId = "stanzaId"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.Message.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + return d; + }; + + EmbeddedMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EmbeddedMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.EmbeddedMessage"; + }; + + return EmbeddedMessage; + })(); + + proto.EmbeddedMusic = (function() { + + function EmbeddedMusic(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EmbeddedMusic.prototype.musicContentMediaId = null; + EmbeddedMusic.prototype.songId = null; + EmbeddedMusic.prototype.author = null; + EmbeddedMusic.prototype.title = null; + EmbeddedMusic.prototype.artworkDirectPath = null; + EmbeddedMusic.prototype.artworkSha256 = null; + EmbeddedMusic.prototype.artworkEncSha256 = null; + EmbeddedMusic.prototype.artistAttribution = null; + EmbeddedMusic.prototype.countryBlocklist = null; + EmbeddedMusic.prototype.isExplicit = null; + EmbeddedMusic.prototype.artworkMediaKey = null; + EmbeddedMusic.prototype.musicSongStartTimeInMs = null; + EmbeddedMusic.prototype.derivedContentStartTimeInMs = null; + EmbeddedMusic.prototype.overlapDurationInMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_musicContentMediaId", { + get: $util.oneOfGetter($oneOfFields = ["musicContentMediaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_songId", { + get: $util.oneOfGetter($oneOfFields = ["songId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_author", { + get: $util.oneOfGetter($oneOfFields = ["author"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_artworkDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["artworkDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_artworkSha256", { + get: $util.oneOfGetter($oneOfFields = ["artworkSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_artworkEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["artworkEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_artistAttribution", { + get: $util.oneOfGetter($oneOfFields = ["artistAttribution"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_countryBlocklist", { + get: $util.oneOfGetter($oneOfFields = ["countryBlocklist"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_isExplicit", { + get: $util.oneOfGetter($oneOfFields = ["isExplicit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_artworkMediaKey", { + get: $util.oneOfGetter($oneOfFields = ["artworkMediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_musicSongStartTimeInMs", { + get: $util.oneOfGetter($oneOfFields = ["musicSongStartTimeInMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_derivedContentStartTimeInMs", { + get: $util.oneOfGetter($oneOfFields = ["derivedContentStartTimeInMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EmbeddedMusic.prototype, "_overlapDurationInMs", { + get: $util.oneOfGetter($oneOfFields = ["overlapDurationInMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EmbeddedMusic.create = function create(properties) { + return new EmbeddedMusic(properties); + }; + + EmbeddedMusic.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.musicContentMediaId != null && Object.hasOwnProperty.call(m, "musicContentMediaId")) + w.uint32(10).string(m.musicContentMediaId); + if (m.songId != null && Object.hasOwnProperty.call(m, "songId")) + w.uint32(18).string(m.songId); + if (m.author != null && Object.hasOwnProperty.call(m, "author")) + w.uint32(26).string(m.author); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(34).string(m.title); + if (m.artworkDirectPath != null && Object.hasOwnProperty.call(m, "artworkDirectPath")) + w.uint32(42).string(m.artworkDirectPath); + if (m.artworkSha256 != null && Object.hasOwnProperty.call(m, "artworkSha256")) + w.uint32(50).bytes(m.artworkSha256); + if (m.artworkEncSha256 != null && Object.hasOwnProperty.call(m, "artworkEncSha256")) + w.uint32(58).bytes(m.artworkEncSha256); + if (m.artistAttribution != null && Object.hasOwnProperty.call(m, "artistAttribution")) + w.uint32(66).string(m.artistAttribution); + if (m.countryBlocklist != null && Object.hasOwnProperty.call(m, "countryBlocklist")) + w.uint32(74).bytes(m.countryBlocklist); + if (m.isExplicit != null && Object.hasOwnProperty.call(m, "isExplicit")) + w.uint32(80).bool(m.isExplicit); + if (m.artworkMediaKey != null && Object.hasOwnProperty.call(m, "artworkMediaKey")) + w.uint32(90).bytes(m.artworkMediaKey); + if (m.musicSongStartTimeInMs != null && Object.hasOwnProperty.call(m, "musicSongStartTimeInMs")) + w.uint32(96).int64(m.musicSongStartTimeInMs); + if (m.derivedContentStartTimeInMs != null && Object.hasOwnProperty.call(m, "derivedContentStartTimeInMs")) + w.uint32(104).int64(m.derivedContentStartTimeInMs); + if (m.overlapDurationInMs != null && Object.hasOwnProperty.call(m, "overlapDurationInMs")) + w.uint32(112).int64(m.overlapDurationInMs); + return w; + }; + + EmbeddedMusic.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.EmbeddedMusic(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.musicContentMediaId = r.string(); + break; + } + case 2: { + m.songId = r.string(); + break; + } + case 3: { + m.author = r.string(); + break; + } + case 4: { + m.title = r.string(); + break; + } + case 5: { + m.artworkDirectPath = r.string(); + break; + } + case 6: { + m.artworkSha256 = r.bytes(); + break; + } + case 7: { + m.artworkEncSha256 = r.bytes(); + break; + } + case 8: { + m.artistAttribution = r.string(); + break; + } + case 9: { + m.countryBlocklist = r.bytes(); + break; + } + case 10: { + m.isExplicit = r.bool(); + break; + } + case 11: { + m.artworkMediaKey = r.bytes(); + break; + } + case 12: { + m.musicSongStartTimeInMs = r.int64(); + break; + } + case 13: { + m.derivedContentStartTimeInMs = r.int64(); + break; + } + case 14: { + m.overlapDurationInMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EmbeddedMusic.fromObject = function fromObject(d) { + if (d instanceof $root.proto.EmbeddedMusic) + return d; + var m = new $root.proto.EmbeddedMusic(); + if (d.musicContentMediaId != null) { + m.musicContentMediaId = String(d.musicContentMediaId); + } + if (d.songId != null) { + m.songId = String(d.songId); + } + if (d.author != null) { + m.author = String(d.author); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.artworkDirectPath != null) { + m.artworkDirectPath = String(d.artworkDirectPath); + } + if (d.artworkSha256 != null) { + if (typeof d.artworkSha256 === "string") + $util.base64.decode(d.artworkSha256, m.artworkSha256 = $util.newBuffer($util.base64.length(d.artworkSha256)), 0); + else if (d.artworkSha256.length >= 0) + m.artworkSha256 = d.artworkSha256; + } + if (d.artworkEncSha256 != null) { + if (typeof d.artworkEncSha256 === "string") + $util.base64.decode(d.artworkEncSha256, m.artworkEncSha256 = $util.newBuffer($util.base64.length(d.artworkEncSha256)), 0); + else if (d.artworkEncSha256.length >= 0) + m.artworkEncSha256 = d.artworkEncSha256; + } + if (d.artistAttribution != null) { + m.artistAttribution = String(d.artistAttribution); + } + if (d.countryBlocklist != null) { + if (typeof d.countryBlocklist === "string") + $util.base64.decode(d.countryBlocklist, m.countryBlocklist = $util.newBuffer($util.base64.length(d.countryBlocklist)), 0); + else if (d.countryBlocklist.length >= 0) + m.countryBlocklist = d.countryBlocklist; + } + if (d.isExplicit != null) { + m.isExplicit = Boolean(d.isExplicit); + } + if (d.artworkMediaKey != null) { + if (typeof d.artworkMediaKey === "string") + $util.base64.decode(d.artworkMediaKey, m.artworkMediaKey = $util.newBuffer($util.base64.length(d.artworkMediaKey)), 0); + else if (d.artworkMediaKey.length >= 0) + m.artworkMediaKey = d.artworkMediaKey; + } + if (d.musicSongStartTimeInMs != null) { + if ($util.Long) + (m.musicSongStartTimeInMs = $util.Long.fromValue(d.musicSongStartTimeInMs)).unsigned = false; + else if (typeof d.musicSongStartTimeInMs === "string") + m.musicSongStartTimeInMs = parseInt(d.musicSongStartTimeInMs, 10); + else if (typeof d.musicSongStartTimeInMs === "number") + m.musicSongStartTimeInMs = d.musicSongStartTimeInMs; + else if (typeof d.musicSongStartTimeInMs === "object") + m.musicSongStartTimeInMs = new $util.LongBits(d.musicSongStartTimeInMs.low >>> 0, d.musicSongStartTimeInMs.high >>> 0).toNumber(); + } + if (d.derivedContentStartTimeInMs != null) { + if ($util.Long) + (m.derivedContentStartTimeInMs = $util.Long.fromValue(d.derivedContentStartTimeInMs)).unsigned = false; + else if (typeof d.derivedContentStartTimeInMs === "string") + m.derivedContentStartTimeInMs = parseInt(d.derivedContentStartTimeInMs, 10); + else if (typeof d.derivedContentStartTimeInMs === "number") + m.derivedContentStartTimeInMs = d.derivedContentStartTimeInMs; + else if (typeof d.derivedContentStartTimeInMs === "object") + m.derivedContentStartTimeInMs = new $util.LongBits(d.derivedContentStartTimeInMs.low >>> 0, d.derivedContentStartTimeInMs.high >>> 0).toNumber(); + } + if (d.overlapDurationInMs != null) { + if ($util.Long) + (m.overlapDurationInMs = $util.Long.fromValue(d.overlapDurationInMs)).unsigned = false; + else if (typeof d.overlapDurationInMs === "string") + m.overlapDurationInMs = parseInt(d.overlapDurationInMs, 10); + else if (typeof d.overlapDurationInMs === "number") + m.overlapDurationInMs = d.overlapDurationInMs; + else if (typeof d.overlapDurationInMs === "object") + m.overlapDurationInMs = new $util.LongBits(d.overlapDurationInMs.low >>> 0, d.overlapDurationInMs.high >>> 0).toNumber(); + } + return m; + }; + + EmbeddedMusic.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.musicContentMediaId != null && m.hasOwnProperty("musicContentMediaId")) { + d.musicContentMediaId = m.musicContentMediaId; + if (o.oneofs) + d._musicContentMediaId = "musicContentMediaId"; + } + if (m.songId != null && m.hasOwnProperty("songId")) { + d.songId = m.songId; + if (o.oneofs) + d._songId = "songId"; + } + if (m.author != null && m.hasOwnProperty("author")) { + d.author = m.author; + if (o.oneofs) + d._author = "author"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.artworkDirectPath != null && m.hasOwnProperty("artworkDirectPath")) { + d.artworkDirectPath = m.artworkDirectPath; + if (o.oneofs) + d._artworkDirectPath = "artworkDirectPath"; + } + if (m.artworkSha256 != null && m.hasOwnProperty("artworkSha256")) { + d.artworkSha256 = o.bytes === String ? $util.base64.encode(m.artworkSha256, 0, m.artworkSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.artworkSha256) : m.artworkSha256; + if (o.oneofs) + d._artworkSha256 = "artworkSha256"; + } + if (m.artworkEncSha256 != null && m.hasOwnProperty("artworkEncSha256")) { + d.artworkEncSha256 = o.bytes === String ? $util.base64.encode(m.artworkEncSha256, 0, m.artworkEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.artworkEncSha256) : m.artworkEncSha256; + if (o.oneofs) + d._artworkEncSha256 = "artworkEncSha256"; + } + if (m.artistAttribution != null && m.hasOwnProperty("artistAttribution")) { + d.artistAttribution = m.artistAttribution; + if (o.oneofs) + d._artistAttribution = "artistAttribution"; + } + if (m.countryBlocklist != null && m.hasOwnProperty("countryBlocklist")) { + d.countryBlocklist = o.bytes === String ? $util.base64.encode(m.countryBlocklist, 0, m.countryBlocklist.length) : o.bytes === Array ? Array.prototype.slice.call(m.countryBlocklist) : m.countryBlocklist; + if (o.oneofs) + d._countryBlocklist = "countryBlocklist"; + } + if (m.isExplicit != null && m.hasOwnProperty("isExplicit")) { + d.isExplicit = m.isExplicit; + if (o.oneofs) + d._isExplicit = "isExplicit"; + } + if (m.artworkMediaKey != null && m.hasOwnProperty("artworkMediaKey")) { + d.artworkMediaKey = o.bytes === String ? $util.base64.encode(m.artworkMediaKey, 0, m.artworkMediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.artworkMediaKey) : m.artworkMediaKey; + if (o.oneofs) + d._artworkMediaKey = "artworkMediaKey"; + } + if (m.musicSongStartTimeInMs != null && m.hasOwnProperty("musicSongStartTimeInMs")) { + if (typeof m.musicSongStartTimeInMs === "number") + d.musicSongStartTimeInMs = o.longs === String ? String(m.musicSongStartTimeInMs) : m.musicSongStartTimeInMs; + else + d.musicSongStartTimeInMs = o.longs === String ? longToString(m.musicSongStartTimeInMs) : o.longs === Number ? longToNumber(m.musicSongStartTimeInMs) : m.musicSongStartTimeInMs; + if (o.oneofs) + d._musicSongStartTimeInMs = "musicSongStartTimeInMs"; + } + if (m.derivedContentStartTimeInMs != null && m.hasOwnProperty("derivedContentStartTimeInMs")) { + if (typeof m.derivedContentStartTimeInMs === "number") + d.derivedContentStartTimeInMs = o.longs === String ? String(m.derivedContentStartTimeInMs) : m.derivedContentStartTimeInMs; + else + d.derivedContentStartTimeInMs = o.longs === String ? longToString(m.derivedContentStartTimeInMs) : o.longs === Number ? longToNumber(m.derivedContentStartTimeInMs) : m.derivedContentStartTimeInMs; + if (o.oneofs) + d._derivedContentStartTimeInMs = "derivedContentStartTimeInMs"; + } + if (m.overlapDurationInMs != null && m.hasOwnProperty("overlapDurationInMs")) { + if (typeof m.overlapDurationInMs === "number") + d.overlapDurationInMs = o.longs === String ? String(m.overlapDurationInMs) : m.overlapDurationInMs; + else + d.overlapDurationInMs = o.longs === String ? longToString(m.overlapDurationInMs) : o.longs === Number ? longToNumber(m.overlapDurationInMs) : m.overlapDurationInMs; + if (o.oneofs) + d._overlapDurationInMs = "overlapDurationInMs"; + } + return d; + }; + + EmbeddedMusic.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EmbeddedMusic.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.EmbeddedMusic"; + }; + + return EmbeddedMusic; + })(); + + proto.EncryptedPairingRequest = (function() { + + function EncryptedPairingRequest(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EncryptedPairingRequest.prototype.encryptedPayload = null; + EncryptedPairingRequest.prototype.iv = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncryptedPairingRequest.prototype, "_encryptedPayload", { + get: $util.oneOfGetter($oneOfFields = ["encryptedPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncryptedPairingRequest.prototype, "_iv", { + get: $util.oneOfGetter($oneOfFields = ["iv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EncryptedPairingRequest.create = function create(properties) { + return new EncryptedPairingRequest(properties); + }; + + EncryptedPairingRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.encryptedPayload != null && Object.hasOwnProperty.call(m, "encryptedPayload")) + w.uint32(10).bytes(m.encryptedPayload); + if (m.iv != null && Object.hasOwnProperty.call(m, "iv")) + w.uint32(18).bytes(m.iv); + return w; + }; + + EncryptedPairingRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.EncryptedPairingRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.encryptedPayload = r.bytes(); + break; + } + case 2: { + m.iv = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EncryptedPairingRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.EncryptedPairingRequest) + return d; + var m = new $root.proto.EncryptedPairingRequest(); + if (d.encryptedPayload != null) { + if (typeof d.encryptedPayload === "string") + $util.base64.decode(d.encryptedPayload, m.encryptedPayload = $util.newBuffer($util.base64.length(d.encryptedPayload)), 0); + else if (d.encryptedPayload.length >= 0) + m.encryptedPayload = d.encryptedPayload; + } + if (d.iv != null) { + if (typeof d.iv === "string") + $util.base64.decode(d.iv, m.iv = $util.newBuffer($util.base64.length(d.iv)), 0); + else if (d.iv.length >= 0) + m.iv = d.iv; + } + return m; + }; + + EncryptedPairingRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.encryptedPayload != null && m.hasOwnProperty("encryptedPayload")) { + d.encryptedPayload = o.bytes === String ? $util.base64.encode(m.encryptedPayload, 0, m.encryptedPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encryptedPayload) : m.encryptedPayload; + if (o.oneofs) + d._encryptedPayload = "encryptedPayload"; + } + if (m.iv != null && m.hasOwnProperty("iv")) { + d.iv = o.bytes === String ? $util.base64.encode(m.iv, 0, m.iv.length) : o.bytes === Array ? Array.prototype.slice.call(m.iv) : m.iv; + if (o.oneofs) + d._iv = "iv"; + } + return d; + }; + + EncryptedPairingRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EncryptedPairingRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.EncryptedPairingRequest"; + }; + + return EncryptedPairingRequest; + })(); + + proto.EphemeralSetting = (function() { + + function EphemeralSetting(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EphemeralSetting.prototype.duration = null; + EphemeralSetting.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EphemeralSetting.prototype, "_duration", { + get: $util.oneOfGetter($oneOfFields = ["duration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EphemeralSetting.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EphemeralSetting.create = function create(properties) { + return new EphemeralSetting(properties); + }; + + EphemeralSetting.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.duration != null && Object.hasOwnProperty.call(m, "duration")) + w.uint32(13).sfixed32(m.duration); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(17).sfixed64(m.timestamp); + return w; + }; + + EphemeralSetting.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.EphemeralSetting(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.duration = r.sfixed32(); + break; + } + case 2: { + m.timestamp = r.sfixed64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EphemeralSetting.fromObject = function fromObject(d) { + if (d instanceof $root.proto.EphemeralSetting) + return d; + var m = new $root.proto.EphemeralSetting(); + if (d.duration != null) { + m.duration = d.duration | 0; + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + EphemeralSetting.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.duration != null && m.hasOwnProperty("duration")) { + d.duration = m.duration; + if (o.oneofs) + d._duration = "duration"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + EphemeralSetting.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EphemeralSetting.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.EphemeralSetting"; + }; + + return EphemeralSetting; + })(); + + proto.EventAdditionalMetadata = (function() { + + function EventAdditionalMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EventAdditionalMetadata.prototype.isStale = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventAdditionalMetadata.prototype, "_isStale", { + get: $util.oneOfGetter($oneOfFields = ["isStale"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EventAdditionalMetadata.create = function create(properties) { + return new EventAdditionalMetadata(properties); + }; + + EventAdditionalMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isStale != null && Object.hasOwnProperty.call(m, "isStale")) + w.uint32(8).bool(m.isStale); + return w; + }; + + EventAdditionalMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.EventAdditionalMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isStale = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EventAdditionalMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.EventAdditionalMetadata) + return d; + var m = new $root.proto.EventAdditionalMetadata(); + if (d.isStale != null) { + m.isStale = Boolean(d.isStale); + } + return m; + }; + + EventAdditionalMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isStale != null && m.hasOwnProperty("isStale")) { + d.isStale = m.isStale; + if (o.oneofs) + d._isStale = "isStale"; + } + return d; + }; + + EventAdditionalMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EventAdditionalMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.EventAdditionalMetadata"; + }; + + return EventAdditionalMetadata; + })(); + + proto.EventResponse = (function() { + + function EventResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EventResponse.prototype.eventResponseMessageKey = null; + EventResponse.prototype.timestampMs = null; + EventResponse.prototype.eventResponseMessage = null; + EventResponse.prototype.unread = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventResponse.prototype, "_eventResponseMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["eventResponseMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventResponse.prototype, "_timestampMs", { + get: $util.oneOfGetter($oneOfFields = ["timestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventResponse.prototype, "_eventResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["eventResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventResponse.prototype, "_unread", { + get: $util.oneOfGetter($oneOfFields = ["unread"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EventResponse.create = function create(properties) { + return new EventResponse(properties); + }; + + EventResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.eventResponseMessageKey != null && Object.hasOwnProperty.call(m, "eventResponseMessageKey")) + $root.proto.MessageKey.encode(m.eventResponseMessageKey, w.uint32(10).fork()).ldelim(); + if (m.timestampMs != null && Object.hasOwnProperty.call(m, "timestampMs")) + w.uint32(16).int64(m.timestampMs); + if (m.eventResponseMessage != null && Object.hasOwnProperty.call(m, "eventResponseMessage")) + $root.proto.Message.EventResponseMessage.encode(m.eventResponseMessage, w.uint32(26).fork()).ldelim(); + if (m.unread != null && Object.hasOwnProperty.call(m, "unread")) + w.uint32(32).bool(m.unread); + return w; + }; + + EventResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.EventResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.eventResponseMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.timestampMs = r.int64(); + break; + } + case 3: { + m.eventResponseMessage = $root.proto.Message.EventResponseMessage.decode(r, r.uint32()); + break; + } + case 4: { + m.unread = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EventResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.EventResponse) + return d; + var m = new $root.proto.EventResponse(); + if (d.eventResponseMessageKey != null) { + if (typeof d.eventResponseMessageKey !== "object") + throw TypeError(".proto.EventResponse.eventResponseMessageKey: object expected"); + m.eventResponseMessageKey = $root.proto.MessageKey.fromObject(d.eventResponseMessageKey); + } + if (d.timestampMs != null) { + if ($util.Long) + (m.timestampMs = $util.Long.fromValue(d.timestampMs)).unsigned = false; + else if (typeof d.timestampMs === "string") + m.timestampMs = parseInt(d.timestampMs, 10); + else if (typeof d.timestampMs === "number") + m.timestampMs = d.timestampMs; + else if (typeof d.timestampMs === "object") + m.timestampMs = new $util.LongBits(d.timestampMs.low >>> 0, d.timestampMs.high >>> 0).toNumber(); + } + if (d.eventResponseMessage != null) { + if (typeof d.eventResponseMessage !== "object") + throw TypeError(".proto.EventResponse.eventResponseMessage: object expected"); + m.eventResponseMessage = $root.proto.Message.EventResponseMessage.fromObject(d.eventResponseMessage); + } + if (d.unread != null) { + m.unread = Boolean(d.unread); + } + return m; + }; + + EventResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.eventResponseMessageKey != null && m.hasOwnProperty("eventResponseMessageKey")) { + d.eventResponseMessageKey = $root.proto.MessageKey.toObject(m.eventResponseMessageKey, o); + if (o.oneofs) + d._eventResponseMessageKey = "eventResponseMessageKey"; + } + if (m.timestampMs != null && m.hasOwnProperty("timestampMs")) { + if (typeof m.timestampMs === "number") + d.timestampMs = o.longs === String ? String(m.timestampMs) : m.timestampMs; + else + d.timestampMs = o.longs === String ? longToString(m.timestampMs) : o.longs === Number ? longToNumber(m.timestampMs) : m.timestampMs; + if (o.oneofs) + d._timestampMs = "timestampMs"; + } + if (m.eventResponseMessage != null && m.hasOwnProperty("eventResponseMessage")) { + d.eventResponseMessage = $root.proto.Message.EventResponseMessage.toObject(m.eventResponseMessage, o); + if (o.oneofs) + d._eventResponseMessage = "eventResponseMessage"; + } + if (m.unread != null && m.hasOwnProperty("unread")) { + d.unread = m.unread; + if (o.oneofs) + d._unread = "unread"; + } + return d; + }; + + EventResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EventResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.EventResponse"; + }; + + return EventResponse; + })(); + + proto.ExitCode = (function() { + + function ExitCode(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ExitCode.prototype.code = null; + ExitCode.prototype.text = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExitCode.prototype, "_code", { + get: $util.oneOfGetter($oneOfFields = ["code"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExitCode.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ExitCode.create = function create(properties) { + return new ExitCode(properties); + }; + + ExitCode.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.code != null && Object.hasOwnProperty.call(m, "code")) + w.uint32(8).uint64(m.code); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(18).string(m.text); + return w; + }; + + ExitCode.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ExitCode(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.code = r.uint64(); + break; + } + case 2: { + m.text = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ExitCode.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ExitCode) + return d; + var m = new $root.proto.ExitCode(); + if (d.code != null) { + if ($util.Long) + (m.code = $util.Long.fromValue(d.code)).unsigned = true; + else if (typeof d.code === "string") + m.code = parseInt(d.code, 10); + else if (typeof d.code === "number") + m.code = d.code; + else if (typeof d.code === "object") + m.code = new $util.LongBits(d.code.low >>> 0, d.code.high >>> 0).toNumber(true); + } + if (d.text != null) { + m.text = String(d.text); + } + return m; + }; + + ExitCode.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.code != null && m.hasOwnProperty("code")) { + if (typeof m.code === "number") + d.code = o.longs === String ? String(m.code) : m.code; + else + d.code = o.longs === String ? longToString(m.code, true) : o.longs === Number ? longToNumber(m.code, true) : m.code; + if (o.oneofs) + d._code = "code"; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + return d; + }; + + ExitCode.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ExitCode.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ExitCode"; + }; + + return ExitCode; + })(); + + proto.ExternalBlobReference = (function() { + + function ExternalBlobReference(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ExternalBlobReference.prototype.mediaKey = null; + ExternalBlobReference.prototype.directPath = null; + ExternalBlobReference.prototype.handle = null; + ExternalBlobReference.prototype.fileSizeBytes = null; + ExternalBlobReference.prototype.fileSha256 = null; + ExternalBlobReference.prototype.fileEncSha256 = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalBlobReference.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalBlobReference.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalBlobReference.prototype, "_handle", { + get: $util.oneOfGetter($oneOfFields = ["handle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalBlobReference.prototype, "_fileSizeBytes", { + get: $util.oneOfGetter($oneOfFields = ["fileSizeBytes"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalBlobReference.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalBlobReference.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ExternalBlobReference.create = function create(properties) { + return new ExternalBlobReference(properties); + }; + + ExternalBlobReference.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(10).bytes(m.mediaKey); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(18).string(m.directPath); + if (m.handle != null && Object.hasOwnProperty.call(m, "handle")) + w.uint32(26).string(m.handle); + if (m.fileSizeBytes != null && Object.hasOwnProperty.call(m, "fileSizeBytes")) + w.uint32(32).uint64(m.fileSizeBytes); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(42).bytes(m.fileSha256); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(50).bytes(m.fileEncSha256); + return w; + }; + + ExternalBlobReference.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ExternalBlobReference(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.mediaKey = r.bytes(); + break; + } + case 2: { + m.directPath = r.string(); + break; + } + case 3: { + m.handle = r.string(); + break; + } + case 4: { + m.fileSizeBytes = r.uint64(); + break; + } + case 5: { + m.fileSha256 = r.bytes(); + break; + } + case 6: { + m.fileEncSha256 = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ExternalBlobReference.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ExternalBlobReference) + return d; + var m = new $root.proto.ExternalBlobReference(); + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.handle != null) { + m.handle = String(d.handle); + } + if (d.fileSizeBytes != null) { + if ($util.Long) + (m.fileSizeBytes = $util.Long.fromValue(d.fileSizeBytes)).unsigned = true; + else if (typeof d.fileSizeBytes === "string") + m.fileSizeBytes = parseInt(d.fileSizeBytes, 10); + else if (typeof d.fileSizeBytes === "number") + m.fileSizeBytes = d.fileSizeBytes; + else if (typeof d.fileSizeBytes === "object") + m.fileSizeBytes = new $util.LongBits(d.fileSizeBytes.low >>> 0, d.fileSizeBytes.high >>> 0).toNumber(true); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + return m; + }; + + ExternalBlobReference.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.handle != null && m.hasOwnProperty("handle")) { + d.handle = m.handle; + if (o.oneofs) + d._handle = "handle"; + } + if (m.fileSizeBytes != null && m.hasOwnProperty("fileSizeBytes")) { + if (typeof m.fileSizeBytes === "number") + d.fileSizeBytes = o.longs === String ? String(m.fileSizeBytes) : m.fileSizeBytes; + else + d.fileSizeBytes = o.longs === String ? longToString(m.fileSizeBytes, true) : o.longs === Number ? longToNumber(m.fileSizeBytes, true) : m.fileSizeBytes; + if (o.oneofs) + d._fileSizeBytes = "fileSizeBytes"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + return d; + }; + + ExternalBlobReference.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ExternalBlobReference.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ExternalBlobReference"; + }; + + return ExternalBlobReference; + })(); + + proto.Field = (function() { + + function Field(p) { + this.subfield = {}; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Field.prototype.minVersion = null; + Field.prototype.maxVersion = null; + Field.prototype.notReportableMinVersion = null; + Field.prototype.isMessage = null; + Field.prototype.subfield = $util.emptyObject; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Field.prototype, "_minVersion", { + get: $util.oneOfGetter($oneOfFields = ["minVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Field.prototype, "_maxVersion", { + get: $util.oneOfGetter($oneOfFields = ["maxVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Field.prototype, "_notReportableMinVersion", { + get: $util.oneOfGetter($oneOfFields = ["notReportableMinVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Field.prototype, "_isMessage", { + get: $util.oneOfGetter($oneOfFields = ["isMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Field.create = function create(properties) { + return new Field(properties); + }; + + Field.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.minVersion != null && Object.hasOwnProperty.call(m, "minVersion")) + w.uint32(8).uint32(m.minVersion); + if (m.maxVersion != null && Object.hasOwnProperty.call(m, "maxVersion")) + w.uint32(16).uint32(m.maxVersion); + if (m.notReportableMinVersion != null && Object.hasOwnProperty.call(m, "notReportableMinVersion")) + w.uint32(24).uint32(m.notReportableMinVersion); + if (m.isMessage != null && Object.hasOwnProperty.call(m, "isMessage")) + w.uint32(32).bool(m.isMessage); + if (m.subfield != null && Object.hasOwnProperty.call(m, "subfield")) { + for (var ks = Object.keys(m.subfield), i = 0; i < ks.length; ++i) { + w.uint32(42).fork().uint32(8).uint32(ks[i]); + $root.proto.Field.encode(m.subfield[ks[i]], w.uint32(18).fork()).ldelim().ldelim(); + } + } + return w; + }; + + Field.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Field(), k, value; + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.minVersion = r.uint32(); + break; + } + case 2: { + m.maxVersion = r.uint32(); + break; + } + case 3: { + m.notReportableMinVersion = r.uint32(); + break; + } + case 4: { + m.isMessage = r.bool(); + break; + } + case 5: { + if (m.subfield === $util.emptyObject) + m.subfield = {}; + var c2 = r.uint32() + r.pos; + k = 0; + value = null; + while (r.pos < c2) { + var tag2 = r.uint32(); + switch (tag2 >>> 3) { + case 1: + k = r.uint32(); + break; + case 2: + value = $root.proto.Field.decode(r, r.uint32()); + break; + default: + r.skipType(tag2 & 7); + break; + } + } + m.subfield[k] = value; + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Field.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Field) + return d; + var m = new $root.proto.Field(); + if (d.minVersion != null) { + m.minVersion = d.minVersion >>> 0; + } + if (d.maxVersion != null) { + m.maxVersion = d.maxVersion >>> 0; + } + if (d.notReportableMinVersion != null) { + m.notReportableMinVersion = d.notReportableMinVersion >>> 0; + } + if (d.isMessage != null) { + m.isMessage = Boolean(d.isMessage); + } + if (d.subfield) { + if (typeof d.subfield !== "object") + throw TypeError(".proto.Field.subfield: object expected"); + m.subfield = {}; + for (var ks = Object.keys(d.subfield), i = 0; i < ks.length; ++i) { + if (typeof d.subfield[ks[i]] !== "object") + throw TypeError(".proto.Field.subfield: object expected"); + m.subfield[ks[i]] = $root.proto.Field.fromObject(d.subfield[ks[i]]); + } + } + return m; + }; + + Field.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.objects || o.defaults) { + d.subfield = {}; + } + if (m.minVersion != null && m.hasOwnProperty("minVersion")) { + d.minVersion = m.minVersion; + if (o.oneofs) + d._minVersion = "minVersion"; + } + if (m.maxVersion != null && m.hasOwnProperty("maxVersion")) { + d.maxVersion = m.maxVersion; + if (o.oneofs) + d._maxVersion = "maxVersion"; + } + if (m.notReportableMinVersion != null && m.hasOwnProperty("notReportableMinVersion")) { + d.notReportableMinVersion = m.notReportableMinVersion; + if (o.oneofs) + d._notReportableMinVersion = "notReportableMinVersion"; + } + if (m.isMessage != null && m.hasOwnProperty("isMessage")) { + d.isMessage = m.isMessage; + if (o.oneofs) + d._isMessage = "isMessage"; + } + var ks2; + if (m.subfield && (ks2 = Object.keys(m.subfield)).length) { + d.subfield = {}; + for (var j = 0; j < ks2.length; ++j) { + d.subfield[ks2[j]] = $root.proto.Field.toObject(m.subfield[ks2[j]], o); + } + } + return d; + }; + + Field.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Field.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Field"; + }; + + return Field; + })(); + + proto.ForwardedAIBotMessageInfo = (function() { + + function ForwardedAIBotMessageInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ForwardedAIBotMessageInfo.prototype.botName = null; + ForwardedAIBotMessageInfo.prototype.botJid = null; + ForwardedAIBotMessageInfo.prototype.creatorName = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedAIBotMessageInfo.prototype, "_botName", { + get: $util.oneOfGetter($oneOfFields = ["botName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedAIBotMessageInfo.prototype, "_botJid", { + get: $util.oneOfGetter($oneOfFields = ["botJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ForwardedAIBotMessageInfo.prototype, "_creatorName", { + get: $util.oneOfGetter($oneOfFields = ["creatorName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ForwardedAIBotMessageInfo.create = function create(properties) { + return new ForwardedAIBotMessageInfo(properties); + }; + + ForwardedAIBotMessageInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.botName != null && Object.hasOwnProperty.call(m, "botName")) + w.uint32(10).string(m.botName); + if (m.botJid != null && Object.hasOwnProperty.call(m, "botJid")) + w.uint32(18).string(m.botJid); + if (m.creatorName != null && Object.hasOwnProperty.call(m, "creatorName")) + w.uint32(26).string(m.creatorName); + return w; + }; + + ForwardedAIBotMessageInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ForwardedAIBotMessageInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.botName = r.string(); + break; + } + case 2: { + m.botJid = r.string(); + break; + } + case 3: { + m.creatorName = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ForwardedAIBotMessageInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ForwardedAIBotMessageInfo) + return d; + var m = new $root.proto.ForwardedAIBotMessageInfo(); + if (d.botName != null) { + m.botName = String(d.botName); + } + if (d.botJid != null) { + m.botJid = String(d.botJid); + } + if (d.creatorName != null) { + m.creatorName = String(d.creatorName); + } + return m; + }; + + ForwardedAIBotMessageInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.botName != null && m.hasOwnProperty("botName")) { + d.botName = m.botName; + if (o.oneofs) + d._botName = "botName"; + } + if (m.botJid != null && m.hasOwnProperty("botJid")) { + d.botJid = m.botJid; + if (o.oneofs) + d._botJid = "botJid"; + } + if (m.creatorName != null && m.hasOwnProperty("creatorName")) { + d.creatorName = m.creatorName; + if (o.oneofs) + d._creatorName = "creatorName"; + } + return d; + }; + + ForwardedAIBotMessageInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ForwardedAIBotMessageInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ForwardedAIBotMessageInfo"; + }; + + return ForwardedAIBotMessageInfo; + })(); + + proto.GlobalSettings = (function() { + + function GlobalSettings(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GlobalSettings.prototype.lightThemeWallpaper = null; + GlobalSettings.prototype.mediaVisibility = null; + GlobalSettings.prototype.darkThemeWallpaper = null; + GlobalSettings.prototype.autoDownloadWiFi = null; + GlobalSettings.prototype.autoDownloadCellular = null; + GlobalSettings.prototype.autoDownloadRoaming = null; + GlobalSettings.prototype.showIndividualNotificationsPreview = null; + GlobalSettings.prototype.showGroupNotificationsPreview = null; + GlobalSettings.prototype.disappearingModeDuration = null; + GlobalSettings.prototype.disappearingModeTimestamp = null; + GlobalSettings.prototype.avatarUserSettings = null; + GlobalSettings.prototype.fontSize = null; + GlobalSettings.prototype.securityNotifications = null; + GlobalSettings.prototype.autoUnarchiveChats = null; + GlobalSettings.prototype.videoQualityMode = null; + GlobalSettings.prototype.photoQualityMode = null; + GlobalSettings.prototype.individualNotificationSettings = null; + GlobalSettings.prototype.groupNotificationSettings = null; + GlobalSettings.prototype.chatLockSettings = null; + GlobalSettings.prototype.chatDbLidMigrationTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_lightThemeWallpaper", { + get: $util.oneOfGetter($oneOfFields = ["lightThemeWallpaper"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_mediaVisibility", { + get: $util.oneOfGetter($oneOfFields = ["mediaVisibility"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_darkThemeWallpaper", { + get: $util.oneOfGetter($oneOfFields = ["darkThemeWallpaper"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_autoDownloadWiFi", { + get: $util.oneOfGetter($oneOfFields = ["autoDownloadWiFi"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_autoDownloadCellular", { + get: $util.oneOfGetter($oneOfFields = ["autoDownloadCellular"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_autoDownloadRoaming", { + get: $util.oneOfGetter($oneOfFields = ["autoDownloadRoaming"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_showIndividualNotificationsPreview", { + get: $util.oneOfGetter($oneOfFields = ["showIndividualNotificationsPreview"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_showGroupNotificationsPreview", { + get: $util.oneOfGetter($oneOfFields = ["showGroupNotificationsPreview"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_disappearingModeDuration", { + get: $util.oneOfGetter($oneOfFields = ["disappearingModeDuration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_disappearingModeTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["disappearingModeTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_avatarUserSettings", { + get: $util.oneOfGetter($oneOfFields = ["avatarUserSettings"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_fontSize", { + get: $util.oneOfGetter($oneOfFields = ["fontSize"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_securityNotifications", { + get: $util.oneOfGetter($oneOfFields = ["securityNotifications"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_autoUnarchiveChats", { + get: $util.oneOfGetter($oneOfFields = ["autoUnarchiveChats"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_videoQualityMode", { + get: $util.oneOfGetter($oneOfFields = ["videoQualityMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_photoQualityMode", { + get: $util.oneOfGetter($oneOfFields = ["photoQualityMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_individualNotificationSettings", { + get: $util.oneOfGetter($oneOfFields = ["individualNotificationSettings"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_groupNotificationSettings", { + get: $util.oneOfGetter($oneOfFields = ["groupNotificationSettings"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_chatLockSettings", { + get: $util.oneOfGetter($oneOfFields = ["chatLockSettings"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GlobalSettings.prototype, "_chatDbLidMigrationTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["chatDbLidMigrationTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GlobalSettings.create = function create(properties) { + return new GlobalSettings(properties); + }; + + GlobalSettings.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.lightThemeWallpaper != null && Object.hasOwnProperty.call(m, "lightThemeWallpaper")) + $root.proto.WallpaperSettings.encode(m.lightThemeWallpaper, w.uint32(10).fork()).ldelim(); + if (m.mediaVisibility != null && Object.hasOwnProperty.call(m, "mediaVisibility")) + w.uint32(16).int32(m.mediaVisibility); + if (m.darkThemeWallpaper != null && Object.hasOwnProperty.call(m, "darkThemeWallpaper")) + $root.proto.WallpaperSettings.encode(m.darkThemeWallpaper, w.uint32(26).fork()).ldelim(); + if (m.autoDownloadWiFi != null && Object.hasOwnProperty.call(m, "autoDownloadWiFi")) + $root.proto.AutoDownloadSettings.encode(m.autoDownloadWiFi, w.uint32(34).fork()).ldelim(); + if (m.autoDownloadCellular != null && Object.hasOwnProperty.call(m, "autoDownloadCellular")) + $root.proto.AutoDownloadSettings.encode(m.autoDownloadCellular, w.uint32(42).fork()).ldelim(); + if (m.autoDownloadRoaming != null && Object.hasOwnProperty.call(m, "autoDownloadRoaming")) + $root.proto.AutoDownloadSettings.encode(m.autoDownloadRoaming, w.uint32(50).fork()).ldelim(); + if (m.showIndividualNotificationsPreview != null && Object.hasOwnProperty.call(m, "showIndividualNotificationsPreview")) + w.uint32(56).bool(m.showIndividualNotificationsPreview); + if (m.showGroupNotificationsPreview != null && Object.hasOwnProperty.call(m, "showGroupNotificationsPreview")) + w.uint32(64).bool(m.showGroupNotificationsPreview); + if (m.disappearingModeDuration != null && Object.hasOwnProperty.call(m, "disappearingModeDuration")) + w.uint32(72).int32(m.disappearingModeDuration); + if (m.disappearingModeTimestamp != null && Object.hasOwnProperty.call(m, "disappearingModeTimestamp")) + w.uint32(80).int64(m.disappearingModeTimestamp); + if (m.avatarUserSettings != null && Object.hasOwnProperty.call(m, "avatarUserSettings")) + $root.proto.AvatarUserSettings.encode(m.avatarUserSettings, w.uint32(90).fork()).ldelim(); + if (m.fontSize != null && Object.hasOwnProperty.call(m, "fontSize")) + w.uint32(96).int32(m.fontSize); + if (m.securityNotifications != null && Object.hasOwnProperty.call(m, "securityNotifications")) + w.uint32(104).bool(m.securityNotifications); + if (m.autoUnarchiveChats != null && Object.hasOwnProperty.call(m, "autoUnarchiveChats")) + w.uint32(112).bool(m.autoUnarchiveChats); + if (m.videoQualityMode != null && Object.hasOwnProperty.call(m, "videoQualityMode")) + w.uint32(120).int32(m.videoQualityMode); + if (m.photoQualityMode != null && Object.hasOwnProperty.call(m, "photoQualityMode")) + w.uint32(128).int32(m.photoQualityMode); + if (m.individualNotificationSettings != null && Object.hasOwnProperty.call(m, "individualNotificationSettings")) + $root.proto.NotificationSettings.encode(m.individualNotificationSettings, w.uint32(138).fork()).ldelim(); + if (m.groupNotificationSettings != null && Object.hasOwnProperty.call(m, "groupNotificationSettings")) + $root.proto.NotificationSettings.encode(m.groupNotificationSettings, w.uint32(146).fork()).ldelim(); + if (m.chatLockSettings != null && Object.hasOwnProperty.call(m, "chatLockSettings")) + $root.proto.ChatLockSettings.encode(m.chatLockSettings, w.uint32(154).fork()).ldelim(); + if (m.chatDbLidMigrationTimestamp != null && Object.hasOwnProperty.call(m, "chatDbLidMigrationTimestamp")) + w.uint32(160).int64(m.chatDbLidMigrationTimestamp); + return w; + }; + + GlobalSettings.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.GlobalSettings(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.lightThemeWallpaper = $root.proto.WallpaperSettings.decode(r, r.uint32()); + break; + } + case 2: { + m.mediaVisibility = r.int32(); + break; + } + case 3: { + m.darkThemeWallpaper = $root.proto.WallpaperSettings.decode(r, r.uint32()); + break; + } + case 4: { + m.autoDownloadWiFi = $root.proto.AutoDownloadSettings.decode(r, r.uint32()); + break; + } + case 5: { + m.autoDownloadCellular = $root.proto.AutoDownloadSettings.decode(r, r.uint32()); + break; + } + case 6: { + m.autoDownloadRoaming = $root.proto.AutoDownloadSettings.decode(r, r.uint32()); + break; + } + case 7: { + m.showIndividualNotificationsPreview = r.bool(); + break; + } + case 8: { + m.showGroupNotificationsPreview = r.bool(); + break; + } + case 9: { + m.disappearingModeDuration = r.int32(); + break; + } + case 10: { + m.disappearingModeTimestamp = r.int64(); + break; + } + case 11: { + m.avatarUserSettings = $root.proto.AvatarUserSettings.decode(r, r.uint32()); + break; + } + case 12: { + m.fontSize = r.int32(); + break; + } + case 13: { + m.securityNotifications = r.bool(); + break; + } + case 14: { + m.autoUnarchiveChats = r.bool(); + break; + } + case 15: { + m.videoQualityMode = r.int32(); + break; + } + case 16: { + m.photoQualityMode = r.int32(); + break; + } + case 17: { + m.individualNotificationSettings = $root.proto.NotificationSettings.decode(r, r.uint32()); + break; + } + case 18: { + m.groupNotificationSettings = $root.proto.NotificationSettings.decode(r, r.uint32()); + break; + } + case 19: { + m.chatLockSettings = $root.proto.ChatLockSettings.decode(r, r.uint32()); + break; + } + case 20: { + m.chatDbLidMigrationTimestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GlobalSettings.fromObject = function fromObject(d) { + if (d instanceof $root.proto.GlobalSettings) + return d; + var m = new $root.proto.GlobalSettings(); + if (d.lightThemeWallpaper != null) { + if (typeof d.lightThemeWallpaper !== "object") + throw TypeError(".proto.GlobalSettings.lightThemeWallpaper: object expected"); + m.lightThemeWallpaper = $root.proto.WallpaperSettings.fromObject(d.lightThemeWallpaper); + } + switch (d.mediaVisibility) { + default: + if (typeof d.mediaVisibility === "number") { + m.mediaVisibility = d.mediaVisibility; + break; + } + break; + case "DEFAULT": + case 0: + m.mediaVisibility = 0; + break; + case "OFF": + case 1: + m.mediaVisibility = 1; + break; + case "ON": + case 2: + m.mediaVisibility = 2; + break; + } + if (d.darkThemeWallpaper != null) { + if (typeof d.darkThemeWallpaper !== "object") + throw TypeError(".proto.GlobalSettings.darkThemeWallpaper: object expected"); + m.darkThemeWallpaper = $root.proto.WallpaperSettings.fromObject(d.darkThemeWallpaper); + } + if (d.autoDownloadWiFi != null) { + if (typeof d.autoDownloadWiFi !== "object") + throw TypeError(".proto.GlobalSettings.autoDownloadWiFi: object expected"); + m.autoDownloadWiFi = $root.proto.AutoDownloadSettings.fromObject(d.autoDownloadWiFi); + } + if (d.autoDownloadCellular != null) { + if (typeof d.autoDownloadCellular !== "object") + throw TypeError(".proto.GlobalSettings.autoDownloadCellular: object expected"); + m.autoDownloadCellular = $root.proto.AutoDownloadSettings.fromObject(d.autoDownloadCellular); + } + if (d.autoDownloadRoaming != null) { + if (typeof d.autoDownloadRoaming !== "object") + throw TypeError(".proto.GlobalSettings.autoDownloadRoaming: object expected"); + m.autoDownloadRoaming = $root.proto.AutoDownloadSettings.fromObject(d.autoDownloadRoaming); + } + if (d.showIndividualNotificationsPreview != null) { + m.showIndividualNotificationsPreview = Boolean(d.showIndividualNotificationsPreview); + } + if (d.showGroupNotificationsPreview != null) { + m.showGroupNotificationsPreview = Boolean(d.showGroupNotificationsPreview); + } + if (d.disappearingModeDuration != null) { + m.disappearingModeDuration = d.disappearingModeDuration | 0; + } + if (d.disappearingModeTimestamp != null) { + if ($util.Long) + (m.disappearingModeTimestamp = $util.Long.fromValue(d.disappearingModeTimestamp)).unsigned = false; + else if (typeof d.disappearingModeTimestamp === "string") + m.disappearingModeTimestamp = parseInt(d.disappearingModeTimestamp, 10); + else if (typeof d.disappearingModeTimestamp === "number") + m.disappearingModeTimestamp = d.disappearingModeTimestamp; + else if (typeof d.disappearingModeTimestamp === "object") + m.disappearingModeTimestamp = new $util.LongBits(d.disappearingModeTimestamp.low >>> 0, d.disappearingModeTimestamp.high >>> 0).toNumber(); + } + if (d.avatarUserSettings != null) { + if (typeof d.avatarUserSettings !== "object") + throw TypeError(".proto.GlobalSettings.avatarUserSettings: object expected"); + m.avatarUserSettings = $root.proto.AvatarUserSettings.fromObject(d.avatarUserSettings); + } + if (d.fontSize != null) { + m.fontSize = d.fontSize | 0; + } + if (d.securityNotifications != null) { + m.securityNotifications = Boolean(d.securityNotifications); + } + if (d.autoUnarchiveChats != null) { + m.autoUnarchiveChats = Boolean(d.autoUnarchiveChats); + } + if (d.videoQualityMode != null) { + m.videoQualityMode = d.videoQualityMode | 0; + } + if (d.photoQualityMode != null) { + m.photoQualityMode = d.photoQualityMode | 0; + } + if (d.individualNotificationSettings != null) { + if (typeof d.individualNotificationSettings !== "object") + throw TypeError(".proto.GlobalSettings.individualNotificationSettings: object expected"); + m.individualNotificationSettings = $root.proto.NotificationSettings.fromObject(d.individualNotificationSettings); + } + if (d.groupNotificationSettings != null) { + if (typeof d.groupNotificationSettings !== "object") + throw TypeError(".proto.GlobalSettings.groupNotificationSettings: object expected"); + m.groupNotificationSettings = $root.proto.NotificationSettings.fromObject(d.groupNotificationSettings); + } + if (d.chatLockSettings != null) { + if (typeof d.chatLockSettings !== "object") + throw TypeError(".proto.GlobalSettings.chatLockSettings: object expected"); + m.chatLockSettings = $root.proto.ChatLockSettings.fromObject(d.chatLockSettings); + } + if (d.chatDbLidMigrationTimestamp != null) { + if ($util.Long) + (m.chatDbLidMigrationTimestamp = $util.Long.fromValue(d.chatDbLidMigrationTimestamp)).unsigned = false; + else if (typeof d.chatDbLidMigrationTimestamp === "string") + m.chatDbLidMigrationTimestamp = parseInt(d.chatDbLidMigrationTimestamp, 10); + else if (typeof d.chatDbLidMigrationTimestamp === "number") + m.chatDbLidMigrationTimestamp = d.chatDbLidMigrationTimestamp; + else if (typeof d.chatDbLidMigrationTimestamp === "object") + m.chatDbLidMigrationTimestamp = new $util.LongBits(d.chatDbLidMigrationTimestamp.low >>> 0, d.chatDbLidMigrationTimestamp.high >>> 0).toNumber(); + } + return m; + }; + + GlobalSettings.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.lightThemeWallpaper != null && m.hasOwnProperty("lightThemeWallpaper")) { + d.lightThemeWallpaper = $root.proto.WallpaperSettings.toObject(m.lightThemeWallpaper, o); + if (o.oneofs) + d._lightThemeWallpaper = "lightThemeWallpaper"; + } + if (m.mediaVisibility != null && m.hasOwnProperty("mediaVisibility")) { + d.mediaVisibility = o.enums === String ? $root.proto.MediaVisibility[m.mediaVisibility] === undefined ? m.mediaVisibility : $root.proto.MediaVisibility[m.mediaVisibility] : m.mediaVisibility; + if (o.oneofs) + d._mediaVisibility = "mediaVisibility"; + } + if (m.darkThemeWallpaper != null && m.hasOwnProperty("darkThemeWallpaper")) { + d.darkThemeWallpaper = $root.proto.WallpaperSettings.toObject(m.darkThemeWallpaper, o); + if (o.oneofs) + d._darkThemeWallpaper = "darkThemeWallpaper"; + } + if (m.autoDownloadWiFi != null && m.hasOwnProperty("autoDownloadWiFi")) { + d.autoDownloadWiFi = $root.proto.AutoDownloadSettings.toObject(m.autoDownloadWiFi, o); + if (o.oneofs) + d._autoDownloadWiFi = "autoDownloadWiFi"; + } + if (m.autoDownloadCellular != null && m.hasOwnProperty("autoDownloadCellular")) { + d.autoDownloadCellular = $root.proto.AutoDownloadSettings.toObject(m.autoDownloadCellular, o); + if (o.oneofs) + d._autoDownloadCellular = "autoDownloadCellular"; + } + if (m.autoDownloadRoaming != null && m.hasOwnProperty("autoDownloadRoaming")) { + d.autoDownloadRoaming = $root.proto.AutoDownloadSettings.toObject(m.autoDownloadRoaming, o); + if (o.oneofs) + d._autoDownloadRoaming = "autoDownloadRoaming"; + } + if (m.showIndividualNotificationsPreview != null && m.hasOwnProperty("showIndividualNotificationsPreview")) { + d.showIndividualNotificationsPreview = m.showIndividualNotificationsPreview; + if (o.oneofs) + d._showIndividualNotificationsPreview = "showIndividualNotificationsPreview"; + } + if (m.showGroupNotificationsPreview != null && m.hasOwnProperty("showGroupNotificationsPreview")) { + d.showGroupNotificationsPreview = m.showGroupNotificationsPreview; + if (o.oneofs) + d._showGroupNotificationsPreview = "showGroupNotificationsPreview"; + } + if (m.disappearingModeDuration != null && m.hasOwnProperty("disappearingModeDuration")) { + d.disappearingModeDuration = m.disappearingModeDuration; + if (o.oneofs) + d._disappearingModeDuration = "disappearingModeDuration"; + } + if (m.disappearingModeTimestamp != null && m.hasOwnProperty("disappearingModeTimestamp")) { + if (typeof m.disappearingModeTimestamp === "number") + d.disappearingModeTimestamp = o.longs === String ? String(m.disappearingModeTimestamp) : m.disappearingModeTimestamp; + else + d.disappearingModeTimestamp = o.longs === String ? longToString(m.disappearingModeTimestamp) : o.longs === Number ? longToNumber(m.disappearingModeTimestamp) : m.disappearingModeTimestamp; + if (o.oneofs) + d._disappearingModeTimestamp = "disappearingModeTimestamp"; + } + if (m.avatarUserSettings != null && m.hasOwnProperty("avatarUserSettings")) { + d.avatarUserSettings = $root.proto.AvatarUserSettings.toObject(m.avatarUserSettings, o); + if (o.oneofs) + d._avatarUserSettings = "avatarUserSettings"; + } + if (m.fontSize != null && m.hasOwnProperty("fontSize")) { + d.fontSize = m.fontSize; + if (o.oneofs) + d._fontSize = "fontSize"; + } + if (m.securityNotifications != null && m.hasOwnProperty("securityNotifications")) { + d.securityNotifications = m.securityNotifications; + if (o.oneofs) + d._securityNotifications = "securityNotifications"; + } + if (m.autoUnarchiveChats != null && m.hasOwnProperty("autoUnarchiveChats")) { + d.autoUnarchiveChats = m.autoUnarchiveChats; + if (o.oneofs) + d._autoUnarchiveChats = "autoUnarchiveChats"; + } + if (m.videoQualityMode != null && m.hasOwnProperty("videoQualityMode")) { + d.videoQualityMode = m.videoQualityMode; + if (o.oneofs) + d._videoQualityMode = "videoQualityMode"; + } + if (m.photoQualityMode != null && m.hasOwnProperty("photoQualityMode")) { + d.photoQualityMode = m.photoQualityMode; + if (o.oneofs) + d._photoQualityMode = "photoQualityMode"; + } + if (m.individualNotificationSettings != null && m.hasOwnProperty("individualNotificationSettings")) { + d.individualNotificationSettings = $root.proto.NotificationSettings.toObject(m.individualNotificationSettings, o); + if (o.oneofs) + d._individualNotificationSettings = "individualNotificationSettings"; + } + if (m.groupNotificationSettings != null && m.hasOwnProperty("groupNotificationSettings")) { + d.groupNotificationSettings = $root.proto.NotificationSettings.toObject(m.groupNotificationSettings, o); + if (o.oneofs) + d._groupNotificationSettings = "groupNotificationSettings"; + } + if (m.chatLockSettings != null && m.hasOwnProperty("chatLockSettings")) { + d.chatLockSettings = $root.proto.ChatLockSettings.toObject(m.chatLockSettings, o); + if (o.oneofs) + d._chatLockSettings = "chatLockSettings"; + } + if (m.chatDbLidMigrationTimestamp != null && m.hasOwnProperty("chatDbLidMigrationTimestamp")) { + if (typeof m.chatDbLidMigrationTimestamp === "number") + d.chatDbLidMigrationTimestamp = o.longs === String ? String(m.chatDbLidMigrationTimestamp) : m.chatDbLidMigrationTimestamp; + else + d.chatDbLidMigrationTimestamp = o.longs === String ? longToString(m.chatDbLidMigrationTimestamp) : o.longs === Number ? longToNumber(m.chatDbLidMigrationTimestamp) : m.chatDbLidMigrationTimestamp; + if (o.oneofs) + d._chatDbLidMigrationTimestamp = "chatDbLidMigrationTimestamp"; + } + return d; + }; + + GlobalSettings.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GlobalSettings.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.GlobalSettings"; + }; + + return GlobalSettings; + })(); + + proto.GroupHistoryBundleInfo = (function() { + + function GroupHistoryBundleInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GroupHistoryBundleInfo.prototype.deprecatedMessageHistoryBundle = null; + GroupHistoryBundleInfo.prototype.processState = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupHistoryBundleInfo.prototype, "_deprecatedMessageHistoryBundle", { + get: $util.oneOfGetter($oneOfFields = ["deprecatedMessageHistoryBundle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupHistoryBundleInfo.prototype, "_processState", { + get: $util.oneOfGetter($oneOfFields = ["processState"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GroupHistoryBundleInfo.create = function create(properties) { + return new GroupHistoryBundleInfo(properties); + }; + + GroupHistoryBundleInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.deprecatedMessageHistoryBundle != null && Object.hasOwnProperty.call(m, "deprecatedMessageHistoryBundle")) + $root.proto.Message.MessageHistoryBundle.encode(m.deprecatedMessageHistoryBundle, w.uint32(10).fork()).ldelim(); + if (m.processState != null && Object.hasOwnProperty.call(m, "processState")) + w.uint32(16).int32(m.processState); + return w; + }; + + GroupHistoryBundleInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.GroupHistoryBundleInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.deprecatedMessageHistoryBundle = $root.proto.Message.MessageHistoryBundle.decode(r, r.uint32()); + break; + } + case 2: { + m.processState = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GroupHistoryBundleInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.GroupHistoryBundleInfo) + return d; + var m = new $root.proto.GroupHistoryBundleInfo(); + if (d.deprecatedMessageHistoryBundle != null) { + if (typeof d.deprecatedMessageHistoryBundle !== "object") + throw TypeError(".proto.GroupHistoryBundleInfo.deprecatedMessageHistoryBundle: object expected"); + m.deprecatedMessageHistoryBundle = $root.proto.Message.MessageHistoryBundle.fromObject(d.deprecatedMessageHistoryBundle); + } + switch (d.processState) { + default: + if (typeof d.processState === "number") { + m.processState = d.processState; + break; + } + break; + case "NOT_INJECTED": + case 0: + m.processState = 0; + break; + case "INJECTED": + case 1: + m.processState = 1; + break; + case "INJECTED_PARTIAL": + case 2: + m.processState = 2; + break; + case "INJECTION_FAILED": + case 3: + m.processState = 3; + break; + case "INJECTION_FAILED_NO_RETRY": + case 4: + m.processState = 4; + break; + } + return m; + }; + + GroupHistoryBundleInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.deprecatedMessageHistoryBundle != null && m.hasOwnProperty("deprecatedMessageHistoryBundle")) { + d.deprecatedMessageHistoryBundle = $root.proto.Message.MessageHistoryBundle.toObject(m.deprecatedMessageHistoryBundle, o); + if (o.oneofs) + d._deprecatedMessageHistoryBundle = "deprecatedMessageHistoryBundle"; + } + if (m.processState != null && m.hasOwnProperty("processState")) { + d.processState = o.enums === String ? $root.proto.GroupHistoryBundleInfo.ProcessState[m.processState] === undefined ? m.processState : $root.proto.GroupHistoryBundleInfo.ProcessState[m.processState] : m.processState; + if (o.oneofs) + d._processState = "processState"; + } + return d; + }; + + GroupHistoryBundleInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GroupHistoryBundleInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.GroupHistoryBundleInfo"; + }; + + GroupHistoryBundleInfo.ProcessState = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NOT_INJECTED"] = 0; + values[valuesById[1] = "INJECTED"] = 1; + values[valuesById[2] = "INJECTED_PARTIAL"] = 2; + values[valuesById[3] = "INJECTION_FAILED"] = 3; + values[valuesById[4] = "INJECTION_FAILED_NO_RETRY"] = 4; + return values; + })(); + + return GroupHistoryBundleInfo; + })(); + + proto.GroupHistoryIndividualMessageInfo = (function() { + + function GroupHistoryIndividualMessageInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GroupHistoryIndividualMessageInfo.prototype.bundleMessageKey = null; + GroupHistoryIndividualMessageInfo.prototype.editedAfterReceivedAsHistory = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupHistoryIndividualMessageInfo.prototype, "_bundleMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["bundleMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupHistoryIndividualMessageInfo.prototype, "_editedAfterReceivedAsHistory", { + get: $util.oneOfGetter($oneOfFields = ["editedAfterReceivedAsHistory"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GroupHistoryIndividualMessageInfo.create = function create(properties) { + return new GroupHistoryIndividualMessageInfo(properties); + }; + + GroupHistoryIndividualMessageInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.bundleMessageKey != null && Object.hasOwnProperty.call(m, "bundleMessageKey")) + $root.proto.MessageKey.encode(m.bundleMessageKey, w.uint32(10).fork()).ldelim(); + if (m.editedAfterReceivedAsHistory != null && Object.hasOwnProperty.call(m, "editedAfterReceivedAsHistory")) + w.uint32(16).bool(m.editedAfterReceivedAsHistory); + return w; + }; + + GroupHistoryIndividualMessageInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.GroupHistoryIndividualMessageInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.bundleMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.editedAfterReceivedAsHistory = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GroupHistoryIndividualMessageInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.GroupHistoryIndividualMessageInfo) + return d; + var m = new $root.proto.GroupHistoryIndividualMessageInfo(); + if (d.bundleMessageKey != null) { + if (typeof d.bundleMessageKey !== "object") + throw TypeError(".proto.GroupHistoryIndividualMessageInfo.bundleMessageKey: object expected"); + m.bundleMessageKey = $root.proto.MessageKey.fromObject(d.bundleMessageKey); + } + if (d.editedAfterReceivedAsHistory != null) { + m.editedAfterReceivedAsHistory = Boolean(d.editedAfterReceivedAsHistory); + } + return m; + }; + + GroupHistoryIndividualMessageInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.bundleMessageKey != null && m.hasOwnProperty("bundleMessageKey")) { + d.bundleMessageKey = $root.proto.MessageKey.toObject(m.bundleMessageKey, o); + if (o.oneofs) + d._bundleMessageKey = "bundleMessageKey"; + } + if (m.editedAfterReceivedAsHistory != null && m.hasOwnProperty("editedAfterReceivedAsHistory")) { + d.editedAfterReceivedAsHistory = m.editedAfterReceivedAsHistory; + if (o.oneofs) + d._editedAfterReceivedAsHistory = "editedAfterReceivedAsHistory"; + } + return d; + }; + + GroupHistoryIndividualMessageInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GroupHistoryIndividualMessageInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.GroupHistoryIndividualMessageInfo"; + }; + + return GroupHistoryIndividualMessageInfo; + })(); + + proto.GroupMention = (function() { + + function GroupMention(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GroupMention.prototype.groupJid = null; + GroupMention.prototype.groupSubject = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupMention.prototype, "_groupJid", { + get: $util.oneOfGetter($oneOfFields = ["groupJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupMention.prototype, "_groupSubject", { + get: $util.oneOfGetter($oneOfFields = ["groupSubject"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GroupMention.create = function create(properties) { + return new GroupMention(properties); + }; + + GroupMention.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.groupJid != null && Object.hasOwnProperty.call(m, "groupJid")) + w.uint32(10).string(m.groupJid); + if (m.groupSubject != null && Object.hasOwnProperty.call(m, "groupSubject")) + w.uint32(18).string(m.groupSubject); + return w; + }; + + GroupMention.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.GroupMention(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.groupJid = r.string(); + break; + } + case 2: { + m.groupSubject = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GroupMention.fromObject = function fromObject(d) { + if (d instanceof $root.proto.GroupMention) + return d; + var m = new $root.proto.GroupMention(); + if (d.groupJid != null) { + m.groupJid = String(d.groupJid); + } + if (d.groupSubject != null) { + m.groupSubject = String(d.groupSubject); + } + return m; + }; + + GroupMention.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.groupJid != null && m.hasOwnProperty("groupJid")) { + d.groupJid = m.groupJid; + if (o.oneofs) + d._groupJid = "groupJid"; + } + if (m.groupSubject != null && m.hasOwnProperty("groupSubject")) { + d.groupSubject = m.groupSubject; + if (o.oneofs) + d._groupSubject = "groupSubject"; + } + return d; + }; + + GroupMention.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GroupMention.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.GroupMention"; + }; + + return GroupMention; + })(); + + proto.GroupParticipant = (function() { + + function GroupParticipant(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GroupParticipant.prototype.userJid = ""; + GroupParticipant.prototype.rank = null; + GroupParticipant.prototype.memberLabel = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupParticipant.prototype, "_rank", { + get: $util.oneOfGetter($oneOfFields = ["rank"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupParticipant.prototype, "_memberLabel", { + get: $util.oneOfGetter($oneOfFields = ["memberLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GroupParticipant.create = function create(properties) { + return new GroupParticipant(properties); + }; + + GroupParticipant.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.userJid != null && Object.hasOwnProperty.call(m, "userJid")) + w.uint32(10).string(m.userJid); + if (m.rank != null && Object.hasOwnProperty.call(m, "rank")) + w.uint32(16).int32(m.rank); + if (m.memberLabel != null && Object.hasOwnProperty.call(m, "memberLabel")) + $root.proto.MemberLabel.encode(m.memberLabel, w.uint32(26).fork()).ldelim(); + return w; + }; + + GroupParticipant.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.GroupParticipant(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.userJid = r.string(); + break; + } + case 2: { + m.rank = r.int32(); + break; + } + case 3: { + m.memberLabel = $root.proto.MemberLabel.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GroupParticipant.fromObject = function fromObject(d) { + if (d instanceof $root.proto.GroupParticipant) + return d; + var m = new $root.proto.GroupParticipant(); + if (d.userJid != null) { + m.userJid = String(d.userJid); + } + switch (d.rank) { + default: + if (typeof d.rank === "number") { + m.rank = d.rank; + break; + } + break; + case "REGULAR": + case 0: + m.rank = 0; + break; + case "ADMIN": + case 1: + m.rank = 1; + break; + case "SUPERADMIN": + case 2: + m.rank = 2; + break; + } + if (d.memberLabel != null) { + if (typeof d.memberLabel !== "object") + throw TypeError(".proto.GroupParticipant.memberLabel: object expected"); + m.memberLabel = $root.proto.MemberLabel.fromObject(d.memberLabel); + } + return m; + }; + + GroupParticipant.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.userJid = ""; + } + if (m.userJid != null && m.hasOwnProperty("userJid")) { + d.userJid = m.userJid; + } + if (m.rank != null && m.hasOwnProperty("rank")) { + d.rank = o.enums === String ? $root.proto.GroupParticipant.Rank[m.rank] === undefined ? m.rank : $root.proto.GroupParticipant.Rank[m.rank] : m.rank; + if (o.oneofs) + d._rank = "rank"; + } + if (m.memberLabel != null && m.hasOwnProperty("memberLabel")) { + d.memberLabel = $root.proto.MemberLabel.toObject(m.memberLabel, o); + if (o.oneofs) + d._memberLabel = "memberLabel"; + } + return d; + }; + + GroupParticipant.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GroupParticipant.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.GroupParticipant"; + }; + + GroupParticipant.Rank = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "REGULAR"] = 0; + values[valuesById[1] = "ADMIN"] = 1; + values[valuesById[2] = "SUPERADMIN"] = 2; + return values; + })(); + + return GroupParticipant; + })(); + + proto.HandshakeMessage = (function() { + + function HandshakeMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HandshakeMessage.prototype.clientHello = null; + HandshakeMessage.prototype.serverHello = null; + HandshakeMessage.prototype.clientFinish = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HandshakeMessage.prototype, "_clientHello", { + get: $util.oneOfGetter($oneOfFields = ["clientHello"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HandshakeMessage.prototype, "_serverHello", { + get: $util.oneOfGetter($oneOfFields = ["serverHello"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HandshakeMessage.prototype, "_clientFinish", { + get: $util.oneOfGetter($oneOfFields = ["clientFinish"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HandshakeMessage.create = function create(properties) { + return new HandshakeMessage(properties); + }; + + HandshakeMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.clientHello != null && Object.hasOwnProperty.call(m, "clientHello")) + $root.proto.HandshakeMessage.ClientHello.encode(m.clientHello, w.uint32(18).fork()).ldelim(); + if (m.serverHello != null && Object.hasOwnProperty.call(m, "serverHello")) + $root.proto.HandshakeMessage.ServerHello.encode(m.serverHello, w.uint32(26).fork()).ldelim(); + if (m.clientFinish != null && Object.hasOwnProperty.call(m, "clientFinish")) + $root.proto.HandshakeMessage.ClientFinish.encode(m.clientFinish, w.uint32(34).fork()).ldelim(); + return w; + }; + + HandshakeMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HandshakeMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 2: { + m.clientHello = $root.proto.HandshakeMessage.ClientHello.decode(r, r.uint32()); + break; + } + case 3: { + m.serverHello = $root.proto.HandshakeMessage.ServerHello.decode(r, r.uint32()); + break; + } + case 4: { + m.clientFinish = $root.proto.HandshakeMessage.ClientFinish.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HandshakeMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HandshakeMessage) + return d; + var m = new $root.proto.HandshakeMessage(); + if (d.clientHello != null) { + if (typeof d.clientHello !== "object") + throw TypeError(".proto.HandshakeMessage.clientHello: object expected"); + m.clientHello = $root.proto.HandshakeMessage.ClientHello.fromObject(d.clientHello); + } + if (d.serverHello != null) { + if (typeof d.serverHello !== "object") + throw TypeError(".proto.HandshakeMessage.serverHello: object expected"); + m.serverHello = $root.proto.HandshakeMessage.ServerHello.fromObject(d.serverHello); + } + if (d.clientFinish != null) { + if (typeof d.clientFinish !== "object") + throw TypeError(".proto.HandshakeMessage.clientFinish: object expected"); + m.clientFinish = $root.proto.HandshakeMessage.ClientFinish.fromObject(d.clientFinish); + } + return m; + }; + + HandshakeMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.clientHello != null && m.hasOwnProperty("clientHello")) { + d.clientHello = $root.proto.HandshakeMessage.ClientHello.toObject(m.clientHello, o); + if (o.oneofs) + d._clientHello = "clientHello"; + } + if (m.serverHello != null && m.hasOwnProperty("serverHello")) { + d.serverHello = $root.proto.HandshakeMessage.ServerHello.toObject(m.serverHello, o); + if (o.oneofs) + d._serverHello = "serverHello"; + } + if (m.clientFinish != null && m.hasOwnProperty("clientFinish")) { + d.clientFinish = $root.proto.HandshakeMessage.ClientFinish.toObject(m.clientFinish, o); + if (o.oneofs) + d._clientFinish = "clientFinish"; + } + return d; + }; + + HandshakeMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HandshakeMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HandshakeMessage"; + }; + + HandshakeMessage.ClientFinish = (function() { + + function ClientFinish(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ClientFinish.prototype["static"] = null; + ClientFinish.prototype.payload = null; + ClientFinish.prototype.extendedCiphertext = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientFinish.prototype, "_static", { + get: $util.oneOfGetter($oneOfFields = ["static"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientFinish.prototype, "_payload", { + get: $util.oneOfGetter($oneOfFields = ["payload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientFinish.prototype, "_extendedCiphertext", { + get: $util.oneOfGetter($oneOfFields = ["extendedCiphertext"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ClientFinish.create = function create(properties) { + return new ClientFinish(properties); + }; + + ClientFinish.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m["static"] != null && Object.hasOwnProperty.call(m, "static")) + w.uint32(10).bytes(m["static"]); + if (m.payload != null && Object.hasOwnProperty.call(m, "payload")) + w.uint32(18).bytes(m.payload); + if (m.extendedCiphertext != null && Object.hasOwnProperty.call(m, "extendedCiphertext")) + w.uint32(26).bytes(m.extendedCiphertext); + return w; + }; + + ClientFinish.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HandshakeMessage.ClientFinish(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m["static"] = r.bytes(); + break; + } + case 2: { + m.payload = r.bytes(); + break; + } + case 3: { + m.extendedCiphertext = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ClientFinish.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HandshakeMessage.ClientFinish) + return d; + var m = new $root.proto.HandshakeMessage.ClientFinish(); + if (d["static"] != null) { + if (typeof d["static"] === "string") + $util.base64.decode(d["static"], m["static"] = $util.newBuffer($util.base64.length(d["static"])), 0); + else if (d["static"].length >= 0) + m["static"] = d["static"]; + } + if (d.payload != null) { + if (typeof d.payload === "string") + $util.base64.decode(d.payload, m.payload = $util.newBuffer($util.base64.length(d.payload)), 0); + else if (d.payload.length >= 0) + m.payload = d.payload; + } + if (d.extendedCiphertext != null) { + if (typeof d.extendedCiphertext === "string") + $util.base64.decode(d.extendedCiphertext, m.extendedCiphertext = $util.newBuffer($util.base64.length(d.extendedCiphertext)), 0); + else if (d.extendedCiphertext.length >= 0) + m.extendedCiphertext = d.extendedCiphertext; + } + return m; + }; + + ClientFinish.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m["static"] != null && m.hasOwnProperty("static")) { + d["static"] = o.bytes === String ? $util.base64.encode(m["static"], 0, m["static"].length) : o.bytes === Array ? Array.prototype.slice.call(m["static"]) : m["static"]; + if (o.oneofs) + d._static = "static"; + } + if (m.payload != null && m.hasOwnProperty("payload")) { + d.payload = o.bytes === String ? $util.base64.encode(m.payload, 0, m.payload.length) : o.bytes === Array ? Array.prototype.slice.call(m.payload) : m.payload; + if (o.oneofs) + d._payload = "payload"; + } + if (m.extendedCiphertext != null && m.hasOwnProperty("extendedCiphertext")) { + d.extendedCiphertext = o.bytes === String ? $util.base64.encode(m.extendedCiphertext, 0, m.extendedCiphertext.length) : o.bytes === Array ? Array.prototype.slice.call(m.extendedCiphertext) : m.extendedCiphertext; + if (o.oneofs) + d._extendedCiphertext = "extendedCiphertext"; + } + return d; + }; + + ClientFinish.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ClientFinish.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HandshakeMessage.ClientFinish"; + }; + + return ClientFinish; + })(); + + HandshakeMessage.ClientHello = (function() { + + function ClientHello(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ClientHello.prototype.ephemeral = null; + ClientHello.prototype["static"] = null; + ClientHello.prototype.payload = null; + ClientHello.prototype.useExtended = null; + ClientHello.prototype.extendedCiphertext = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientHello.prototype, "_ephemeral", { + get: $util.oneOfGetter($oneOfFields = ["ephemeral"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientHello.prototype, "_static", { + get: $util.oneOfGetter($oneOfFields = ["static"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientHello.prototype, "_payload", { + get: $util.oneOfGetter($oneOfFields = ["payload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientHello.prototype, "_useExtended", { + get: $util.oneOfGetter($oneOfFields = ["useExtended"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClientHello.prototype, "_extendedCiphertext", { + get: $util.oneOfGetter($oneOfFields = ["extendedCiphertext"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ClientHello.create = function create(properties) { + return new ClientHello(properties); + }; + + ClientHello.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.ephemeral != null && Object.hasOwnProperty.call(m, "ephemeral")) + w.uint32(10).bytes(m.ephemeral); + if (m["static"] != null && Object.hasOwnProperty.call(m, "static")) + w.uint32(18).bytes(m["static"]); + if (m.payload != null && Object.hasOwnProperty.call(m, "payload")) + w.uint32(26).bytes(m.payload); + if (m.useExtended != null && Object.hasOwnProperty.call(m, "useExtended")) + w.uint32(32).bool(m.useExtended); + if (m.extendedCiphertext != null && Object.hasOwnProperty.call(m, "extendedCiphertext")) + w.uint32(42).bytes(m.extendedCiphertext); + return w; + }; + + ClientHello.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HandshakeMessage.ClientHello(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.ephemeral = r.bytes(); + break; + } + case 2: { + m["static"] = r.bytes(); + break; + } + case 3: { + m.payload = r.bytes(); + break; + } + case 4: { + m.useExtended = r.bool(); + break; + } + case 5: { + m.extendedCiphertext = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ClientHello.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HandshakeMessage.ClientHello) + return d; + var m = new $root.proto.HandshakeMessage.ClientHello(); + if (d.ephemeral != null) { + if (typeof d.ephemeral === "string") + $util.base64.decode(d.ephemeral, m.ephemeral = $util.newBuffer($util.base64.length(d.ephemeral)), 0); + else if (d.ephemeral.length >= 0) + m.ephemeral = d.ephemeral; + } + if (d["static"] != null) { + if (typeof d["static"] === "string") + $util.base64.decode(d["static"], m["static"] = $util.newBuffer($util.base64.length(d["static"])), 0); + else if (d["static"].length >= 0) + m["static"] = d["static"]; + } + if (d.payload != null) { + if (typeof d.payload === "string") + $util.base64.decode(d.payload, m.payload = $util.newBuffer($util.base64.length(d.payload)), 0); + else if (d.payload.length >= 0) + m.payload = d.payload; + } + if (d.useExtended != null) { + m.useExtended = Boolean(d.useExtended); + } + if (d.extendedCiphertext != null) { + if (typeof d.extendedCiphertext === "string") + $util.base64.decode(d.extendedCiphertext, m.extendedCiphertext = $util.newBuffer($util.base64.length(d.extendedCiphertext)), 0); + else if (d.extendedCiphertext.length >= 0) + m.extendedCiphertext = d.extendedCiphertext; + } + return m; + }; + + ClientHello.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.ephemeral != null && m.hasOwnProperty("ephemeral")) { + d.ephemeral = o.bytes === String ? $util.base64.encode(m.ephemeral, 0, m.ephemeral.length) : o.bytes === Array ? Array.prototype.slice.call(m.ephemeral) : m.ephemeral; + if (o.oneofs) + d._ephemeral = "ephemeral"; + } + if (m["static"] != null && m.hasOwnProperty("static")) { + d["static"] = o.bytes === String ? $util.base64.encode(m["static"], 0, m["static"].length) : o.bytes === Array ? Array.prototype.slice.call(m["static"]) : m["static"]; + if (o.oneofs) + d._static = "static"; + } + if (m.payload != null && m.hasOwnProperty("payload")) { + d.payload = o.bytes === String ? $util.base64.encode(m.payload, 0, m.payload.length) : o.bytes === Array ? Array.prototype.slice.call(m.payload) : m.payload; + if (o.oneofs) + d._payload = "payload"; + } + if (m.useExtended != null && m.hasOwnProperty("useExtended")) { + d.useExtended = m.useExtended; + if (o.oneofs) + d._useExtended = "useExtended"; + } + if (m.extendedCiphertext != null && m.hasOwnProperty("extendedCiphertext")) { + d.extendedCiphertext = o.bytes === String ? $util.base64.encode(m.extendedCiphertext, 0, m.extendedCiphertext.length) : o.bytes === Array ? Array.prototype.slice.call(m.extendedCiphertext) : m.extendedCiphertext; + if (o.oneofs) + d._extendedCiphertext = "extendedCiphertext"; + } + return d; + }; + + ClientHello.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ClientHello.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HandshakeMessage.ClientHello"; + }; + + return ClientHello; + })(); + + HandshakeMessage.ServerHello = (function() { + + function ServerHello(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ServerHello.prototype.ephemeral = null; + ServerHello.prototype["static"] = null; + ServerHello.prototype.payload = null; + ServerHello.prototype.extendedStatic = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ServerHello.prototype, "_ephemeral", { + get: $util.oneOfGetter($oneOfFields = ["ephemeral"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ServerHello.prototype, "_static", { + get: $util.oneOfGetter($oneOfFields = ["static"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ServerHello.prototype, "_payload", { + get: $util.oneOfGetter($oneOfFields = ["payload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ServerHello.prototype, "_extendedStatic", { + get: $util.oneOfGetter($oneOfFields = ["extendedStatic"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ServerHello.create = function create(properties) { + return new ServerHello(properties); + }; + + ServerHello.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.ephemeral != null && Object.hasOwnProperty.call(m, "ephemeral")) + w.uint32(10).bytes(m.ephemeral); + if (m["static"] != null && Object.hasOwnProperty.call(m, "static")) + w.uint32(18).bytes(m["static"]); + if (m.payload != null && Object.hasOwnProperty.call(m, "payload")) + w.uint32(26).bytes(m.payload); + if (m.extendedStatic != null && Object.hasOwnProperty.call(m, "extendedStatic")) + w.uint32(34).bytes(m.extendedStatic); + return w; + }; + + ServerHello.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HandshakeMessage.ServerHello(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.ephemeral = r.bytes(); + break; + } + case 2: { + m["static"] = r.bytes(); + break; + } + case 3: { + m.payload = r.bytes(); + break; + } + case 4: { + m.extendedStatic = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ServerHello.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HandshakeMessage.ServerHello) + return d; + var m = new $root.proto.HandshakeMessage.ServerHello(); + if (d.ephemeral != null) { + if (typeof d.ephemeral === "string") + $util.base64.decode(d.ephemeral, m.ephemeral = $util.newBuffer($util.base64.length(d.ephemeral)), 0); + else if (d.ephemeral.length >= 0) + m.ephemeral = d.ephemeral; + } + if (d["static"] != null) { + if (typeof d["static"] === "string") + $util.base64.decode(d["static"], m["static"] = $util.newBuffer($util.base64.length(d["static"])), 0); + else if (d["static"].length >= 0) + m["static"] = d["static"]; + } + if (d.payload != null) { + if (typeof d.payload === "string") + $util.base64.decode(d.payload, m.payload = $util.newBuffer($util.base64.length(d.payload)), 0); + else if (d.payload.length >= 0) + m.payload = d.payload; + } + if (d.extendedStatic != null) { + if (typeof d.extendedStatic === "string") + $util.base64.decode(d.extendedStatic, m.extendedStatic = $util.newBuffer($util.base64.length(d.extendedStatic)), 0); + else if (d.extendedStatic.length >= 0) + m.extendedStatic = d.extendedStatic; + } + return m; + }; + + ServerHello.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.ephemeral != null && m.hasOwnProperty("ephemeral")) { + d.ephemeral = o.bytes === String ? $util.base64.encode(m.ephemeral, 0, m.ephemeral.length) : o.bytes === Array ? Array.prototype.slice.call(m.ephemeral) : m.ephemeral; + if (o.oneofs) + d._ephemeral = "ephemeral"; + } + if (m["static"] != null && m.hasOwnProperty("static")) { + d["static"] = o.bytes === String ? $util.base64.encode(m["static"], 0, m["static"].length) : o.bytes === Array ? Array.prototype.slice.call(m["static"]) : m["static"]; + if (o.oneofs) + d._static = "static"; + } + if (m.payload != null && m.hasOwnProperty("payload")) { + d.payload = o.bytes === String ? $util.base64.encode(m.payload, 0, m.payload.length) : o.bytes === Array ? Array.prototype.slice.call(m.payload) : m.payload; + if (o.oneofs) + d._payload = "payload"; + } + if (m.extendedStatic != null && m.hasOwnProperty("extendedStatic")) { + d.extendedStatic = o.bytes === String ? $util.base64.encode(m.extendedStatic, 0, m.extendedStatic.length) : o.bytes === Array ? Array.prototype.slice.call(m.extendedStatic) : m.extendedStatic; + if (o.oneofs) + d._extendedStatic = "extendedStatic"; + } + return d; + }; + + ServerHello.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ServerHello.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HandshakeMessage.ServerHello"; + }; + + return ServerHello; + })(); + + return HandshakeMessage; + })(); + + proto.HistorySync = (function() { + + function HistorySync(p) { + this.conversations = []; + this.statusV3Messages = []; + this.pushnames = []; + this.recentStickers = []; + this.pastParticipants = []; + this.callLogRecords = []; + this.phoneNumberToLidMappings = []; + this.accounts = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySync.prototype.syncType = 0; + HistorySync.prototype.conversations = $util.emptyArray; + HistorySync.prototype.statusV3Messages = $util.emptyArray; + HistorySync.prototype.chunkOrder = null; + HistorySync.prototype.progress = null; + HistorySync.prototype.pushnames = $util.emptyArray; + HistorySync.prototype.globalSettings = null; + HistorySync.prototype.threadIdUserSecret = null; + HistorySync.prototype.threadDsTimeframeOffset = null; + HistorySync.prototype.recentStickers = $util.emptyArray; + HistorySync.prototype.pastParticipants = $util.emptyArray; + HistorySync.prototype.callLogRecords = $util.emptyArray; + HistorySync.prototype.aiWaitListState = null; + HistorySync.prototype.phoneNumberToLidMappings = $util.emptyArray; + HistorySync.prototype.companionMetaNonce = null; + HistorySync.prototype.shareableChatIdentifierEncryptionKey = null; + HistorySync.prototype.accounts = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_chunkOrder", { + get: $util.oneOfGetter($oneOfFields = ["chunkOrder"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_progress", { + get: $util.oneOfGetter($oneOfFields = ["progress"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_globalSettings", { + get: $util.oneOfGetter($oneOfFields = ["globalSettings"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_threadIdUserSecret", { + get: $util.oneOfGetter($oneOfFields = ["threadIdUserSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_threadDsTimeframeOffset", { + get: $util.oneOfGetter($oneOfFields = ["threadDsTimeframeOffset"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_aiWaitListState", { + get: $util.oneOfGetter($oneOfFields = ["aiWaitListState"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_companionMetaNonce", { + get: $util.oneOfGetter($oneOfFields = ["companionMetaNonce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySync.prototype, "_shareableChatIdentifierEncryptionKey", { + get: $util.oneOfGetter($oneOfFields = ["shareableChatIdentifierEncryptionKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySync.create = function create(properties) { + return new HistorySync(properties); + }; + + HistorySync.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.syncType != null && Object.hasOwnProperty.call(m, "syncType")) + w.uint32(8).int32(m.syncType); + if (m.conversations != null && m.conversations.length) { + for (var i = 0; i < m.conversations.length; ++i) + $root.proto.Conversation.encode(m.conversations[i], w.uint32(18).fork()).ldelim(); + } + if (m.statusV3Messages != null && m.statusV3Messages.length) { + for (var i = 0; i < m.statusV3Messages.length; ++i) + $root.proto.WebMessageInfo.encode(m.statusV3Messages[i], w.uint32(26).fork()).ldelim(); + } + if (m.chunkOrder != null && Object.hasOwnProperty.call(m, "chunkOrder")) + w.uint32(40).uint32(m.chunkOrder); + if (m.progress != null && Object.hasOwnProperty.call(m, "progress")) + w.uint32(48).uint32(m.progress); + if (m.pushnames != null && m.pushnames.length) { + for (var i = 0; i < m.pushnames.length; ++i) + $root.proto.Pushname.encode(m.pushnames[i], w.uint32(58).fork()).ldelim(); + } + if (m.globalSettings != null && Object.hasOwnProperty.call(m, "globalSettings")) + $root.proto.GlobalSettings.encode(m.globalSettings, w.uint32(66).fork()).ldelim(); + if (m.threadIdUserSecret != null && Object.hasOwnProperty.call(m, "threadIdUserSecret")) + w.uint32(74).bytes(m.threadIdUserSecret); + if (m.threadDsTimeframeOffset != null && Object.hasOwnProperty.call(m, "threadDsTimeframeOffset")) + w.uint32(80).uint32(m.threadDsTimeframeOffset); + if (m.recentStickers != null && m.recentStickers.length) { + for (var i = 0; i < m.recentStickers.length; ++i) + $root.proto.StickerMetadata.encode(m.recentStickers[i], w.uint32(90).fork()).ldelim(); + } + if (m.pastParticipants != null && m.pastParticipants.length) { + for (var i = 0; i < m.pastParticipants.length; ++i) + $root.proto.PastParticipants.encode(m.pastParticipants[i], w.uint32(98).fork()).ldelim(); + } + if (m.callLogRecords != null && m.callLogRecords.length) { + for (var i = 0; i < m.callLogRecords.length; ++i) + $root.proto.CallLogRecord.encode(m.callLogRecords[i], w.uint32(106).fork()).ldelim(); + } + if (m.aiWaitListState != null && Object.hasOwnProperty.call(m, "aiWaitListState")) + w.uint32(112).int32(m.aiWaitListState); + if (m.phoneNumberToLidMappings != null && m.phoneNumberToLidMappings.length) { + for (var i = 0; i < m.phoneNumberToLidMappings.length; ++i) + $root.proto.PhoneNumberToLIDMapping.encode(m.phoneNumberToLidMappings[i], w.uint32(122).fork()).ldelim(); + } + if (m.companionMetaNonce != null && Object.hasOwnProperty.call(m, "companionMetaNonce")) + w.uint32(130).string(m.companionMetaNonce); + if (m.shareableChatIdentifierEncryptionKey != null && Object.hasOwnProperty.call(m, "shareableChatIdentifierEncryptionKey")) + w.uint32(138).bytes(m.shareableChatIdentifierEncryptionKey); + if (m.accounts != null && m.accounts.length) { + for (var i = 0; i < m.accounts.length; ++i) + $root.proto.Account.encode(m.accounts[i], w.uint32(146).fork()).ldelim(); + } + return w; + }; + + HistorySync.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HistorySync(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.syncType = r.int32(); + break; + } + case 2: { + if (!(m.conversations && m.conversations.length)) + m.conversations = []; + m.conversations.push($root.proto.Conversation.decode(r, r.uint32())); + break; + } + case 3: { + if (!(m.statusV3Messages && m.statusV3Messages.length)) + m.statusV3Messages = []; + m.statusV3Messages.push($root.proto.WebMessageInfo.decode(r, r.uint32())); + break; + } + case 5: { + m.chunkOrder = r.uint32(); + break; + } + case 6: { + m.progress = r.uint32(); + break; + } + case 7: { + if (!(m.pushnames && m.pushnames.length)) + m.pushnames = []; + m.pushnames.push($root.proto.Pushname.decode(r, r.uint32())); + break; + } + case 8: { + m.globalSettings = $root.proto.GlobalSettings.decode(r, r.uint32()); + break; + } + case 9: { + m.threadIdUserSecret = r.bytes(); + break; + } + case 10: { + m.threadDsTimeframeOffset = r.uint32(); + break; + } + case 11: { + if (!(m.recentStickers && m.recentStickers.length)) + m.recentStickers = []; + m.recentStickers.push($root.proto.StickerMetadata.decode(r, r.uint32())); + break; + } + case 12: { + if (!(m.pastParticipants && m.pastParticipants.length)) + m.pastParticipants = []; + m.pastParticipants.push($root.proto.PastParticipants.decode(r, r.uint32())); + break; + } + case 13: { + if (!(m.callLogRecords && m.callLogRecords.length)) + m.callLogRecords = []; + m.callLogRecords.push($root.proto.CallLogRecord.decode(r, r.uint32())); + break; + } + case 14: { + m.aiWaitListState = r.int32(); + break; + } + case 15: { + if (!(m.phoneNumberToLidMappings && m.phoneNumberToLidMappings.length)) + m.phoneNumberToLidMappings = []; + m.phoneNumberToLidMappings.push($root.proto.PhoneNumberToLIDMapping.decode(r, r.uint32())); + break; + } + case 16: { + m.companionMetaNonce = r.string(); + break; + } + case 17: { + m.shareableChatIdentifierEncryptionKey = r.bytes(); + break; + } + case 18: { + if (!(m.accounts && m.accounts.length)) + m.accounts = []; + m.accounts.push($root.proto.Account.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySync.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HistorySync) + return d; + var m = new $root.proto.HistorySync(); + switch (d.syncType) { + default: + if (typeof d.syncType === "number") { + m.syncType = d.syncType; + break; + } + break; + case "INITIAL_BOOTSTRAP": + case 0: + m.syncType = 0; + break; + case "INITIAL_STATUS_V3": + case 1: + m.syncType = 1; + break; + case "FULL": + case 2: + m.syncType = 2; + break; + case "RECENT": + case 3: + m.syncType = 3; + break; + case "PUSH_NAME": + case 4: + m.syncType = 4; + break; + case "NON_BLOCKING_DATA": + case 5: + m.syncType = 5; + break; + case "ON_DEMAND": + case 6: + m.syncType = 6; + break; + } + if (d.conversations) { + if (!Array.isArray(d.conversations)) + throw TypeError(".proto.HistorySync.conversations: array expected"); + m.conversations = []; + for (var i = 0; i < d.conversations.length; ++i) { + if (typeof d.conversations[i] !== "object") + throw TypeError(".proto.HistorySync.conversations: object expected"); + m.conversations[i] = $root.proto.Conversation.fromObject(d.conversations[i]); + } + } + if (d.statusV3Messages) { + if (!Array.isArray(d.statusV3Messages)) + throw TypeError(".proto.HistorySync.statusV3Messages: array expected"); + m.statusV3Messages = []; + for (var i = 0; i < d.statusV3Messages.length; ++i) { + if (typeof d.statusV3Messages[i] !== "object") + throw TypeError(".proto.HistorySync.statusV3Messages: object expected"); + m.statusV3Messages[i] = $root.proto.WebMessageInfo.fromObject(d.statusV3Messages[i]); + } + } + if (d.chunkOrder != null) { + m.chunkOrder = d.chunkOrder >>> 0; + } + if (d.progress != null) { + m.progress = d.progress >>> 0; + } + if (d.pushnames) { + if (!Array.isArray(d.pushnames)) + throw TypeError(".proto.HistorySync.pushnames: array expected"); + m.pushnames = []; + for (var i = 0; i < d.pushnames.length; ++i) { + if (typeof d.pushnames[i] !== "object") + throw TypeError(".proto.HistorySync.pushnames: object expected"); + m.pushnames[i] = $root.proto.Pushname.fromObject(d.pushnames[i]); + } + } + if (d.globalSettings != null) { + if (typeof d.globalSettings !== "object") + throw TypeError(".proto.HistorySync.globalSettings: object expected"); + m.globalSettings = $root.proto.GlobalSettings.fromObject(d.globalSettings); + } + if (d.threadIdUserSecret != null) { + if (typeof d.threadIdUserSecret === "string") + $util.base64.decode(d.threadIdUserSecret, m.threadIdUserSecret = $util.newBuffer($util.base64.length(d.threadIdUserSecret)), 0); + else if (d.threadIdUserSecret.length >= 0) + m.threadIdUserSecret = d.threadIdUserSecret; + } + if (d.threadDsTimeframeOffset != null) { + m.threadDsTimeframeOffset = d.threadDsTimeframeOffset >>> 0; + } + if (d.recentStickers) { + if (!Array.isArray(d.recentStickers)) + throw TypeError(".proto.HistorySync.recentStickers: array expected"); + m.recentStickers = []; + for (var i = 0; i < d.recentStickers.length; ++i) { + if (typeof d.recentStickers[i] !== "object") + throw TypeError(".proto.HistorySync.recentStickers: object expected"); + m.recentStickers[i] = $root.proto.StickerMetadata.fromObject(d.recentStickers[i]); + } + } + if (d.pastParticipants) { + if (!Array.isArray(d.pastParticipants)) + throw TypeError(".proto.HistorySync.pastParticipants: array expected"); + m.pastParticipants = []; + for (var i = 0; i < d.pastParticipants.length; ++i) { + if (typeof d.pastParticipants[i] !== "object") + throw TypeError(".proto.HistorySync.pastParticipants: object expected"); + m.pastParticipants[i] = $root.proto.PastParticipants.fromObject(d.pastParticipants[i]); + } + } + if (d.callLogRecords) { + if (!Array.isArray(d.callLogRecords)) + throw TypeError(".proto.HistorySync.callLogRecords: array expected"); + m.callLogRecords = []; + for (var i = 0; i < d.callLogRecords.length; ++i) { + if (typeof d.callLogRecords[i] !== "object") + throw TypeError(".proto.HistorySync.callLogRecords: object expected"); + m.callLogRecords[i] = $root.proto.CallLogRecord.fromObject(d.callLogRecords[i]); + } + } + switch (d.aiWaitListState) { + default: + if (typeof d.aiWaitListState === "number") { + m.aiWaitListState = d.aiWaitListState; + break; + } + break; + case "IN_WAITLIST": + case 0: + m.aiWaitListState = 0; + break; + case "AI_AVAILABLE": + case 1: + m.aiWaitListState = 1; + break; + } + if (d.phoneNumberToLidMappings) { + if (!Array.isArray(d.phoneNumberToLidMappings)) + throw TypeError(".proto.HistorySync.phoneNumberToLidMappings: array expected"); + m.phoneNumberToLidMappings = []; + for (var i = 0; i < d.phoneNumberToLidMappings.length; ++i) { + if (typeof d.phoneNumberToLidMappings[i] !== "object") + throw TypeError(".proto.HistorySync.phoneNumberToLidMappings: object expected"); + m.phoneNumberToLidMappings[i] = $root.proto.PhoneNumberToLIDMapping.fromObject(d.phoneNumberToLidMappings[i]); + } + } + if (d.companionMetaNonce != null) { + m.companionMetaNonce = String(d.companionMetaNonce); + } + if (d.shareableChatIdentifierEncryptionKey != null) { + if (typeof d.shareableChatIdentifierEncryptionKey === "string") + $util.base64.decode(d.shareableChatIdentifierEncryptionKey, m.shareableChatIdentifierEncryptionKey = $util.newBuffer($util.base64.length(d.shareableChatIdentifierEncryptionKey)), 0); + else if (d.shareableChatIdentifierEncryptionKey.length >= 0) + m.shareableChatIdentifierEncryptionKey = d.shareableChatIdentifierEncryptionKey; + } + if (d.accounts) { + if (!Array.isArray(d.accounts)) + throw TypeError(".proto.HistorySync.accounts: array expected"); + m.accounts = []; + for (var i = 0; i < d.accounts.length; ++i) { + if (typeof d.accounts[i] !== "object") + throw TypeError(".proto.HistorySync.accounts: object expected"); + m.accounts[i] = $root.proto.Account.fromObject(d.accounts[i]); + } + } + return m; + }; + + HistorySync.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.conversations = []; + d.statusV3Messages = []; + d.pushnames = []; + d.recentStickers = []; + d.pastParticipants = []; + d.callLogRecords = []; + d.phoneNumberToLidMappings = []; + d.accounts = []; + } + if (o.defaults) { + d.syncType = o.enums === String ? "INITIAL_BOOTSTRAP" : 0; + } + if (m.syncType != null && m.hasOwnProperty("syncType")) { + d.syncType = o.enums === String ? $root.proto.HistorySync.HistorySyncType[m.syncType] === undefined ? m.syncType : $root.proto.HistorySync.HistorySyncType[m.syncType] : m.syncType; + } + if (m.conversations && m.conversations.length) { + d.conversations = []; + for (var j = 0; j < m.conversations.length; ++j) { + d.conversations[j] = $root.proto.Conversation.toObject(m.conversations[j], o); + } + } + if (m.statusV3Messages && m.statusV3Messages.length) { + d.statusV3Messages = []; + for (var j = 0; j < m.statusV3Messages.length; ++j) { + d.statusV3Messages[j] = $root.proto.WebMessageInfo.toObject(m.statusV3Messages[j], o); + } + } + if (m.chunkOrder != null && m.hasOwnProperty("chunkOrder")) { + d.chunkOrder = m.chunkOrder; + if (o.oneofs) + d._chunkOrder = "chunkOrder"; + } + if (m.progress != null && m.hasOwnProperty("progress")) { + d.progress = m.progress; + if (o.oneofs) + d._progress = "progress"; + } + if (m.pushnames && m.pushnames.length) { + d.pushnames = []; + for (var j = 0; j < m.pushnames.length; ++j) { + d.pushnames[j] = $root.proto.Pushname.toObject(m.pushnames[j], o); + } + } + if (m.globalSettings != null && m.hasOwnProperty("globalSettings")) { + d.globalSettings = $root.proto.GlobalSettings.toObject(m.globalSettings, o); + if (o.oneofs) + d._globalSettings = "globalSettings"; + } + if (m.threadIdUserSecret != null && m.hasOwnProperty("threadIdUserSecret")) { + d.threadIdUserSecret = o.bytes === String ? $util.base64.encode(m.threadIdUserSecret, 0, m.threadIdUserSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.threadIdUserSecret) : m.threadIdUserSecret; + if (o.oneofs) + d._threadIdUserSecret = "threadIdUserSecret"; + } + if (m.threadDsTimeframeOffset != null && m.hasOwnProperty("threadDsTimeframeOffset")) { + d.threadDsTimeframeOffset = m.threadDsTimeframeOffset; + if (o.oneofs) + d._threadDsTimeframeOffset = "threadDsTimeframeOffset"; + } + if (m.recentStickers && m.recentStickers.length) { + d.recentStickers = []; + for (var j = 0; j < m.recentStickers.length; ++j) { + d.recentStickers[j] = $root.proto.StickerMetadata.toObject(m.recentStickers[j], o); + } + } + if (m.pastParticipants && m.pastParticipants.length) { + d.pastParticipants = []; + for (var j = 0; j < m.pastParticipants.length; ++j) { + d.pastParticipants[j] = $root.proto.PastParticipants.toObject(m.pastParticipants[j], o); + } + } + if (m.callLogRecords && m.callLogRecords.length) { + d.callLogRecords = []; + for (var j = 0; j < m.callLogRecords.length; ++j) { + d.callLogRecords[j] = $root.proto.CallLogRecord.toObject(m.callLogRecords[j], o); + } + } + if (m.aiWaitListState != null && m.hasOwnProperty("aiWaitListState")) { + d.aiWaitListState = o.enums === String ? $root.proto.HistorySync.BotAIWaitListState[m.aiWaitListState] === undefined ? m.aiWaitListState : $root.proto.HistorySync.BotAIWaitListState[m.aiWaitListState] : m.aiWaitListState; + if (o.oneofs) + d._aiWaitListState = "aiWaitListState"; + } + if (m.phoneNumberToLidMappings && m.phoneNumberToLidMappings.length) { + d.phoneNumberToLidMappings = []; + for (var j = 0; j < m.phoneNumberToLidMappings.length; ++j) { + d.phoneNumberToLidMappings[j] = $root.proto.PhoneNumberToLIDMapping.toObject(m.phoneNumberToLidMappings[j], o); + } + } + if (m.companionMetaNonce != null && m.hasOwnProperty("companionMetaNonce")) { + d.companionMetaNonce = m.companionMetaNonce; + if (o.oneofs) + d._companionMetaNonce = "companionMetaNonce"; + } + if (m.shareableChatIdentifierEncryptionKey != null && m.hasOwnProperty("shareableChatIdentifierEncryptionKey")) { + d.shareableChatIdentifierEncryptionKey = o.bytes === String ? $util.base64.encode(m.shareableChatIdentifierEncryptionKey, 0, m.shareableChatIdentifierEncryptionKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.shareableChatIdentifierEncryptionKey) : m.shareableChatIdentifierEncryptionKey; + if (o.oneofs) + d._shareableChatIdentifierEncryptionKey = "shareableChatIdentifierEncryptionKey"; + } + if (m.accounts && m.accounts.length) { + d.accounts = []; + for (var j = 0; j < m.accounts.length; ++j) { + d.accounts[j] = $root.proto.Account.toObject(m.accounts[j], o); + } + } + return d; + }; + + HistorySync.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySync.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HistorySync"; + }; + + HistorySync.BotAIWaitListState = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "IN_WAITLIST"] = 0; + values[valuesById[1] = "AI_AVAILABLE"] = 1; + return values; + })(); + + HistorySync.HistorySyncType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "INITIAL_BOOTSTRAP"] = 0; + values[valuesById[1] = "INITIAL_STATUS_V3"] = 1; + values[valuesById[2] = "FULL"] = 2; + values[valuesById[3] = "RECENT"] = 3; + values[valuesById[4] = "PUSH_NAME"] = 4; + values[valuesById[5] = "NON_BLOCKING_DATA"] = 5; + values[valuesById[6] = "ON_DEMAND"] = 6; + return values; + })(); + + return HistorySync; + })(); + + proto.HistorySyncMsg = (function() { + + function HistorySyncMsg(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySyncMsg.prototype.message = null; + HistorySyncMsg.prototype.msgOrderId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncMsg.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncMsg.prototype, "_msgOrderId", { + get: $util.oneOfGetter($oneOfFields = ["msgOrderId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySyncMsg.create = function create(properties) { + return new HistorySyncMsg(properties); + }; + + HistorySyncMsg.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.WebMessageInfo.encode(m.message, w.uint32(10).fork()).ldelim(); + if (m.msgOrderId != null && Object.hasOwnProperty.call(m, "msgOrderId")) + w.uint32(16).uint64(m.msgOrderId); + return w; + }; + + HistorySyncMsg.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HistorySyncMsg(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.message = $root.proto.WebMessageInfo.decode(r, r.uint32()); + break; + } + case 2: { + m.msgOrderId = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySyncMsg.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HistorySyncMsg) + return d; + var m = new $root.proto.HistorySyncMsg(); + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.HistorySyncMsg.message: object expected"); + m.message = $root.proto.WebMessageInfo.fromObject(d.message); + } + if (d.msgOrderId != null) { + if ($util.Long) + (m.msgOrderId = $util.Long.fromValue(d.msgOrderId)).unsigned = true; + else if (typeof d.msgOrderId === "string") + m.msgOrderId = parseInt(d.msgOrderId, 10); + else if (typeof d.msgOrderId === "number") + m.msgOrderId = d.msgOrderId; + else if (typeof d.msgOrderId === "object") + m.msgOrderId = new $util.LongBits(d.msgOrderId.low >>> 0, d.msgOrderId.high >>> 0).toNumber(true); + } + return m; + }; + + HistorySyncMsg.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.WebMessageInfo.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + if (m.msgOrderId != null && m.hasOwnProperty("msgOrderId")) { + if (typeof m.msgOrderId === "number") + d.msgOrderId = o.longs === String ? String(m.msgOrderId) : m.msgOrderId; + else + d.msgOrderId = o.longs === String ? longToString(m.msgOrderId, true) : o.longs === Number ? longToNumber(m.msgOrderId, true) : m.msgOrderId; + if (o.oneofs) + d._msgOrderId = "msgOrderId"; + } + return d; + }; + + HistorySyncMsg.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySyncMsg.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HistorySyncMsg"; + }; + + return HistorySyncMsg; + })(); + + proto.HydratedTemplateButton = (function() { + + function HydratedTemplateButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HydratedTemplateButton.prototype.index = null; + HydratedTemplateButton.prototype.quickReplyButton = null; + HydratedTemplateButton.prototype.urlButton = null; + HydratedTemplateButton.prototype.callButton = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedTemplateButton.prototype, "_index", { + get: $util.oneOfGetter($oneOfFields = ["index"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(HydratedTemplateButton.prototype, "hydratedButton", { + get: $util.oneOfGetter($oneOfFields = ["quickReplyButton", "urlButton", "callButton"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HydratedTemplateButton.create = function create(properties) { + return new HydratedTemplateButton(properties); + }; + + HydratedTemplateButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.quickReplyButton != null && Object.hasOwnProperty.call(m, "quickReplyButton")) + $root.proto.HydratedTemplateButton.HydratedQuickReplyButton.encode(m.quickReplyButton, w.uint32(10).fork()).ldelim(); + if (m.urlButton != null && Object.hasOwnProperty.call(m, "urlButton")) + $root.proto.HydratedTemplateButton.HydratedURLButton.encode(m.urlButton, w.uint32(18).fork()).ldelim(); + if (m.callButton != null && Object.hasOwnProperty.call(m, "callButton")) + $root.proto.HydratedTemplateButton.HydratedCallButton.encode(m.callButton, w.uint32(26).fork()).ldelim(); + if (m.index != null && Object.hasOwnProperty.call(m, "index")) + w.uint32(32).uint32(m.index); + return w; + }; + + HydratedTemplateButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HydratedTemplateButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 4: { + m.index = r.uint32(); + break; + } + case 1: { + m.quickReplyButton = $root.proto.HydratedTemplateButton.HydratedQuickReplyButton.decode(r, r.uint32()); + break; + } + case 2: { + m.urlButton = $root.proto.HydratedTemplateButton.HydratedURLButton.decode(r, r.uint32()); + break; + } + case 3: { + m.callButton = $root.proto.HydratedTemplateButton.HydratedCallButton.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HydratedTemplateButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HydratedTemplateButton) + return d; + var m = new $root.proto.HydratedTemplateButton(); + if (d.index != null) { + m.index = d.index >>> 0; + } + if (d.quickReplyButton != null) { + if (typeof d.quickReplyButton !== "object") + throw TypeError(".proto.HydratedTemplateButton.quickReplyButton: object expected"); + m.quickReplyButton = $root.proto.HydratedTemplateButton.HydratedQuickReplyButton.fromObject(d.quickReplyButton); + } + if (d.urlButton != null) { + if (typeof d.urlButton !== "object") + throw TypeError(".proto.HydratedTemplateButton.urlButton: object expected"); + m.urlButton = $root.proto.HydratedTemplateButton.HydratedURLButton.fromObject(d.urlButton); + } + if (d.callButton != null) { + if (typeof d.callButton !== "object") + throw TypeError(".proto.HydratedTemplateButton.callButton: object expected"); + m.callButton = $root.proto.HydratedTemplateButton.HydratedCallButton.fromObject(d.callButton); + } + return m; + }; + + HydratedTemplateButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.quickReplyButton != null && m.hasOwnProperty("quickReplyButton")) { + d.quickReplyButton = $root.proto.HydratedTemplateButton.HydratedQuickReplyButton.toObject(m.quickReplyButton, o); + if (o.oneofs) + d.hydratedButton = "quickReplyButton"; + } + if (m.urlButton != null && m.hasOwnProperty("urlButton")) { + d.urlButton = $root.proto.HydratedTemplateButton.HydratedURLButton.toObject(m.urlButton, o); + if (o.oneofs) + d.hydratedButton = "urlButton"; + } + if (m.callButton != null && m.hasOwnProperty("callButton")) { + d.callButton = $root.proto.HydratedTemplateButton.HydratedCallButton.toObject(m.callButton, o); + if (o.oneofs) + d.hydratedButton = "callButton"; + } + if (m.index != null && m.hasOwnProperty("index")) { + d.index = m.index; + if (o.oneofs) + d._index = "index"; + } + return d; + }; + + HydratedTemplateButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HydratedTemplateButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HydratedTemplateButton"; + }; + + HydratedTemplateButton.HydratedCallButton = (function() { + + function HydratedCallButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HydratedCallButton.prototype.displayText = null; + HydratedCallButton.prototype.phoneNumber = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedCallButton.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedCallButton.prototype, "_phoneNumber", { + get: $util.oneOfGetter($oneOfFields = ["phoneNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HydratedCallButton.create = function create(properties) { + return new HydratedCallButton(properties); + }; + + HydratedCallButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + w.uint32(10).string(m.displayText); + if (m.phoneNumber != null && Object.hasOwnProperty.call(m, "phoneNumber")) + w.uint32(18).string(m.phoneNumber); + return w; + }; + + HydratedCallButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HydratedTemplateButton.HydratedCallButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = r.string(); + break; + } + case 2: { + m.phoneNumber = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HydratedCallButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HydratedTemplateButton.HydratedCallButton) + return d; + var m = new $root.proto.HydratedTemplateButton.HydratedCallButton(); + if (d.displayText != null) { + m.displayText = String(d.displayText); + } + if (d.phoneNumber != null) { + m.phoneNumber = String(d.phoneNumber); + } + return m; + }; + + HydratedCallButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = m.displayText; + if (o.oneofs) + d._displayText = "displayText"; + } + if (m.phoneNumber != null && m.hasOwnProperty("phoneNumber")) { + d.phoneNumber = m.phoneNumber; + if (o.oneofs) + d._phoneNumber = "phoneNumber"; + } + return d; + }; + + HydratedCallButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HydratedCallButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HydratedTemplateButton.HydratedCallButton"; + }; + + return HydratedCallButton; + })(); + + HydratedTemplateButton.HydratedQuickReplyButton = (function() { + + function HydratedQuickReplyButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HydratedQuickReplyButton.prototype.displayText = null; + HydratedQuickReplyButton.prototype.id = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedQuickReplyButton.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedQuickReplyButton.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HydratedQuickReplyButton.create = function create(properties) { + return new HydratedQuickReplyButton(properties); + }; + + HydratedQuickReplyButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + w.uint32(10).string(m.displayText); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(18).string(m.id); + return w; + }; + + HydratedQuickReplyButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HydratedTemplateButton.HydratedQuickReplyButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = r.string(); + break; + } + case 2: { + m.id = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HydratedQuickReplyButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HydratedTemplateButton.HydratedQuickReplyButton) + return d; + var m = new $root.proto.HydratedTemplateButton.HydratedQuickReplyButton(); + if (d.displayText != null) { + m.displayText = String(d.displayText); + } + if (d.id != null) { + m.id = String(d.id); + } + return m; + }; + + HydratedQuickReplyButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = m.displayText; + if (o.oneofs) + d._displayText = "displayText"; + } + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + return d; + }; + + HydratedQuickReplyButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HydratedQuickReplyButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HydratedTemplateButton.HydratedQuickReplyButton"; + }; + + return HydratedQuickReplyButton; + })(); + + HydratedTemplateButton.HydratedURLButton = (function() { + + function HydratedURLButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HydratedURLButton.prototype.displayText = null; + HydratedURLButton.prototype.url = null; + HydratedURLButton.prototype.consentedUsersUrl = null; + HydratedURLButton.prototype.webviewPresentation = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedURLButton.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedURLButton.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedURLButton.prototype, "_consentedUsersUrl", { + get: $util.oneOfGetter($oneOfFields = ["consentedUsersUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedURLButton.prototype, "_webviewPresentation", { + get: $util.oneOfGetter($oneOfFields = ["webviewPresentation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HydratedURLButton.create = function create(properties) { + return new HydratedURLButton(properties); + }; + + HydratedURLButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + w.uint32(10).string(m.displayText); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(18).string(m.url); + if (m.consentedUsersUrl != null && Object.hasOwnProperty.call(m, "consentedUsersUrl")) + w.uint32(26).string(m.consentedUsersUrl); + if (m.webviewPresentation != null && Object.hasOwnProperty.call(m, "webviewPresentation")) + w.uint32(32).int32(m.webviewPresentation); + return w; + }; + + HydratedURLButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.HydratedTemplateButton.HydratedURLButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = r.string(); + break; + } + case 2: { + m.url = r.string(); + break; + } + case 3: { + m.consentedUsersUrl = r.string(); + break; + } + case 4: { + m.webviewPresentation = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HydratedURLButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.HydratedTemplateButton.HydratedURLButton) + return d; + var m = new $root.proto.HydratedTemplateButton.HydratedURLButton(); + if (d.displayText != null) { + m.displayText = String(d.displayText); + } + if (d.url != null) { + m.url = String(d.url); + } + if (d.consentedUsersUrl != null) { + m.consentedUsersUrl = String(d.consentedUsersUrl); + } + switch (d.webviewPresentation) { + default: + if (typeof d.webviewPresentation === "number") { + m.webviewPresentation = d.webviewPresentation; + break; + } + break; + case "FULL": + case 1: + m.webviewPresentation = 1; + break; + case "TALL": + case 2: + m.webviewPresentation = 2; + break; + case "COMPACT": + case 3: + m.webviewPresentation = 3; + break; + } + return m; + }; + + HydratedURLButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = m.displayText; + if (o.oneofs) + d._displayText = "displayText"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.consentedUsersUrl != null && m.hasOwnProperty("consentedUsersUrl")) { + d.consentedUsersUrl = m.consentedUsersUrl; + if (o.oneofs) + d._consentedUsersUrl = "consentedUsersUrl"; + } + if (m.webviewPresentation != null && m.hasOwnProperty("webviewPresentation")) { + d.webviewPresentation = o.enums === String ? $root.proto.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType[m.webviewPresentation] === undefined ? m.webviewPresentation : $root.proto.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType[m.webviewPresentation] : m.webviewPresentation; + if (o.oneofs) + d._webviewPresentation = "webviewPresentation"; + } + return d; + }; + + HydratedURLButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HydratedURLButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.HydratedTemplateButton.HydratedURLButton"; + }; + + HydratedURLButton.WebviewPresentationType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "FULL"] = 1; + values[valuesById[2] = "TALL"] = 2; + values[valuesById[3] = "COMPACT"] = 3; + return values; + })(); + + return HydratedURLButton; + })(); + + return HydratedTemplateButton; + })(); + + proto.IdentityKeyPairStructure = (function() { + + function IdentityKeyPairStructure(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + IdentityKeyPairStructure.prototype.publicKey = null; + IdentityKeyPairStructure.prototype.privateKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(IdentityKeyPairStructure.prototype, "_publicKey", { + get: $util.oneOfGetter($oneOfFields = ["publicKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(IdentityKeyPairStructure.prototype, "_privateKey", { + get: $util.oneOfGetter($oneOfFields = ["privateKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + IdentityKeyPairStructure.create = function create(properties) { + return new IdentityKeyPairStructure(properties); + }; + + IdentityKeyPairStructure.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.publicKey != null && Object.hasOwnProperty.call(m, "publicKey")) + w.uint32(10).bytes(m.publicKey); + if (m.privateKey != null && Object.hasOwnProperty.call(m, "privateKey")) + w.uint32(18).bytes(m.privateKey); + return w; + }; + + IdentityKeyPairStructure.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.IdentityKeyPairStructure(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.publicKey = r.bytes(); + break; + } + case 2: { + m.privateKey = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + IdentityKeyPairStructure.fromObject = function fromObject(d) { + if (d instanceof $root.proto.IdentityKeyPairStructure) + return d; + var m = new $root.proto.IdentityKeyPairStructure(); + if (d.publicKey != null) { + if (typeof d.publicKey === "string") + $util.base64.decode(d.publicKey, m.publicKey = $util.newBuffer($util.base64.length(d.publicKey)), 0); + else if (d.publicKey.length >= 0) + m.publicKey = d.publicKey; + } + if (d.privateKey != null) { + if (typeof d.privateKey === "string") + $util.base64.decode(d.privateKey, m.privateKey = $util.newBuffer($util.base64.length(d.privateKey)), 0); + else if (d.privateKey.length >= 0) + m.privateKey = d.privateKey; + } + return m; + }; + + IdentityKeyPairStructure.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.publicKey != null && m.hasOwnProperty("publicKey")) { + d.publicKey = o.bytes === String ? $util.base64.encode(m.publicKey, 0, m.publicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.publicKey) : m.publicKey; + if (o.oneofs) + d._publicKey = "publicKey"; + } + if (m.privateKey != null && m.hasOwnProperty("privateKey")) { + d.privateKey = o.bytes === String ? $util.base64.encode(m.privateKey, 0, m.privateKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.privateKey) : m.privateKey; + if (o.oneofs) + d._privateKey = "privateKey"; + } + return d; + }; + + IdentityKeyPairStructure.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + IdentityKeyPairStructure.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.IdentityKeyPairStructure"; + }; + + return IdentityKeyPairStructure; + })(); + + proto.InThreadSurveyMetadata = (function() { + + function InThreadSurveyMetadata(p) { + this.questions = []; + this.privacyStatementParts = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InThreadSurveyMetadata.prototype.tessaSessionId = null; + InThreadSurveyMetadata.prototype.simonSessionId = null; + InThreadSurveyMetadata.prototype.simonSurveyId = null; + InThreadSurveyMetadata.prototype.tessaRootId = null; + InThreadSurveyMetadata.prototype.requestId = null; + InThreadSurveyMetadata.prototype.tessaEvent = null; + InThreadSurveyMetadata.prototype.invitationHeaderText = null; + InThreadSurveyMetadata.prototype.invitationBodyText = null; + InThreadSurveyMetadata.prototype.invitationCtaText = null; + InThreadSurveyMetadata.prototype.invitationCtaUrl = null; + InThreadSurveyMetadata.prototype.surveyTitle = null; + InThreadSurveyMetadata.prototype.questions = $util.emptyArray; + InThreadSurveyMetadata.prototype.surveyContinueButtonText = null; + InThreadSurveyMetadata.prototype.surveySubmitButtonText = null; + InThreadSurveyMetadata.prototype.privacyStatementFull = null; + InThreadSurveyMetadata.prototype.privacyStatementParts = $util.emptyArray; + InThreadSurveyMetadata.prototype.feedbackToastText = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_tessaSessionId", { + get: $util.oneOfGetter($oneOfFields = ["tessaSessionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_simonSessionId", { + get: $util.oneOfGetter($oneOfFields = ["simonSessionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_simonSurveyId", { + get: $util.oneOfGetter($oneOfFields = ["simonSurveyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_tessaRootId", { + get: $util.oneOfGetter($oneOfFields = ["tessaRootId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_requestId", { + get: $util.oneOfGetter($oneOfFields = ["requestId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_tessaEvent", { + get: $util.oneOfGetter($oneOfFields = ["tessaEvent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_invitationHeaderText", { + get: $util.oneOfGetter($oneOfFields = ["invitationHeaderText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_invitationBodyText", { + get: $util.oneOfGetter($oneOfFields = ["invitationBodyText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_invitationCtaText", { + get: $util.oneOfGetter($oneOfFields = ["invitationCtaText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_invitationCtaUrl", { + get: $util.oneOfGetter($oneOfFields = ["invitationCtaUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_surveyTitle", { + get: $util.oneOfGetter($oneOfFields = ["surveyTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_surveyContinueButtonText", { + get: $util.oneOfGetter($oneOfFields = ["surveyContinueButtonText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_surveySubmitButtonText", { + get: $util.oneOfGetter($oneOfFields = ["surveySubmitButtonText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_privacyStatementFull", { + get: $util.oneOfGetter($oneOfFields = ["privacyStatementFull"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyMetadata.prototype, "_feedbackToastText", { + get: $util.oneOfGetter($oneOfFields = ["feedbackToastText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InThreadSurveyMetadata.create = function create(properties) { + return new InThreadSurveyMetadata(properties); + }; + + InThreadSurveyMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.tessaSessionId != null && Object.hasOwnProperty.call(m, "tessaSessionId")) + w.uint32(10).string(m.tessaSessionId); + if (m.simonSessionId != null && Object.hasOwnProperty.call(m, "simonSessionId")) + w.uint32(18).string(m.simonSessionId); + if (m.simonSurveyId != null && Object.hasOwnProperty.call(m, "simonSurveyId")) + w.uint32(26).string(m.simonSurveyId); + if (m.tessaRootId != null && Object.hasOwnProperty.call(m, "tessaRootId")) + w.uint32(34).string(m.tessaRootId); + if (m.requestId != null && Object.hasOwnProperty.call(m, "requestId")) + w.uint32(42).string(m.requestId); + if (m.tessaEvent != null && Object.hasOwnProperty.call(m, "tessaEvent")) + w.uint32(50).string(m.tessaEvent); + if (m.invitationHeaderText != null && Object.hasOwnProperty.call(m, "invitationHeaderText")) + w.uint32(58).string(m.invitationHeaderText); + if (m.invitationBodyText != null && Object.hasOwnProperty.call(m, "invitationBodyText")) + w.uint32(66).string(m.invitationBodyText); + if (m.invitationCtaText != null && Object.hasOwnProperty.call(m, "invitationCtaText")) + w.uint32(74).string(m.invitationCtaText); + if (m.invitationCtaUrl != null && Object.hasOwnProperty.call(m, "invitationCtaUrl")) + w.uint32(82).string(m.invitationCtaUrl); + if (m.surveyTitle != null && Object.hasOwnProperty.call(m, "surveyTitle")) + w.uint32(90).string(m.surveyTitle); + if (m.questions != null && m.questions.length) { + for (var i = 0; i < m.questions.length; ++i) + $root.proto.InThreadSurveyMetadata.InThreadSurveyQuestion.encode(m.questions[i], w.uint32(98).fork()).ldelim(); + } + if (m.surveyContinueButtonText != null && Object.hasOwnProperty.call(m, "surveyContinueButtonText")) + w.uint32(106).string(m.surveyContinueButtonText); + if (m.surveySubmitButtonText != null && Object.hasOwnProperty.call(m, "surveySubmitButtonText")) + w.uint32(114).string(m.surveySubmitButtonText); + if (m.privacyStatementFull != null && Object.hasOwnProperty.call(m, "privacyStatementFull")) + w.uint32(122).string(m.privacyStatementFull); + if (m.privacyStatementParts != null && m.privacyStatementParts.length) { + for (var i = 0; i < m.privacyStatementParts.length; ++i) + $root.proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart.encode(m.privacyStatementParts[i], w.uint32(130).fork()).ldelim(); + } + if (m.feedbackToastText != null && Object.hasOwnProperty.call(m, "feedbackToastText")) + w.uint32(138).string(m.feedbackToastText); + return w; + }; + + InThreadSurveyMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.InThreadSurveyMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.tessaSessionId = r.string(); + break; + } + case 2: { + m.simonSessionId = r.string(); + break; + } + case 3: { + m.simonSurveyId = r.string(); + break; + } + case 4: { + m.tessaRootId = r.string(); + break; + } + case 5: { + m.requestId = r.string(); + break; + } + case 6: { + m.tessaEvent = r.string(); + break; + } + case 7: { + m.invitationHeaderText = r.string(); + break; + } + case 8: { + m.invitationBodyText = r.string(); + break; + } + case 9: { + m.invitationCtaText = r.string(); + break; + } + case 10: { + m.invitationCtaUrl = r.string(); + break; + } + case 11: { + m.surveyTitle = r.string(); + break; + } + case 12: { + if (!(m.questions && m.questions.length)) + m.questions = []; + m.questions.push($root.proto.InThreadSurveyMetadata.InThreadSurveyQuestion.decode(r, r.uint32())); + break; + } + case 13: { + m.surveyContinueButtonText = r.string(); + break; + } + case 14: { + m.surveySubmitButtonText = r.string(); + break; + } + case 15: { + m.privacyStatementFull = r.string(); + break; + } + case 16: { + if (!(m.privacyStatementParts && m.privacyStatementParts.length)) + m.privacyStatementParts = []; + m.privacyStatementParts.push($root.proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart.decode(r, r.uint32())); + break; + } + case 17: { + m.feedbackToastText = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InThreadSurveyMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.InThreadSurveyMetadata) + return d; + var m = new $root.proto.InThreadSurveyMetadata(); + if (d.tessaSessionId != null) { + m.tessaSessionId = String(d.tessaSessionId); + } + if (d.simonSessionId != null) { + m.simonSessionId = String(d.simonSessionId); + } + if (d.simonSurveyId != null) { + m.simonSurveyId = String(d.simonSurveyId); + } + if (d.tessaRootId != null) { + m.tessaRootId = String(d.tessaRootId); + } + if (d.requestId != null) { + m.requestId = String(d.requestId); + } + if (d.tessaEvent != null) { + m.tessaEvent = String(d.tessaEvent); + } + if (d.invitationHeaderText != null) { + m.invitationHeaderText = String(d.invitationHeaderText); + } + if (d.invitationBodyText != null) { + m.invitationBodyText = String(d.invitationBodyText); + } + if (d.invitationCtaText != null) { + m.invitationCtaText = String(d.invitationCtaText); + } + if (d.invitationCtaUrl != null) { + m.invitationCtaUrl = String(d.invitationCtaUrl); + } + if (d.surveyTitle != null) { + m.surveyTitle = String(d.surveyTitle); + } + if (d.questions) { + if (!Array.isArray(d.questions)) + throw TypeError(".proto.InThreadSurveyMetadata.questions: array expected"); + m.questions = []; + for (var i = 0; i < d.questions.length; ++i) { + if (typeof d.questions[i] !== "object") + throw TypeError(".proto.InThreadSurveyMetadata.questions: object expected"); + m.questions[i] = $root.proto.InThreadSurveyMetadata.InThreadSurveyQuestion.fromObject(d.questions[i]); + } + } + if (d.surveyContinueButtonText != null) { + m.surveyContinueButtonText = String(d.surveyContinueButtonText); + } + if (d.surveySubmitButtonText != null) { + m.surveySubmitButtonText = String(d.surveySubmitButtonText); + } + if (d.privacyStatementFull != null) { + m.privacyStatementFull = String(d.privacyStatementFull); + } + if (d.privacyStatementParts) { + if (!Array.isArray(d.privacyStatementParts)) + throw TypeError(".proto.InThreadSurveyMetadata.privacyStatementParts: array expected"); + m.privacyStatementParts = []; + for (var i = 0; i < d.privacyStatementParts.length; ++i) { + if (typeof d.privacyStatementParts[i] !== "object") + throw TypeError(".proto.InThreadSurveyMetadata.privacyStatementParts: object expected"); + m.privacyStatementParts[i] = $root.proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart.fromObject(d.privacyStatementParts[i]); + } + } + if (d.feedbackToastText != null) { + m.feedbackToastText = String(d.feedbackToastText); + } + return m; + }; + + InThreadSurveyMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.questions = []; + d.privacyStatementParts = []; + } + if (m.tessaSessionId != null && m.hasOwnProperty("tessaSessionId")) { + d.tessaSessionId = m.tessaSessionId; + if (o.oneofs) + d._tessaSessionId = "tessaSessionId"; + } + if (m.simonSessionId != null && m.hasOwnProperty("simonSessionId")) { + d.simonSessionId = m.simonSessionId; + if (o.oneofs) + d._simonSessionId = "simonSessionId"; + } + if (m.simonSurveyId != null && m.hasOwnProperty("simonSurveyId")) { + d.simonSurveyId = m.simonSurveyId; + if (o.oneofs) + d._simonSurveyId = "simonSurveyId"; + } + if (m.tessaRootId != null && m.hasOwnProperty("tessaRootId")) { + d.tessaRootId = m.tessaRootId; + if (o.oneofs) + d._tessaRootId = "tessaRootId"; + } + if (m.requestId != null && m.hasOwnProperty("requestId")) { + d.requestId = m.requestId; + if (o.oneofs) + d._requestId = "requestId"; + } + if (m.tessaEvent != null && m.hasOwnProperty("tessaEvent")) { + d.tessaEvent = m.tessaEvent; + if (o.oneofs) + d._tessaEvent = "tessaEvent"; + } + if (m.invitationHeaderText != null && m.hasOwnProperty("invitationHeaderText")) { + d.invitationHeaderText = m.invitationHeaderText; + if (o.oneofs) + d._invitationHeaderText = "invitationHeaderText"; + } + if (m.invitationBodyText != null && m.hasOwnProperty("invitationBodyText")) { + d.invitationBodyText = m.invitationBodyText; + if (o.oneofs) + d._invitationBodyText = "invitationBodyText"; + } + if (m.invitationCtaText != null && m.hasOwnProperty("invitationCtaText")) { + d.invitationCtaText = m.invitationCtaText; + if (o.oneofs) + d._invitationCtaText = "invitationCtaText"; + } + if (m.invitationCtaUrl != null && m.hasOwnProperty("invitationCtaUrl")) { + d.invitationCtaUrl = m.invitationCtaUrl; + if (o.oneofs) + d._invitationCtaUrl = "invitationCtaUrl"; + } + if (m.surveyTitle != null && m.hasOwnProperty("surveyTitle")) { + d.surveyTitle = m.surveyTitle; + if (o.oneofs) + d._surveyTitle = "surveyTitle"; + } + if (m.questions && m.questions.length) { + d.questions = []; + for (var j = 0; j < m.questions.length; ++j) { + d.questions[j] = $root.proto.InThreadSurveyMetadata.InThreadSurveyQuestion.toObject(m.questions[j], o); + } + } + if (m.surveyContinueButtonText != null && m.hasOwnProperty("surveyContinueButtonText")) { + d.surveyContinueButtonText = m.surveyContinueButtonText; + if (o.oneofs) + d._surveyContinueButtonText = "surveyContinueButtonText"; + } + if (m.surveySubmitButtonText != null && m.hasOwnProperty("surveySubmitButtonText")) { + d.surveySubmitButtonText = m.surveySubmitButtonText; + if (o.oneofs) + d._surveySubmitButtonText = "surveySubmitButtonText"; + } + if (m.privacyStatementFull != null && m.hasOwnProperty("privacyStatementFull")) { + d.privacyStatementFull = m.privacyStatementFull; + if (o.oneofs) + d._privacyStatementFull = "privacyStatementFull"; + } + if (m.privacyStatementParts && m.privacyStatementParts.length) { + d.privacyStatementParts = []; + for (var j = 0; j < m.privacyStatementParts.length; ++j) { + d.privacyStatementParts[j] = $root.proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart.toObject(m.privacyStatementParts[j], o); + } + } + if (m.feedbackToastText != null && m.hasOwnProperty("feedbackToastText")) { + d.feedbackToastText = m.feedbackToastText; + if (o.oneofs) + d._feedbackToastText = "feedbackToastText"; + } + return d; + }; + + InThreadSurveyMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InThreadSurveyMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.InThreadSurveyMetadata"; + }; + + InThreadSurveyMetadata.InThreadSurveyOption = (function() { + + function InThreadSurveyOption(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InThreadSurveyOption.prototype.stringValue = null; + InThreadSurveyOption.prototype.numericValue = null; + InThreadSurveyOption.prototype.textTranslated = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyOption.prototype, "_stringValue", { + get: $util.oneOfGetter($oneOfFields = ["stringValue"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyOption.prototype, "_numericValue", { + get: $util.oneOfGetter($oneOfFields = ["numericValue"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyOption.prototype, "_textTranslated", { + get: $util.oneOfGetter($oneOfFields = ["textTranslated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InThreadSurveyOption.create = function create(properties) { + return new InThreadSurveyOption(properties); + }; + + InThreadSurveyOption.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.stringValue != null && Object.hasOwnProperty.call(m, "stringValue")) + w.uint32(10).string(m.stringValue); + if (m.numericValue != null && Object.hasOwnProperty.call(m, "numericValue")) + w.uint32(16).uint32(m.numericValue); + if (m.textTranslated != null && Object.hasOwnProperty.call(m, "textTranslated")) + w.uint32(26).string(m.textTranslated); + return w; + }; + + InThreadSurveyOption.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.InThreadSurveyMetadata.InThreadSurveyOption(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.stringValue = r.string(); + break; + } + case 2: { + m.numericValue = r.uint32(); + break; + } + case 3: { + m.textTranslated = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InThreadSurveyOption.fromObject = function fromObject(d) { + if (d instanceof $root.proto.InThreadSurveyMetadata.InThreadSurveyOption) + return d; + var m = new $root.proto.InThreadSurveyMetadata.InThreadSurveyOption(); + if (d.stringValue != null) { + m.stringValue = String(d.stringValue); + } + if (d.numericValue != null) { + m.numericValue = d.numericValue >>> 0; + } + if (d.textTranslated != null) { + m.textTranslated = String(d.textTranslated); + } + return m; + }; + + InThreadSurveyOption.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.stringValue != null && m.hasOwnProperty("stringValue")) { + d.stringValue = m.stringValue; + if (o.oneofs) + d._stringValue = "stringValue"; + } + if (m.numericValue != null && m.hasOwnProperty("numericValue")) { + d.numericValue = m.numericValue; + if (o.oneofs) + d._numericValue = "numericValue"; + } + if (m.textTranslated != null && m.hasOwnProperty("textTranslated")) { + d.textTranslated = m.textTranslated; + if (o.oneofs) + d._textTranslated = "textTranslated"; + } + return d; + }; + + InThreadSurveyOption.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InThreadSurveyOption.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.InThreadSurveyMetadata.InThreadSurveyOption"; + }; + + return InThreadSurveyOption; + })(); + + InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart = (function() { + + function InThreadSurveyPrivacyStatementPart(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InThreadSurveyPrivacyStatementPart.prototype.text = null; + InThreadSurveyPrivacyStatementPart.prototype.url = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyPrivacyStatementPart.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyPrivacyStatementPart.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InThreadSurveyPrivacyStatementPart.create = function create(properties) { + return new InThreadSurveyPrivacyStatementPart(properties); + }; + + InThreadSurveyPrivacyStatementPart.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(18).string(m.url); + return w; + }; + + InThreadSurveyPrivacyStatementPart.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.text = r.string(); + break; + } + case 2: { + m.url = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InThreadSurveyPrivacyStatementPart.fromObject = function fromObject(d) { + if (d instanceof $root.proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart) + return d; + var m = new $root.proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart(); + if (d.text != null) { + m.text = String(d.text); + } + if (d.url != null) { + m.url = String(d.url); + } + return m; + }; + + InThreadSurveyPrivacyStatementPart.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + return d; + }; + + InThreadSurveyPrivacyStatementPart.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InThreadSurveyPrivacyStatementPart.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart"; + }; + + return InThreadSurveyPrivacyStatementPart; + })(); + + InThreadSurveyMetadata.InThreadSurveyQuestion = (function() { + + function InThreadSurveyQuestion(p) { + this.questionOptions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InThreadSurveyQuestion.prototype.questionText = null; + InThreadSurveyQuestion.prototype.questionId = null; + InThreadSurveyQuestion.prototype.questionOptions = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyQuestion.prototype, "_questionText", { + get: $util.oneOfGetter($oneOfFields = ["questionText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InThreadSurveyQuestion.prototype, "_questionId", { + get: $util.oneOfGetter($oneOfFields = ["questionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InThreadSurveyQuestion.create = function create(properties) { + return new InThreadSurveyQuestion(properties); + }; + + InThreadSurveyQuestion.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.questionText != null && Object.hasOwnProperty.call(m, "questionText")) + w.uint32(10).string(m.questionText); + if (m.questionId != null && Object.hasOwnProperty.call(m, "questionId")) + w.uint32(18).string(m.questionId); + if (m.questionOptions != null && m.questionOptions.length) { + for (var i = 0; i < m.questionOptions.length; ++i) + $root.proto.InThreadSurveyMetadata.InThreadSurveyOption.encode(m.questionOptions[i], w.uint32(26).fork()).ldelim(); + } + return w; + }; + + InThreadSurveyQuestion.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.InThreadSurveyMetadata.InThreadSurveyQuestion(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.questionText = r.string(); + break; + } + case 2: { + m.questionId = r.string(); + break; + } + case 3: { + if (!(m.questionOptions && m.questionOptions.length)) + m.questionOptions = []; + m.questionOptions.push($root.proto.InThreadSurveyMetadata.InThreadSurveyOption.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InThreadSurveyQuestion.fromObject = function fromObject(d) { + if (d instanceof $root.proto.InThreadSurveyMetadata.InThreadSurveyQuestion) + return d; + var m = new $root.proto.InThreadSurveyMetadata.InThreadSurveyQuestion(); + if (d.questionText != null) { + m.questionText = String(d.questionText); + } + if (d.questionId != null) { + m.questionId = String(d.questionId); + } + if (d.questionOptions) { + if (!Array.isArray(d.questionOptions)) + throw TypeError(".proto.InThreadSurveyMetadata.InThreadSurveyQuestion.questionOptions: array expected"); + m.questionOptions = []; + for (var i = 0; i < d.questionOptions.length; ++i) { + if (typeof d.questionOptions[i] !== "object") + throw TypeError(".proto.InThreadSurveyMetadata.InThreadSurveyQuestion.questionOptions: object expected"); + m.questionOptions[i] = $root.proto.InThreadSurveyMetadata.InThreadSurveyOption.fromObject(d.questionOptions[i]); + } + } + return m; + }; + + InThreadSurveyQuestion.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.questionOptions = []; + } + if (m.questionText != null && m.hasOwnProperty("questionText")) { + d.questionText = m.questionText; + if (o.oneofs) + d._questionText = "questionText"; + } + if (m.questionId != null && m.hasOwnProperty("questionId")) { + d.questionId = m.questionId; + if (o.oneofs) + d._questionId = "questionId"; + } + if (m.questionOptions && m.questionOptions.length) { + d.questionOptions = []; + for (var j = 0; j < m.questionOptions.length; ++j) { + d.questionOptions[j] = $root.proto.InThreadSurveyMetadata.InThreadSurveyOption.toObject(m.questionOptions[j], o); + } + } + return d; + }; + + InThreadSurveyQuestion.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InThreadSurveyQuestion.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.InThreadSurveyMetadata.InThreadSurveyQuestion"; + }; + + return InThreadSurveyQuestion; + })(); + + return InThreadSurveyMetadata; + })(); + + proto.InteractiveAnnotation = (function() { + + function InteractiveAnnotation(p) { + this.polygonVertices = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InteractiveAnnotation.prototype.polygonVertices = $util.emptyArray; + InteractiveAnnotation.prototype.shouldSkipConfirmation = null; + InteractiveAnnotation.prototype.embeddedContent = null; + InteractiveAnnotation.prototype.statusLinkType = null; + InteractiveAnnotation.prototype.location = null; + InteractiveAnnotation.prototype.newsletter = null; + InteractiveAnnotation.prototype.embeddedAction = null; + InteractiveAnnotation.prototype.tapAction = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveAnnotation.prototype, "_shouldSkipConfirmation", { + get: $util.oneOfGetter($oneOfFields = ["shouldSkipConfirmation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveAnnotation.prototype, "_embeddedContent", { + get: $util.oneOfGetter($oneOfFields = ["embeddedContent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveAnnotation.prototype, "_statusLinkType", { + get: $util.oneOfGetter($oneOfFields = ["statusLinkType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(InteractiveAnnotation.prototype, "action", { + get: $util.oneOfGetter($oneOfFields = ["location", "newsletter", "embeddedAction", "tapAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InteractiveAnnotation.create = function create(properties) { + return new InteractiveAnnotation(properties); + }; + + InteractiveAnnotation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.polygonVertices != null && m.polygonVertices.length) { + for (var i = 0; i < m.polygonVertices.length; ++i) + $root.proto.Point.encode(m.polygonVertices[i], w.uint32(10).fork()).ldelim(); + } + if (m.location != null && Object.hasOwnProperty.call(m, "location")) + $root.proto.Location.encode(m.location, w.uint32(18).fork()).ldelim(); + if (m.newsletter != null && Object.hasOwnProperty.call(m, "newsletter")) + $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.encode(m.newsletter, w.uint32(26).fork()).ldelim(); + if (m.shouldSkipConfirmation != null && Object.hasOwnProperty.call(m, "shouldSkipConfirmation")) + w.uint32(32).bool(m.shouldSkipConfirmation); + if (m.embeddedContent != null && Object.hasOwnProperty.call(m, "embeddedContent")) + $root.proto.EmbeddedContent.encode(m.embeddedContent, w.uint32(42).fork()).ldelim(); + if (m.embeddedAction != null && Object.hasOwnProperty.call(m, "embeddedAction")) + w.uint32(48).bool(m.embeddedAction); + if (m.tapAction != null && Object.hasOwnProperty.call(m, "tapAction")) + $root.proto.TapLinkAction.encode(m.tapAction, w.uint32(58).fork()).ldelim(); + if (m.statusLinkType != null && Object.hasOwnProperty.call(m, "statusLinkType")) + w.uint32(64).int32(m.statusLinkType); + return w; + }; + + InteractiveAnnotation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.InteractiveAnnotation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.polygonVertices && m.polygonVertices.length)) + m.polygonVertices = []; + m.polygonVertices.push($root.proto.Point.decode(r, r.uint32())); + break; + } + case 4: { + m.shouldSkipConfirmation = r.bool(); + break; + } + case 5: { + m.embeddedContent = $root.proto.EmbeddedContent.decode(r, r.uint32()); + break; + } + case 8: { + m.statusLinkType = r.int32(); + break; + } + case 2: { + m.location = $root.proto.Location.decode(r, r.uint32()); + break; + } + case 3: { + m.newsletter = $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.decode(r, r.uint32()); + break; + } + case 6: { + m.embeddedAction = r.bool(); + break; + } + case 7: { + m.tapAction = $root.proto.TapLinkAction.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InteractiveAnnotation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.InteractiveAnnotation) + return d; + var m = new $root.proto.InteractiveAnnotation(); + if (d.polygonVertices) { + if (!Array.isArray(d.polygonVertices)) + throw TypeError(".proto.InteractiveAnnotation.polygonVertices: array expected"); + m.polygonVertices = []; + for (var i = 0; i < d.polygonVertices.length; ++i) { + if (typeof d.polygonVertices[i] !== "object") + throw TypeError(".proto.InteractiveAnnotation.polygonVertices: object expected"); + m.polygonVertices[i] = $root.proto.Point.fromObject(d.polygonVertices[i]); + } + } + if (d.shouldSkipConfirmation != null) { + m.shouldSkipConfirmation = Boolean(d.shouldSkipConfirmation); + } + if (d.embeddedContent != null) { + if (typeof d.embeddedContent !== "object") + throw TypeError(".proto.InteractiveAnnotation.embeddedContent: object expected"); + m.embeddedContent = $root.proto.EmbeddedContent.fromObject(d.embeddedContent); + } + switch (d.statusLinkType) { + default: + if (typeof d.statusLinkType === "number") { + m.statusLinkType = d.statusLinkType; + break; + } + break; + case "RASTERIZED_LINK_PREVIEW": + case 1: + m.statusLinkType = 1; + break; + case "RASTERIZED_LINK_TRUNCATED": + case 2: + m.statusLinkType = 2; + break; + case "RASTERIZED_LINK_FULL_URL": + case 3: + m.statusLinkType = 3; + break; + } + if (d.location != null) { + if (typeof d.location !== "object") + throw TypeError(".proto.InteractiveAnnotation.location: object expected"); + m.location = $root.proto.Location.fromObject(d.location); + } + if (d.newsletter != null) { + if (typeof d.newsletter !== "object") + throw TypeError(".proto.InteractiveAnnotation.newsletter: object expected"); + m.newsletter = $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.fromObject(d.newsletter); + } + if (d.embeddedAction != null) { + m.embeddedAction = Boolean(d.embeddedAction); + } + if (d.tapAction != null) { + if (typeof d.tapAction !== "object") + throw TypeError(".proto.InteractiveAnnotation.tapAction: object expected"); + m.tapAction = $root.proto.TapLinkAction.fromObject(d.tapAction); + } + return m; + }; + + InteractiveAnnotation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.polygonVertices = []; + } + if (m.polygonVertices && m.polygonVertices.length) { + d.polygonVertices = []; + for (var j = 0; j < m.polygonVertices.length; ++j) { + d.polygonVertices[j] = $root.proto.Point.toObject(m.polygonVertices[j], o); + } + } + if (m.location != null && m.hasOwnProperty("location")) { + d.location = $root.proto.Location.toObject(m.location, o); + if (o.oneofs) + d.action = "location"; + } + if (m.newsletter != null && m.hasOwnProperty("newsletter")) { + d.newsletter = $root.proto.ContextInfo.ForwardedNewsletterMessageInfo.toObject(m.newsletter, o); + if (o.oneofs) + d.action = "newsletter"; + } + if (m.shouldSkipConfirmation != null && m.hasOwnProperty("shouldSkipConfirmation")) { + d.shouldSkipConfirmation = m.shouldSkipConfirmation; + if (o.oneofs) + d._shouldSkipConfirmation = "shouldSkipConfirmation"; + } + if (m.embeddedContent != null && m.hasOwnProperty("embeddedContent")) { + d.embeddedContent = $root.proto.EmbeddedContent.toObject(m.embeddedContent, o); + if (o.oneofs) + d._embeddedContent = "embeddedContent"; + } + if (m.embeddedAction != null && m.hasOwnProperty("embeddedAction")) { + d.embeddedAction = m.embeddedAction; + if (o.oneofs) + d.action = "embeddedAction"; + } + if (m.tapAction != null && m.hasOwnProperty("tapAction")) { + d.tapAction = $root.proto.TapLinkAction.toObject(m.tapAction, o); + if (o.oneofs) + d.action = "tapAction"; + } + if (m.statusLinkType != null && m.hasOwnProperty("statusLinkType")) { + d.statusLinkType = o.enums === String ? $root.proto.InteractiveAnnotation.StatusLinkType[m.statusLinkType] === undefined ? m.statusLinkType : $root.proto.InteractiveAnnotation.StatusLinkType[m.statusLinkType] : m.statusLinkType; + if (o.oneofs) + d._statusLinkType = "statusLinkType"; + } + return d; + }; + + InteractiveAnnotation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InteractiveAnnotation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.InteractiveAnnotation"; + }; + + InteractiveAnnotation.StatusLinkType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "RASTERIZED_LINK_PREVIEW"] = 1; + values[valuesById[2] = "RASTERIZED_LINK_TRUNCATED"] = 2; + values[valuesById[3] = "RASTERIZED_LINK_FULL_URL"] = 3; + return values; + })(); + + return InteractiveAnnotation; + })(); + + proto.InteractiveMessageAdditionalMetadata = (function() { + + function InteractiveMessageAdditionalMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InteractiveMessageAdditionalMetadata.prototype.isGalaxyFlowCompleted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveMessageAdditionalMetadata.prototype, "_isGalaxyFlowCompleted", { + get: $util.oneOfGetter($oneOfFields = ["isGalaxyFlowCompleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InteractiveMessageAdditionalMetadata.create = function create(properties) { + return new InteractiveMessageAdditionalMetadata(properties); + }; + + InteractiveMessageAdditionalMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isGalaxyFlowCompleted != null && Object.hasOwnProperty.call(m, "isGalaxyFlowCompleted")) + w.uint32(8).bool(m.isGalaxyFlowCompleted); + return w; + }; + + InteractiveMessageAdditionalMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.InteractiveMessageAdditionalMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isGalaxyFlowCompleted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InteractiveMessageAdditionalMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.InteractiveMessageAdditionalMetadata) + return d; + var m = new $root.proto.InteractiveMessageAdditionalMetadata(); + if (d.isGalaxyFlowCompleted != null) { + m.isGalaxyFlowCompleted = Boolean(d.isGalaxyFlowCompleted); + } + return m; + }; + + InteractiveMessageAdditionalMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isGalaxyFlowCompleted != null && m.hasOwnProperty("isGalaxyFlowCompleted")) { + d.isGalaxyFlowCompleted = m.isGalaxyFlowCompleted; + if (o.oneofs) + d._isGalaxyFlowCompleted = "isGalaxyFlowCompleted"; + } + return d; + }; + + InteractiveMessageAdditionalMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InteractiveMessageAdditionalMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.InteractiveMessageAdditionalMetadata"; + }; + + return InteractiveMessageAdditionalMetadata; + })(); + + proto.KeepInChat = (function() { + + function KeepInChat(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + KeepInChat.prototype.keepType = null; + KeepInChat.prototype.serverTimestamp = null; + KeepInChat.prototype.key = null; + KeepInChat.prototype.deviceJid = null; + KeepInChat.prototype.clientTimestampMs = null; + KeepInChat.prototype.serverTimestampMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChat.prototype, "_keepType", { + get: $util.oneOfGetter($oneOfFields = ["keepType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChat.prototype, "_serverTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["serverTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChat.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChat.prototype, "_deviceJid", { + get: $util.oneOfGetter($oneOfFields = ["deviceJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChat.prototype, "_clientTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["clientTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChat.prototype, "_serverTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["serverTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + KeepInChat.create = function create(properties) { + return new KeepInChat(properties); + }; + + KeepInChat.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.keepType != null && Object.hasOwnProperty.call(m, "keepType")) + w.uint32(8).int32(m.keepType); + if (m.serverTimestamp != null && Object.hasOwnProperty.call(m, "serverTimestamp")) + w.uint32(16).int64(m.serverTimestamp); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(26).fork()).ldelim(); + if (m.deviceJid != null && Object.hasOwnProperty.call(m, "deviceJid")) + w.uint32(34).string(m.deviceJid); + if (m.clientTimestampMs != null && Object.hasOwnProperty.call(m, "clientTimestampMs")) + w.uint32(40).int64(m.clientTimestampMs); + if (m.serverTimestampMs != null && Object.hasOwnProperty.call(m, "serverTimestampMs")) + w.uint32(48).int64(m.serverTimestampMs); + return w; + }; + + KeepInChat.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.KeepInChat(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.keepType = r.int32(); + break; + } + case 2: { + m.serverTimestamp = r.int64(); + break; + } + case 3: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 4: { + m.deviceJid = r.string(); + break; + } + case 5: { + m.clientTimestampMs = r.int64(); + break; + } + case 6: { + m.serverTimestampMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + KeepInChat.fromObject = function fromObject(d) { + if (d instanceof $root.proto.KeepInChat) + return d; + var m = new $root.proto.KeepInChat(); + switch (d.keepType) { + default: + if (typeof d.keepType === "number") { + m.keepType = d.keepType; + break; + } + break; + case "UNKNOWN": + case 0: + m.keepType = 0; + break; + case "KEEP_FOR_ALL": + case 1: + m.keepType = 1; + break; + case "UNDO_KEEP_FOR_ALL": + case 2: + m.keepType = 2; + break; + } + if (d.serverTimestamp != null) { + if ($util.Long) + (m.serverTimestamp = $util.Long.fromValue(d.serverTimestamp)).unsigned = false; + else if (typeof d.serverTimestamp === "string") + m.serverTimestamp = parseInt(d.serverTimestamp, 10); + else if (typeof d.serverTimestamp === "number") + m.serverTimestamp = d.serverTimestamp; + else if (typeof d.serverTimestamp === "object") + m.serverTimestamp = new $util.LongBits(d.serverTimestamp.low >>> 0, d.serverTimestamp.high >>> 0).toNumber(); + } + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.KeepInChat.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.deviceJid != null) { + m.deviceJid = String(d.deviceJid); + } + if (d.clientTimestampMs != null) { + if ($util.Long) + (m.clientTimestampMs = $util.Long.fromValue(d.clientTimestampMs)).unsigned = false; + else if (typeof d.clientTimestampMs === "string") + m.clientTimestampMs = parseInt(d.clientTimestampMs, 10); + else if (typeof d.clientTimestampMs === "number") + m.clientTimestampMs = d.clientTimestampMs; + else if (typeof d.clientTimestampMs === "object") + m.clientTimestampMs = new $util.LongBits(d.clientTimestampMs.low >>> 0, d.clientTimestampMs.high >>> 0).toNumber(); + } + if (d.serverTimestampMs != null) { + if ($util.Long) + (m.serverTimestampMs = $util.Long.fromValue(d.serverTimestampMs)).unsigned = false; + else if (typeof d.serverTimestampMs === "string") + m.serverTimestampMs = parseInt(d.serverTimestampMs, 10); + else if (typeof d.serverTimestampMs === "number") + m.serverTimestampMs = d.serverTimestampMs; + else if (typeof d.serverTimestampMs === "object") + m.serverTimestampMs = new $util.LongBits(d.serverTimestampMs.low >>> 0, d.serverTimestampMs.high >>> 0).toNumber(); + } + return m; + }; + + KeepInChat.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.keepType != null && m.hasOwnProperty("keepType")) { + d.keepType = o.enums === String ? $root.proto.KeepType[m.keepType] === undefined ? m.keepType : $root.proto.KeepType[m.keepType] : m.keepType; + if (o.oneofs) + d._keepType = "keepType"; + } + if (m.serverTimestamp != null && m.hasOwnProperty("serverTimestamp")) { + if (typeof m.serverTimestamp === "number") + d.serverTimestamp = o.longs === String ? String(m.serverTimestamp) : m.serverTimestamp; + else + d.serverTimestamp = o.longs === String ? longToString(m.serverTimestamp) : o.longs === Number ? longToNumber(m.serverTimestamp) : m.serverTimestamp; + if (o.oneofs) + d._serverTimestamp = "serverTimestamp"; + } + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.deviceJid != null && m.hasOwnProperty("deviceJid")) { + d.deviceJid = m.deviceJid; + if (o.oneofs) + d._deviceJid = "deviceJid"; + } + if (m.clientTimestampMs != null && m.hasOwnProperty("clientTimestampMs")) { + if (typeof m.clientTimestampMs === "number") + d.clientTimestampMs = o.longs === String ? String(m.clientTimestampMs) : m.clientTimestampMs; + else + d.clientTimestampMs = o.longs === String ? longToString(m.clientTimestampMs) : o.longs === Number ? longToNumber(m.clientTimestampMs) : m.clientTimestampMs; + if (o.oneofs) + d._clientTimestampMs = "clientTimestampMs"; + } + if (m.serverTimestampMs != null && m.hasOwnProperty("serverTimestampMs")) { + if (typeof m.serverTimestampMs === "number") + d.serverTimestampMs = o.longs === String ? String(m.serverTimestampMs) : m.serverTimestampMs; + else + d.serverTimestampMs = o.longs === String ? longToString(m.serverTimestampMs) : o.longs === Number ? longToNumber(m.serverTimestampMs) : m.serverTimestampMs; + if (o.oneofs) + d._serverTimestampMs = "serverTimestampMs"; + } + return d; + }; + + KeepInChat.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + KeepInChat.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.KeepInChat"; + }; + + return KeepInChat; + })(); + + proto.KeepType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "KEEP_FOR_ALL"] = 1; + values[valuesById[2] = "UNDO_KEEP_FOR_ALL"] = 2; + return values; + })(); + + proto.KeyExchangeMessage = (function() { + + function KeyExchangeMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + KeyExchangeMessage.prototype.id = null; + KeyExchangeMessage.prototype.baseKey = null; + KeyExchangeMessage.prototype.ratchetKey = null; + KeyExchangeMessage.prototype.identityKey = null; + KeyExchangeMessage.prototype.baseKeySignature = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeyExchangeMessage.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeyExchangeMessage.prototype, "_baseKey", { + get: $util.oneOfGetter($oneOfFields = ["baseKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeyExchangeMessage.prototype, "_ratchetKey", { + get: $util.oneOfGetter($oneOfFields = ["ratchetKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeyExchangeMessage.prototype, "_identityKey", { + get: $util.oneOfGetter($oneOfFields = ["identityKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeyExchangeMessage.prototype, "_baseKeySignature", { + get: $util.oneOfGetter($oneOfFields = ["baseKeySignature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + KeyExchangeMessage.create = function create(properties) { + return new KeyExchangeMessage(properties); + }; + + KeyExchangeMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(8).uint32(m.id); + if (m.baseKey != null && Object.hasOwnProperty.call(m, "baseKey")) + w.uint32(18).bytes(m.baseKey); + if (m.ratchetKey != null && Object.hasOwnProperty.call(m, "ratchetKey")) + w.uint32(26).bytes(m.ratchetKey); + if (m.identityKey != null && Object.hasOwnProperty.call(m, "identityKey")) + w.uint32(34).bytes(m.identityKey); + if (m.baseKeySignature != null && Object.hasOwnProperty.call(m, "baseKeySignature")) + w.uint32(42).bytes(m.baseKeySignature); + return w; + }; + + KeyExchangeMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.KeyExchangeMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.uint32(); + break; + } + case 2: { + m.baseKey = r.bytes(); + break; + } + case 3: { + m.ratchetKey = r.bytes(); + break; + } + case 4: { + m.identityKey = r.bytes(); + break; + } + case 5: { + m.baseKeySignature = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + KeyExchangeMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.KeyExchangeMessage) + return d; + var m = new $root.proto.KeyExchangeMessage(); + if (d.id != null) { + m.id = d.id >>> 0; + } + if (d.baseKey != null) { + if (typeof d.baseKey === "string") + $util.base64.decode(d.baseKey, m.baseKey = $util.newBuffer($util.base64.length(d.baseKey)), 0); + else if (d.baseKey.length >= 0) + m.baseKey = d.baseKey; + } + if (d.ratchetKey != null) { + if (typeof d.ratchetKey === "string") + $util.base64.decode(d.ratchetKey, m.ratchetKey = $util.newBuffer($util.base64.length(d.ratchetKey)), 0); + else if (d.ratchetKey.length >= 0) + m.ratchetKey = d.ratchetKey; + } + if (d.identityKey != null) { + if (typeof d.identityKey === "string") + $util.base64.decode(d.identityKey, m.identityKey = $util.newBuffer($util.base64.length(d.identityKey)), 0); + else if (d.identityKey.length >= 0) + m.identityKey = d.identityKey; + } + if (d.baseKeySignature != null) { + if (typeof d.baseKeySignature === "string") + $util.base64.decode(d.baseKeySignature, m.baseKeySignature = $util.newBuffer($util.base64.length(d.baseKeySignature)), 0); + else if (d.baseKeySignature.length >= 0) + m.baseKeySignature = d.baseKeySignature; + } + return m; + }; + + KeyExchangeMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.baseKey != null && m.hasOwnProperty("baseKey")) { + d.baseKey = o.bytes === String ? $util.base64.encode(m.baseKey, 0, m.baseKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.baseKey) : m.baseKey; + if (o.oneofs) + d._baseKey = "baseKey"; + } + if (m.ratchetKey != null && m.hasOwnProperty("ratchetKey")) { + d.ratchetKey = o.bytes === String ? $util.base64.encode(m.ratchetKey, 0, m.ratchetKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.ratchetKey) : m.ratchetKey; + if (o.oneofs) + d._ratchetKey = "ratchetKey"; + } + if (m.identityKey != null && m.hasOwnProperty("identityKey")) { + d.identityKey = o.bytes === String ? $util.base64.encode(m.identityKey, 0, m.identityKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.identityKey) : m.identityKey; + if (o.oneofs) + d._identityKey = "identityKey"; + } + if (m.baseKeySignature != null && m.hasOwnProperty("baseKeySignature")) { + d.baseKeySignature = o.bytes === String ? $util.base64.encode(m.baseKeySignature, 0, m.baseKeySignature.length) : o.bytes === Array ? Array.prototype.slice.call(m.baseKeySignature) : m.baseKeySignature; + if (o.oneofs) + d._baseKeySignature = "baseKeySignature"; + } + return d; + }; + + KeyExchangeMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + KeyExchangeMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.KeyExchangeMessage"; + }; + + return KeyExchangeMessage; + })(); + + proto.KeyId = (function() { + + function KeyId(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + KeyId.prototype.id = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeyId.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + KeyId.create = function create(properties) { + return new KeyId(properties); + }; + + KeyId.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(10).bytes(m.id); + return w; + }; + + KeyId.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.KeyId(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + KeyId.fromObject = function fromObject(d) { + if (d instanceof $root.proto.KeyId) + return d; + var m = new $root.proto.KeyId(); + if (d.id != null) { + if (typeof d.id === "string") + $util.base64.decode(d.id, m.id = $util.newBuffer($util.base64.length(d.id)), 0); + else if (d.id.length >= 0) + m.id = d.id; + } + return m; + }; + + KeyId.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = o.bytes === String ? $util.base64.encode(m.id, 0, m.id.length) : o.bytes === Array ? Array.prototype.slice.call(m.id) : m.id; + if (o.oneofs) + d._id = "id"; + } + return d; + }; + + KeyId.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + KeyId.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.KeyId"; + }; + + return KeyId; + })(); + + proto.LIDMigrationMapping = (function() { + + function LIDMigrationMapping(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LIDMigrationMapping.prototype.pn = $util.Long ? $util.Long.fromBits(0,0,true) : 0; + LIDMigrationMapping.prototype.assignedLid = $util.Long ? $util.Long.fromBits(0,0,true) : 0; + LIDMigrationMapping.prototype.latestLid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LIDMigrationMapping.prototype, "_latestLid", { + get: $util.oneOfGetter($oneOfFields = ["latestLid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LIDMigrationMapping.create = function create(properties) { + return new LIDMigrationMapping(properties); + }; + + LIDMigrationMapping.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pn != null && Object.hasOwnProperty.call(m, "pn")) + w.uint32(8).uint64(m.pn); + if (m.assignedLid != null && Object.hasOwnProperty.call(m, "assignedLid")) + w.uint32(16).uint64(m.assignedLid); + if (m.latestLid != null && Object.hasOwnProperty.call(m, "latestLid")) + w.uint32(24).uint64(m.latestLid); + return w; + }; + + LIDMigrationMapping.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.LIDMigrationMapping(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.pn = r.uint64(); + break; + } + case 2: { + m.assignedLid = r.uint64(); + break; + } + case 3: { + m.latestLid = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LIDMigrationMapping.fromObject = function fromObject(d) { + if (d instanceof $root.proto.LIDMigrationMapping) + return d; + var m = new $root.proto.LIDMigrationMapping(); + if (d.pn != null) { + if ($util.Long) + (m.pn = $util.Long.fromValue(d.pn)).unsigned = true; + else if (typeof d.pn === "string") + m.pn = parseInt(d.pn, 10); + else if (typeof d.pn === "number") + m.pn = d.pn; + else if (typeof d.pn === "object") + m.pn = new $util.LongBits(d.pn.low >>> 0, d.pn.high >>> 0).toNumber(true); + } + if (d.assignedLid != null) { + if ($util.Long) + (m.assignedLid = $util.Long.fromValue(d.assignedLid)).unsigned = true; + else if (typeof d.assignedLid === "string") + m.assignedLid = parseInt(d.assignedLid, 10); + else if (typeof d.assignedLid === "number") + m.assignedLid = d.assignedLid; + else if (typeof d.assignedLid === "object") + m.assignedLid = new $util.LongBits(d.assignedLid.low >>> 0, d.assignedLid.high >>> 0).toNumber(true); + } + if (d.latestLid != null) { + if ($util.Long) + (m.latestLid = $util.Long.fromValue(d.latestLid)).unsigned = true; + else if (typeof d.latestLid === "string") + m.latestLid = parseInt(d.latestLid, 10); + else if (typeof d.latestLid === "number") + m.latestLid = d.latestLid; + else if (typeof d.latestLid === "object") + m.latestLid = new $util.LongBits(d.latestLid.low >>> 0, d.latestLid.high >>> 0).toNumber(true); + } + return m; + }; + + LIDMigrationMapping.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + if ($util.Long) { + var n = new $util.Long(0, 0, true); + d.pn = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n; + } else + d.pn = o.longs === String ? "0" : 0; + if ($util.Long) { + var n = new $util.Long(0, 0, true); + d.assignedLid = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n; + } else + d.assignedLid = o.longs === String ? "0" : 0; + } + if (m.pn != null && m.hasOwnProperty("pn")) { + if (typeof m.pn === "number") + d.pn = o.longs === String ? String(m.pn) : m.pn; + else + d.pn = o.longs === String ? longToString(m.pn, true) : o.longs === Number ? longToNumber(m.pn, true) : m.pn; + } + if (m.assignedLid != null && m.hasOwnProperty("assignedLid")) { + if (typeof m.assignedLid === "number") + d.assignedLid = o.longs === String ? String(m.assignedLid) : m.assignedLid; + else + d.assignedLid = o.longs === String ? longToString(m.assignedLid, true) : o.longs === Number ? longToNumber(m.assignedLid, true) : m.assignedLid; + } + if (m.latestLid != null && m.hasOwnProperty("latestLid")) { + if (typeof m.latestLid === "number") + d.latestLid = o.longs === String ? String(m.latestLid) : m.latestLid; + else + d.latestLid = o.longs === String ? longToString(m.latestLid, true) : o.longs === Number ? longToNumber(m.latestLid, true) : m.latestLid; + if (o.oneofs) + d._latestLid = "latestLid"; + } + return d; + }; + + LIDMigrationMapping.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LIDMigrationMapping.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.LIDMigrationMapping"; + }; + + return LIDMigrationMapping; + })(); + + proto.LIDMigrationMappingSyncMessage = (function() { + + function LIDMigrationMappingSyncMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LIDMigrationMappingSyncMessage.prototype.encodedMappingPayload = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LIDMigrationMappingSyncMessage.prototype, "_encodedMappingPayload", { + get: $util.oneOfGetter($oneOfFields = ["encodedMappingPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LIDMigrationMappingSyncMessage.create = function create(properties) { + return new LIDMigrationMappingSyncMessage(properties); + }; + + LIDMigrationMappingSyncMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.encodedMappingPayload != null && Object.hasOwnProperty.call(m, "encodedMappingPayload")) + w.uint32(10).bytes(m.encodedMappingPayload); + return w; + }; + + LIDMigrationMappingSyncMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.LIDMigrationMappingSyncMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.encodedMappingPayload = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LIDMigrationMappingSyncMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.LIDMigrationMappingSyncMessage) + return d; + var m = new $root.proto.LIDMigrationMappingSyncMessage(); + if (d.encodedMappingPayload != null) { + if (typeof d.encodedMappingPayload === "string") + $util.base64.decode(d.encodedMappingPayload, m.encodedMappingPayload = $util.newBuffer($util.base64.length(d.encodedMappingPayload)), 0); + else if (d.encodedMappingPayload.length >= 0) + m.encodedMappingPayload = d.encodedMappingPayload; + } + return m; + }; + + LIDMigrationMappingSyncMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.encodedMappingPayload != null && m.hasOwnProperty("encodedMappingPayload")) { + d.encodedMappingPayload = o.bytes === String ? $util.base64.encode(m.encodedMappingPayload, 0, m.encodedMappingPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encodedMappingPayload) : m.encodedMappingPayload; + if (o.oneofs) + d._encodedMappingPayload = "encodedMappingPayload"; + } + return d; + }; + + LIDMigrationMappingSyncMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LIDMigrationMappingSyncMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.LIDMigrationMappingSyncMessage"; + }; + + return LIDMigrationMappingSyncMessage; + })(); + + proto.LIDMigrationMappingSyncPayload = (function() { + + function LIDMigrationMappingSyncPayload(p) { + this.pnToLidMappings = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LIDMigrationMappingSyncPayload.prototype.pnToLidMappings = $util.emptyArray; + LIDMigrationMappingSyncPayload.prototype.chatDbMigrationTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LIDMigrationMappingSyncPayload.prototype, "_chatDbMigrationTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["chatDbMigrationTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LIDMigrationMappingSyncPayload.create = function create(properties) { + return new LIDMigrationMappingSyncPayload(properties); + }; + + LIDMigrationMappingSyncPayload.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pnToLidMappings != null && m.pnToLidMappings.length) { + for (var i = 0; i < m.pnToLidMappings.length; ++i) + $root.proto.LIDMigrationMapping.encode(m.pnToLidMappings[i], w.uint32(10).fork()).ldelim(); + } + if (m.chatDbMigrationTimestamp != null && Object.hasOwnProperty.call(m, "chatDbMigrationTimestamp")) + w.uint32(16).uint64(m.chatDbMigrationTimestamp); + return w; + }; + + LIDMigrationMappingSyncPayload.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.LIDMigrationMappingSyncPayload(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.pnToLidMappings && m.pnToLidMappings.length)) + m.pnToLidMappings = []; + m.pnToLidMappings.push($root.proto.LIDMigrationMapping.decode(r, r.uint32())); + break; + } + case 2: { + m.chatDbMigrationTimestamp = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LIDMigrationMappingSyncPayload.fromObject = function fromObject(d) { + if (d instanceof $root.proto.LIDMigrationMappingSyncPayload) + return d; + var m = new $root.proto.LIDMigrationMappingSyncPayload(); + if (d.pnToLidMappings) { + if (!Array.isArray(d.pnToLidMappings)) + throw TypeError(".proto.LIDMigrationMappingSyncPayload.pnToLidMappings: array expected"); + m.pnToLidMappings = []; + for (var i = 0; i < d.pnToLidMappings.length; ++i) { + if (typeof d.pnToLidMappings[i] !== "object") + throw TypeError(".proto.LIDMigrationMappingSyncPayload.pnToLidMappings: object expected"); + m.pnToLidMappings[i] = $root.proto.LIDMigrationMapping.fromObject(d.pnToLidMappings[i]); + } + } + if (d.chatDbMigrationTimestamp != null) { + if ($util.Long) + (m.chatDbMigrationTimestamp = $util.Long.fromValue(d.chatDbMigrationTimestamp)).unsigned = true; + else if (typeof d.chatDbMigrationTimestamp === "string") + m.chatDbMigrationTimestamp = parseInt(d.chatDbMigrationTimestamp, 10); + else if (typeof d.chatDbMigrationTimestamp === "number") + m.chatDbMigrationTimestamp = d.chatDbMigrationTimestamp; + else if (typeof d.chatDbMigrationTimestamp === "object") + m.chatDbMigrationTimestamp = new $util.LongBits(d.chatDbMigrationTimestamp.low >>> 0, d.chatDbMigrationTimestamp.high >>> 0).toNumber(true); + } + return m; + }; + + LIDMigrationMappingSyncPayload.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.pnToLidMappings = []; + } + if (m.pnToLidMappings && m.pnToLidMappings.length) { + d.pnToLidMappings = []; + for (var j = 0; j < m.pnToLidMappings.length; ++j) { + d.pnToLidMappings[j] = $root.proto.LIDMigrationMapping.toObject(m.pnToLidMappings[j], o); + } + } + if (m.chatDbMigrationTimestamp != null && m.hasOwnProperty("chatDbMigrationTimestamp")) { + if (typeof m.chatDbMigrationTimestamp === "number") + d.chatDbMigrationTimestamp = o.longs === String ? String(m.chatDbMigrationTimestamp) : m.chatDbMigrationTimestamp; + else + d.chatDbMigrationTimestamp = o.longs === String ? longToString(m.chatDbMigrationTimestamp, true) : o.longs === Number ? longToNumber(m.chatDbMigrationTimestamp, true) : m.chatDbMigrationTimestamp; + if (o.oneofs) + d._chatDbMigrationTimestamp = "chatDbMigrationTimestamp"; + } + return d; + }; + + LIDMigrationMappingSyncPayload.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LIDMigrationMappingSyncPayload.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.LIDMigrationMappingSyncPayload"; + }; + + return LIDMigrationMappingSyncPayload; + })(); + + proto.LegacyMessage = (function() { + + function LegacyMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LegacyMessage.prototype.eventResponseMessage = null; + LegacyMessage.prototype.pollVote = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LegacyMessage.prototype, "_eventResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["eventResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LegacyMessage.prototype, "_pollVote", { + get: $util.oneOfGetter($oneOfFields = ["pollVote"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LegacyMessage.create = function create(properties) { + return new LegacyMessage(properties); + }; + + LegacyMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.eventResponseMessage != null && Object.hasOwnProperty.call(m, "eventResponseMessage")) + $root.proto.Message.EventResponseMessage.encode(m.eventResponseMessage, w.uint32(10).fork()).ldelim(); + if (m.pollVote != null && Object.hasOwnProperty.call(m, "pollVote")) + $root.proto.Message.PollVoteMessage.encode(m.pollVote, w.uint32(18).fork()).ldelim(); + return w; + }; + + LegacyMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.LegacyMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.eventResponseMessage = $root.proto.Message.EventResponseMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.pollVote = $root.proto.Message.PollVoteMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LegacyMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.LegacyMessage) + return d; + var m = new $root.proto.LegacyMessage(); + if (d.eventResponseMessage != null) { + if (typeof d.eventResponseMessage !== "object") + throw TypeError(".proto.LegacyMessage.eventResponseMessage: object expected"); + m.eventResponseMessage = $root.proto.Message.EventResponseMessage.fromObject(d.eventResponseMessage); + } + if (d.pollVote != null) { + if (typeof d.pollVote !== "object") + throw TypeError(".proto.LegacyMessage.pollVote: object expected"); + m.pollVote = $root.proto.Message.PollVoteMessage.fromObject(d.pollVote); + } + return m; + }; + + LegacyMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.eventResponseMessage != null && m.hasOwnProperty("eventResponseMessage")) { + d.eventResponseMessage = $root.proto.Message.EventResponseMessage.toObject(m.eventResponseMessage, o); + if (o.oneofs) + d._eventResponseMessage = "eventResponseMessage"; + } + if (m.pollVote != null && m.hasOwnProperty("pollVote")) { + d.pollVote = $root.proto.Message.PollVoteMessage.toObject(m.pollVote, o); + if (o.oneofs) + d._pollVote = "pollVote"; + } + return d; + }; + + LegacyMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LegacyMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.LegacyMessage"; + }; + + return LegacyMessage; + })(); + + proto.LimitSharing = (function() { + + function LimitSharing(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LimitSharing.prototype.sharingLimited = null; + LimitSharing.prototype.trigger = null; + LimitSharing.prototype.limitSharingSettingTimestamp = null; + LimitSharing.prototype.initiatedByMe = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LimitSharing.prototype, "_sharingLimited", { + get: $util.oneOfGetter($oneOfFields = ["sharingLimited"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LimitSharing.prototype, "_trigger", { + get: $util.oneOfGetter($oneOfFields = ["trigger"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LimitSharing.prototype, "_limitSharingSettingTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["limitSharingSettingTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LimitSharing.prototype, "_initiatedByMe", { + get: $util.oneOfGetter($oneOfFields = ["initiatedByMe"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LimitSharing.create = function create(properties) { + return new LimitSharing(properties); + }; + + LimitSharing.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sharingLimited != null && Object.hasOwnProperty.call(m, "sharingLimited")) + w.uint32(8).bool(m.sharingLimited); + if (m.trigger != null && Object.hasOwnProperty.call(m, "trigger")) + w.uint32(16).int32(m.trigger); + if (m.limitSharingSettingTimestamp != null && Object.hasOwnProperty.call(m, "limitSharingSettingTimestamp")) + w.uint32(24).int64(m.limitSharingSettingTimestamp); + if (m.initiatedByMe != null && Object.hasOwnProperty.call(m, "initiatedByMe")) + w.uint32(32).bool(m.initiatedByMe); + return w; + }; + + LimitSharing.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.LimitSharing(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sharingLimited = r.bool(); + break; + } + case 2: { + m.trigger = r.int32(); + break; + } + case 3: { + m.limitSharingSettingTimestamp = r.int64(); + break; + } + case 4: { + m.initiatedByMe = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LimitSharing.fromObject = function fromObject(d) { + if (d instanceof $root.proto.LimitSharing) + return d; + var m = new $root.proto.LimitSharing(); + if (d.sharingLimited != null) { + m.sharingLimited = Boolean(d.sharingLimited); + } + switch (d.trigger) { + default: + if (typeof d.trigger === "number") { + m.trigger = d.trigger; + break; + } + break; + case "UNKNOWN": + case 0: + m.trigger = 0; + break; + case "CHAT_SETTING": + case 1: + m.trigger = 1; + break; + case "BIZ_SUPPORTS_FB_HOSTING": + case 2: + m.trigger = 2; + break; + case "UNKNOWN_GROUP": + case 3: + m.trigger = 3; + break; + } + if (d.limitSharingSettingTimestamp != null) { + if ($util.Long) + (m.limitSharingSettingTimestamp = $util.Long.fromValue(d.limitSharingSettingTimestamp)).unsigned = false; + else if (typeof d.limitSharingSettingTimestamp === "string") + m.limitSharingSettingTimestamp = parseInt(d.limitSharingSettingTimestamp, 10); + else if (typeof d.limitSharingSettingTimestamp === "number") + m.limitSharingSettingTimestamp = d.limitSharingSettingTimestamp; + else if (typeof d.limitSharingSettingTimestamp === "object") + m.limitSharingSettingTimestamp = new $util.LongBits(d.limitSharingSettingTimestamp.low >>> 0, d.limitSharingSettingTimestamp.high >>> 0).toNumber(); + } + if (d.initiatedByMe != null) { + m.initiatedByMe = Boolean(d.initiatedByMe); + } + return m; + }; + + LimitSharing.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.sharingLimited != null && m.hasOwnProperty("sharingLimited")) { + d.sharingLimited = m.sharingLimited; + if (o.oneofs) + d._sharingLimited = "sharingLimited"; + } + if (m.trigger != null && m.hasOwnProperty("trigger")) { + d.trigger = o.enums === String ? $root.proto.LimitSharing.TriggerType[m.trigger] === undefined ? m.trigger : $root.proto.LimitSharing.TriggerType[m.trigger] : m.trigger; + if (o.oneofs) + d._trigger = "trigger"; + } + if (m.limitSharingSettingTimestamp != null && m.hasOwnProperty("limitSharingSettingTimestamp")) { + if (typeof m.limitSharingSettingTimestamp === "number") + d.limitSharingSettingTimestamp = o.longs === String ? String(m.limitSharingSettingTimestamp) : m.limitSharingSettingTimestamp; + else + d.limitSharingSettingTimestamp = o.longs === String ? longToString(m.limitSharingSettingTimestamp) : o.longs === Number ? longToNumber(m.limitSharingSettingTimestamp) : m.limitSharingSettingTimestamp; + if (o.oneofs) + d._limitSharingSettingTimestamp = "limitSharingSettingTimestamp"; + } + if (m.initiatedByMe != null && m.hasOwnProperty("initiatedByMe")) { + d.initiatedByMe = m.initiatedByMe; + if (o.oneofs) + d._initiatedByMe = "initiatedByMe"; + } + return d; + }; + + LimitSharing.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LimitSharing.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.LimitSharing"; + }; + + LimitSharing.TriggerType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "CHAT_SETTING"] = 1; + values[valuesById[2] = "BIZ_SUPPORTS_FB_HOSTING"] = 2; + values[valuesById[3] = "UNKNOWN_GROUP"] = 3; + return values; + })(); + + return LimitSharing; + })(); + + proto.LocalizedName = (function() { + + function LocalizedName(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LocalizedName.prototype.lg = null; + LocalizedName.prototype.lc = null; + LocalizedName.prototype.verifiedName = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocalizedName.prototype, "_lg", { + get: $util.oneOfGetter($oneOfFields = ["lg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocalizedName.prototype, "_lc", { + get: $util.oneOfGetter($oneOfFields = ["lc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocalizedName.prototype, "_verifiedName", { + get: $util.oneOfGetter($oneOfFields = ["verifiedName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LocalizedName.create = function create(properties) { + return new LocalizedName(properties); + }; + + LocalizedName.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.lg != null && Object.hasOwnProperty.call(m, "lg")) + w.uint32(10).string(m.lg); + if (m.lc != null && Object.hasOwnProperty.call(m, "lc")) + w.uint32(18).string(m.lc); + if (m.verifiedName != null && Object.hasOwnProperty.call(m, "verifiedName")) + w.uint32(26).string(m.verifiedName); + return w; + }; + + LocalizedName.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.LocalizedName(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.lg = r.string(); + break; + } + case 2: { + m.lc = r.string(); + break; + } + case 3: { + m.verifiedName = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LocalizedName.fromObject = function fromObject(d) { + if (d instanceof $root.proto.LocalizedName) + return d; + var m = new $root.proto.LocalizedName(); + if (d.lg != null) { + m.lg = String(d.lg); + } + if (d.lc != null) { + m.lc = String(d.lc); + } + if (d.verifiedName != null) { + m.verifiedName = String(d.verifiedName); + } + return m; + }; + + LocalizedName.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.lg != null && m.hasOwnProperty("lg")) { + d.lg = m.lg; + if (o.oneofs) + d._lg = "lg"; + } + if (m.lc != null && m.hasOwnProperty("lc")) { + d.lc = m.lc; + if (o.oneofs) + d._lc = "lc"; + } + if (m.verifiedName != null && m.hasOwnProperty("verifiedName")) { + d.verifiedName = m.verifiedName; + if (o.oneofs) + d._verifiedName = "verifiedName"; + } + return d; + }; + + LocalizedName.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LocalizedName.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.LocalizedName"; + }; + + return LocalizedName; + })(); + + proto.Location = (function() { + + function Location(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Location.prototype.degreesLatitude = null; + Location.prototype.degreesLongitude = null; + Location.prototype.name = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Location.prototype, "_degreesLatitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLatitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Location.prototype, "_degreesLongitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLongitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Location.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Location.create = function create(properties) { + return new Location(properties); + }; + + Location.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.degreesLatitude != null && Object.hasOwnProperty.call(m, "degreesLatitude")) + w.uint32(9).double(m.degreesLatitude); + if (m.degreesLongitude != null && Object.hasOwnProperty.call(m, "degreesLongitude")) + w.uint32(17).double(m.degreesLongitude); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(26).string(m.name); + return w; + }; + + Location.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Location(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.degreesLatitude = r.double(); + break; + } + case 2: { + m.degreesLongitude = r.double(); + break; + } + case 3: { + m.name = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Location.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Location) + return d; + var m = new $root.proto.Location(); + if (d.degreesLatitude != null) { + m.degreesLatitude = Number(d.degreesLatitude); + } + if (d.degreesLongitude != null) { + m.degreesLongitude = Number(d.degreesLongitude); + } + if (d.name != null) { + m.name = String(d.name); + } + return m; + }; + + Location.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.degreesLatitude != null && m.hasOwnProperty("degreesLatitude")) { + d.degreesLatitude = o.json && !isFinite(m.degreesLatitude) ? String(m.degreesLatitude) : m.degreesLatitude; + if (o.oneofs) + d._degreesLatitude = "degreesLatitude"; + } + if (m.degreesLongitude != null && m.hasOwnProperty("degreesLongitude")) { + d.degreesLongitude = o.json && !isFinite(m.degreesLongitude) ? String(m.degreesLongitude) : m.degreesLongitude; + if (o.oneofs) + d._degreesLongitude = "degreesLongitude"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + return d; + }; + + Location.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Location.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Location"; + }; + + return Location; + })(); + + proto.MediaData = (function() { + + function MediaData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MediaData.prototype.localPath = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaData.prototype, "_localPath", { + get: $util.oneOfGetter($oneOfFields = ["localPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MediaData.create = function create(properties) { + return new MediaData(properties); + }; + + MediaData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.localPath != null && Object.hasOwnProperty.call(m, "localPath")) + w.uint32(10).string(m.localPath); + return w; + }; + + MediaData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MediaData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.localPath = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MediaData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MediaData) + return d; + var m = new $root.proto.MediaData(); + if (d.localPath != null) { + m.localPath = String(d.localPath); + } + return m; + }; + + MediaData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.localPath != null && m.hasOwnProperty("localPath")) { + d.localPath = m.localPath; + if (o.oneofs) + d._localPath = "localPath"; + } + return d; + }; + + MediaData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MediaData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MediaData"; + }; + + return MediaData; + })(); + + proto.MediaNotifyMessage = (function() { + + function MediaNotifyMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MediaNotifyMessage.prototype.expressPathUrl = null; + MediaNotifyMessage.prototype.fileEncSha256 = null; + MediaNotifyMessage.prototype.fileLength = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaNotifyMessage.prototype, "_expressPathUrl", { + get: $util.oneOfGetter($oneOfFields = ["expressPathUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaNotifyMessage.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaNotifyMessage.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MediaNotifyMessage.create = function create(properties) { + return new MediaNotifyMessage(properties); + }; + + MediaNotifyMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.expressPathUrl != null && Object.hasOwnProperty.call(m, "expressPathUrl")) + w.uint32(10).string(m.expressPathUrl); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(18).bytes(m.fileEncSha256); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(24).uint64(m.fileLength); + return w; + }; + + MediaNotifyMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MediaNotifyMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.expressPathUrl = r.string(); + break; + } + case 2: { + m.fileEncSha256 = r.bytes(); + break; + } + case 3: { + m.fileLength = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MediaNotifyMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MediaNotifyMessage) + return d; + var m = new $root.proto.MediaNotifyMessage(); + if (d.expressPathUrl != null) { + m.expressPathUrl = String(d.expressPathUrl); + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + return m; + }; + + MediaNotifyMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.expressPathUrl != null && m.hasOwnProperty("expressPathUrl")) { + d.expressPathUrl = m.expressPathUrl; + if (o.oneofs) + d._expressPathUrl = "expressPathUrl"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + return d; + }; + + MediaNotifyMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MediaNotifyMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MediaNotifyMessage"; + }; + + return MediaNotifyMessage; + })(); + + proto.MediaRetryNotification = (function() { + + function MediaRetryNotification(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MediaRetryNotification.prototype.stanzaId = null; + MediaRetryNotification.prototype.directPath = null; + MediaRetryNotification.prototype.result = null; + MediaRetryNotification.prototype.messageSecret = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaRetryNotification.prototype, "_stanzaId", { + get: $util.oneOfGetter($oneOfFields = ["stanzaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaRetryNotification.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaRetryNotification.prototype, "_result", { + get: $util.oneOfGetter($oneOfFields = ["result"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaRetryNotification.prototype, "_messageSecret", { + get: $util.oneOfGetter($oneOfFields = ["messageSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MediaRetryNotification.create = function create(properties) { + return new MediaRetryNotification(properties); + }; + + MediaRetryNotification.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.stanzaId != null && Object.hasOwnProperty.call(m, "stanzaId")) + w.uint32(10).string(m.stanzaId); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(18).string(m.directPath); + if (m.result != null && Object.hasOwnProperty.call(m, "result")) + w.uint32(24).int32(m.result); + if (m.messageSecret != null && Object.hasOwnProperty.call(m, "messageSecret")) + w.uint32(34).bytes(m.messageSecret); + return w; + }; + + MediaRetryNotification.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MediaRetryNotification(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.stanzaId = r.string(); + break; + } + case 2: { + m.directPath = r.string(); + break; + } + case 3: { + m.result = r.int32(); + break; + } + case 4: { + m.messageSecret = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MediaRetryNotification.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MediaRetryNotification) + return d; + var m = new $root.proto.MediaRetryNotification(); + if (d.stanzaId != null) { + m.stanzaId = String(d.stanzaId); + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + switch (d.result) { + default: + if (typeof d.result === "number") { + m.result = d.result; + break; + } + break; + case "GENERAL_ERROR": + case 0: + m.result = 0; + break; + case "SUCCESS": + case 1: + m.result = 1; + break; + case "NOT_FOUND": + case 2: + m.result = 2; + break; + case "DECRYPTION_ERROR": + case 3: + m.result = 3; + break; + } + if (d.messageSecret != null) { + if (typeof d.messageSecret === "string") + $util.base64.decode(d.messageSecret, m.messageSecret = $util.newBuffer($util.base64.length(d.messageSecret)), 0); + else if (d.messageSecret.length >= 0) + m.messageSecret = d.messageSecret; + } + return m; + }; + + MediaRetryNotification.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.stanzaId != null && m.hasOwnProperty("stanzaId")) { + d.stanzaId = m.stanzaId; + if (o.oneofs) + d._stanzaId = "stanzaId"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.result != null && m.hasOwnProperty("result")) { + d.result = o.enums === String ? $root.proto.MediaRetryNotification.ResultType[m.result] === undefined ? m.result : $root.proto.MediaRetryNotification.ResultType[m.result] : m.result; + if (o.oneofs) + d._result = "result"; + } + if (m.messageSecret != null && m.hasOwnProperty("messageSecret")) { + d.messageSecret = o.bytes === String ? $util.base64.encode(m.messageSecret, 0, m.messageSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.messageSecret) : m.messageSecret; + if (o.oneofs) + d._messageSecret = "messageSecret"; + } + return d; + }; + + MediaRetryNotification.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MediaRetryNotification.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MediaRetryNotification"; + }; + + MediaRetryNotification.ResultType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "GENERAL_ERROR"] = 0; + values[valuesById[1] = "SUCCESS"] = 1; + values[valuesById[2] = "NOT_FOUND"] = 2; + values[valuesById[3] = "DECRYPTION_ERROR"] = 3; + return values; + })(); + + return MediaRetryNotification; + })(); + + proto.MediaVisibility = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DEFAULT"] = 0; + values[valuesById[1] = "OFF"] = 1; + values[valuesById[2] = "ON"] = 2; + return values; + })(); + + proto.MemberLabel = (function() { + + function MemberLabel(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MemberLabel.prototype.label = null; + MemberLabel.prototype.labelTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MemberLabel.prototype, "_label", { + get: $util.oneOfGetter($oneOfFields = ["label"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MemberLabel.prototype, "_labelTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["labelTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MemberLabel.create = function create(properties) { + return new MemberLabel(properties); + }; + + MemberLabel.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.label != null && Object.hasOwnProperty.call(m, "label")) + w.uint32(10).string(m.label); + if (m.labelTimestamp != null && Object.hasOwnProperty.call(m, "labelTimestamp")) + w.uint32(16).int64(m.labelTimestamp); + return w; + }; + + MemberLabel.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MemberLabel(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.label = r.string(); + break; + } + case 2: { + m.labelTimestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MemberLabel.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MemberLabel) + return d; + var m = new $root.proto.MemberLabel(); + if (d.label != null) { + m.label = String(d.label); + } + if (d.labelTimestamp != null) { + if ($util.Long) + (m.labelTimestamp = $util.Long.fromValue(d.labelTimestamp)).unsigned = false; + else if (typeof d.labelTimestamp === "string") + m.labelTimestamp = parseInt(d.labelTimestamp, 10); + else if (typeof d.labelTimestamp === "number") + m.labelTimestamp = d.labelTimestamp; + else if (typeof d.labelTimestamp === "object") + m.labelTimestamp = new $util.LongBits(d.labelTimestamp.low >>> 0, d.labelTimestamp.high >>> 0).toNumber(); + } + return m; + }; + + MemberLabel.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.label != null && m.hasOwnProperty("label")) { + d.label = m.label; + if (o.oneofs) + d._label = "label"; + } + if (m.labelTimestamp != null && m.hasOwnProperty("labelTimestamp")) { + if (typeof m.labelTimestamp === "number") + d.labelTimestamp = o.longs === String ? String(m.labelTimestamp) : m.labelTimestamp; + else + d.labelTimestamp = o.longs === String ? longToString(m.labelTimestamp) : o.longs === Number ? longToNumber(m.labelTimestamp) : m.labelTimestamp; + if (o.oneofs) + d._labelTimestamp = "labelTimestamp"; + } + return d; + }; + + MemberLabel.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MemberLabel.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MemberLabel"; + }; + + return MemberLabel; + })(); + + proto.Message = (function() { + + function Message(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Message.prototype.conversation = null; + Message.prototype.senderKeyDistributionMessage = null; + Message.prototype.imageMessage = null; + Message.prototype.contactMessage = null; + Message.prototype.locationMessage = null; + Message.prototype.extendedTextMessage = null; + Message.prototype.documentMessage = null; + Message.prototype.audioMessage = null; + Message.prototype.videoMessage = null; + Message.prototype.call = null; + Message.prototype.chat = null; + Message.prototype.protocolMessage = null; + Message.prototype.contactsArrayMessage = null; + Message.prototype.highlyStructuredMessage = null; + Message.prototype.fastRatchetKeySenderKeyDistributionMessage = null; + Message.prototype.sendPaymentMessage = null; + Message.prototype.liveLocationMessage = null; + Message.prototype.requestPaymentMessage = null; + Message.prototype.declinePaymentRequestMessage = null; + Message.prototype.cancelPaymentRequestMessage = null; + Message.prototype.templateMessage = null; + Message.prototype.stickerMessage = null; + Message.prototype.groupInviteMessage = null; + Message.prototype.templateButtonReplyMessage = null; + Message.prototype.productMessage = null; + Message.prototype.deviceSentMessage = null; + Message.prototype.messageContextInfo = null; + Message.prototype.listMessage = null; + Message.prototype.viewOnceMessage = null; + Message.prototype.orderMessage = null; + Message.prototype.listResponseMessage = null; + Message.prototype.ephemeralMessage = null; + Message.prototype.invoiceMessage = null; + Message.prototype.buttonsMessage = null; + Message.prototype.buttonsResponseMessage = null; + Message.prototype.paymentInviteMessage = null; + Message.prototype.interactiveMessage = null; + Message.prototype.reactionMessage = null; + Message.prototype.stickerSyncRmrMessage = null; + Message.prototype.interactiveResponseMessage = null; + Message.prototype.pollCreationMessage = null; + Message.prototype.pollUpdateMessage = null; + Message.prototype.keepInChatMessage = null; + Message.prototype.documentWithCaptionMessage = null; + Message.prototype.requestPhoneNumberMessage = null; + Message.prototype.viewOnceMessageV2 = null; + Message.prototype.encReactionMessage = null; + Message.prototype.editedMessage = null; + Message.prototype.viewOnceMessageV2Extension = null; + Message.prototype.pollCreationMessageV2 = null; + Message.prototype.scheduledCallCreationMessage = null; + Message.prototype.groupMentionedMessage = null; + Message.prototype.pinInChatMessage = null; + Message.prototype.pollCreationMessageV3 = null; + Message.prototype.scheduledCallEditMessage = null; + Message.prototype.ptvMessage = null; + Message.prototype.botInvokeMessage = null; + Message.prototype.callLogMesssage = null; + Message.prototype.messageHistoryBundle = null; + Message.prototype.encCommentMessage = null; + Message.prototype.bcallMessage = null; + Message.prototype.lottieStickerMessage = null; + Message.prototype.eventMessage = null; + Message.prototype.encEventResponseMessage = null; + Message.prototype.commentMessage = null; + Message.prototype.newsletterAdminInviteMessage = null; + Message.prototype.placeholderMessage = null; + Message.prototype.secretEncryptedMessage = null; + Message.prototype.albumMessage = null; + Message.prototype.eventCoverImage = null; + Message.prototype.stickerPackMessage = null; + Message.prototype.statusMentionMessage = null; + Message.prototype.pollResultSnapshotMessage = null; + Message.prototype.pollCreationOptionImageMessage = null; + Message.prototype.associatedChildMessage = null; + Message.prototype.groupStatusMentionMessage = null; + Message.prototype.pollCreationMessageV4 = null; + Message.prototype.statusAddYours = null; + Message.prototype.groupStatusMessage = null; + Message.prototype.richResponseMessage = null; + Message.prototype.statusNotificationMessage = null; + Message.prototype.limitSharingMessage = null; + Message.prototype.botTaskMessage = null; + Message.prototype.questionMessage = null; + Message.prototype.messageHistoryNotice = null; + Message.prototype.groupStatusMessageV2 = null; + Message.prototype.botForwardedMessage = null; + Message.prototype.statusQuestionAnswerMessage = null; + Message.prototype.questionReplyMessage = null; + Message.prototype.questionResponseMessage = null; + Message.prototype.statusQuotedMessage = null; + Message.prototype.statusStickerInteractionMessage = null; + Message.prototype.pollCreationMessageV5 = null; + Message.prototype.newsletterFollowerInviteMessageV2 = null; + Message.prototype.pollResultSnapshotMessageV3 = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_conversation", { + get: $util.oneOfGetter($oneOfFields = ["conversation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_senderKeyDistributionMessage", { + get: $util.oneOfGetter($oneOfFields = ["senderKeyDistributionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_imageMessage", { + get: $util.oneOfGetter($oneOfFields = ["imageMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_contactMessage", { + get: $util.oneOfGetter($oneOfFields = ["contactMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_locationMessage", { + get: $util.oneOfGetter($oneOfFields = ["locationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_extendedTextMessage", { + get: $util.oneOfGetter($oneOfFields = ["extendedTextMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_documentMessage", { + get: $util.oneOfGetter($oneOfFields = ["documentMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_audioMessage", { + get: $util.oneOfGetter($oneOfFields = ["audioMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_videoMessage", { + get: $util.oneOfGetter($oneOfFields = ["videoMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_call", { + get: $util.oneOfGetter($oneOfFields = ["call"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_chat", { + get: $util.oneOfGetter($oneOfFields = ["chat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_protocolMessage", { + get: $util.oneOfGetter($oneOfFields = ["protocolMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_contactsArrayMessage", { + get: $util.oneOfGetter($oneOfFields = ["contactsArrayMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_highlyStructuredMessage", { + get: $util.oneOfGetter($oneOfFields = ["highlyStructuredMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_fastRatchetKeySenderKeyDistributionMessage", { + get: $util.oneOfGetter($oneOfFields = ["fastRatchetKeySenderKeyDistributionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_sendPaymentMessage", { + get: $util.oneOfGetter($oneOfFields = ["sendPaymentMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_liveLocationMessage", { + get: $util.oneOfGetter($oneOfFields = ["liveLocationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_requestPaymentMessage", { + get: $util.oneOfGetter($oneOfFields = ["requestPaymentMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_declinePaymentRequestMessage", { + get: $util.oneOfGetter($oneOfFields = ["declinePaymentRequestMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_cancelPaymentRequestMessage", { + get: $util.oneOfGetter($oneOfFields = ["cancelPaymentRequestMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_templateMessage", { + get: $util.oneOfGetter($oneOfFields = ["templateMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_stickerMessage", { + get: $util.oneOfGetter($oneOfFields = ["stickerMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_groupInviteMessage", { + get: $util.oneOfGetter($oneOfFields = ["groupInviteMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_templateButtonReplyMessage", { + get: $util.oneOfGetter($oneOfFields = ["templateButtonReplyMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_productMessage", { + get: $util.oneOfGetter($oneOfFields = ["productMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_deviceSentMessage", { + get: $util.oneOfGetter($oneOfFields = ["deviceSentMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_messageContextInfo", { + get: $util.oneOfGetter($oneOfFields = ["messageContextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_listMessage", { + get: $util.oneOfGetter($oneOfFields = ["listMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_viewOnceMessage", { + get: $util.oneOfGetter($oneOfFields = ["viewOnceMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_orderMessage", { + get: $util.oneOfGetter($oneOfFields = ["orderMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_listResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["listResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_ephemeralMessage", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_invoiceMessage", { + get: $util.oneOfGetter($oneOfFields = ["invoiceMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_buttonsMessage", { + get: $util.oneOfGetter($oneOfFields = ["buttonsMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_buttonsResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["buttonsResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_paymentInviteMessage", { + get: $util.oneOfGetter($oneOfFields = ["paymentInviteMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_interactiveMessage", { + get: $util.oneOfGetter($oneOfFields = ["interactiveMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_reactionMessage", { + get: $util.oneOfGetter($oneOfFields = ["reactionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_stickerSyncRmrMessage", { + get: $util.oneOfGetter($oneOfFields = ["stickerSyncRmrMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_interactiveResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["interactiveResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollCreationMessage", { + get: $util.oneOfGetter($oneOfFields = ["pollCreationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollUpdateMessage", { + get: $util.oneOfGetter($oneOfFields = ["pollUpdateMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_keepInChatMessage", { + get: $util.oneOfGetter($oneOfFields = ["keepInChatMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_documentWithCaptionMessage", { + get: $util.oneOfGetter($oneOfFields = ["documentWithCaptionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_requestPhoneNumberMessage", { + get: $util.oneOfGetter($oneOfFields = ["requestPhoneNumberMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_viewOnceMessageV2", { + get: $util.oneOfGetter($oneOfFields = ["viewOnceMessageV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_encReactionMessage", { + get: $util.oneOfGetter($oneOfFields = ["encReactionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_editedMessage", { + get: $util.oneOfGetter($oneOfFields = ["editedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_viewOnceMessageV2Extension", { + get: $util.oneOfGetter($oneOfFields = ["viewOnceMessageV2Extension"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollCreationMessageV2", { + get: $util.oneOfGetter($oneOfFields = ["pollCreationMessageV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_scheduledCallCreationMessage", { + get: $util.oneOfGetter($oneOfFields = ["scheduledCallCreationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_groupMentionedMessage", { + get: $util.oneOfGetter($oneOfFields = ["groupMentionedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pinInChatMessage", { + get: $util.oneOfGetter($oneOfFields = ["pinInChatMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollCreationMessageV3", { + get: $util.oneOfGetter($oneOfFields = ["pollCreationMessageV3"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_scheduledCallEditMessage", { + get: $util.oneOfGetter($oneOfFields = ["scheduledCallEditMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_ptvMessage", { + get: $util.oneOfGetter($oneOfFields = ["ptvMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_botInvokeMessage", { + get: $util.oneOfGetter($oneOfFields = ["botInvokeMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_callLogMesssage", { + get: $util.oneOfGetter($oneOfFields = ["callLogMesssage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_messageHistoryBundle", { + get: $util.oneOfGetter($oneOfFields = ["messageHistoryBundle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_encCommentMessage", { + get: $util.oneOfGetter($oneOfFields = ["encCommentMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_bcallMessage", { + get: $util.oneOfGetter($oneOfFields = ["bcallMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_lottieStickerMessage", { + get: $util.oneOfGetter($oneOfFields = ["lottieStickerMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_eventMessage", { + get: $util.oneOfGetter($oneOfFields = ["eventMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_encEventResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["encEventResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_commentMessage", { + get: $util.oneOfGetter($oneOfFields = ["commentMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_newsletterAdminInviteMessage", { + get: $util.oneOfGetter($oneOfFields = ["newsletterAdminInviteMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_placeholderMessage", { + get: $util.oneOfGetter($oneOfFields = ["placeholderMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_secretEncryptedMessage", { + get: $util.oneOfGetter($oneOfFields = ["secretEncryptedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_albumMessage", { + get: $util.oneOfGetter($oneOfFields = ["albumMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_eventCoverImage", { + get: $util.oneOfGetter($oneOfFields = ["eventCoverImage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_stickerPackMessage", { + get: $util.oneOfGetter($oneOfFields = ["stickerPackMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_statusMentionMessage", { + get: $util.oneOfGetter($oneOfFields = ["statusMentionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollResultSnapshotMessage", { + get: $util.oneOfGetter($oneOfFields = ["pollResultSnapshotMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollCreationOptionImageMessage", { + get: $util.oneOfGetter($oneOfFields = ["pollCreationOptionImageMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_associatedChildMessage", { + get: $util.oneOfGetter($oneOfFields = ["associatedChildMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_groupStatusMentionMessage", { + get: $util.oneOfGetter($oneOfFields = ["groupStatusMentionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollCreationMessageV4", { + get: $util.oneOfGetter($oneOfFields = ["pollCreationMessageV4"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_statusAddYours", { + get: $util.oneOfGetter($oneOfFields = ["statusAddYours"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_groupStatusMessage", { + get: $util.oneOfGetter($oneOfFields = ["groupStatusMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_richResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["richResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_statusNotificationMessage", { + get: $util.oneOfGetter($oneOfFields = ["statusNotificationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_limitSharingMessage", { + get: $util.oneOfGetter($oneOfFields = ["limitSharingMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_botTaskMessage", { + get: $util.oneOfGetter($oneOfFields = ["botTaskMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_questionMessage", { + get: $util.oneOfGetter($oneOfFields = ["questionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_messageHistoryNotice", { + get: $util.oneOfGetter($oneOfFields = ["messageHistoryNotice"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_groupStatusMessageV2", { + get: $util.oneOfGetter($oneOfFields = ["groupStatusMessageV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_botForwardedMessage", { + get: $util.oneOfGetter($oneOfFields = ["botForwardedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_statusQuestionAnswerMessage", { + get: $util.oneOfGetter($oneOfFields = ["statusQuestionAnswerMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_questionReplyMessage", { + get: $util.oneOfGetter($oneOfFields = ["questionReplyMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_questionResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["questionResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_statusQuotedMessage", { + get: $util.oneOfGetter($oneOfFields = ["statusQuotedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_statusStickerInteractionMessage", { + get: $util.oneOfGetter($oneOfFields = ["statusStickerInteractionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollCreationMessageV5", { + get: $util.oneOfGetter($oneOfFields = ["pollCreationMessageV5"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_newsletterFollowerInviteMessageV2", { + get: $util.oneOfGetter($oneOfFields = ["newsletterFollowerInviteMessageV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Message.prototype, "_pollResultSnapshotMessageV3", { + get: $util.oneOfGetter($oneOfFields = ["pollResultSnapshotMessageV3"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Message.create = function create(properties) { + return new Message(properties); + }; + + Message.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.conversation != null && Object.hasOwnProperty.call(m, "conversation")) + w.uint32(10).string(m.conversation); + if (m.senderKeyDistributionMessage != null && Object.hasOwnProperty.call(m, "senderKeyDistributionMessage")) + $root.proto.Message.SenderKeyDistributionMessage.encode(m.senderKeyDistributionMessage, w.uint32(18).fork()).ldelim(); + if (m.imageMessage != null && Object.hasOwnProperty.call(m, "imageMessage")) + $root.proto.Message.ImageMessage.encode(m.imageMessage, w.uint32(26).fork()).ldelim(); + if (m.contactMessage != null && Object.hasOwnProperty.call(m, "contactMessage")) + $root.proto.Message.ContactMessage.encode(m.contactMessage, w.uint32(34).fork()).ldelim(); + if (m.locationMessage != null && Object.hasOwnProperty.call(m, "locationMessage")) + $root.proto.Message.LocationMessage.encode(m.locationMessage, w.uint32(42).fork()).ldelim(); + if (m.extendedTextMessage != null && Object.hasOwnProperty.call(m, "extendedTextMessage")) + $root.proto.Message.ExtendedTextMessage.encode(m.extendedTextMessage, w.uint32(50).fork()).ldelim(); + if (m.documentMessage != null && Object.hasOwnProperty.call(m, "documentMessage")) + $root.proto.Message.DocumentMessage.encode(m.documentMessage, w.uint32(58).fork()).ldelim(); + if (m.audioMessage != null && Object.hasOwnProperty.call(m, "audioMessage")) + $root.proto.Message.AudioMessage.encode(m.audioMessage, w.uint32(66).fork()).ldelim(); + if (m.videoMessage != null && Object.hasOwnProperty.call(m, "videoMessage")) + $root.proto.Message.VideoMessage.encode(m.videoMessage, w.uint32(74).fork()).ldelim(); + if (m.call != null && Object.hasOwnProperty.call(m, "call")) + $root.proto.Message.Call.encode(m.call, w.uint32(82).fork()).ldelim(); + if (m.chat != null && Object.hasOwnProperty.call(m, "chat")) + $root.proto.Message.Chat.encode(m.chat, w.uint32(90).fork()).ldelim(); + if (m.protocolMessage != null && Object.hasOwnProperty.call(m, "protocolMessage")) + $root.proto.Message.ProtocolMessage.encode(m.protocolMessage, w.uint32(98).fork()).ldelim(); + if (m.contactsArrayMessage != null && Object.hasOwnProperty.call(m, "contactsArrayMessage")) + $root.proto.Message.ContactsArrayMessage.encode(m.contactsArrayMessage, w.uint32(106).fork()).ldelim(); + if (m.highlyStructuredMessage != null && Object.hasOwnProperty.call(m, "highlyStructuredMessage")) + $root.proto.Message.HighlyStructuredMessage.encode(m.highlyStructuredMessage, w.uint32(114).fork()).ldelim(); + if (m.fastRatchetKeySenderKeyDistributionMessage != null && Object.hasOwnProperty.call(m, "fastRatchetKeySenderKeyDistributionMessage")) + $root.proto.Message.SenderKeyDistributionMessage.encode(m.fastRatchetKeySenderKeyDistributionMessage, w.uint32(122).fork()).ldelim(); + if (m.sendPaymentMessage != null && Object.hasOwnProperty.call(m, "sendPaymentMessage")) + $root.proto.Message.SendPaymentMessage.encode(m.sendPaymentMessage, w.uint32(130).fork()).ldelim(); + if (m.liveLocationMessage != null && Object.hasOwnProperty.call(m, "liveLocationMessage")) + $root.proto.Message.LiveLocationMessage.encode(m.liveLocationMessage, w.uint32(146).fork()).ldelim(); + if (m.requestPaymentMessage != null && Object.hasOwnProperty.call(m, "requestPaymentMessage")) + $root.proto.Message.RequestPaymentMessage.encode(m.requestPaymentMessage, w.uint32(178).fork()).ldelim(); + if (m.declinePaymentRequestMessage != null && Object.hasOwnProperty.call(m, "declinePaymentRequestMessage")) + $root.proto.Message.DeclinePaymentRequestMessage.encode(m.declinePaymentRequestMessage, w.uint32(186).fork()).ldelim(); + if (m.cancelPaymentRequestMessage != null && Object.hasOwnProperty.call(m, "cancelPaymentRequestMessage")) + $root.proto.Message.CancelPaymentRequestMessage.encode(m.cancelPaymentRequestMessage, w.uint32(194).fork()).ldelim(); + if (m.templateMessage != null && Object.hasOwnProperty.call(m, "templateMessage")) + $root.proto.Message.TemplateMessage.encode(m.templateMessage, w.uint32(202).fork()).ldelim(); + if (m.stickerMessage != null && Object.hasOwnProperty.call(m, "stickerMessage")) + $root.proto.Message.StickerMessage.encode(m.stickerMessage, w.uint32(210).fork()).ldelim(); + if (m.groupInviteMessage != null && Object.hasOwnProperty.call(m, "groupInviteMessage")) + $root.proto.Message.GroupInviteMessage.encode(m.groupInviteMessage, w.uint32(226).fork()).ldelim(); + if (m.templateButtonReplyMessage != null && Object.hasOwnProperty.call(m, "templateButtonReplyMessage")) + $root.proto.Message.TemplateButtonReplyMessage.encode(m.templateButtonReplyMessage, w.uint32(234).fork()).ldelim(); + if (m.productMessage != null && Object.hasOwnProperty.call(m, "productMessage")) + $root.proto.Message.ProductMessage.encode(m.productMessage, w.uint32(242).fork()).ldelim(); + if (m.deviceSentMessage != null && Object.hasOwnProperty.call(m, "deviceSentMessage")) + $root.proto.Message.DeviceSentMessage.encode(m.deviceSentMessage, w.uint32(250).fork()).ldelim(); + if (m.messageContextInfo != null && Object.hasOwnProperty.call(m, "messageContextInfo")) + $root.proto.MessageContextInfo.encode(m.messageContextInfo, w.uint32(282).fork()).ldelim(); + if (m.listMessage != null && Object.hasOwnProperty.call(m, "listMessage")) + $root.proto.Message.ListMessage.encode(m.listMessage, w.uint32(290).fork()).ldelim(); + if (m.viewOnceMessage != null && Object.hasOwnProperty.call(m, "viewOnceMessage")) + $root.proto.Message.FutureProofMessage.encode(m.viewOnceMessage, w.uint32(298).fork()).ldelim(); + if (m.orderMessage != null && Object.hasOwnProperty.call(m, "orderMessage")) + $root.proto.Message.OrderMessage.encode(m.orderMessage, w.uint32(306).fork()).ldelim(); + if (m.listResponseMessage != null && Object.hasOwnProperty.call(m, "listResponseMessage")) + $root.proto.Message.ListResponseMessage.encode(m.listResponseMessage, w.uint32(314).fork()).ldelim(); + if (m.ephemeralMessage != null && Object.hasOwnProperty.call(m, "ephemeralMessage")) + $root.proto.Message.FutureProofMessage.encode(m.ephemeralMessage, w.uint32(322).fork()).ldelim(); + if (m.invoiceMessage != null && Object.hasOwnProperty.call(m, "invoiceMessage")) + $root.proto.Message.InvoiceMessage.encode(m.invoiceMessage, w.uint32(330).fork()).ldelim(); + if (m.buttonsMessage != null && Object.hasOwnProperty.call(m, "buttonsMessage")) + $root.proto.Message.ButtonsMessage.encode(m.buttonsMessage, w.uint32(338).fork()).ldelim(); + if (m.buttonsResponseMessage != null && Object.hasOwnProperty.call(m, "buttonsResponseMessage")) + $root.proto.Message.ButtonsResponseMessage.encode(m.buttonsResponseMessage, w.uint32(346).fork()).ldelim(); + if (m.paymentInviteMessage != null && Object.hasOwnProperty.call(m, "paymentInviteMessage")) + $root.proto.Message.PaymentInviteMessage.encode(m.paymentInviteMessage, w.uint32(354).fork()).ldelim(); + if (m.interactiveMessage != null && Object.hasOwnProperty.call(m, "interactiveMessage")) + $root.proto.Message.InteractiveMessage.encode(m.interactiveMessage, w.uint32(362).fork()).ldelim(); + if (m.reactionMessage != null && Object.hasOwnProperty.call(m, "reactionMessage")) + $root.proto.Message.ReactionMessage.encode(m.reactionMessage, w.uint32(370).fork()).ldelim(); + if (m.stickerSyncRmrMessage != null && Object.hasOwnProperty.call(m, "stickerSyncRmrMessage")) + $root.proto.Message.StickerSyncRMRMessage.encode(m.stickerSyncRmrMessage, w.uint32(378).fork()).ldelim(); + if (m.interactiveResponseMessage != null && Object.hasOwnProperty.call(m, "interactiveResponseMessage")) + $root.proto.Message.InteractiveResponseMessage.encode(m.interactiveResponseMessage, w.uint32(386).fork()).ldelim(); + if (m.pollCreationMessage != null && Object.hasOwnProperty.call(m, "pollCreationMessage")) + $root.proto.Message.PollCreationMessage.encode(m.pollCreationMessage, w.uint32(394).fork()).ldelim(); + if (m.pollUpdateMessage != null && Object.hasOwnProperty.call(m, "pollUpdateMessage")) + $root.proto.Message.PollUpdateMessage.encode(m.pollUpdateMessage, w.uint32(402).fork()).ldelim(); + if (m.keepInChatMessage != null && Object.hasOwnProperty.call(m, "keepInChatMessage")) + $root.proto.Message.KeepInChatMessage.encode(m.keepInChatMessage, w.uint32(410).fork()).ldelim(); + if (m.documentWithCaptionMessage != null && Object.hasOwnProperty.call(m, "documentWithCaptionMessage")) + $root.proto.Message.FutureProofMessage.encode(m.documentWithCaptionMessage, w.uint32(426).fork()).ldelim(); + if (m.requestPhoneNumberMessage != null && Object.hasOwnProperty.call(m, "requestPhoneNumberMessage")) + $root.proto.Message.RequestPhoneNumberMessage.encode(m.requestPhoneNumberMessage, w.uint32(434).fork()).ldelim(); + if (m.viewOnceMessageV2 != null && Object.hasOwnProperty.call(m, "viewOnceMessageV2")) + $root.proto.Message.FutureProofMessage.encode(m.viewOnceMessageV2, w.uint32(442).fork()).ldelim(); + if (m.encReactionMessage != null && Object.hasOwnProperty.call(m, "encReactionMessage")) + $root.proto.Message.EncReactionMessage.encode(m.encReactionMessage, w.uint32(450).fork()).ldelim(); + if (m.editedMessage != null && Object.hasOwnProperty.call(m, "editedMessage")) + $root.proto.Message.FutureProofMessage.encode(m.editedMessage, w.uint32(466).fork()).ldelim(); + if (m.viewOnceMessageV2Extension != null && Object.hasOwnProperty.call(m, "viewOnceMessageV2Extension")) + $root.proto.Message.FutureProofMessage.encode(m.viewOnceMessageV2Extension, w.uint32(474).fork()).ldelim(); + if (m.pollCreationMessageV2 != null && Object.hasOwnProperty.call(m, "pollCreationMessageV2")) + $root.proto.Message.PollCreationMessage.encode(m.pollCreationMessageV2, w.uint32(482).fork()).ldelim(); + if (m.scheduledCallCreationMessage != null && Object.hasOwnProperty.call(m, "scheduledCallCreationMessage")) + $root.proto.Message.ScheduledCallCreationMessage.encode(m.scheduledCallCreationMessage, w.uint32(490).fork()).ldelim(); + if (m.groupMentionedMessage != null && Object.hasOwnProperty.call(m, "groupMentionedMessage")) + $root.proto.Message.FutureProofMessage.encode(m.groupMentionedMessage, w.uint32(498).fork()).ldelim(); + if (m.pinInChatMessage != null && Object.hasOwnProperty.call(m, "pinInChatMessage")) + $root.proto.Message.PinInChatMessage.encode(m.pinInChatMessage, w.uint32(506).fork()).ldelim(); + if (m.pollCreationMessageV3 != null && Object.hasOwnProperty.call(m, "pollCreationMessageV3")) + $root.proto.Message.PollCreationMessage.encode(m.pollCreationMessageV3, w.uint32(514).fork()).ldelim(); + if (m.scheduledCallEditMessage != null && Object.hasOwnProperty.call(m, "scheduledCallEditMessage")) + $root.proto.Message.ScheduledCallEditMessage.encode(m.scheduledCallEditMessage, w.uint32(522).fork()).ldelim(); + if (m.ptvMessage != null && Object.hasOwnProperty.call(m, "ptvMessage")) + $root.proto.Message.VideoMessage.encode(m.ptvMessage, w.uint32(530).fork()).ldelim(); + if (m.botInvokeMessage != null && Object.hasOwnProperty.call(m, "botInvokeMessage")) + $root.proto.Message.FutureProofMessage.encode(m.botInvokeMessage, w.uint32(538).fork()).ldelim(); + if (m.callLogMesssage != null && Object.hasOwnProperty.call(m, "callLogMesssage")) + $root.proto.Message.CallLogMessage.encode(m.callLogMesssage, w.uint32(554).fork()).ldelim(); + if (m.messageHistoryBundle != null && Object.hasOwnProperty.call(m, "messageHistoryBundle")) + $root.proto.Message.MessageHistoryBundle.encode(m.messageHistoryBundle, w.uint32(562).fork()).ldelim(); + if (m.encCommentMessage != null && Object.hasOwnProperty.call(m, "encCommentMessage")) + $root.proto.Message.EncCommentMessage.encode(m.encCommentMessage, w.uint32(570).fork()).ldelim(); + if (m.bcallMessage != null && Object.hasOwnProperty.call(m, "bcallMessage")) + $root.proto.Message.BCallMessage.encode(m.bcallMessage, w.uint32(578).fork()).ldelim(); + if (m.lottieStickerMessage != null && Object.hasOwnProperty.call(m, "lottieStickerMessage")) + $root.proto.Message.FutureProofMessage.encode(m.lottieStickerMessage, w.uint32(594).fork()).ldelim(); + if (m.eventMessage != null && Object.hasOwnProperty.call(m, "eventMessage")) + $root.proto.Message.EventMessage.encode(m.eventMessage, w.uint32(602).fork()).ldelim(); + if (m.encEventResponseMessage != null && Object.hasOwnProperty.call(m, "encEventResponseMessage")) + $root.proto.Message.EncEventResponseMessage.encode(m.encEventResponseMessage, w.uint32(610).fork()).ldelim(); + if (m.commentMessage != null && Object.hasOwnProperty.call(m, "commentMessage")) + $root.proto.Message.CommentMessage.encode(m.commentMessage, w.uint32(618).fork()).ldelim(); + if (m.newsletterAdminInviteMessage != null && Object.hasOwnProperty.call(m, "newsletterAdminInviteMessage")) + $root.proto.Message.NewsletterAdminInviteMessage.encode(m.newsletterAdminInviteMessage, w.uint32(626).fork()).ldelim(); + if (m.placeholderMessage != null && Object.hasOwnProperty.call(m, "placeholderMessage")) + $root.proto.Message.PlaceholderMessage.encode(m.placeholderMessage, w.uint32(642).fork()).ldelim(); + if (m.secretEncryptedMessage != null && Object.hasOwnProperty.call(m, "secretEncryptedMessage")) + $root.proto.Message.SecretEncryptedMessage.encode(m.secretEncryptedMessage, w.uint32(658).fork()).ldelim(); + if (m.albumMessage != null && Object.hasOwnProperty.call(m, "albumMessage")) + $root.proto.Message.AlbumMessage.encode(m.albumMessage, w.uint32(666).fork()).ldelim(); + if (m.eventCoverImage != null && Object.hasOwnProperty.call(m, "eventCoverImage")) + $root.proto.Message.FutureProofMessage.encode(m.eventCoverImage, w.uint32(682).fork()).ldelim(); + if (m.stickerPackMessage != null && Object.hasOwnProperty.call(m, "stickerPackMessage")) + $root.proto.Message.StickerPackMessage.encode(m.stickerPackMessage, w.uint32(690).fork()).ldelim(); + if (m.statusMentionMessage != null && Object.hasOwnProperty.call(m, "statusMentionMessage")) + $root.proto.Message.FutureProofMessage.encode(m.statusMentionMessage, w.uint32(698).fork()).ldelim(); + if (m.pollResultSnapshotMessage != null && Object.hasOwnProperty.call(m, "pollResultSnapshotMessage")) + $root.proto.Message.PollResultSnapshotMessage.encode(m.pollResultSnapshotMessage, w.uint32(706).fork()).ldelim(); + if (m.pollCreationOptionImageMessage != null && Object.hasOwnProperty.call(m, "pollCreationOptionImageMessage")) + $root.proto.Message.FutureProofMessage.encode(m.pollCreationOptionImageMessage, w.uint32(722).fork()).ldelim(); + if (m.associatedChildMessage != null && Object.hasOwnProperty.call(m, "associatedChildMessage")) + $root.proto.Message.FutureProofMessage.encode(m.associatedChildMessage, w.uint32(730).fork()).ldelim(); + if (m.groupStatusMentionMessage != null && Object.hasOwnProperty.call(m, "groupStatusMentionMessage")) + $root.proto.Message.FutureProofMessage.encode(m.groupStatusMentionMessage, w.uint32(738).fork()).ldelim(); + if (m.pollCreationMessageV4 != null && Object.hasOwnProperty.call(m, "pollCreationMessageV4")) + $root.proto.Message.FutureProofMessage.encode(m.pollCreationMessageV4, w.uint32(746).fork()).ldelim(); + if (m.statusAddYours != null && Object.hasOwnProperty.call(m, "statusAddYours")) + $root.proto.Message.FutureProofMessage.encode(m.statusAddYours, w.uint32(762).fork()).ldelim(); + if (m.groupStatusMessage != null && Object.hasOwnProperty.call(m, "groupStatusMessage")) + $root.proto.Message.FutureProofMessage.encode(m.groupStatusMessage, w.uint32(770).fork()).ldelim(); + if (m.richResponseMessage != null && Object.hasOwnProperty.call(m, "richResponseMessage")) + $root.proto.AIRichResponseMessage.encode(m.richResponseMessage, w.uint32(778).fork()).ldelim(); + if (m.statusNotificationMessage != null && Object.hasOwnProperty.call(m, "statusNotificationMessage")) + $root.proto.Message.StatusNotificationMessage.encode(m.statusNotificationMessage, w.uint32(786).fork()).ldelim(); + if (m.limitSharingMessage != null && Object.hasOwnProperty.call(m, "limitSharingMessage")) + $root.proto.Message.FutureProofMessage.encode(m.limitSharingMessage, w.uint32(794).fork()).ldelim(); + if (m.botTaskMessage != null && Object.hasOwnProperty.call(m, "botTaskMessage")) + $root.proto.Message.FutureProofMessage.encode(m.botTaskMessage, w.uint32(802).fork()).ldelim(); + if (m.questionMessage != null && Object.hasOwnProperty.call(m, "questionMessage")) + $root.proto.Message.FutureProofMessage.encode(m.questionMessage, w.uint32(810).fork()).ldelim(); + if (m.messageHistoryNotice != null && Object.hasOwnProperty.call(m, "messageHistoryNotice")) + $root.proto.Message.MessageHistoryNotice.encode(m.messageHistoryNotice, w.uint32(818).fork()).ldelim(); + if (m.groupStatusMessageV2 != null && Object.hasOwnProperty.call(m, "groupStatusMessageV2")) + $root.proto.Message.FutureProofMessage.encode(m.groupStatusMessageV2, w.uint32(826).fork()).ldelim(); + if (m.botForwardedMessage != null && Object.hasOwnProperty.call(m, "botForwardedMessage")) + $root.proto.Message.FutureProofMessage.encode(m.botForwardedMessage, w.uint32(834).fork()).ldelim(); + if (m.statusQuestionAnswerMessage != null && Object.hasOwnProperty.call(m, "statusQuestionAnswerMessage")) + $root.proto.Message.StatusQuestionAnswerMessage.encode(m.statusQuestionAnswerMessage, w.uint32(842).fork()).ldelim(); + if (m.questionReplyMessage != null && Object.hasOwnProperty.call(m, "questionReplyMessage")) + $root.proto.Message.FutureProofMessage.encode(m.questionReplyMessage, w.uint32(850).fork()).ldelim(); + if (m.questionResponseMessage != null && Object.hasOwnProperty.call(m, "questionResponseMessage")) + $root.proto.Message.QuestionResponseMessage.encode(m.questionResponseMessage, w.uint32(858).fork()).ldelim(); + if (m.statusQuotedMessage != null && Object.hasOwnProperty.call(m, "statusQuotedMessage")) + $root.proto.Message.StatusQuotedMessage.encode(m.statusQuotedMessage, w.uint32(874).fork()).ldelim(); + if (m.statusStickerInteractionMessage != null && Object.hasOwnProperty.call(m, "statusStickerInteractionMessage")) + $root.proto.Message.StatusStickerInteractionMessage.encode(m.statusStickerInteractionMessage, w.uint32(882).fork()).ldelim(); + if (m.pollCreationMessageV5 != null && Object.hasOwnProperty.call(m, "pollCreationMessageV5")) + $root.proto.Message.PollCreationMessage.encode(m.pollCreationMessageV5, w.uint32(890).fork()).ldelim(); + if (m.newsletterFollowerInviteMessageV2 != null && Object.hasOwnProperty.call(m, "newsletterFollowerInviteMessageV2")) + $root.proto.Message.NewsletterFollowerInviteMessage.encode(m.newsletterFollowerInviteMessageV2, w.uint32(906).fork()).ldelim(); + if (m.pollResultSnapshotMessageV3 != null && Object.hasOwnProperty.call(m, "pollResultSnapshotMessageV3")) + $root.proto.Message.PollResultSnapshotMessage.encode(m.pollResultSnapshotMessageV3, w.uint32(914).fork()).ldelim(); + return w; + }; + + Message.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.conversation = r.string(); + break; + } + case 2: { + m.senderKeyDistributionMessage = $root.proto.Message.SenderKeyDistributionMessage.decode(r, r.uint32()); + break; + } + case 3: { + m.imageMessage = $root.proto.Message.ImageMessage.decode(r, r.uint32()); + break; + } + case 4: { + m.contactMessage = $root.proto.Message.ContactMessage.decode(r, r.uint32()); + break; + } + case 5: { + m.locationMessage = $root.proto.Message.LocationMessage.decode(r, r.uint32()); + break; + } + case 6: { + m.extendedTextMessage = $root.proto.Message.ExtendedTextMessage.decode(r, r.uint32()); + break; + } + case 7: { + m.documentMessage = $root.proto.Message.DocumentMessage.decode(r, r.uint32()); + break; + } + case 8: { + m.audioMessage = $root.proto.Message.AudioMessage.decode(r, r.uint32()); + break; + } + case 9: { + m.videoMessage = $root.proto.Message.VideoMessage.decode(r, r.uint32()); + break; + } + case 10: { + m.call = $root.proto.Message.Call.decode(r, r.uint32()); + break; + } + case 11: { + m.chat = $root.proto.Message.Chat.decode(r, r.uint32()); + break; + } + case 12: { + m.protocolMessage = $root.proto.Message.ProtocolMessage.decode(r, r.uint32()); + break; + } + case 13: { + m.contactsArrayMessage = $root.proto.Message.ContactsArrayMessage.decode(r, r.uint32()); + break; + } + case 14: { + m.highlyStructuredMessage = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + case 15: { + m.fastRatchetKeySenderKeyDistributionMessage = $root.proto.Message.SenderKeyDistributionMessage.decode(r, r.uint32()); + break; + } + case 16: { + m.sendPaymentMessage = $root.proto.Message.SendPaymentMessage.decode(r, r.uint32()); + break; + } + case 18: { + m.liveLocationMessage = $root.proto.Message.LiveLocationMessage.decode(r, r.uint32()); + break; + } + case 22: { + m.requestPaymentMessage = $root.proto.Message.RequestPaymentMessage.decode(r, r.uint32()); + break; + } + case 23: { + m.declinePaymentRequestMessage = $root.proto.Message.DeclinePaymentRequestMessage.decode(r, r.uint32()); + break; + } + case 24: { + m.cancelPaymentRequestMessage = $root.proto.Message.CancelPaymentRequestMessage.decode(r, r.uint32()); + break; + } + case 25: { + m.templateMessage = $root.proto.Message.TemplateMessage.decode(r, r.uint32()); + break; + } + case 26: { + m.stickerMessage = $root.proto.Message.StickerMessage.decode(r, r.uint32()); + break; + } + case 28: { + m.groupInviteMessage = $root.proto.Message.GroupInviteMessage.decode(r, r.uint32()); + break; + } + case 29: { + m.templateButtonReplyMessage = $root.proto.Message.TemplateButtonReplyMessage.decode(r, r.uint32()); + break; + } + case 30: { + m.productMessage = $root.proto.Message.ProductMessage.decode(r, r.uint32()); + break; + } + case 31: { + m.deviceSentMessage = $root.proto.Message.DeviceSentMessage.decode(r, r.uint32()); + break; + } + case 35: { + m.messageContextInfo = $root.proto.MessageContextInfo.decode(r, r.uint32()); + break; + } + case 36: { + m.listMessage = $root.proto.Message.ListMessage.decode(r, r.uint32()); + break; + } + case 37: { + m.viewOnceMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 38: { + m.orderMessage = $root.proto.Message.OrderMessage.decode(r, r.uint32()); + break; + } + case 39: { + m.listResponseMessage = $root.proto.Message.ListResponseMessage.decode(r, r.uint32()); + break; + } + case 40: { + m.ephemeralMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 41: { + m.invoiceMessage = $root.proto.Message.InvoiceMessage.decode(r, r.uint32()); + break; + } + case 42: { + m.buttonsMessage = $root.proto.Message.ButtonsMessage.decode(r, r.uint32()); + break; + } + case 43: { + m.buttonsResponseMessage = $root.proto.Message.ButtonsResponseMessage.decode(r, r.uint32()); + break; + } + case 44: { + m.paymentInviteMessage = $root.proto.Message.PaymentInviteMessage.decode(r, r.uint32()); + break; + } + case 45: { + m.interactiveMessage = $root.proto.Message.InteractiveMessage.decode(r, r.uint32()); + break; + } + case 46: { + m.reactionMessage = $root.proto.Message.ReactionMessage.decode(r, r.uint32()); + break; + } + case 47: { + m.stickerSyncRmrMessage = $root.proto.Message.StickerSyncRMRMessage.decode(r, r.uint32()); + break; + } + case 48: { + m.interactiveResponseMessage = $root.proto.Message.InteractiveResponseMessage.decode(r, r.uint32()); + break; + } + case 49: { + m.pollCreationMessage = $root.proto.Message.PollCreationMessage.decode(r, r.uint32()); + break; + } + case 50: { + m.pollUpdateMessage = $root.proto.Message.PollUpdateMessage.decode(r, r.uint32()); + break; + } + case 51: { + m.keepInChatMessage = $root.proto.Message.KeepInChatMessage.decode(r, r.uint32()); + break; + } + case 53: { + m.documentWithCaptionMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 54: { + m.requestPhoneNumberMessage = $root.proto.Message.RequestPhoneNumberMessage.decode(r, r.uint32()); + break; + } + case 55: { + m.viewOnceMessageV2 = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 56: { + m.encReactionMessage = $root.proto.Message.EncReactionMessage.decode(r, r.uint32()); + break; + } + case 58: { + m.editedMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 59: { + m.viewOnceMessageV2Extension = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 60: { + m.pollCreationMessageV2 = $root.proto.Message.PollCreationMessage.decode(r, r.uint32()); + break; + } + case 61: { + m.scheduledCallCreationMessage = $root.proto.Message.ScheduledCallCreationMessage.decode(r, r.uint32()); + break; + } + case 62: { + m.groupMentionedMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 63: { + m.pinInChatMessage = $root.proto.Message.PinInChatMessage.decode(r, r.uint32()); + break; + } + case 64: { + m.pollCreationMessageV3 = $root.proto.Message.PollCreationMessage.decode(r, r.uint32()); + break; + } + case 65: { + m.scheduledCallEditMessage = $root.proto.Message.ScheduledCallEditMessage.decode(r, r.uint32()); + break; + } + case 66: { + m.ptvMessage = $root.proto.Message.VideoMessage.decode(r, r.uint32()); + break; + } + case 67: { + m.botInvokeMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 69: { + m.callLogMesssage = $root.proto.Message.CallLogMessage.decode(r, r.uint32()); + break; + } + case 70: { + m.messageHistoryBundle = $root.proto.Message.MessageHistoryBundle.decode(r, r.uint32()); + break; + } + case 71: { + m.encCommentMessage = $root.proto.Message.EncCommentMessage.decode(r, r.uint32()); + break; + } + case 72: { + m.bcallMessage = $root.proto.Message.BCallMessage.decode(r, r.uint32()); + break; + } + case 74: { + m.lottieStickerMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 75: { + m.eventMessage = $root.proto.Message.EventMessage.decode(r, r.uint32()); + break; + } + case 76: { + m.encEventResponseMessage = $root.proto.Message.EncEventResponseMessage.decode(r, r.uint32()); + break; + } + case 77: { + m.commentMessage = $root.proto.Message.CommentMessage.decode(r, r.uint32()); + break; + } + case 78: { + m.newsletterAdminInviteMessage = $root.proto.Message.NewsletterAdminInviteMessage.decode(r, r.uint32()); + break; + } + case 80: { + m.placeholderMessage = $root.proto.Message.PlaceholderMessage.decode(r, r.uint32()); + break; + } + case 82: { + m.secretEncryptedMessage = $root.proto.Message.SecretEncryptedMessage.decode(r, r.uint32()); + break; + } + case 83: { + m.albumMessage = $root.proto.Message.AlbumMessage.decode(r, r.uint32()); + break; + } + case 85: { + m.eventCoverImage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 86: { + m.stickerPackMessage = $root.proto.Message.StickerPackMessage.decode(r, r.uint32()); + break; + } + case 87: { + m.statusMentionMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 88: { + m.pollResultSnapshotMessage = $root.proto.Message.PollResultSnapshotMessage.decode(r, r.uint32()); + break; + } + case 90: { + m.pollCreationOptionImageMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 91: { + m.associatedChildMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 92: { + m.groupStatusMentionMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 93: { + m.pollCreationMessageV4 = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 95: { + m.statusAddYours = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 96: { + m.groupStatusMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 97: { + m.richResponseMessage = $root.proto.AIRichResponseMessage.decode(r, r.uint32()); + break; + } + case 98: { + m.statusNotificationMessage = $root.proto.Message.StatusNotificationMessage.decode(r, r.uint32()); + break; + } + case 99: { + m.limitSharingMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 100: { + m.botTaskMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 101: { + m.questionMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 102: { + m.messageHistoryNotice = $root.proto.Message.MessageHistoryNotice.decode(r, r.uint32()); + break; + } + case 103: { + m.groupStatusMessageV2 = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 104: { + m.botForwardedMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 105: { + m.statusQuestionAnswerMessage = $root.proto.Message.StatusQuestionAnswerMessage.decode(r, r.uint32()); + break; + } + case 106: { + m.questionReplyMessage = $root.proto.Message.FutureProofMessage.decode(r, r.uint32()); + break; + } + case 107: { + m.questionResponseMessage = $root.proto.Message.QuestionResponseMessage.decode(r, r.uint32()); + break; + } + case 109: { + m.statusQuotedMessage = $root.proto.Message.StatusQuotedMessage.decode(r, r.uint32()); + break; + } + case 110: { + m.statusStickerInteractionMessage = $root.proto.Message.StatusStickerInteractionMessage.decode(r, r.uint32()); + break; + } + case 111: { + m.pollCreationMessageV5 = $root.proto.Message.PollCreationMessage.decode(r, r.uint32()); + break; + } + case 113: { + m.newsletterFollowerInviteMessageV2 = $root.proto.Message.NewsletterFollowerInviteMessage.decode(r, r.uint32()); + break; + } + case 114: { + m.pollResultSnapshotMessageV3 = $root.proto.Message.PollResultSnapshotMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Message.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message) + return d; + var m = new $root.proto.Message(); + if (d.conversation != null) { + m.conversation = String(d.conversation); + } + if (d.senderKeyDistributionMessage != null) { + if (typeof d.senderKeyDistributionMessage !== "object") + throw TypeError(".proto.Message.senderKeyDistributionMessage: object expected"); + m.senderKeyDistributionMessage = $root.proto.Message.SenderKeyDistributionMessage.fromObject(d.senderKeyDistributionMessage); + } + if (d.imageMessage != null) { + if (typeof d.imageMessage !== "object") + throw TypeError(".proto.Message.imageMessage: object expected"); + m.imageMessage = $root.proto.Message.ImageMessage.fromObject(d.imageMessage); + } + if (d.contactMessage != null) { + if (typeof d.contactMessage !== "object") + throw TypeError(".proto.Message.contactMessage: object expected"); + m.contactMessage = $root.proto.Message.ContactMessage.fromObject(d.contactMessage); + } + if (d.locationMessage != null) { + if (typeof d.locationMessage !== "object") + throw TypeError(".proto.Message.locationMessage: object expected"); + m.locationMessage = $root.proto.Message.LocationMessage.fromObject(d.locationMessage); + } + if (d.extendedTextMessage != null) { + if (typeof d.extendedTextMessage !== "object") + throw TypeError(".proto.Message.extendedTextMessage: object expected"); + m.extendedTextMessage = $root.proto.Message.ExtendedTextMessage.fromObject(d.extendedTextMessage); + } + if (d.documentMessage != null) { + if (typeof d.documentMessage !== "object") + throw TypeError(".proto.Message.documentMessage: object expected"); + m.documentMessage = $root.proto.Message.DocumentMessage.fromObject(d.documentMessage); + } + if (d.audioMessage != null) { + if (typeof d.audioMessage !== "object") + throw TypeError(".proto.Message.audioMessage: object expected"); + m.audioMessage = $root.proto.Message.AudioMessage.fromObject(d.audioMessage); + } + if (d.videoMessage != null) { + if (typeof d.videoMessage !== "object") + throw TypeError(".proto.Message.videoMessage: object expected"); + m.videoMessage = $root.proto.Message.VideoMessage.fromObject(d.videoMessage); + } + if (d.call != null) { + if (typeof d.call !== "object") + throw TypeError(".proto.Message.call: object expected"); + m.call = $root.proto.Message.Call.fromObject(d.call); + } + if (d.chat != null) { + if (typeof d.chat !== "object") + throw TypeError(".proto.Message.chat: object expected"); + m.chat = $root.proto.Message.Chat.fromObject(d.chat); + } + if (d.protocolMessage != null) { + if (typeof d.protocolMessage !== "object") + throw TypeError(".proto.Message.protocolMessage: object expected"); + m.protocolMessage = $root.proto.Message.ProtocolMessage.fromObject(d.protocolMessage); + } + if (d.contactsArrayMessage != null) { + if (typeof d.contactsArrayMessage !== "object") + throw TypeError(".proto.Message.contactsArrayMessage: object expected"); + m.contactsArrayMessage = $root.proto.Message.ContactsArrayMessage.fromObject(d.contactsArrayMessage); + } + if (d.highlyStructuredMessage != null) { + if (typeof d.highlyStructuredMessage !== "object") + throw TypeError(".proto.Message.highlyStructuredMessage: object expected"); + m.highlyStructuredMessage = $root.proto.Message.HighlyStructuredMessage.fromObject(d.highlyStructuredMessage); + } + if (d.fastRatchetKeySenderKeyDistributionMessage != null) { + if (typeof d.fastRatchetKeySenderKeyDistributionMessage !== "object") + throw TypeError(".proto.Message.fastRatchetKeySenderKeyDistributionMessage: object expected"); + m.fastRatchetKeySenderKeyDistributionMessage = $root.proto.Message.SenderKeyDistributionMessage.fromObject(d.fastRatchetKeySenderKeyDistributionMessage); + } + if (d.sendPaymentMessage != null) { + if (typeof d.sendPaymentMessage !== "object") + throw TypeError(".proto.Message.sendPaymentMessage: object expected"); + m.sendPaymentMessage = $root.proto.Message.SendPaymentMessage.fromObject(d.sendPaymentMessage); + } + if (d.liveLocationMessage != null) { + if (typeof d.liveLocationMessage !== "object") + throw TypeError(".proto.Message.liveLocationMessage: object expected"); + m.liveLocationMessage = $root.proto.Message.LiveLocationMessage.fromObject(d.liveLocationMessage); + } + if (d.requestPaymentMessage != null) { + if (typeof d.requestPaymentMessage !== "object") + throw TypeError(".proto.Message.requestPaymentMessage: object expected"); + m.requestPaymentMessage = $root.proto.Message.RequestPaymentMessage.fromObject(d.requestPaymentMessage); + } + if (d.declinePaymentRequestMessage != null) { + if (typeof d.declinePaymentRequestMessage !== "object") + throw TypeError(".proto.Message.declinePaymentRequestMessage: object expected"); + m.declinePaymentRequestMessage = $root.proto.Message.DeclinePaymentRequestMessage.fromObject(d.declinePaymentRequestMessage); + } + if (d.cancelPaymentRequestMessage != null) { + if (typeof d.cancelPaymentRequestMessage !== "object") + throw TypeError(".proto.Message.cancelPaymentRequestMessage: object expected"); + m.cancelPaymentRequestMessage = $root.proto.Message.CancelPaymentRequestMessage.fromObject(d.cancelPaymentRequestMessage); + } + if (d.templateMessage != null) { + if (typeof d.templateMessage !== "object") + throw TypeError(".proto.Message.templateMessage: object expected"); + m.templateMessage = $root.proto.Message.TemplateMessage.fromObject(d.templateMessage); + } + if (d.stickerMessage != null) { + if (typeof d.stickerMessage !== "object") + throw TypeError(".proto.Message.stickerMessage: object expected"); + m.stickerMessage = $root.proto.Message.StickerMessage.fromObject(d.stickerMessage); + } + if (d.groupInviteMessage != null) { + if (typeof d.groupInviteMessage !== "object") + throw TypeError(".proto.Message.groupInviteMessage: object expected"); + m.groupInviteMessage = $root.proto.Message.GroupInviteMessage.fromObject(d.groupInviteMessage); + } + if (d.templateButtonReplyMessage != null) { + if (typeof d.templateButtonReplyMessage !== "object") + throw TypeError(".proto.Message.templateButtonReplyMessage: object expected"); + m.templateButtonReplyMessage = $root.proto.Message.TemplateButtonReplyMessage.fromObject(d.templateButtonReplyMessage); + } + if (d.productMessage != null) { + if (typeof d.productMessage !== "object") + throw TypeError(".proto.Message.productMessage: object expected"); + m.productMessage = $root.proto.Message.ProductMessage.fromObject(d.productMessage); + } + if (d.deviceSentMessage != null) { + if (typeof d.deviceSentMessage !== "object") + throw TypeError(".proto.Message.deviceSentMessage: object expected"); + m.deviceSentMessage = $root.proto.Message.DeviceSentMessage.fromObject(d.deviceSentMessage); + } + if (d.messageContextInfo != null) { + if (typeof d.messageContextInfo !== "object") + throw TypeError(".proto.Message.messageContextInfo: object expected"); + m.messageContextInfo = $root.proto.MessageContextInfo.fromObject(d.messageContextInfo); + } + if (d.listMessage != null) { + if (typeof d.listMessage !== "object") + throw TypeError(".proto.Message.listMessage: object expected"); + m.listMessage = $root.proto.Message.ListMessage.fromObject(d.listMessage); + } + if (d.viewOnceMessage != null) { + if (typeof d.viewOnceMessage !== "object") + throw TypeError(".proto.Message.viewOnceMessage: object expected"); + m.viewOnceMessage = $root.proto.Message.FutureProofMessage.fromObject(d.viewOnceMessage); + } + if (d.orderMessage != null) { + if (typeof d.orderMessage !== "object") + throw TypeError(".proto.Message.orderMessage: object expected"); + m.orderMessage = $root.proto.Message.OrderMessage.fromObject(d.orderMessage); + } + if (d.listResponseMessage != null) { + if (typeof d.listResponseMessage !== "object") + throw TypeError(".proto.Message.listResponseMessage: object expected"); + m.listResponseMessage = $root.proto.Message.ListResponseMessage.fromObject(d.listResponseMessage); + } + if (d.ephemeralMessage != null) { + if (typeof d.ephemeralMessage !== "object") + throw TypeError(".proto.Message.ephemeralMessage: object expected"); + m.ephemeralMessage = $root.proto.Message.FutureProofMessage.fromObject(d.ephemeralMessage); + } + if (d.invoiceMessage != null) { + if (typeof d.invoiceMessage !== "object") + throw TypeError(".proto.Message.invoiceMessage: object expected"); + m.invoiceMessage = $root.proto.Message.InvoiceMessage.fromObject(d.invoiceMessage); + } + if (d.buttonsMessage != null) { + if (typeof d.buttonsMessage !== "object") + throw TypeError(".proto.Message.buttonsMessage: object expected"); + m.buttonsMessage = $root.proto.Message.ButtonsMessage.fromObject(d.buttonsMessage); + } + if (d.buttonsResponseMessage != null) { + if (typeof d.buttonsResponseMessage !== "object") + throw TypeError(".proto.Message.buttonsResponseMessage: object expected"); + m.buttonsResponseMessage = $root.proto.Message.ButtonsResponseMessage.fromObject(d.buttonsResponseMessage); + } + if (d.paymentInviteMessage != null) { + if (typeof d.paymentInviteMessage !== "object") + throw TypeError(".proto.Message.paymentInviteMessage: object expected"); + m.paymentInviteMessage = $root.proto.Message.PaymentInviteMessage.fromObject(d.paymentInviteMessage); + } + if (d.interactiveMessage != null) { + if (typeof d.interactiveMessage !== "object") + throw TypeError(".proto.Message.interactiveMessage: object expected"); + m.interactiveMessage = $root.proto.Message.InteractiveMessage.fromObject(d.interactiveMessage); + } + if (d.reactionMessage != null) { + if (typeof d.reactionMessage !== "object") + throw TypeError(".proto.Message.reactionMessage: object expected"); + m.reactionMessage = $root.proto.Message.ReactionMessage.fromObject(d.reactionMessage); + } + if (d.stickerSyncRmrMessage != null) { + if (typeof d.stickerSyncRmrMessage !== "object") + throw TypeError(".proto.Message.stickerSyncRmrMessage: object expected"); + m.stickerSyncRmrMessage = $root.proto.Message.StickerSyncRMRMessage.fromObject(d.stickerSyncRmrMessage); + } + if (d.interactiveResponseMessage != null) { + if (typeof d.interactiveResponseMessage !== "object") + throw TypeError(".proto.Message.interactiveResponseMessage: object expected"); + m.interactiveResponseMessage = $root.proto.Message.InteractiveResponseMessage.fromObject(d.interactiveResponseMessage); + } + if (d.pollCreationMessage != null) { + if (typeof d.pollCreationMessage !== "object") + throw TypeError(".proto.Message.pollCreationMessage: object expected"); + m.pollCreationMessage = $root.proto.Message.PollCreationMessage.fromObject(d.pollCreationMessage); + } + if (d.pollUpdateMessage != null) { + if (typeof d.pollUpdateMessage !== "object") + throw TypeError(".proto.Message.pollUpdateMessage: object expected"); + m.pollUpdateMessage = $root.proto.Message.PollUpdateMessage.fromObject(d.pollUpdateMessage); + } + if (d.keepInChatMessage != null) { + if (typeof d.keepInChatMessage !== "object") + throw TypeError(".proto.Message.keepInChatMessage: object expected"); + m.keepInChatMessage = $root.proto.Message.KeepInChatMessage.fromObject(d.keepInChatMessage); + } + if (d.documentWithCaptionMessage != null) { + if (typeof d.documentWithCaptionMessage !== "object") + throw TypeError(".proto.Message.documentWithCaptionMessage: object expected"); + m.documentWithCaptionMessage = $root.proto.Message.FutureProofMessage.fromObject(d.documentWithCaptionMessage); + } + if (d.requestPhoneNumberMessage != null) { + if (typeof d.requestPhoneNumberMessage !== "object") + throw TypeError(".proto.Message.requestPhoneNumberMessage: object expected"); + m.requestPhoneNumberMessage = $root.proto.Message.RequestPhoneNumberMessage.fromObject(d.requestPhoneNumberMessage); + } + if (d.viewOnceMessageV2 != null) { + if (typeof d.viewOnceMessageV2 !== "object") + throw TypeError(".proto.Message.viewOnceMessageV2: object expected"); + m.viewOnceMessageV2 = $root.proto.Message.FutureProofMessage.fromObject(d.viewOnceMessageV2); + } + if (d.encReactionMessage != null) { + if (typeof d.encReactionMessage !== "object") + throw TypeError(".proto.Message.encReactionMessage: object expected"); + m.encReactionMessage = $root.proto.Message.EncReactionMessage.fromObject(d.encReactionMessage); + } + if (d.editedMessage != null) { + if (typeof d.editedMessage !== "object") + throw TypeError(".proto.Message.editedMessage: object expected"); + m.editedMessage = $root.proto.Message.FutureProofMessage.fromObject(d.editedMessage); + } + if (d.viewOnceMessageV2Extension != null) { + if (typeof d.viewOnceMessageV2Extension !== "object") + throw TypeError(".proto.Message.viewOnceMessageV2Extension: object expected"); + m.viewOnceMessageV2Extension = $root.proto.Message.FutureProofMessage.fromObject(d.viewOnceMessageV2Extension); + } + if (d.pollCreationMessageV2 != null) { + if (typeof d.pollCreationMessageV2 !== "object") + throw TypeError(".proto.Message.pollCreationMessageV2: object expected"); + m.pollCreationMessageV2 = $root.proto.Message.PollCreationMessage.fromObject(d.pollCreationMessageV2); + } + if (d.scheduledCallCreationMessage != null) { + if (typeof d.scheduledCallCreationMessage !== "object") + throw TypeError(".proto.Message.scheduledCallCreationMessage: object expected"); + m.scheduledCallCreationMessage = $root.proto.Message.ScheduledCallCreationMessage.fromObject(d.scheduledCallCreationMessage); + } + if (d.groupMentionedMessage != null) { + if (typeof d.groupMentionedMessage !== "object") + throw TypeError(".proto.Message.groupMentionedMessage: object expected"); + m.groupMentionedMessage = $root.proto.Message.FutureProofMessage.fromObject(d.groupMentionedMessage); + } + if (d.pinInChatMessage != null) { + if (typeof d.pinInChatMessage !== "object") + throw TypeError(".proto.Message.pinInChatMessage: object expected"); + m.pinInChatMessage = $root.proto.Message.PinInChatMessage.fromObject(d.pinInChatMessage); + } + if (d.pollCreationMessageV3 != null) { + if (typeof d.pollCreationMessageV3 !== "object") + throw TypeError(".proto.Message.pollCreationMessageV3: object expected"); + m.pollCreationMessageV3 = $root.proto.Message.PollCreationMessage.fromObject(d.pollCreationMessageV3); + } + if (d.scheduledCallEditMessage != null) { + if (typeof d.scheduledCallEditMessage !== "object") + throw TypeError(".proto.Message.scheduledCallEditMessage: object expected"); + m.scheduledCallEditMessage = $root.proto.Message.ScheduledCallEditMessage.fromObject(d.scheduledCallEditMessage); + } + if (d.ptvMessage != null) { + if (typeof d.ptvMessage !== "object") + throw TypeError(".proto.Message.ptvMessage: object expected"); + m.ptvMessage = $root.proto.Message.VideoMessage.fromObject(d.ptvMessage); + } + if (d.botInvokeMessage != null) { + if (typeof d.botInvokeMessage !== "object") + throw TypeError(".proto.Message.botInvokeMessage: object expected"); + m.botInvokeMessage = $root.proto.Message.FutureProofMessage.fromObject(d.botInvokeMessage); + } + if (d.callLogMesssage != null) { + if (typeof d.callLogMesssage !== "object") + throw TypeError(".proto.Message.callLogMesssage: object expected"); + m.callLogMesssage = $root.proto.Message.CallLogMessage.fromObject(d.callLogMesssage); + } + if (d.messageHistoryBundle != null) { + if (typeof d.messageHistoryBundle !== "object") + throw TypeError(".proto.Message.messageHistoryBundle: object expected"); + m.messageHistoryBundle = $root.proto.Message.MessageHistoryBundle.fromObject(d.messageHistoryBundle); + } + if (d.encCommentMessage != null) { + if (typeof d.encCommentMessage !== "object") + throw TypeError(".proto.Message.encCommentMessage: object expected"); + m.encCommentMessage = $root.proto.Message.EncCommentMessage.fromObject(d.encCommentMessage); + } + if (d.bcallMessage != null) { + if (typeof d.bcallMessage !== "object") + throw TypeError(".proto.Message.bcallMessage: object expected"); + m.bcallMessage = $root.proto.Message.BCallMessage.fromObject(d.bcallMessage); + } + if (d.lottieStickerMessage != null) { + if (typeof d.lottieStickerMessage !== "object") + throw TypeError(".proto.Message.lottieStickerMessage: object expected"); + m.lottieStickerMessage = $root.proto.Message.FutureProofMessage.fromObject(d.lottieStickerMessage); + } + if (d.eventMessage != null) { + if (typeof d.eventMessage !== "object") + throw TypeError(".proto.Message.eventMessage: object expected"); + m.eventMessage = $root.proto.Message.EventMessage.fromObject(d.eventMessage); + } + if (d.encEventResponseMessage != null) { + if (typeof d.encEventResponseMessage !== "object") + throw TypeError(".proto.Message.encEventResponseMessage: object expected"); + m.encEventResponseMessage = $root.proto.Message.EncEventResponseMessage.fromObject(d.encEventResponseMessage); + } + if (d.commentMessage != null) { + if (typeof d.commentMessage !== "object") + throw TypeError(".proto.Message.commentMessage: object expected"); + m.commentMessage = $root.proto.Message.CommentMessage.fromObject(d.commentMessage); + } + if (d.newsletterAdminInviteMessage != null) { + if (typeof d.newsletterAdminInviteMessage !== "object") + throw TypeError(".proto.Message.newsletterAdminInviteMessage: object expected"); + m.newsletterAdminInviteMessage = $root.proto.Message.NewsletterAdminInviteMessage.fromObject(d.newsletterAdminInviteMessage); + } + if (d.placeholderMessage != null) { + if (typeof d.placeholderMessage !== "object") + throw TypeError(".proto.Message.placeholderMessage: object expected"); + m.placeholderMessage = $root.proto.Message.PlaceholderMessage.fromObject(d.placeholderMessage); + } + if (d.secretEncryptedMessage != null) { + if (typeof d.secretEncryptedMessage !== "object") + throw TypeError(".proto.Message.secretEncryptedMessage: object expected"); + m.secretEncryptedMessage = $root.proto.Message.SecretEncryptedMessage.fromObject(d.secretEncryptedMessage); + } + if (d.albumMessage != null) { + if (typeof d.albumMessage !== "object") + throw TypeError(".proto.Message.albumMessage: object expected"); + m.albumMessage = $root.proto.Message.AlbumMessage.fromObject(d.albumMessage); + } + if (d.eventCoverImage != null) { + if (typeof d.eventCoverImage !== "object") + throw TypeError(".proto.Message.eventCoverImage: object expected"); + m.eventCoverImage = $root.proto.Message.FutureProofMessage.fromObject(d.eventCoverImage); + } + if (d.stickerPackMessage != null) { + if (typeof d.stickerPackMessage !== "object") + throw TypeError(".proto.Message.stickerPackMessage: object expected"); + m.stickerPackMessage = $root.proto.Message.StickerPackMessage.fromObject(d.stickerPackMessage); + } + if (d.statusMentionMessage != null) { + if (typeof d.statusMentionMessage !== "object") + throw TypeError(".proto.Message.statusMentionMessage: object expected"); + m.statusMentionMessage = $root.proto.Message.FutureProofMessage.fromObject(d.statusMentionMessage); + } + if (d.pollResultSnapshotMessage != null) { + if (typeof d.pollResultSnapshotMessage !== "object") + throw TypeError(".proto.Message.pollResultSnapshotMessage: object expected"); + m.pollResultSnapshotMessage = $root.proto.Message.PollResultSnapshotMessage.fromObject(d.pollResultSnapshotMessage); + } + if (d.pollCreationOptionImageMessage != null) { + if (typeof d.pollCreationOptionImageMessage !== "object") + throw TypeError(".proto.Message.pollCreationOptionImageMessage: object expected"); + m.pollCreationOptionImageMessage = $root.proto.Message.FutureProofMessage.fromObject(d.pollCreationOptionImageMessage); + } + if (d.associatedChildMessage != null) { + if (typeof d.associatedChildMessage !== "object") + throw TypeError(".proto.Message.associatedChildMessage: object expected"); + m.associatedChildMessage = $root.proto.Message.FutureProofMessage.fromObject(d.associatedChildMessage); + } + if (d.groupStatusMentionMessage != null) { + if (typeof d.groupStatusMentionMessage !== "object") + throw TypeError(".proto.Message.groupStatusMentionMessage: object expected"); + m.groupStatusMentionMessage = $root.proto.Message.FutureProofMessage.fromObject(d.groupStatusMentionMessage); + } + if (d.pollCreationMessageV4 != null) { + if (typeof d.pollCreationMessageV4 !== "object") + throw TypeError(".proto.Message.pollCreationMessageV4: object expected"); + m.pollCreationMessageV4 = $root.proto.Message.FutureProofMessage.fromObject(d.pollCreationMessageV4); + } + if (d.statusAddYours != null) { + if (typeof d.statusAddYours !== "object") + throw TypeError(".proto.Message.statusAddYours: object expected"); + m.statusAddYours = $root.proto.Message.FutureProofMessage.fromObject(d.statusAddYours); + } + if (d.groupStatusMessage != null) { + if (typeof d.groupStatusMessage !== "object") + throw TypeError(".proto.Message.groupStatusMessage: object expected"); + m.groupStatusMessage = $root.proto.Message.FutureProofMessage.fromObject(d.groupStatusMessage); + } + if (d.richResponseMessage != null) { + if (typeof d.richResponseMessage !== "object") + throw TypeError(".proto.Message.richResponseMessage: object expected"); + m.richResponseMessage = $root.proto.AIRichResponseMessage.fromObject(d.richResponseMessage); + } + if (d.statusNotificationMessage != null) { + if (typeof d.statusNotificationMessage !== "object") + throw TypeError(".proto.Message.statusNotificationMessage: object expected"); + m.statusNotificationMessage = $root.proto.Message.StatusNotificationMessage.fromObject(d.statusNotificationMessage); + } + if (d.limitSharingMessage != null) { + if (typeof d.limitSharingMessage !== "object") + throw TypeError(".proto.Message.limitSharingMessage: object expected"); + m.limitSharingMessage = $root.proto.Message.FutureProofMessage.fromObject(d.limitSharingMessage); + } + if (d.botTaskMessage != null) { + if (typeof d.botTaskMessage !== "object") + throw TypeError(".proto.Message.botTaskMessage: object expected"); + m.botTaskMessage = $root.proto.Message.FutureProofMessage.fromObject(d.botTaskMessage); + } + if (d.questionMessage != null) { + if (typeof d.questionMessage !== "object") + throw TypeError(".proto.Message.questionMessage: object expected"); + m.questionMessage = $root.proto.Message.FutureProofMessage.fromObject(d.questionMessage); + } + if (d.messageHistoryNotice != null) { + if (typeof d.messageHistoryNotice !== "object") + throw TypeError(".proto.Message.messageHistoryNotice: object expected"); + m.messageHistoryNotice = $root.proto.Message.MessageHistoryNotice.fromObject(d.messageHistoryNotice); + } + if (d.groupStatusMessageV2 != null) { + if (typeof d.groupStatusMessageV2 !== "object") + throw TypeError(".proto.Message.groupStatusMessageV2: object expected"); + m.groupStatusMessageV2 = $root.proto.Message.FutureProofMessage.fromObject(d.groupStatusMessageV2); + } + if (d.botForwardedMessage != null) { + if (typeof d.botForwardedMessage !== "object") + throw TypeError(".proto.Message.botForwardedMessage: object expected"); + m.botForwardedMessage = $root.proto.Message.FutureProofMessage.fromObject(d.botForwardedMessage); + } + if (d.statusQuestionAnswerMessage != null) { + if (typeof d.statusQuestionAnswerMessage !== "object") + throw TypeError(".proto.Message.statusQuestionAnswerMessage: object expected"); + m.statusQuestionAnswerMessage = $root.proto.Message.StatusQuestionAnswerMessage.fromObject(d.statusQuestionAnswerMessage); + } + if (d.questionReplyMessage != null) { + if (typeof d.questionReplyMessage !== "object") + throw TypeError(".proto.Message.questionReplyMessage: object expected"); + m.questionReplyMessage = $root.proto.Message.FutureProofMessage.fromObject(d.questionReplyMessage); + } + if (d.questionResponseMessage != null) { + if (typeof d.questionResponseMessage !== "object") + throw TypeError(".proto.Message.questionResponseMessage: object expected"); + m.questionResponseMessage = $root.proto.Message.QuestionResponseMessage.fromObject(d.questionResponseMessage); + } + if (d.statusQuotedMessage != null) { + if (typeof d.statusQuotedMessage !== "object") + throw TypeError(".proto.Message.statusQuotedMessage: object expected"); + m.statusQuotedMessage = $root.proto.Message.StatusQuotedMessage.fromObject(d.statusQuotedMessage); + } + if (d.statusStickerInteractionMessage != null) { + if (typeof d.statusStickerInteractionMessage !== "object") + throw TypeError(".proto.Message.statusStickerInteractionMessage: object expected"); + m.statusStickerInteractionMessage = $root.proto.Message.StatusStickerInteractionMessage.fromObject(d.statusStickerInteractionMessage); + } + if (d.pollCreationMessageV5 != null) { + if (typeof d.pollCreationMessageV5 !== "object") + throw TypeError(".proto.Message.pollCreationMessageV5: object expected"); + m.pollCreationMessageV5 = $root.proto.Message.PollCreationMessage.fromObject(d.pollCreationMessageV5); + } + if (d.newsletterFollowerInviteMessageV2 != null) { + if (typeof d.newsletterFollowerInviteMessageV2 !== "object") + throw TypeError(".proto.Message.newsletterFollowerInviteMessageV2: object expected"); + m.newsletterFollowerInviteMessageV2 = $root.proto.Message.NewsletterFollowerInviteMessage.fromObject(d.newsletterFollowerInviteMessageV2); + } + if (d.pollResultSnapshotMessageV3 != null) { + if (typeof d.pollResultSnapshotMessageV3 !== "object") + throw TypeError(".proto.Message.pollResultSnapshotMessageV3: object expected"); + m.pollResultSnapshotMessageV3 = $root.proto.Message.PollResultSnapshotMessage.fromObject(d.pollResultSnapshotMessageV3); + } + return m; + }; + + Message.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.conversation != null && m.hasOwnProperty("conversation")) { + d.conversation = m.conversation; + if (o.oneofs) + d._conversation = "conversation"; + } + if (m.senderKeyDistributionMessage != null && m.hasOwnProperty("senderKeyDistributionMessage")) { + d.senderKeyDistributionMessage = $root.proto.Message.SenderKeyDistributionMessage.toObject(m.senderKeyDistributionMessage, o); + if (o.oneofs) + d._senderKeyDistributionMessage = "senderKeyDistributionMessage"; + } + if (m.imageMessage != null && m.hasOwnProperty("imageMessage")) { + d.imageMessage = $root.proto.Message.ImageMessage.toObject(m.imageMessage, o); + if (o.oneofs) + d._imageMessage = "imageMessage"; + } + if (m.contactMessage != null && m.hasOwnProperty("contactMessage")) { + d.contactMessage = $root.proto.Message.ContactMessage.toObject(m.contactMessage, o); + if (o.oneofs) + d._contactMessage = "contactMessage"; + } + if (m.locationMessage != null && m.hasOwnProperty("locationMessage")) { + d.locationMessage = $root.proto.Message.LocationMessage.toObject(m.locationMessage, o); + if (o.oneofs) + d._locationMessage = "locationMessage"; + } + if (m.extendedTextMessage != null && m.hasOwnProperty("extendedTextMessage")) { + d.extendedTextMessage = $root.proto.Message.ExtendedTextMessage.toObject(m.extendedTextMessage, o); + if (o.oneofs) + d._extendedTextMessage = "extendedTextMessage"; + } + if (m.documentMessage != null && m.hasOwnProperty("documentMessage")) { + d.documentMessage = $root.proto.Message.DocumentMessage.toObject(m.documentMessage, o); + if (o.oneofs) + d._documentMessage = "documentMessage"; + } + if (m.audioMessage != null && m.hasOwnProperty("audioMessage")) { + d.audioMessage = $root.proto.Message.AudioMessage.toObject(m.audioMessage, o); + if (o.oneofs) + d._audioMessage = "audioMessage"; + } + if (m.videoMessage != null && m.hasOwnProperty("videoMessage")) { + d.videoMessage = $root.proto.Message.VideoMessage.toObject(m.videoMessage, o); + if (o.oneofs) + d._videoMessage = "videoMessage"; + } + if (m.call != null && m.hasOwnProperty("call")) { + d.call = $root.proto.Message.Call.toObject(m.call, o); + if (o.oneofs) + d._call = "call"; + } + if (m.chat != null && m.hasOwnProperty("chat")) { + d.chat = $root.proto.Message.Chat.toObject(m.chat, o); + if (o.oneofs) + d._chat = "chat"; + } + if (m.protocolMessage != null && m.hasOwnProperty("protocolMessage")) { + d.protocolMessage = $root.proto.Message.ProtocolMessage.toObject(m.protocolMessage, o); + if (o.oneofs) + d._protocolMessage = "protocolMessage"; + } + if (m.contactsArrayMessage != null && m.hasOwnProperty("contactsArrayMessage")) { + d.contactsArrayMessage = $root.proto.Message.ContactsArrayMessage.toObject(m.contactsArrayMessage, o); + if (o.oneofs) + d._contactsArrayMessage = "contactsArrayMessage"; + } + if (m.highlyStructuredMessage != null && m.hasOwnProperty("highlyStructuredMessage")) { + d.highlyStructuredMessage = $root.proto.Message.HighlyStructuredMessage.toObject(m.highlyStructuredMessage, o); + if (o.oneofs) + d._highlyStructuredMessage = "highlyStructuredMessage"; + } + if (m.fastRatchetKeySenderKeyDistributionMessage != null && m.hasOwnProperty("fastRatchetKeySenderKeyDistributionMessage")) { + d.fastRatchetKeySenderKeyDistributionMessage = $root.proto.Message.SenderKeyDistributionMessage.toObject(m.fastRatchetKeySenderKeyDistributionMessage, o); + if (o.oneofs) + d._fastRatchetKeySenderKeyDistributionMessage = "fastRatchetKeySenderKeyDistributionMessage"; + } + if (m.sendPaymentMessage != null && m.hasOwnProperty("sendPaymentMessage")) { + d.sendPaymentMessage = $root.proto.Message.SendPaymentMessage.toObject(m.sendPaymentMessage, o); + if (o.oneofs) + d._sendPaymentMessage = "sendPaymentMessage"; + } + if (m.liveLocationMessage != null && m.hasOwnProperty("liveLocationMessage")) { + d.liveLocationMessage = $root.proto.Message.LiveLocationMessage.toObject(m.liveLocationMessage, o); + if (o.oneofs) + d._liveLocationMessage = "liveLocationMessage"; + } + if (m.requestPaymentMessage != null && m.hasOwnProperty("requestPaymentMessage")) { + d.requestPaymentMessage = $root.proto.Message.RequestPaymentMessage.toObject(m.requestPaymentMessage, o); + if (o.oneofs) + d._requestPaymentMessage = "requestPaymentMessage"; + } + if (m.declinePaymentRequestMessage != null && m.hasOwnProperty("declinePaymentRequestMessage")) { + d.declinePaymentRequestMessage = $root.proto.Message.DeclinePaymentRequestMessage.toObject(m.declinePaymentRequestMessage, o); + if (o.oneofs) + d._declinePaymentRequestMessage = "declinePaymentRequestMessage"; + } + if (m.cancelPaymentRequestMessage != null && m.hasOwnProperty("cancelPaymentRequestMessage")) { + d.cancelPaymentRequestMessage = $root.proto.Message.CancelPaymentRequestMessage.toObject(m.cancelPaymentRequestMessage, o); + if (o.oneofs) + d._cancelPaymentRequestMessage = "cancelPaymentRequestMessage"; + } + if (m.templateMessage != null && m.hasOwnProperty("templateMessage")) { + d.templateMessage = $root.proto.Message.TemplateMessage.toObject(m.templateMessage, o); + if (o.oneofs) + d._templateMessage = "templateMessage"; + } + if (m.stickerMessage != null && m.hasOwnProperty("stickerMessage")) { + d.stickerMessage = $root.proto.Message.StickerMessage.toObject(m.stickerMessage, o); + if (o.oneofs) + d._stickerMessage = "stickerMessage"; + } + if (m.groupInviteMessage != null && m.hasOwnProperty("groupInviteMessage")) { + d.groupInviteMessage = $root.proto.Message.GroupInviteMessage.toObject(m.groupInviteMessage, o); + if (o.oneofs) + d._groupInviteMessage = "groupInviteMessage"; + } + if (m.templateButtonReplyMessage != null && m.hasOwnProperty("templateButtonReplyMessage")) { + d.templateButtonReplyMessage = $root.proto.Message.TemplateButtonReplyMessage.toObject(m.templateButtonReplyMessage, o); + if (o.oneofs) + d._templateButtonReplyMessage = "templateButtonReplyMessage"; + } + if (m.productMessage != null && m.hasOwnProperty("productMessage")) { + d.productMessage = $root.proto.Message.ProductMessage.toObject(m.productMessage, o); + if (o.oneofs) + d._productMessage = "productMessage"; + } + if (m.deviceSentMessage != null && m.hasOwnProperty("deviceSentMessage")) { + d.deviceSentMessage = $root.proto.Message.DeviceSentMessage.toObject(m.deviceSentMessage, o); + if (o.oneofs) + d._deviceSentMessage = "deviceSentMessage"; + } + if (m.messageContextInfo != null && m.hasOwnProperty("messageContextInfo")) { + d.messageContextInfo = $root.proto.MessageContextInfo.toObject(m.messageContextInfo, o); + if (o.oneofs) + d._messageContextInfo = "messageContextInfo"; + } + if (m.listMessage != null && m.hasOwnProperty("listMessage")) { + d.listMessage = $root.proto.Message.ListMessage.toObject(m.listMessage, o); + if (o.oneofs) + d._listMessage = "listMessage"; + } + if (m.viewOnceMessage != null && m.hasOwnProperty("viewOnceMessage")) { + d.viewOnceMessage = $root.proto.Message.FutureProofMessage.toObject(m.viewOnceMessage, o); + if (o.oneofs) + d._viewOnceMessage = "viewOnceMessage"; + } + if (m.orderMessage != null && m.hasOwnProperty("orderMessage")) { + d.orderMessage = $root.proto.Message.OrderMessage.toObject(m.orderMessage, o); + if (o.oneofs) + d._orderMessage = "orderMessage"; + } + if (m.listResponseMessage != null && m.hasOwnProperty("listResponseMessage")) { + d.listResponseMessage = $root.proto.Message.ListResponseMessage.toObject(m.listResponseMessage, o); + if (o.oneofs) + d._listResponseMessage = "listResponseMessage"; + } + if (m.ephemeralMessage != null && m.hasOwnProperty("ephemeralMessage")) { + d.ephemeralMessage = $root.proto.Message.FutureProofMessage.toObject(m.ephemeralMessage, o); + if (o.oneofs) + d._ephemeralMessage = "ephemeralMessage"; + } + if (m.invoiceMessage != null && m.hasOwnProperty("invoiceMessage")) { + d.invoiceMessage = $root.proto.Message.InvoiceMessage.toObject(m.invoiceMessage, o); + if (o.oneofs) + d._invoiceMessage = "invoiceMessage"; + } + if (m.buttonsMessage != null && m.hasOwnProperty("buttonsMessage")) { + d.buttonsMessage = $root.proto.Message.ButtonsMessage.toObject(m.buttonsMessage, o); + if (o.oneofs) + d._buttonsMessage = "buttonsMessage"; + } + if (m.buttonsResponseMessage != null && m.hasOwnProperty("buttonsResponseMessage")) { + d.buttonsResponseMessage = $root.proto.Message.ButtonsResponseMessage.toObject(m.buttonsResponseMessage, o); + if (o.oneofs) + d._buttonsResponseMessage = "buttonsResponseMessage"; + } + if (m.paymentInviteMessage != null && m.hasOwnProperty("paymentInviteMessage")) { + d.paymentInviteMessage = $root.proto.Message.PaymentInviteMessage.toObject(m.paymentInviteMessage, o); + if (o.oneofs) + d._paymentInviteMessage = "paymentInviteMessage"; + } + if (m.interactiveMessage != null && m.hasOwnProperty("interactiveMessage")) { + d.interactiveMessage = $root.proto.Message.InteractiveMessage.toObject(m.interactiveMessage, o); + if (o.oneofs) + d._interactiveMessage = "interactiveMessage"; + } + if (m.reactionMessage != null && m.hasOwnProperty("reactionMessage")) { + d.reactionMessage = $root.proto.Message.ReactionMessage.toObject(m.reactionMessage, o); + if (o.oneofs) + d._reactionMessage = "reactionMessage"; + } + if (m.stickerSyncRmrMessage != null && m.hasOwnProperty("stickerSyncRmrMessage")) { + d.stickerSyncRmrMessage = $root.proto.Message.StickerSyncRMRMessage.toObject(m.stickerSyncRmrMessage, o); + if (o.oneofs) + d._stickerSyncRmrMessage = "stickerSyncRmrMessage"; + } + if (m.interactiveResponseMessage != null && m.hasOwnProperty("interactiveResponseMessage")) { + d.interactiveResponseMessage = $root.proto.Message.InteractiveResponseMessage.toObject(m.interactiveResponseMessage, o); + if (o.oneofs) + d._interactiveResponseMessage = "interactiveResponseMessage"; + } + if (m.pollCreationMessage != null && m.hasOwnProperty("pollCreationMessage")) { + d.pollCreationMessage = $root.proto.Message.PollCreationMessage.toObject(m.pollCreationMessage, o); + if (o.oneofs) + d._pollCreationMessage = "pollCreationMessage"; + } + if (m.pollUpdateMessage != null && m.hasOwnProperty("pollUpdateMessage")) { + d.pollUpdateMessage = $root.proto.Message.PollUpdateMessage.toObject(m.pollUpdateMessage, o); + if (o.oneofs) + d._pollUpdateMessage = "pollUpdateMessage"; + } + if (m.keepInChatMessage != null && m.hasOwnProperty("keepInChatMessage")) { + d.keepInChatMessage = $root.proto.Message.KeepInChatMessage.toObject(m.keepInChatMessage, o); + if (o.oneofs) + d._keepInChatMessage = "keepInChatMessage"; + } + if (m.documentWithCaptionMessage != null && m.hasOwnProperty("documentWithCaptionMessage")) { + d.documentWithCaptionMessage = $root.proto.Message.FutureProofMessage.toObject(m.documentWithCaptionMessage, o); + if (o.oneofs) + d._documentWithCaptionMessage = "documentWithCaptionMessage"; + } + if (m.requestPhoneNumberMessage != null && m.hasOwnProperty("requestPhoneNumberMessage")) { + d.requestPhoneNumberMessage = $root.proto.Message.RequestPhoneNumberMessage.toObject(m.requestPhoneNumberMessage, o); + if (o.oneofs) + d._requestPhoneNumberMessage = "requestPhoneNumberMessage"; + } + if (m.viewOnceMessageV2 != null && m.hasOwnProperty("viewOnceMessageV2")) { + d.viewOnceMessageV2 = $root.proto.Message.FutureProofMessage.toObject(m.viewOnceMessageV2, o); + if (o.oneofs) + d._viewOnceMessageV2 = "viewOnceMessageV2"; + } + if (m.encReactionMessage != null && m.hasOwnProperty("encReactionMessage")) { + d.encReactionMessage = $root.proto.Message.EncReactionMessage.toObject(m.encReactionMessage, o); + if (o.oneofs) + d._encReactionMessage = "encReactionMessage"; + } + if (m.editedMessage != null && m.hasOwnProperty("editedMessage")) { + d.editedMessage = $root.proto.Message.FutureProofMessage.toObject(m.editedMessage, o); + if (o.oneofs) + d._editedMessage = "editedMessage"; + } + if (m.viewOnceMessageV2Extension != null && m.hasOwnProperty("viewOnceMessageV2Extension")) { + d.viewOnceMessageV2Extension = $root.proto.Message.FutureProofMessage.toObject(m.viewOnceMessageV2Extension, o); + if (o.oneofs) + d._viewOnceMessageV2Extension = "viewOnceMessageV2Extension"; + } + if (m.pollCreationMessageV2 != null && m.hasOwnProperty("pollCreationMessageV2")) { + d.pollCreationMessageV2 = $root.proto.Message.PollCreationMessage.toObject(m.pollCreationMessageV2, o); + if (o.oneofs) + d._pollCreationMessageV2 = "pollCreationMessageV2"; + } + if (m.scheduledCallCreationMessage != null && m.hasOwnProperty("scheduledCallCreationMessage")) { + d.scheduledCallCreationMessage = $root.proto.Message.ScheduledCallCreationMessage.toObject(m.scheduledCallCreationMessage, o); + if (o.oneofs) + d._scheduledCallCreationMessage = "scheduledCallCreationMessage"; + } + if (m.groupMentionedMessage != null && m.hasOwnProperty("groupMentionedMessage")) { + d.groupMentionedMessage = $root.proto.Message.FutureProofMessage.toObject(m.groupMentionedMessage, o); + if (o.oneofs) + d._groupMentionedMessage = "groupMentionedMessage"; + } + if (m.pinInChatMessage != null && m.hasOwnProperty("pinInChatMessage")) { + d.pinInChatMessage = $root.proto.Message.PinInChatMessage.toObject(m.pinInChatMessage, o); + if (o.oneofs) + d._pinInChatMessage = "pinInChatMessage"; + } + if (m.pollCreationMessageV3 != null && m.hasOwnProperty("pollCreationMessageV3")) { + d.pollCreationMessageV3 = $root.proto.Message.PollCreationMessage.toObject(m.pollCreationMessageV3, o); + if (o.oneofs) + d._pollCreationMessageV3 = "pollCreationMessageV3"; + } + if (m.scheduledCallEditMessage != null && m.hasOwnProperty("scheduledCallEditMessage")) { + d.scheduledCallEditMessage = $root.proto.Message.ScheduledCallEditMessage.toObject(m.scheduledCallEditMessage, o); + if (o.oneofs) + d._scheduledCallEditMessage = "scheduledCallEditMessage"; + } + if (m.ptvMessage != null && m.hasOwnProperty("ptvMessage")) { + d.ptvMessage = $root.proto.Message.VideoMessage.toObject(m.ptvMessage, o); + if (o.oneofs) + d._ptvMessage = "ptvMessage"; + } + if (m.botInvokeMessage != null && m.hasOwnProperty("botInvokeMessage")) { + d.botInvokeMessage = $root.proto.Message.FutureProofMessage.toObject(m.botInvokeMessage, o); + if (o.oneofs) + d._botInvokeMessage = "botInvokeMessage"; + } + if (m.callLogMesssage != null && m.hasOwnProperty("callLogMesssage")) { + d.callLogMesssage = $root.proto.Message.CallLogMessage.toObject(m.callLogMesssage, o); + if (o.oneofs) + d._callLogMesssage = "callLogMesssage"; + } + if (m.messageHistoryBundle != null && m.hasOwnProperty("messageHistoryBundle")) { + d.messageHistoryBundle = $root.proto.Message.MessageHistoryBundle.toObject(m.messageHistoryBundle, o); + if (o.oneofs) + d._messageHistoryBundle = "messageHistoryBundle"; + } + if (m.encCommentMessage != null && m.hasOwnProperty("encCommentMessage")) { + d.encCommentMessage = $root.proto.Message.EncCommentMessage.toObject(m.encCommentMessage, o); + if (o.oneofs) + d._encCommentMessage = "encCommentMessage"; + } + if (m.bcallMessage != null && m.hasOwnProperty("bcallMessage")) { + d.bcallMessage = $root.proto.Message.BCallMessage.toObject(m.bcallMessage, o); + if (o.oneofs) + d._bcallMessage = "bcallMessage"; + } + if (m.lottieStickerMessage != null && m.hasOwnProperty("lottieStickerMessage")) { + d.lottieStickerMessage = $root.proto.Message.FutureProofMessage.toObject(m.lottieStickerMessage, o); + if (o.oneofs) + d._lottieStickerMessage = "lottieStickerMessage"; + } + if (m.eventMessage != null && m.hasOwnProperty("eventMessage")) { + d.eventMessage = $root.proto.Message.EventMessage.toObject(m.eventMessage, o); + if (o.oneofs) + d._eventMessage = "eventMessage"; + } + if (m.encEventResponseMessage != null && m.hasOwnProperty("encEventResponseMessage")) { + d.encEventResponseMessage = $root.proto.Message.EncEventResponseMessage.toObject(m.encEventResponseMessage, o); + if (o.oneofs) + d._encEventResponseMessage = "encEventResponseMessage"; + } + if (m.commentMessage != null && m.hasOwnProperty("commentMessage")) { + d.commentMessage = $root.proto.Message.CommentMessage.toObject(m.commentMessage, o); + if (o.oneofs) + d._commentMessage = "commentMessage"; + } + if (m.newsletterAdminInviteMessage != null && m.hasOwnProperty("newsletterAdminInviteMessage")) { + d.newsletterAdminInviteMessage = $root.proto.Message.NewsletterAdminInviteMessage.toObject(m.newsletterAdminInviteMessage, o); + if (o.oneofs) + d._newsletterAdminInviteMessage = "newsletterAdminInviteMessage"; + } + if (m.placeholderMessage != null && m.hasOwnProperty("placeholderMessage")) { + d.placeholderMessage = $root.proto.Message.PlaceholderMessage.toObject(m.placeholderMessage, o); + if (o.oneofs) + d._placeholderMessage = "placeholderMessage"; + } + if (m.secretEncryptedMessage != null && m.hasOwnProperty("secretEncryptedMessage")) { + d.secretEncryptedMessage = $root.proto.Message.SecretEncryptedMessage.toObject(m.secretEncryptedMessage, o); + if (o.oneofs) + d._secretEncryptedMessage = "secretEncryptedMessage"; + } + if (m.albumMessage != null && m.hasOwnProperty("albumMessage")) { + d.albumMessage = $root.proto.Message.AlbumMessage.toObject(m.albumMessage, o); + if (o.oneofs) + d._albumMessage = "albumMessage"; + } + if (m.eventCoverImage != null && m.hasOwnProperty("eventCoverImage")) { + d.eventCoverImage = $root.proto.Message.FutureProofMessage.toObject(m.eventCoverImage, o); + if (o.oneofs) + d._eventCoverImage = "eventCoverImage"; + } + if (m.stickerPackMessage != null && m.hasOwnProperty("stickerPackMessage")) { + d.stickerPackMessage = $root.proto.Message.StickerPackMessage.toObject(m.stickerPackMessage, o); + if (o.oneofs) + d._stickerPackMessage = "stickerPackMessage"; + } + if (m.statusMentionMessage != null && m.hasOwnProperty("statusMentionMessage")) { + d.statusMentionMessage = $root.proto.Message.FutureProofMessage.toObject(m.statusMentionMessage, o); + if (o.oneofs) + d._statusMentionMessage = "statusMentionMessage"; + } + if (m.pollResultSnapshotMessage != null && m.hasOwnProperty("pollResultSnapshotMessage")) { + d.pollResultSnapshotMessage = $root.proto.Message.PollResultSnapshotMessage.toObject(m.pollResultSnapshotMessage, o); + if (o.oneofs) + d._pollResultSnapshotMessage = "pollResultSnapshotMessage"; + } + if (m.pollCreationOptionImageMessage != null && m.hasOwnProperty("pollCreationOptionImageMessage")) { + d.pollCreationOptionImageMessage = $root.proto.Message.FutureProofMessage.toObject(m.pollCreationOptionImageMessage, o); + if (o.oneofs) + d._pollCreationOptionImageMessage = "pollCreationOptionImageMessage"; + } + if (m.associatedChildMessage != null && m.hasOwnProperty("associatedChildMessage")) { + d.associatedChildMessage = $root.proto.Message.FutureProofMessage.toObject(m.associatedChildMessage, o); + if (o.oneofs) + d._associatedChildMessage = "associatedChildMessage"; + } + if (m.groupStatusMentionMessage != null && m.hasOwnProperty("groupStatusMentionMessage")) { + d.groupStatusMentionMessage = $root.proto.Message.FutureProofMessage.toObject(m.groupStatusMentionMessage, o); + if (o.oneofs) + d._groupStatusMentionMessage = "groupStatusMentionMessage"; + } + if (m.pollCreationMessageV4 != null && m.hasOwnProperty("pollCreationMessageV4")) { + d.pollCreationMessageV4 = $root.proto.Message.FutureProofMessage.toObject(m.pollCreationMessageV4, o); + if (o.oneofs) + d._pollCreationMessageV4 = "pollCreationMessageV4"; + } + if (m.statusAddYours != null && m.hasOwnProperty("statusAddYours")) { + d.statusAddYours = $root.proto.Message.FutureProofMessage.toObject(m.statusAddYours, o); + if (o.oneofs) + d._statusAddYours = "statusAddYours"; + } + if (m.groupStatusMessage != null && m.hasOwnProperty("groupStatusMessage")) { + d.groupStatusMessage = $root.proto.Message.FutureProofMessage.toObject(m.groupStatusMessage, o); + if (o.oneofs) + d._groupStatusMessage = "groupStatusMessage"; + } + if (m.richResponseMessage != null && m.hasOwnProperty("richResponseMessage")) { + d.richResponseMessage = $root.proto.AIRichResponseMessage.toObject(m.richResponseMessage, o); + if (o.oneofs) + d._richResponseMessage = "richResponseMessage"; + } + if (m.statusNotificationMessage != null && m.hasOwnProperty("statusNotificationMessage")) { + d.statusNotificationMessage = $root.proto.Message.StatusNotificationMessage.toObject(m.statusNotificationMessage, o); + if (o.oneofs) + d._statusNotificationMessage = "statusNotificationMessage"; + } + if (m.limitSharingMessage != null && m.hasOwnProperty("limitSharingMessage")) { + d.limitSharingMessage = $root.proto.Message.FutureProofMessage.toObject(m.limitSharingMessage, o); + if (o.oneofs) + d._limitSharingMessage = "limitSharingMessage"; + } + if (m.botTaskMessage != null && m.hasOwnProperty("botTaskMessage")) { + d.botTaskMessage = $root.proto.Message.FutureProofMessage.toObject(m.botTaskMessage, o); + if (o.oneofs) + d._botTaskMessage = "botTaskMessage"; + } + if (m.questionMessage != null && m.hasOwnProperty("questionMessage")) { + d.questionMessage = $root.proto.Message.FutureProofMessage.toObject(m.questionMessage, o); + if (o.oneofs) + d._questionMessage = "questionMessage"; + } + if (m.messageHistoryNotice != null && m.hasOwnProperty("messageHistoryNotice")) { + d.messageHistoryNotice = $root.proto.Message.MessageHistoryNotice.toObject(m.messageHistoryNotice, o); + if (o.oneofs) + d._messageHistoryNotice = "messageHistoryNotice"; + } + if (m.groupStatusMessageV2 != null && m.hasOwnProperty("groupStatusMessageV2")) { + d.groupStatusMessageV2 = $root.proto.Message.FutureProofMessage.toObject(m.groupStatusMessageV2, o); + if (o.oneofs) + d._groupStatusMessageV2 = "groupStatusMessageV2"; + } + if (m.botForwardedMessage != null && m.hasOwnProperty("botForwardedMessage")) { + d.botForwardedMessage = $root.proto.Message.FutureProofMessage.toObject(m.botForwardedMessage, o); + if (o.oneofs) + d._botForwardedMessage = "botForwardedMessage"; + } + if (m.statusQuestionAnswerMessage != null && m.hasOwnProperty("statusQuestionAnswerMessage")) { + d.statusQuestionAnswerMessage = $root.proto.Message.StatusQuestionAnswerMessage.toObject(m.statusQuestionAnswerMessage, o); + if (o.oneofs) + d._statusQuestionAnswerMessage = "statusQuestionAnswerMessage"; + } + if (m.questionReplyMessage != null && m.hasOwnProperty("questionReplyMessage")) { + d.questionReplyMessage = $root.proto.Message.FutureProofMessage.toObject(m.questionReplyMessage, o); + if (o.oneofs) + d._questionReplyMessage = "questionReplyMessage"; + } + if (m.questionResponseMessage != null && m.hasOwnProperty("questionResponseMessage")) { + d.questionResponseMessage = $root.proto.Message.QuestionResponseMessage.toObject(m.questionResponseMessage, o); + if (o.oneofs) + d._questionResponseMessage = "questionResponseMessage"; + } + if (m.statusQuotedMessage != null && m.hasOwnProperty("statusQuotedMessage")) { + d.statusQuotedMessage = $root.proto.Message.StatusQuotedMessage.toObject(m.statusQuotedMessage, o); + if (o.oneofs) + d._statusQuotedMessage = "statusQuotedMessage"; + } + if (m.statusStickerInteractionMessage != null && m.hasOwnProperty("statusStickerInteractionMessage")) { + d.statusStickerInteractionMessage = $root.proto.Message.StatusStickerInteractionMessage.toObject(m.statusStickerInteractionMessage, o); + if (o.oneofs) + d._statusStickerInteractionMessage = "statusStickerInteractionMessage"; + } + if (m.pollCreationMessageV5 != null && m.hasOwnProperty("pollCreationMessageV5")) { + d.pollCreationMessageV5 = $root.proto.Message.PollCreationMessage.toObject(m.pollCreationMessageV5, o); + if (o.oneofs) + d._pollCreationMessageV5 = "pollCreationMessageV5"; + } + if (m.newsletterFollowerInviteMessageV2 != null && m.hasOwnProperty("newsletterFollowerInviteMessageV2")) { + d.newsletterFollowerInviteMessageV2 = $root.proto.Message.NewsletterFollowerInviteMessage.toObject(m.newsletterFollowerInviteMessageV2, o); + if (o.oneofs) + d._newsletterFollowerInviteMessageV2 = "newsletterFollowerInviteMessageV2"; + } + if (m.pollResultSnapshotMessageV3 != null && m.hasOwnProperty("pollResultSnapshotMessageV3")) { + d.pollResultSnapshotMessageV3 = $root.proto.Message.PollResultSnapshotMessage.toObject(m.pollResultSnapshotMessageV3, o); + if (o.oneofs) + d._pollResultSnapshotMessageV3 = "pollResultSnapshotMessageV3"; + } + return d; + }; + + Message.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Message.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message"; + }; + + Message.AlbumMessage = (function() { + + function AlbumMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AlbumMessage.prototype.expectedImageCount = null; + AlbumMessage.prototype.expectedVideoCount = null; + AlbumMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AlbumMessage.prototype, "_expectedImageCount", { + get: $util.oneOfGetter($oneOfFields = ["expectedImageCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AlbumMessage.prototype, "_expectedVideoCount", { + get: $util.oneOfGetter($oneOfFields = ["expectedVideoCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AlbumMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AlbumMessage.create = function create(properties) { + return new AlbumMessage(properties); + }; + + AlbumMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.expectedImageCount != null && Object.hasOwnProperty.call(m, "expectedImageCount")) + w.uint32(16).uint32(m.expectedImageCount); + if (m.expectedVideoCount != null && Object.hasOwnProperty.call(m, "expectedVideoCount")) + w.uint32(24).uint32(m.expectedVideoCount); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + return w; + }; + + AlbumMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AlbumMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 2: { + m.expectedImageCount = r.uint32(); + break; + } + case 3: { + m.expectedVideoCount = r.uint32(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AlbumMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AlbumMessage) + return d; + var m = new $root.proto.Message.AlbumMessage(); + if (d.expectedImageCount != null) { + m.expectedImageCount = d.expectedImageCount >>> 0; + } + if (d.expectedVideoCount != null) { + m.expectedVideoCount = d.expectedVideoCount >>> 0; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.AlbumMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + AlbumMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.expectedImageCount != null && m.hasOwnProperty("expectedImageCount")) { + d.expectedImageCount = m.expectedImageCount; + if (o.oneofs) + d._expectedImageCount = "expectedImageCount"; + } + if (m.expectedVideoCount != null && m.hasOwnProperty("expectedVideoCount")) { + d.expectedVideoCount = m.expectedVideoCount; + if (o.oneofs) + d._expectedVideoCount = "expectedVideoCount"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + AlbumMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AlbumMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AlbumMessage"; + }; + + return AlbumMessage; + })(); + + Message.AppStateFatalExceptionNotification = (function() { + + function AppStateFatalExceptionNotification(p) { + this.collectionNames = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppStateFatalExceptionNotification.prototype.collectionNames = $util.emptyArray; + AppStateFatalExceptionNotification.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateFatalExceptionNotification.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AppStateFatalExceptionNotification.create = function create(properties) { + return new AppStateFatalExceptionNotification(properties); + }; + + AppStateFatalExceptionNotification.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.collectionNames != null && m.collectionNames.length) { + for (var i = 0; i < m.collectionNames.length; ++i) + w.uint32(10).string(m.collectionNames[i]); + } + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(16).int64(m.timestamp); + return w; + }; + + AppStateFatalExceptionNotification.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AppStateFatalExceptionNotification(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.collectionNames && m.collectionNames.length)) + m.collectionNames = []; + m.collectionNames.push(r.string()); + break; + } + case 2: { + m.timestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppStateFatalExceptionNotification.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AppStateFatalExceptionNotification) + return d; + var m = new $root.proto.Message.AppStateFatalExceptionNotification(); + if (d.collectionNames) { + if (!Array.isArray(d.collectionNames)) + throw TypeError(".proto.Message.AppStateFatalExceptionNotification.collectionNames: array expected"); + m.collectionNames = []; + for (var i = 0; i < d.collectionNames.length; ++i) { + m.collectionNames[i] = String(d.collectionNames[i]); + } + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + AppStateFatalExceptionNotification.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.collectionNames = []; + } + if (m.collectionNames && m.collectionNames.length) { + d.collectionNames = []; + for (var j = 0; j < m.collectionNames.length; ++j) { + d.collectionNames[j] = m.collectionNames[j]; + } + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + AppStateFatalExceptionNotification.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppStateFatalExceptionNotification.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AppStateFatalExceptionNotification"; + }; + + return AppStateFatalExceptionNotification; + })(); + + Message.AppStateSyncKey = (function() { + + function AppStateSyncKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppStateSyncKey.prototype.keyId = null; + AppStateSyncKey.prototype.keyData = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKey.prototype, "_keyId", { + get: $util.oneOfGetter($oneOfFields = ["keyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKey.prototype, "_keyData", { + get: $util.oneOfGetter($oneOfFields = ["keyData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AppStateSyncKey.create = function create(properties) { + return new AppStateSyncKey(properties); + }; + + AppStateSyncKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.keyId != null && Object.hasOwnProperty.call(m, "keyId")) + $root.proto.Message.AppStateSyncKeyId.encode(m.keyId, w.uint32(10).fork()).ldelim(); + if (m.keyData != null && Object.hasOwnProperty.call(m, "keyData")) + $root.proto.Message.AppStateSyncKeyData.encode(m.keyData, w.uint32(18).fork()).ldelim(); + return w; + }; + + AppStateSyncKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AppStateSyncKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.keyId = $root.proto.Message.AppStateSyncKeyId.decode(r, r.uint32()); + break; + } + case 2: { + m.keyData = $root.proto.Message.AppStateSyncKeyData.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppStateSyncKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AppStateSyncKey) + return d; + var m = new $root.proto.Message.AppStateSyncKey(); + if (d.keyId != null) { + if (typeof d.keyId !== "object") + throw TypeError(".proto.Message.AppStateSyncKey.keyId: object expected"); + m.keyId = $root.proto.Message.AppStateSyncKeyId.fromObject(d.keyId); + } + if (d.keyData != null) { + if (typeof d.keyData !== "object") + throw TypeError(".proto.Message.AppStateSyncKey.keyData: object expected"); + m.keyData = $root.proto.Message.AppStateSyncKeyData.fromObject(d.keyData); + } + return m; + }; + + AppStateSyncKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.keyId != null && m.hasOwnProperty("keyId")) { + d.keyId = $root.proto.Message.AppStateSyncKeyId.toObject(m.keyId, o); + if (o.oneofs) + d._keyId = "keyId"; + } + if (m.keyData != null && m.hasOwnProperty("keyData")) { + d.keyData = $root.proto.Message.AppStateSyncKeyData.toObject(m.keyData, o); + if (o.oneofs) + d._keyData = "keyData"; + } + return d; + }; + + AppStateSyncKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppStateSyncKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AppStateSyncKey"; + }; + + return AppStateSyncKey; + })(); + + Message.AppStateSyncKeyData = (function() { + + function AppStateSyncKeyData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppStateSyncKeyData.prototype.keyData = null; + AppStateSyncKeyData.prototype.fingerprint = null; + AppStateSyncKeyData.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKeyData.prototype, "_keyData", { + get: $util.oneOfGetter($oneOfFields = ["keyData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKeyData.prototype, "_fingerprint", { + get: $util.oneOfGetter($oneOfFields = ["fingerprint"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKeyData.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AppStateSyncKeyData.create = function create(properties) { + return new AppStateSyncKeyData(properties); + }; + + AppStateSyncKeyData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.keyData != null && Object.hasOwnProperty.call(m, "keyData")) + w.uint32(10).bytes(m.keyData); + if (m.fingerprint != null && Object.hasOwnProperty.call(m, "fingerprint")) + $root.proto.Message.AppStateSyncKeyFingerprint.encode(m.fingerprint, w.uint32(18).fork()).ldelim(); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(24).int64(m.timestamp); + return w; + }; + + AppStateSyncKeyData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AppStateSyncKeyData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.keyData = r.bytes(); + break; + } + case 2: { + m.fingerprint = $root.proto.Message.AppStateSyncKeyFingerprint.decode(r, r.uint32()); + break; + } + case 3: { + m.timestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppStateSyncKeyData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AppStateSyncKeyData) + return d; + var m = new $root.proto.Message.AppStateSyncKeyData(); + if (d.keyData != null) { + if (typeof d.keyData === "string") + $util.base64.decode(d.keyData, m.keyData = $util.newBuffer($util.base64.length(d.keyData)), 0); + else if (d.keyData.length >= 0) + m.keyData = d.keyData; + } + if (d.fingerprint != null) { + if (typeof d.fingerprint !== "object") + throw TypeError(".proto.Message.AppStateSyncKeyData.fingerprint: object expected"); + m.fingerprint = $root.proto.Message.AppStateSyncKeyFingerprint.fromObject(d.fingerprint); + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + AppStateSyncKeyData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.keyData != null && m.hasOwnProperty("keyData")) { + d.keyData = o.bytes === String ? $util.base64.encode(m.keyData, 0, m.keyData.length) : o.bytes === Array ? Array.prototype.slice.call(m.keyData) : m.keyData; + if (o.oneofs) + d._keyData = "keyData"; + } + if (m.fingerprint != null && m.hasOwnProperty("fingerprint")) { + d.fingerprint = $root.proto.Message.AppStateSyncKeyFingerprint.toObject(m.fingerprint, o); + if (o.oneofs) + d._fingerprint = "fingerprint"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + AppStateSyncKeyData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppStateSyncKeyData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AppStateSyncKeyData"; + }; + + return AppStateSyncKeyData; + })(); + + Message.AppStateSyncKeyFingerprint = (function() { + + function AppStateSyncKeyFingerprint(p) { + this.deviceIndexes = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppStateSyncKeyFingerprint.prototype.rawId = null; + AppStateSyncKeyFingerprint.prototype.currentIndex = null; + AppStateSyncKeyFingerprint.prototype.deviceIndexes = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKeyFingerprint.prototype, "_rawId", { + get: $util.oneOfGetter($oneOfFields = ["rawId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKeyFingerprint.prototype, "_currentIndex", { + get: $util.oneOfGetter($oneOfFields = ["currentIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AppStateSyncKeyFingerprint.create = function create(properties) { + return new AppStateSyncKeyFingerprint(properties); + }; + + AppStateSyncKeyFingerprint.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.rawId != null && Object.hasOwnProperty.call(m, "rawId")) + w.uint32(8).uint32(m.rawId); + if (m.currentIndex != null && Object.hasOwnProperty.call(m, "currentIndex")) + w.uint32(16).uint32(m.currentIndex); + if (m.deviceIndexes != null && m.deviceIndexes.length) { + w.uint32(26).fork(); + for (var i = 0; i < m.deviceIndexes.length; ++i) + w.uint32(m.deviceIndexes[i]); + w.ldelim(); + } + return w; + }; + + AppStateSyncKeyFingerprint.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AppStateSyncKeyFingerprint(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.rawId = r.uint32(); + break; + } + case 2: { + m.currentIndex = r.uint32(); + break; + } + case 3: { + if (!(m.deviceIndexes && m.deviceIndexes.length)) + m.deviceIndexes = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.deviceIndexes.push(r.uint32()); + } else + m.deviceIndexes.push(r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppStateSyncKeyFingerprint.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AppStateSyncKeyFingerprint) + return d; + var m = new $root.proto.Message.AppStateSyncKeyFingerprint(); + if (d.rawId != null) { + m.rawId = d.rawId >>> 0; + } + if (d.currentIndex != null) { + m.currentIndex = d.currentIndex >>> 0; + } + if (d.deviceIndexes) { + if (!Array.isArray(d.deviceIndexes)) + throw TypeError(".proto.Message.AppStateSyncKeyFingerprint.deviceIndexes: array expected"); + m.deviceIndexes = []; + for (var i = 0; i < d.deviceIndexes.length; ++i) { + m.deviceIndexes[i] = d.deviceIndexes[i] >>> 0; + } + } + return m; + }; + + AppStateSyncKeyFingerprint.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.deviceIndexes = []; + } + if (m.rawId != null && m.hasOwnProperty("rawId")) { + d.rawId = m.rawId; + if (o.oneofs) + d._rawId = "rawId"; + } + if (m.currentIndex != null && m.hasOwnProperty("currentIndex")) { + d.currentIndex = m.currentIndex; + if (o.oneofs) + d._currentIndex = "currentIndex"; + } + if (m.deviceIndexes && m.deviceIndexes.length) { + d.deviceIndexes = []; + for (var j = 0; j < m.deviceIndexes.length; ++j) { + d.deviceIndexes[j] = m.deviceIndexes[j]; + } + } + return d; + }; + + AppStateSyncKeyFingerprint.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppStateSyncKeyFingerprint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AppStateSyncKeyFingerprint"; + }; + + return AppStateSyncKeyFingerprint; + })(); + + Message.AppStateSyncKeyId = (function() { + + function AppStateSyncKeyId(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppStateSyncKeyId.prototype.keyId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AppStateSyncKeyId.prototype, "_keyId", { + get: $util.oneOfGetter($oneOfFields = ["keyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AppStateSyncKeyId.create = function create(properties) { + return new AppStateSyncKeyId(properties); + }; + + AppStateSyncKeyId.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.keyId != null && Object.hasOwnProperty.call(m, "keyId")) + w.uint32(10).bytes(m.keyId); + return w; + }; + + AppStateSyncKeyId.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AppStateSyncKeyId(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.keyId = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppStateSyncKeyId.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AppStateSyncKeyId) + return d; + var m = new $root.proto.Message.AppStateSyncKeyId(); + if (d.keyId != null) { + if (typeof d.keyId === "string") + $util.base64.decode(d.keyId, m.keyId = $util.newBuffer($util.base64.length(d.keyId)), 0); + else if (d.keyId.length >= 0) + m.keyId = d.keyId; + } + return m; + }; + + AppStateSyncKeyId.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.keyId != null && m.hasOwnProperty("keyId")) { + d.keyId = o.bytes === String ? $util.base64.encode(m.keyId, 0, m.keyId.length) : o.bytes === Array ? Array.prototype.slice.call(m.keyId) : m.keyId; + if (o.oneofs) + d._keyId = "keyId"; + } + return d; + }; + + AppStateSyncKeyId.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppStateSyncKeyId.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AppStateSyncKeyId"; + }; + + return AppStateSyncKeyId; + })(); + + Message.AppStateSyncKeyRequest = (function() { + + function AppStateSyncKeyRequest(p) { + this.keyIds = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppStateSyncKeyRequest.prototype.keyIds = $util.emptyArray; + + AppStateSyncKeyRequest.create = function create(properties) { + return new AppStateSyncKeyRequest(properties); + }; + + AppStateSyncKeyRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.keyIds != null && m.keyIds.length) { + for (var i = 0; i < m.keyIds.length; ++i) + $root.proto.Message.AppStateSyncKeyId.encode(m.keyIds[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + AppStateSyncKeyRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AppStateSyncKeyRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.keyIds && m.keyIds.length)) + m.keyIds = []; + m.keyIds.push($root.proto.Message.AppStateSyncKeyId.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppStateSyncKeyRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AppStateSyncKeyRequest) + return d; + var m = new $root.proto.Message.AppStateSyncKeyRequest(); + if (d.keyIds) { + if (!Array.isArray(d.keyIds)) + throw TypeError(".proto.Message.AppStateSyncKeyRequest.keyIds: array expected"); + m.keyIds = []; + for (var i = 0; i < d.keyIds.length; ++i) { + if (typeof d.keyIds[i] !== "object") + throw TypeError(".proto.Message.AppStateSyncKeyRequest.keyIds: object expected"); + m.keyIds[i] = $root.proto.Message.AppStateSyncKeyId.fromObject(d.keyIds[i]); + } + } + return m; + }; + + AppStateSyncKeyRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.keyIds = []; + } + if (m.keyIds && m.keyIds.length) { + d.keyIds = []; + for (var j = 0; j < m.keyIds.length; ++j) { + d.keyIds[j] = $root.proto.Message.AppStateSyncKeyId.toObject(m.keyIds[j], o); + } + } + return d; + }; + + AppStateSyncKeyRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppStateSyncKeyRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AppStateSyncKeyRequest"; + }; + + return AppStateSyncKeyRequest; + })(); + + Message.AppStateSyncKeyShare = (function() { + + function AppStateSyncKeyShare(p) { + this.keys = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AppStateSyncKeyShare.prototype.keys = $util.emptyArray; + + AppStateSyncKeyShare.create = function create(properties) { + return new AppStateSyncKeyShare(properties); + }; + + AppStateSyncKeyShare.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.keys != null && m.keys.length) { + for (var i = 0; i < m.keys.length; ++i) + $root.proto.Message.AppStateSyncKey.encode(m.keys[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + AppStateSyncKeyShare.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AppStateSyncKeyShare(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.keys && m.keys.length)) + m.keys = []; + m.keys.push($root.proto.Message.AppStateSyncKey.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AppStateSyncKeyShare.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AppStateSyncKeyShare) + return d; + var m = new $root.proto.Message.AppStateSyncKeyShare(); + if (d.keys) { + if (!Array.isArray(d.keys)) + throw TypeError(".proto.Message.AppStateSyncKeyShare.keys: array expected"); + m.keys = []; + for (var i = 0; i < d.keys.length; ++i) { + if (typeof d.keys[i] !== "object") + throw TypeError(".proto.Message.AppStateSyncKeyShare.keys: object expected"); + m.keys[i] = $root.proto.Message.AppStateSyncKey.fromObject(d.keys[i]); + } + } + return m; + }; + + AppStateSyncKeyShare.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.keys = []; + } + if (m.keys && m.keys.length) { + d.keys = []; + for (var j = 0; j < m.keys.length; ++j) { + d.keys[j] = $root.proto.Message.AppStateSyncKey.toObject(m.keys[j], o); + } + } + return d; + }; + + AppStateSyncKeyShare.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AppStateSyncKeyShare.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AppStateSyncKeyShare"; + }; + + return AppStateSyncKeyShare; + })(); + + Message.AudioMessage = (function() { + + function AudioMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AudioMessage.prototype.url = null; + AudioMessage.prototype.mimetype = null; + AudioMessage.prototype.fileSha256 = null; + AudioMessage.prototype.fileLength = null; + AudioMessage.prototype.seconds = null; + AudioMessage.prototype.ptt = null; + AudioMessage.prototype.mediaKey = null; + AudioMessage.prototype.fileEncSha256 = null; + AudioMessage.prototype.directPath = null; + AudioMessage.prototype.mediaKeyTimestamp = null; + AudioMessage.prototype.contextInfo = null; + AudioMessage.prototype.streamingSidecar = null; + AudioMessage.prototype.waveform = null; + AudioMessage.prototype.backgroundArgb = null; + AudioMessage.prototype.viewOnce = null; + AudioMessage.prototype.accessibilityLabel = null; + AudioMessage.prototype.mediaKeyDomain = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_seconds", { + get: $util.oneOfGetter($oneOfFields = ["seconds"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_ptt", { + get: $util.oneOfGetter($oneOfFields = ["ptt"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_streamingSidecar", { + get: $util.oneOfGetter($oneOfFields = ["streamingSidecar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_waveform", { + get: $util.oneOfGetter($oneOfFields = ["waveform"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_backgroundArgb", { + get: $util.oneOfGetter($oneOfFields = ["backgroundArgb"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_viewOnce", { + get: $util.oneOfGetter($oneOfFields = ["viewOnce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_accessibilityLabel", { + get: $util.oneOfGetter($oneOfFields = ["accessibilityLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AudioMessage.prototype, "_mediaKeyDomain", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyDomain"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AudioMessage.create = function create(properties) { + return new AudioMessage(properties); + }; + + AudioMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(18).string(m.mimetype); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(26).bytes(m.fileSha256); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(32).uint64(m.fileLength); + if (m.seconds != null && Object.hasOwnProperty.call(m, "seconds")) + w.uint32(40).uint32(m.seconds); + if (m.ptt != null && Object.hasOwnProperty.call(m, "ptt")) + w.uint32(48).bool(m.ptt); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(58).bytes(m.mediaKey); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(66).bytes(m.fileEncSha256); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(74).string(m.directPath); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(80).int64(m.mediaKeyTimestamp); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + if (m.streamingSidecar != null && Object.hasOwnProperty.call(m, "streamingSidecar")) + w.uint32(146).bytes(m.streamingSidecar); + if (m.waveform != null && Object.hasOwnProperty.call(m, "waveform")) + w.uint32(154).bytes(m.waveform); + if (m.backgroundArgb != null && Object.hasOwnProperty.call(m, "backgroundArgb")) + w.uint32(165).fixed32(m.backgroundArgb); + if (m.viewOnce != null && Object.hasOwnProperty.call(m, "viewOnce")) + w.uint32(168).bool(m.viewOnce); + if (m.accessibilityLabel != null && Object.hasOwnProperty.call(m, "accessibilityLabel")) + w.uint32(178).string(m.accessibilityLabel); + if (m.mediaKeyDomain != null && Object.hasOwnProperty.call(m, "mediaKeyDomain")) + w.uint32(184).int32(m.mediaKeyDomain); + return w; + }; + + AudioMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.AudioMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.mimetype = r.string(); + break; + } + case 3: { + m.fileSha256 = r.bytes(); + break; + } + case 4: { + m.fileLength = r.uint64(); + break; + } + case 5: { + m.seconds = r.uint32(); + break; + } + case 6: { + m.ptt = r.bool(); + break; + } + case 7: { + m.mediaKey = r.bytes(); + break; + } + case 8: { + m.fileEncSha256 = r.bytes(); + break; + } + case 9: { + m.directPath = r.string(); + break; + } + case 10: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 18: { + m.streamingSidecar = r.bytes(); + break; + } + case 19: { + m.waveform = r.bytes(); + break; + } + case 20: { + m.backgroundArgb = r.fixed32(); + break; + } + case 21: { + m.viewOnce = r.bool(); + break; + } + case 22: { + m.accessibilityLabel = r.string(); + break; + } + case 23: { + m.mediaKeyDomain = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AudioMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.AudioMessage) + return d; + var m = new $root.proto.Message.AudioMessage(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.seconds != null) { + m.seconds = d.seconds >>> 0; + } + if (d.ptt != null) { + m.ptt = Boolean(d.ptt); + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.AudioMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.streamingSidecar != null) { + if (typeof d.streamingSidecar === "string") + $util.base64.decode(d.streamingSidecar, m.streamingSidecar = $util.newBuffer($util.base64.length(d.streamingSidecar)), 0); + else if (d.streamingSidecar.length >= 0) + m.streamingSidecar = d.streamingSidecar; + } + if (d.waveform != null) { + if (typeof d.waveform === "string") + $util.base64.decode(d.waveform, m.waveform = $util.newBuffer($util.base64.length(d.waveform)), 0); + else if (d.waveform.length >= 0) + m.waveform = d.waveform; + } + if (d.backgroundArgb != null) { + m.backgroundArgb = d.backgroundArgb >>> 0; + } + if (d.viewOnce != null) { + m.viewOnce = Boolean(d.viewOnce); + } + if (d.accessibilityLabel != null) { + m.accessibilityLabel = String(d.accessibilityLabel); + } + switch (d.mediaKeyDomain) { + default: + if (typeof d.mediaKeyDomain === "number") { + m.mediaKeyDomain = d.mediaKeyDomain; + break; + } + break; + case "UNSET": + case 0: + m.mediaKeyDomain = 0; + break; + case "E2EE_CHAT": + case 1: + m.mediaKeyDomain = 1; + break; + case "STATUS": + case 2: + m.mediaKeyDomain = 2; + break; + case "CAPI": + case 3: + m.mediaKeyDomain = 3; + break; + case "BOT": + case 4: + m.mediaKeyDomain = 4; + break; + } + return m; + }; + + AudioMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.seconds != null && m.hasOwnProperty("seconds")) { + d.seconds = m.seconds; + if (o.oneofs) + d._seconds = "seconds"; + } + if (m.ptt != null && m.hasOwnProperty("ptt")) { + d.ptt = m.ptt; + if (o.oneofs) + d._ptt = "ptt"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.streamingSidecar != null && m.hasOwnProperty("streamingSidecar")) { + d.streamingSidecar = o.bytes === String ? $util.base64.encode(m.streamingSidecar, 0, m.streamingSidecar.length) : o.bytes === Array ? Array.prototype.slice.call(m.streamingSidecar) : m.streamingSidecar; + if (o.oneofs) + d._streamingSidecar = "streamingSidecar"; + } + if (m.waveform != null && m.hasOwnProperty("waveform")) { + d.waveform = o.bytes === String ? $util.base64.encode(m.waveform, 0, m.waveform.length) : o.bytes === Array ? Array.prototype.slice.call(m.waveform) : m.waveform; + if (o.oneofs) + d._waveform = "waveform"; + } + if (m.backgroundArgb != null && m.hasOwnProperty("backgroundArgb")) { + d.backgroundArgb = m.backgroundArgb; + if (o.oneofs) + d._backgroundArgb = "backgroundArgb"; + } + if (m.viewOnce != null && m.hasOwnProperty("viewOnce")) { + d.viewOnce = m.viewOnce; + if (o.oneofs) + d._viewOnce = "viewOnce"; + } + if (m.accessibilityLabel != null && m.hasOwnProperty("accessibilityLabel")) { + d.accessibilityLabel = m.accessibilityLabel; + if (o.oneofs) + d._accessibilityLabel = "accessibilityLabel"; + } + if (m.mediaKeyDomain != null && m.hasOwnProperty("mediaKeyDomain")) { + d.mediaKeyDomain = o.enums === String ? $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] === undefined ? m.mediaKeyDomain : $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] : m.mediaKeyDomain; + if (o.oneofs) + d._mediaKeyDomain = "mediaKeyDomain"; + } + return d; + }; + + AudioMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AudioMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.AudioMessage"; + }; + + return AudioMessage; + })(); + + Message.BCallMessage = (function() { + + function BCallMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BCallMessage.prototype.sessionId = null; + BCallMessage.prototype.mediaType = null; + BCallMessage.prototype.masterKey = null; + BCallMessage.prototype.caption = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BCallMessage.prototype, "_sessionId", { + get: $util.oneOfGetter($oneOfFields = ["sessionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BCallMessage.prototype, "_mediaType", { + get: $util.oneOfGetter($oneOfFields = ["mediaType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BCallMessage.prototype, "_masterKey", { + get: $util.oneOfGetter($oneOfFields = ["masterKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BCallMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BCallMessage.create = function create(properties) { + return new BCallMessage(properties); + }; + + BCallMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sessionId != null && Object.hasOwnProperty.call(m, "sessionId")) + w.uint32(10).string(m.sessionId); + if (m.mediaType != null && Object.hasOwnProperty.call(m, "mediaType")) + w.uint32(16).int32(m.mediaType); + if (m.masterKey != null && Object.hasOwnProperty.call(m, "masterKey")) + w.uint32(26).bytes(m.masterKey); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(34).string(m.caption); + return w; + }; + + BCallMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.BCallMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sessionId = r.string(); + break; + } + case 2: { + m.mediaType = r.int32(); + break; + } + case 3: { + m.masterKey = r.bytes(); + break; + } + case 4: { + m.caption = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BCallMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.BCallMessage) + return d; + var m = new $root.proto.Message.BCallMessage(); + if (d.sessionId != null) { + m.sessionId = String(d.sessionId); + } + switch (d.mediaType) { + default: + if (typeof d.mediaType === "number") { + m.mediaType = d.mediaType; + break; + } + break; + case "UNKNOWN": + case 0: + m.mediaType = 0; + break; + case "AUDIO": + case 1: + m.mediaType = 1; + break; + case "VIDEO": + case 2: + m.mediaType = 2; + break; + } + if (d.masterKey != null) { + if (typeof d.masterKey === "string") + $util.base64.decode(d.masterKey, m.masterKey = $util.newBuffer($util.base64.length(d.masterKey)), 0); + else if (d.masterKey.length >= 0) + m.masterKey = d.masterKey; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + return m; + }; + + BCallMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.sessionId != null && m.hasOwnProperty("sessionId")) { + d.sessionId = m.sessionId; + if (o.oneofs) + d._sessionId = "sessionId"; + } + if (m.mediaType != null && m.hasOwnProperty("mediaType")) { + d.mediaType = o.enums === String ? $root.proto.Message.BCallMessage.MediaType[m.mediaType] === undefined ? m.mediaType : $root.proto.Message.BCallMessage.MediaType[m.mediaType] : m.mediaType; + if (o.oneofs) + d._mediaType = "mediaType"; + } + if (m.masterKey != null && m.hasOwnProperty("masterKey")) { + d.masterKey = o.bytes === String ? $util.base64.encode(m.masterKey, 0, m.masterKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.masterKey) : m.masterKey; + if (o.oneofs) + d._masterKey = "masterKey"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + return d; + }; + + BCallMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BCallMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.BCallMessage"; + }; + + BCallMessage.MediaType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "AUDIO"] = 1; + values[valuesById[2] = "VIDEO"] = 2; + return values; + })(); + + return BCallMessage; + })(); + + Message.ButtonsMessage = (function() { + + function ButtonsMessage(p) { + this.buttons = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ButtonsMessage.prototype.contentText = null; + ButtonsMessage.prototype.footerText = null; + ButtonsMessage.prototype.contextInfo = null; + ButtonsMessage.prototype.buttons = $util.emptyArray; + ButtonsMessage.prototype.headerType = null; + ButtonsMessage.prototype.text = null; + ButtonsMessage.prototype.documentMessage = null; + ButtonsMessage.prototype.imageMessage = null; + ButtonsMessage.prototype.videoMessage = null; + ButtonsMessage.prototype.locationMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonsMessage.prototype, "_contentText", { + get: $util.oneOfGetter($oneOfFields = ["contentText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonsMessage.prototype, "_footerText", { + get: $util.oneOfGetter($oneOfFields = ["footerText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonsMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonsMessage.prototype, "_headerType", { + get: $util.oneOfGetter($oneOfFields = ["headerType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(ButtonsMessage.prototype, "header", { + get: $util.oneOfGetter($oneOfFields = ["text", "documentMessage", "imageMessage", "videoMessage", "locationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ButtonsMessage.create = function create(properties) { + return new ButtonsMessage(properties); + }; + + ButtonsMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + if (m.documentMessage != null && Object.hasOwnProperty.call(m, "documentMessage")) + $root.proto.Message.DocumentMessage.encode(m.documentMessage, w.uint32(18).fork()).ldelim(); + if (m.imageMessage != null && Object.hasOwnProperty.call(m, "imageMessage")) + $root.proto.Message.ImageMessage.encode(m.imageMessage, w.uint32(26).fork()).ldelim(); + if (m.videoMessage != null && Object.hasOwnProperty.call(m, "videoMessage")) + $root.proto.Message.VideoMessage.encode(m.videoMessage, w.uint32(34).fork()).ldelim(); + if (m.locationMessage != null && Object.hasOwnProperty.call(m, "locationMessage")) + $root.proto.Message.LocationMessage.encode(m.locationMessage, w.uint32(42).fork()).ldelim(); + if (m.contentText != null && Object.hasOwnProperty.call(m, "contentText")) + w.uint32(50).string(m.contentText); + if (m.footerText != null && Object.hasOwnProperty.call(m, "footerText")) + w.uint32(58).string(m.footerText); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(66).fork()).ldelim(); + if (m.buttons != null && m.buttons.length) { + for (var i = 0; i < m.buttons.length; ++i) + $root.proto.Message.ButtonsMessage.Button.encode(m.buttons[i], w.uint32(74).fork()).ldelim(); + } + if (m.headerType != null && Object.hasOwnProperty.call(m, "headerType")) + w.uint32(80).int32(m.headerType); + return w; + }; + + ButtonsMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ButtonsMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 6: { + m.contentText = r.string(); + break; + } + case 7: { + m.footerText = r.string(); + break; + } + case 8: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 9: { + if (!(m.buttons && m.buttons.length)) + m.buttons = []; + m.buttons.push($root.proto.Message.ButtonsMessage.Button.decode(r, r.uint32())); + break; + } + case 10: { + m.headerType = r.int32(); + break; + } + case 1: { + m.text = r.string(); + break; + } + case 2: { + m.documentMessage = $root.proto.Message.DocumentMessage.decode(r, r.uint32()); + break; + } + case 3: { + m.imageMessage = $root.proto.Message.ImageMessage.decode(r, r.uint32()); + break; + } + case 4: { + m.videoMessage = $root.proto.Message.VideoMessage.decode(r, r.uint32()); + break; + } + case 5: { + m.locationMessage = $root.proto.Message.LocationMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ButtonsMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ButtonsMessage) + return d; + var m = new $root.proto.Message.ButtonsMessage(); + if (d.contentText != null) { + m.contentText = String(d.contentText); + } + if (d.footerText != null) { + m.footerText = String(d.footerText); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ButtonsMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.buttons) { + if (!Array.isArray(d.buttons)) + throw TypeError(".proto.Message.ButtonsMessage.buttons: array expected"); + m.buttons = []; + for (var i = 0; i < d.buttons.length; ++i) { + if (typeof d.buttons[i] !== "object") + throw TypeError(".proto.Message.ButtonsMessage.buttons: object expected"); + m.buttons[i] = $root.proto.Message.ButtonsMessage.Button.fromObject(d.buttons[i]); + } + } + switch (d.headerType) { + default: + if (typeof d.headerType === "number") { + m.headerType = d.headerType; + break; + } + break; + case "UNKNOWN": + case 0: + m.headerType = 0; + break; + case "EMPTY": + case 1: + m.headerType = 1; + break; + case "TEXT": + case 2: + m.headerType = 2; + break; + case "DOCUMENT": + case 3: + m.headerType = 3; + break; + case "IMAGE": + case 4: + m.headerType = 4; + break; + case "VIDEO": + case 5: + m.headerType = 5; + break; + case "LOCATION": + case 6: + m.headerType = 6; + break; + } + if (d.text != null) { + m.text = String(d.text); + } + if (d.documentMessage != null) { + if (typeof d.documentMessage !== "object") + throw TypeError(".proto.Message.ButtonsMessage.documentMessage: object expected"); + m.documentMessage = $root.proto.Message.DocumentMessage.fromObject(d.documentMessage); + } + if (d.imageMessage != null) { + if (typeof d.imageMessage !== "object") + throw TypeError(".proto.Message.ButtonsMessage.imageMessage: object expected"); + m.imageMessage = $root.proto.Message.ImageMessage.fromObject(d.imageMessage); + } + if (d.videoMessage != null) { + if (typeof d.videoMessage !== "object") + throw TypeError(".proto.Message.ButtonsMessage.videoMessage: object expected"); + m.videoMessage = $root.proto.Message.VideoMessage.fromObject(d.videoMessage); + } + if (d.locationMessage != null) { + if (typeof d.locationMessage !== "object") + throw TypeError(".proto.Message.ButtonsMessage.locationMessage: object expected"); + m.locationMessage = $root.proto.Message.LocationMessage.fromObject(d.locationMessage); + } + return m; + }; + + ButtonsMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.buttons = []; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d.header = "text"; + } + if (m.documentMessage != null && m.hasOwnProperty("documentMessage")) { + d.documentMessage = $root.proto.Message.DocumentMessage.toObject(m.documentMessage, o); + if (o.oneofs) + d.header = "documentMessage"; + } + if (m.imageMessage != null && m.hasOwnProperty("imageMessage")) { + d.imageMessage = $root.proto.Message.ImageMessage.toObject(m.imageMessage, o); + if (o.oneofs) + d.header = "imageMessage"; + } + if (m.videoMessage != null && m.hasOwnProperty("videoMessage")) { + d.videoMessage = $root.proto.Message.VideoMessage.toObject(m.videoMessage, o); + if (o.oneofs) + d.header = "videoMessage"; + } + if (m.locationMessage != null && m.hasOwnProperty("locationMessage")) { + d.locationMessage = $root.proto.Message.LocationMessage.toObject(m.locationMessage, o); + if (o.oneofs) + d.header = "locationMessage"; + } + if (m.contentText != null && m.hasOwnProperty("contentText")) { + d.contentText = m.contentText; + if (o.oneofs) + d._contentText = "contentText"; + } + if (m.footerText != null && m.hasOwnProperty("footerText")) { + d.footerText = m.footerText; + if (o.oneofs) + d._footerText = "footerText"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.buttons && m.buttons.length) { + d.buttons = []; + for (var j = 0; j < m.buttons.length; ++j) { + d.buttons[j] = $root.proto.Message.ButtonsMessage.Button.toObject(m.buttons[j], o); + } + } + if (m.headerType != null && m.hasOwnProperty("headerType")) { + d.headerType = o.enums === String ? $root.proto.Message.ButtonsMessage.HeaderType[m.headerType] === undefined ? m.headerType : $root.proto.Message.ButtonsMessage.HeaderType[m.headerType] : m.headerType; + if (o.oneofs) + d._headerType = "headerType"; + } + return d; + }; + + ButtonsMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ButtonsMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ButtonsMessage"; + }; + + ButtonsMessage.Button = (function() { + + function Button(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Button.prototype.buttonId = null; + Button.prototype.buttonText = null; + Button.prototype.type = null; + Button.prototype.nativeFlowInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Button.prototype, "_buttonId", { + get: $util.oneOfGetter($oneOfFields = ["buttonId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Button.prototype, "_buttonText", { + get: $util.oneOfGetter($oneOfFields = ["buttonText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Button.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Button.prototype, "_nativeFlowInfo", { + get: $util.oneOfGetter($oneOfFields = ["nativeFlowInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Button.create = function create(properties) { + return new Button(properties); + }; + + Button.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.buttonId != null && Object.hasOwnProperty.call(m, "buttonId")) + w.uint32(10).string(m.buttonId); + if (m.buttonText != null && Object.hasOwnProperty.call(m, "buttonText")) + $root.proto.Message.ButtonsMessage.Button.ButtonText.encode(m.buttonText, w.uint32(18).fork()).ldelim(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(24).int32(m.type); + if (m.nativeFlowInfo != null && Object.hasOwnProperty.call(m, "nativeFlowInfo")) + $root.proto.Message.ButtonsMessage.Button.NativeFlowInfo.encode(m.nativeFlowInfo, w.uint32(34).fork()).ldelim(); + return w; + }; + + Button.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ButtonsMessage.Button(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.buttonId = r.string(); + break; + } + case 2: { + m.buttonText = $root.proto.Message.ButtonsMessage.Button.ButtonText.decode(r, r.uint32()); + break; + } + case 3: { + m.type = r.int32(); + break; + } + case 4: { + m.nativeFlowInfo = $root.proto.Message.ButtonsMessage.Button.NativeFlowInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Button.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ButtonsMessage.Button) + return d; + var m = new $root.proto.Message.ButtonsMessage.Button(); + if (d.buttonId != null) { + m.buttonId = String(d.buttonId); + } + if (d.buttonText != null) { + if (typeof d.buttonText !== "object") + throw TypeError(".proto.Message.ButtonsMessage.Button.buttonText: object expected"); + m.buttonText = $root.proto.Message.ButtonsMessage.Button.ButtonText.fromObject(d.buttonText); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN": + case 0: + m.type = 0; + break; + case "RESPONSE": + case 1: + m.type = 1; + break; + case "NATIVE_FLOW": + case 2: + m.type = 2; + break; + } + if (d.nativeFlowInfo != null) { + if (typeof d.nativeFlowInfo !== "object") + throw TypeError(".proto.Message.ButtonsMessage.Button.nativeFlowInfo: object expected"); + m.nativeFlowInfo = $root.proto.Message.ButtonsMessage.Button.NativeFlowInfo.fromObject(d.nativeFlowInfo); + } + return m; + }; + + Button.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.buttonId != null && m.hasOwnProperty("buttonId")) { + d.buttonId = m.buttonId; + if (o.oneofs) + d._buttonId = "buttonId"; + } + if (m.buttonText != null && m.hasOwnProperty("buttonText")) { + d.buttonText = $root.proto.Message.ButtonsMessage.Button.ButtonText.toObject(m.buttonText, o); + if (o.oneofs) + d._buttonText = "buttonText"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.ButtonsMessage.Button.Type[m.type] === undefined ? m.type : $root.proto.Message.ButtonsMessage.Button.Type[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.nativeFlowInfo != null && m.hasOwnProperty("nativeFlowInfo")) { + d.nativeFlowInfo = $root.proto.Message.ButtonsMessage.Button.NativeFlowInfo.toObject(m.nativeFlowInfo, o); + if (o.oneofs) + d._nativeFlowInfo = "nativeFlowInfo"; + } + return d; + }; + + Button.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Button.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ButtonsMessage.Button"; + }; + + Button.ButtonText = (function() { + + function ButtonText(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ButtonText.prototype.displayText = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonText.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ButtonText.create = function create(properties) { + return new ButtonText(properties); + }; + + ButtonText.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + w.uint32(10).string(m.displayText); + return w; + }; + + ButtonText.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ButtonsMessage.Button.ButtonText(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ButtonText.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ButtonsMessage.Button.ButtonText) + return d; + var m = new $root.proto.Message.ButtonsMessage.Button.ButtonText(); + if (d.displayText != null) { + m.displayText = String(d.displayText); + } + return m; + }; + + ButtonText.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = m.displayText; + if (o.oneofs) + d._displayText = "displayText"; + } + return d; + }; + + ButtonText.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ButtonText.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ButtonsMessage.Button.ButtonText"; + }; + + return ButtonText; + })(); + + Button.NativeFlowInfo = (function() { + + function NativeFlowInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NativeFlowInfo.prototype.name = null; + NativeFlowInfo.prototype.paramsJson = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowInfo.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowInfo.prototype, "_paramsJson", { + get: $util.oneOfGetter($oneOfFields = ["paramsJson"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NativeFlowInfo.create = function create(properties) { + return new NativeFlowInfo(properties); + }; + + NativeFlowInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.paramsJson != null && Object.hasOwnProperty.call(m, "paramsJson")) + w.uint32(18).string(m.paramsJson); + return w; + }; + + NativeFlowInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ButtonsMessage.Button.NativeFlowInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + m.paramsJson = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NativeFlowInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ButtonsMessage.Button.NativeFlowInfo) + return d; + var m = new $root.proto.Message.ButtonsMessage.Button.NativeFlowInfo(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.paramsJson != null) { + m.paramsJson = String(d.paramsJson); + } + return m; + }; + + NativeFlowInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.paramsJson != null && m.hasOwnProperty("paramsJson")) { + d.paramsJson = m.paramsJson; + if (o.oneofs) + d._paramsJson = "paramsJson"; + } + return d; + }; + + NativeFlowInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NativeFlowInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ButtonsMessage.Button.NativeFlowInfo"; + }; + + return NativeFlowInfo; + })(); + + Button.Type = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "RESPONSE"] = 1; + values[valuesById[2] = "NATIVE_FLOW"] = 2; + return values; + })(); + + return Button; + })(); + + ButtonsMessage.HeaderType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "EMPTY"] = 1; + values[valuesById[2] = "TEXT"] = 2; + values[valuesById[3] = "DOCUMENT"] = 3; + values[valuesById[4] = "IMAGE"] = 4; + values[valuesById[5] = "VIDEO"] = 5; + values[valuesById[6] = "LOCATION"] = 6; + return values; + })(); + + return ButtonsMessage; + })(); + + Message.ButtonsResponseMessage = (function() { + + function ButtonsResponseMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ButtonsResponseMessage.prototype.selectedButtonId = null; + ButtonsResponseMessage.prototype.contextInfo = null; + ButtonsResponseMessage.prototype.type = null; + ButtonsResponseMessage.prototype.selectedDisplayText = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonsResponseMessage.prototype, "_selectedButtonId", { + get: $util.oneOfGetter($oneOfFields = ["selectedButtonId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonsResponseMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ButtonsResponseMessage.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(ButtonsResponseMessage.prototype, "response", { + get: $util.oneOfGetter($oneOfFields = ["selectedDisplayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ButtonsResponseMessage.create = function create(properties) { + return new ButtonsResponseMessage(properties); + }; + + ButtonsResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.selectedButtonId != null && Object.hasOwnProperty.call(m, "selectedButtonId")) + w.uint32(10).string(m.selectedButtonId); + if (m.selectedDisplayText != null && Object.hasOwnProperty.call(m, "selectedDisplayText")) + w.uint32(18).string(m.selectedDisplayText); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(26).fork()).ldelim(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(32).int32(m.type); + return w; + }; + + ButtonsResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ButtonsResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.selectedButtonId = r.string(); + break; + } + case 3: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 4: { + m.type = r.int32(); + break; + } + case 2: { + m.selectedDisplayText = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ButtonsResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ButtonsResponseMessage) + return d; + var m = new $root.proto.Message.ButtonsResponseMessage(); + if (d.selectedButtonId != null) { + m.selectedButtonId = String(d.selectedButtonId); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ButtonsResponseMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN": + case 0: + m.type = 0; + break; + case "DISPLAY_TEXT": + case 1: + m.type = 1; + break; + } + if (d.selectedDisplayText != null) { + m.selectedDisplayText = String(d.selectedDisplayText); + } + return m; + }; + + ButtonsResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.selectedButtonId != null && m.hasOwnProperty("selectedButtonId")) { + d.selectedButtonId = m.selectedButtonId; + if (o.oneofs) + d._selectedButtonId = "selectedButtonId"; + } + if (m.selectedDisplayText != null && m.hasOwnProperty("selectedDisplayText")) { + d.selectedDisplayText = m.selectedDisplayText; + if (o.oneofs) + d.response = "selectedDisplayText"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.ButtonsResponseMessage.Type[m.type] === undefined ? m.type : $root.proto.Message.ButtonsResponseMessage.Type[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + ButtonsResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ButtonsResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ButtonsResponseMessage"; + }; + + ButtonsResponseMessage.Type = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "DISPLAY_TEXT"] = 1; + return values; + })(); + + return ButtonsResponseMessage; + })(); + + Message.Call = (function() { + + function Call(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Call.prototype.callKey = null; + Call.prototype.conversionSource = null; + Call.prototype.conversionData = null; + Call.prototype.conversionDelaySeconds = null; + Call.prototype.ctwaSignals = null; + Call.prototype.ctwaPayload = null; + Call.prototype.contextInfo = null; + Call.prototype.nativeFlowCallButtonPayload = null; + Call.prototype.deeplinkPayload = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_callKey", { + get: $util.oneOfGetter($oneOfFields = ["callKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_conversionSource", { + get: $util.oneOfGetter($oneOfFields = ["conversionSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_conversionData", { + get: $util.oneOfGetter($oneOfFields = ["conversionData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_conversionDelaySeconds", { + get: $util.oneOfGetter($oneOfFields = ["conversionDelaySeconds"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_ctwaSignals", { + get: $util.oneOfGetter($oneOfFields = ["ctwaSignals"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_ctwaPayload", { + get: $util.oneOfGetter($oneOfFields = ["ctwaPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_nativeFlowCallButtonPayload", { + get: $util.oneOfGetter($oneOfFields = ["nativeFlowCallButtonPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Call.prototype, "_deeplinkPayload", { + get: $util.oneOfGetter($oneOfFields = ["deeplinkPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Call.create = function create(properties) { + return new Call(properties); + }; + + Call.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.callKey != null && Object.hasOwnProperty.call(m, "callKey")) + w.uint32(10).bytes(m.callKey); + if (m.conversionSource != null && Object.hasOwnProperty.call(m, "conversionSource")) + w.uint32(18).string(m.conversionSource); + if (m.conversionData != null && Object.hasOwnProperty.call(m, "conversionData")) + w.uint32(26).bytes(m.conversionData); + if (m.conversionDelaySeconds != null && Object.hasOwnProperty.call(m, "conversionDelaySeconds")) + w.uint32(32).uint32(m.conversionDelaySeconds); + if (m.ctwaSignals != null && Object.hasOwnProperty.call(m, "ctwaSignals")) + w.uint32(42).string(m.ctwaSignals); + if (m.ctwaPayload != null && Object.hasOwnProperty.call(m, "ctwaPayload")) + w.uint32(50).bytes(m.ctwaPayload); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(58).fork()).ldelim(); + if (m.nativeFlowCallButtonPayload != null && Object.hasOwnProperty.call(m, "nativeFlowCallButtonPayload")) + w.uint32(66).string(m.nativeFlowCallButtonPayload); + if (m.deeplinkPayload != null && Object.hasOwnProperty.call(m, "deeplinkPayload")) + w.uint32(74).string(m.deeplinkPayload); + return w; + }; + + Call.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.Call(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.callKey = r.bytes(); + break; + } + case 2: { + m.conversionSource = r.string(); + break; + } + case 3: { + m.conversionData = r.bytes(); + break; + } + case 4: { + m.conversionDelaySeconds = r.uint32(); + break; + } + case 5: { + m.ctwaSignals = r.string(); + break; + } + case 6: { + m.ctwaPayload = r.bytes(); + break; + } + case 7: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 8: { + m.nativeFlowCallButtonPayload = r.string(); + break; + } + case 9: { + m.deeplinkPayload = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Call.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.Call) + return d; + var m = new $root.proto.Message.Call(); + if (d.callKey != null) { + if (typeof d.callKey === "string") + $util.base64.decode(d.callKey, m.callKey = $util.newBuffer($util.base64.length(d.callKey)), 0); + else if (d.callKey.length >= 0) + m.callKey = d.callKey; + } + if (d.conversionSource != null) { + m.conversionSource = String(d.conversionSource); + } + if (d.conversionData != null) { + if (typeof d.conversionData === "string") + $util.base64.decode(d.conversionData, m.conversionData = $util.newBuffer($util.base64.length(d.conversionData)), 0); + else if (d.conversionData.length >= 0) + m.conversionData = d.conversionData; + } + if (d.conversionDelaySeconds != null) { + m.conversionDelaySeconds = d.conversionDelaySeconds >>> 0; + } + if (d.ctwaSignals != null) { + m.ctwaSignals = String(d.ctwaSignals); + } + if (d.ctwaPayload != null) { + if (typeof d.ctwaPayload === "string") + $util.base64.decode(d.ctwaPayload, m.ctwaPayload = $util.newBuffer($util.base64.length(d.ctwaPayload)), 0); + else if (d.ctwaPayload.length >= 0) + m.ctwaPayload = d.ctwaPayload; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.Call.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.nativeFlowCallButtonPayload != null) { + m.nativeFlowCallButtonPayload = String(d.nativeFlowCallButtonPayload); + } + if (d.deeplinkPayload != null) { + m.deeplinkPayload = String(d.deeplinkPayload); + } + return m; + }; + + Call.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.callKey != null && m.hasOwnProperty("callKey")) { + d.callKey = o.bytes === String ? $util.base64.encode(m.callKey, 0, m.callKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.callKey) : m.callKey; + if (o.oneofs) + d._callKey = "callKey"; + } + if (m.conversionSource != null && m.hasOwnProperty("conversionSource")) { + d.conversionSource = m.conversionSource; + if (o.oneofs) + d._conversionSource = "conversionSource"; + } + if (m.conversionData != null && m.hasOwnProperty("conversionData")) { + d.conversionData = o.bytes === String ? $util.base64.encode(m.conversionData, 0, m.conversionData.length) : o.bytes === Array ? Array.prototype.slice.call(m.conversionData) : m.conversionData; + if (o.oneofs) + d._conversionData = "conversionData"; + } + if (m.conversionDelaySeconds != null && m.hasOwnProperty("conversionDelaySeconds")) { + d.conversionDelaySeconds = m.conversionDelaySeconds; + if (o.oneofs) + d._conversionDelaySeconds = "conversionDelaySeconds"; + } + if (m.ctwaSignals != null && m.hasOwnProperty("ctwaSignals")) { + d.ctwaSignals = m.ctwaSignals; + if (o.oneofs) + d._ctwaSignals = "ctwaSignals"; + } + if (m.ctwaPayload != null && m.hasOwnProperty("ctwaPayload")) { + d.ctwaPayload = o.bytes === String ? $util.base64.encode(m.ctwaPayload, 0, m.ctwaPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.ctwaPayload) : m.ctwaPayload; + if (o.oneofs) + d._ctwaPayload = "ctwaPayload"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.nativeFlowCallButtonPayload != null && m.hasOwnProperty("nativeFlowCallButtonPayload")) { + d.nativeFlowCallButtonPayload = m.nativeFlowCallButtonPayload; + if (o.oneofs) + d._nativeFlowCallButtonPayload = "nativeFlowCallButtonPayload"; + } + if (m.deeplinkPayload != null && m.hasOwnProperty("deeplinkPayload")) { + d.deeplinkPayload = m.deeplinkPayload; + if (o.oneofs) + d._deeplinkPayload = "deeplinkPayload"; + } + return d; + }; + + Call.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Call.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.Call"; + }; + + return Call; + })(); + + Message.CallLogMessage = (function() { + + function CallLogMessage(p) { + this.participants = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CallLogMessage.prototype.isVideo = null; + CallLogMessage.prototype.callOutcome = null; + CallLogMessage.prototype.durationSecs = null; + CallLogMessage.prototype.callType = null; + CallLogMessage.prototype.participants = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogMessage.prototype, "_isVideo", { + get: $util.oneOfGetter($oneOfFields = ["isVideo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogMessage.prototype, "_callOutcome", { + get: $util.oneOfGetter($oneOfFields = ["callOutcome"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogMessage.prototype, "_durationSecs", { + get: $util.oneOfGetter($oneOfFields = ["durationSecs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogMessage.prototype, "_callType", { + get: $util.oneOfGetter($oneOfFields = ["callType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CallLogMessage.create = function create(properties) { + return new CallLogMessage(properties); + }; + + CallLogMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isVideo != null && Object.hasOwnProperty.call(m, "isVideo")) + w.uint32(8).bool(m.isVideo); + if (m.callOutcome != null && Object.hasOwnProperty.call(m, "callOutcome")) + w.uint32(16).int32(m.callOutcome); + if (m.durationSecs != null && Object.hasOwnProperty.call(m, "durationSecs")) + w.uint32(24).int64(m.durationSecs); + if (m.callType != null && Object.hasOwnProperty.call(m, "callType")) + w.uint32(32).int32(m.callType); + if (m.participants != null && m.participants.length) { + for (var i = 0; i < m.participants.length; ++i) + $root.proto.Message.CallLogMessage.CallParticipant.encode(m.participants[i], w.uint32(42).fork()).ldelim(); + } + return w; + }; + + CallLogMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.CallLogMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isVideo = r.bool(); + break; + } + case 2: { + m.callOutcome = r.int32(); + break; + } + case 3: { + m.durationSecs = r.int64(); + break; + } + case 4: { + m.callType = r.int32(); + break; + } + case 5: { + if (!(m.participants && m.participants.length)) + m.participants = []; + m.participants.push($root.proto.Message.CallLogMessage.CallParticipant.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CallLogMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.CallLogMessage) + return d; + var m = new $root.proto.Message.CallLogMessage(); + if (d.isVideo != null) { + m.isVideo = Boolean(d.isVideo); + } + switch (d.callOutcome) { + default: + if (typeof d.callOutcome === "number") { + m.callOutcome = d.callOutcome; + break; + } + break; + case "CONNECTED": + case 0: + m.callOutcome = 0; + break; + case "MISSED": + case 1: + m.callOutcome = 1; + break; + case "FAILED": + case 2: + m.callOutcome = 2; + break; + case "REJECTED": + case 3: + m.callOutcome = 3; + break; + case "ACCEPTED_ELSEWHERE": + case 4: + m.callOutcome = 4; + break; + case "ONGOING": + case 5: + m.callOutcome = 5; + break; + case "SILENCED_BY_DND": + case 6: + m.callOutcome = 6; + break; + case "SILENCED_UNKNOWN_CALLER": + case 7: + m.callOutcome = 7; + break; + } + if (d.durationSecs != null) { + if ($util.Long) + (m.durationSecs = $util.Long.fromValue(d.durationSecs)).unsigned = false; + else if (typeof d.durationSecs === "string") + m.durationSecs = parseInt(d.durationSecs, 10); + else if (typeof d.durationSecs === "number") + m.durationSecs = d.durationSecs; + else if (typeof d.durationSecs === "object") + m.durationSecs = new $util.LongBits(d.durationSecs.low >>> 0, d.durationSecs.high >>> 0).toNumber(); + } + switch (d.callType) { + default: + if (typeof d.callType === "number") { + m.callType = d.callType; + break; + } + break; + case "REGULAR": + case 0: + m.callType = 0; + break; + case "SCHEDULED_CALL": + case 1: + m.callType = 1; + break; + case "VOICE_CHAT": + case 2: + m.callType = 2; + break; + } + if (d.participants) { + if (!Array.isArray(d.participants)) + throw TypeError(".proto.Message.CallLogMessage.participants: array expected"); + m.participants = []; + for (var i = 0; i < d.participants.length; ++i) { + if (typeof d.participants[i] !== "object") + throw TypeError(".proto.Message.CallLogMessage.participants: object expected"); + m.participants[i] = $root.proto.Message.CallLogMessage.CallParticipant.fromObject(d.participants[i]); + } + } + return m; + }; + + CallLogMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.participants = []; + } + if (m.isVideo != null && m.hasOwnProperty("isVideo")) { + d.isVideo = m.isVideo; + if (o.oneofs) + d._isVideo = "isVideo"; + } + if (m.callOutcome != null && m.hasOwnProperty("callOutcome")) { + d.callOutcome = o.enums === String ? $root.proto.Message.CallLogMessage.CallOutcome[m.callOutcome] === undefined ? m.callOutcome : $root.proto.Message.CallLogMessage.CallOutcome[m.callOutcome] : m.callOutcome; + if (o.oneofs) + d._callOutcome = "callOutcome"; + } + if (m.durationSecs != null && m.hasOwnProperty("durationSecs")) { + if (typeof m.durationSecs === "number") + d.durationSecs = o.longs === String ? String(m.durationSecs) : m.durationSecs; + else + d.durationSecs = o.longs === String ? longToString(m.durationSecs) : o.longs === Number ? longToNumber(m.durationSecs) : m.durationSecs; + if (o.oneofs) + d._durationSecs = "durationSecs"; + } + if (m.callType != null && m.hasOwnProperty("callType")) { + d.callType = o.enums === String ? $root.proto.Message.CallLogMessage.CallType[m.callType] === undefined ? m.callType : $root.proto.Message.CallLogMessage.CallType[m.callType] : m.callType; + if (o.oneofs) + d._callType = "callType"; + } + if (m.participants && m.participants.length) { + d.participants = []; + for (var j = 0; j < m.participants.length; ++j) { + d.participants[j] = $root.proto.Message.CallLogMessage.CallParticipant.toObject(m.participants[j], o); + } + } + return d; + }; + + CallLogMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CallLogMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.CallLogMessage"; + }; + + CallLogMessage.CallOutcome = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "CONNECTED"] = 0; + values[valuesById[1] = "MISSED"] = 1; + values[valuesById[2] = "FAILED"] = 2; + values[valuesById[3] = "REJECTED"] = 3; + values[valuesById[4] = "ACCEPTED_ELSEWHERE"] = 4; + values[valuesById[5] = "ONGOING"] = 5; + values[valuesById[6] = "SILENCED_BY_DND"] = 6; + values[valuesById[7] = "SILENCED_UNKNOWN_CALLER"] = 7; + return values; + })(); + + CallLogMessage.CallParticipant = (function() { + + function CallParticipant(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CallParticipant.prototype.jid = null; + CallParticipant.prototype.callOutcome = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallParticipant.prototype, "_jid", { + get: $util.oneOfGetter($oneOfFields = ["jid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallParticipant.prototype, "_callOutcome", { + get: $util.oneOfGetter($oneOfFields = ["callOutcome"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CallParticipant.create = function create(properties) { + return new CallParticipant(properties); + }; + + CallParticipant.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.jid != null && Object.hasOwnProperty.call(m, "jid")) + w.uint32(10).string(m.jid); + if (m.callOutcome != null && Object.hasOwnProperty.call(m, "callOutcome")) + w.uint32(16).int32(m.callOutcome); + return w; + }; + + CallParticipant.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.CallLogMessage.CallParticipant(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.jid = r.string(); + break; + } + case 2: { + m.callOutcome = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CallParticipant.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.CallLogMessage.CallParticipant) + return d; + var m = new $root.proto.Message.CallLogMessage.CallParticipant(); + if (d.jid != null) { + m.jid = String(d.jid); + } + switch (d.callOutcome) { + default: + if (typeof d.callOutcome === "number") { + m.callOutcome = d.callOutcome; + break; + } + break; + case "CONNECTED": + case 0: + m.callOutcome = 0; + break; + case "MISSED": + case 1: + m.callOutcome = 1; + break; + case "FAILED": + case 2: + m.callOutcome = 2; + break; + case "REJECTED": + case 3: + m.callOutcome = 3; + break; + case "ACCEPTED_ELSEWHERE": + case 4: + m.callOutcome = 4; + break; + case "ONGOING": + case 5: + m.callOutcome = 5; + break; + case "SILENCED_BY_DND": + case 6: + m.callOutcome = 6; + break; + case "SILENCED_UNKNOWN_CALLER": + case 7: + m.callOutcome = 7; + break; + } + return m; + }; + + CallParticipant.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.jid != null && m.hasOwnProperty("jid")) { + d.jid = m.jid; + if (o.oneofs) + d._jid = "jid"; + } + if (m.callOutcome != null && m.hasOwnProperty("callOutcome")) { + d.callOutcome = o.enums === String ? $root.proto.Message.CallLogMessage.CallOutcome[m.callOutcome] === undefined ? m.callOutcome : $root.proto.Message.CallLogMessage.CallOutcome[m.callOutcome] : m.callOutcome; + if (o.oneofs) + d._callOutcome = "callOutcome"; + } + return d; + }; + + CallParticipant.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CallParticipant.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.CallLogMessage.CallParticipant"; + }; + + return CallParticipant; + })(); + + CallLogMessage.CallType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "REGULAR"] = 0; + values[valuesById[1] = "SCHEDULED_CALL"] = 1; + values[valuesById[2] = "VOICE_CHAT"] = 2; + return values; + })(); + + return CallLogMessage; + })(); + + Message.CancelPaymentRequestMessage = (function() { + + function CancelPaymentRequestMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CancelPaymentRequestMessage.prototype.key = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CancelPaymentRequestMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CancelPaymentRequestMessage.create = function create(properties) { + return new CancelPaymentRequestMessage(properties); + }; + + CancelPaymentRequestMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + return w; + }; + + CancelPaymentRequestMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.CancelPaymentRequestMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CancelPaymentRequestMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.CancelPaymentRequestMessage) + return d; + var m = new $root.proto.Message.CancelPaymentRequestMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.CancelPaymentRequestMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + return m; + }; + + CancelPaymentRequestMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + return d; + }; + + CancelPaymentRequestMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CancelPaymentRequestMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.CancelPaymentRequestMessage"; + }; + + return CancelPaymentRequestMessage; + })(); + + Message.Chat = (function() { + + function Chat(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Chat.prototype.displayName = null; + Chat.prototype.id = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Chat.prototype, "_displayName", { + get: $util.oneOfGetter($oneOfFields = ["displayName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Chat.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Chat.create = function create(properties) { + return new Chat(properties); + }; + + Chat.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayName != null && Object.hasOwnProperty.call(m, "displayName")) + w.uint32(10).string(m.displayName); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(18).string(m.id); + return w; + }; + + Chat.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.Chat(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayName = r.string(); + break; + } + case 2: { + m.id = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Chat.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.Chat) + return d; + var m = new $root.proto.Message.Chat(); + if (d.displayName != null) { + m.displayName = String(d.displayName); + } + if (d.id != null) { + m.id = String(d.id); + } + return m; + }; + + Chat.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayName != null && m.hasOwnProperty("displayName")) { + d.displayName = m.displayName; + if (o.oneofs) + d._displayName = "displayName"; + } + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + return d; + }; + + Chat.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Chat.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.Chat"; + }; + + return Chat; + })(); + + Message.CloudAPIThreadControlNotification = (function() { + + function CloudAPIThreadControlNotification(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CloudAPIThreadControlNotification.prototype.status = null; + CloudAPIThreadControlNotification.prototype.senderNotificationTimestampMs = null; + CloudAPIThreadControlNotification.prototype.consumerLid = null; + CloudAPIThreadControlNotification.prototype.consumerPhoneNumber = null; + CloudAPIThreadControlNotification.prototype.notificationContent = null; + CloudAPIThreadControlNotification.prototype.shouldSuppressNotification = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotification.prototype, "_status", { + get: $util.oneOfGetter($oneOfFields = ["status"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotification.prototype, "_senderNotificationTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderNotificationTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotification.prototype, "_consumerLid", { + get: $util.oneOfGetter($oneOfFields = ["consumerLid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotification.prototype, "_consumerPhoneNumber", { + get: $util.oneOfGetter($oneOfFields = ["consumerPhoneNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotification.prototype, "_notificationContent", { + get: $util.oneOfGetter($oneOfFields = ["notificationContent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotification.prototype, "_shouldSuppressNotification", { + get: $util.oneOfGetter($oneOfFields = ["shouldSuppressNotification"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CloudAPIThreadControlNotification.create = function create(properties) { + return new CloudAPIThreadControlNotification(properties); + }; + + CloudAPIThreadControlNotification.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.status != null && Object.hasOwnProperty.call(m, "status")) + w.uint32(8).int32(m.status); + if (m.senderNotificationTimestampMs != null && Object.hasOwnProperty.call(m, "senderNotificationTimestampMs")) + w.uint32(16).int64(m.senderNotificationTimestampMs); + if (m.consumerLid != null && Object.hasOwnProperty.call(m, "consumerLid")) + w.uint32(26).string(m.consumerLid); + if (m.consumerPhoneNumber != null && Object.hasOwnProperty.call(m, "consumerPhoneNumber")) + w.uint32(34).string(m.consumerPhoneNumber); + if (m.notificationContent != null && Object.hasOwnProperty.call(m, "notificationContent")) + $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent.encode(m.notificationContent, w.uint32(42).fork()).ldelim(); + if (m.shouldSuppressNotification != null && Object.hasOwnProperty.call(m, "shouldSuppressNotification")) + w.uint32(48).bool(m.shouldSuppressNotification); + return w; + }; + + CloudAPIThreadControlNotification.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.CloudAPIThreadControlNotification(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.status = r.int32(); + break; + } + case 2: { + m.senderNotificationTimestampMs = r.int64(); + break; + } + case 3: { + m.consumerLid = r.string(); + break; + } + case 4: { + m.consumerPhoneNumber = r.string(); + break; + } + case 5: { + m.notificationContent = $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent.decode(r, r.uint32()); + break; + } + case 6: { + m.shouldSuppressNotification = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CloudAPIThreadControlNotification.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.CloudAPIThreadControlNotification) + return d; + var m = new $root.proto.Message.CloudAPIThreadControlNotification(); + switch (d.status) { + default: + if (typeof d.status === "number") { + m.status = d.status; + break; + } + break; + case "UNKNOWN": + case 0: + m.status = 0; + break; + case "CONTROL_PASSED": + case 1: + m.status = 1; + break; + case "CONTROL_TAKEN": + case 2: + m.status = 2; + break; + } + if (d.senderNotificationTimestampMs != null) { + if ($util.Long) + (m.senderNotificationTimestampMs = $util.Long.fromValue(d.senderNotificationTimestampMs)).unsigned = false; + else if (typeof d.senderNotificationTimestampMs === "string") + m.senderNotificationTimestampMs = parseInt(d.senderNotificationTimestampMs, 10); + else if (typeof d.senderNotificationTimestampMs === "number") + m.senderNotificationTimestampMs = d.senderNotificationTimestampMs; + else if (typeof d.senderNotificationTimestampMs === "object") + m.senderNotificationTimestampMs = new $util.LongBits(d.senderNotificationTimestampMs.low >>> 0, d.senderNotificationTimestampMs.high >>> 0).toNumber(); + } + if (d.consumerLid != null) { + m.consumerLid = String(d.consumerLid); + } + if (d.consumerPhoneNumber != null) { + m.consumerPhoneNumber = String(d.consumerPhoneNumber); + } + if (d.notificationContent != null) { + if (typeof d.notificationContent !== "object") + throw TypeError(".proto.Message.CloudAPIThreadControlNotification.notificationContent: object expected"); + m.notificationContent = $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent.fromObject(d.notificationContent); + } + if (d.shouldSuppressNotification != null) { + m.shouldSuppressNotification = Boolean(d.shouldSuppressNotification); + } + return m; + }; + + CloudAPIThreadControlNotification.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.status != null && m.hasOwnProperty("status")) { + d.status = o.enums === String ? $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControl[m.status] === undefined ? m.status : $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControl[m.status] : m.status; + if (o.oneofs) + d._status = "status"; + } + if (m.senderNotificationTimestampMs != null && m.hasOwnProperty("senderNotificationTimestampMs")) { + if (typeof m.senderNotificationTimestampMs === "number") + d.senderNotificationTimestampMs = o.longs === String ? String(m.senderNotificationTimestampMs) : m.senderNotificationTimestampMs; + else + d.senderNotificationTimestampMs = o.longs === String ? longToString(m.senderNotificationTimestampMs) : o.longs === Number ? longToNumber(m.senderNotificationTimestampMs) : m.senderNotificationTimestampMs; + if (o.oneofs) + d._senderNotificationTimestampMs = "senderNotificationTimestampMs"; + } + if (m.consumerLid != null && m.hasOwnProperty("consumerLid")) { + d.consumerLid = m.consumerLid; + if (o.oneofs) + d._consumerLid = "consumerLid"; + } + if (m.consumerPhoneNumber != null && m.hasOwnProperty("consumerPhoneNumber")) { + d.consumerPhoneNumber = m.consumerPhoneNumber; + if (o.oneofs) + d._consumerPhoneNumber = "consumerPhoneNumber"; + } + if (m.notificationContent != null && m.hasOwnProperty("notificationContent")) { + d.notificationContent = $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent.toObject(m.notificationContent, o); + if (o.oneofs) + d._notificationContent = "notificationContent"; + } + if (m.shouldSuppressNotification != null && m.hasOwnProperty("shouldSuppressNotification")) { + d.shouldSuppressNotification = m.shouldSuppressNotification; + if (o.oneofs) + d._shouldSuppressNotification = "shouldSuppressNotification"; + } + return d; + }; + + CloudAPIThreadControlNotification.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CloudAPIThreadControlNotification.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.CloudAPIThreadControlNotification"; + }; + + CloudAPIThreadControlNotification.CloudAPIThreadControl = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "CONTROL_PASSED"] = 1; + values[valuesById[2] = "CONTROL_TAKEN"] = 2; + return values; + })(); + + CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent = (function() { + + function CloudAPIThreadControlNotificationContent(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CloudAPIThreadControlNotificationContent.prototype.handoffNotificationText = null; + CloudAPIThreadControlNotificationContent.prototype.extraJson = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotificationContent.prototype, "_handoffNotificationText", { + get: $util.oneOfGetter($oneOfFields = ["handoffNotificationText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CloudAPIThreadControlNotificationContent.prototype, "_extraJson", { + get: $util.oneOfGetter($oneOfFields = ["extraJson"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CloudAPIThreadControlNotificationContent.create = function create(properties) { + return new CloudAPIThreadControlNotificationContent(properties); + }; + + CloudAPIThreadControlNotificationContent.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.handoffNotificationText != null && Object.hasOwnProperty.call(m, "handoffNotificationText")) + w.uint32(10).string(m.handoffNotificationText); + if (m.extraJson != null && Object.hasOwnProperty.call(m, "extraJson")) + w.uint32(18).string(m.extraJson); + return w; + }; + + CloudAPIThreadControlNotificationContent.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.handoffNotificationText = r.string(); + break; + } + case 2: { + m.extraJson = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CloudAPIThreadControlNotificationContent.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent) + return d; + var m = new $root.proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent(); + if (d.handoffNotificationText != null) { + m.handoffNotificationText = String(d.handoffNotificationText); + } + if (d.extraJson != null) { + m.extraJson = String(d.extraJson); + } + return m; + }; + + CloudAPIThreadControlNotificationContent.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.handoffNotificationText != null && m.hasOwnProperty("handoffNotificationText")) { + d.handoffNotificationText = m.handoffNotificationText; + if (o.oneofs) + d._handoffNotificationText = "handoffNotificationText"; + } + if (m.extraJson != null && m.hasOwnProperty("extraJson")) { + d.extraJson = m.extraJson; + if (o.oneofs) + d._extraJson = "extraJson"; + } + return d; + }; + + CloudAPIThreadControlNotificationContent.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CloudAPIThreadControlNotificationContent.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent"; + }; + + return CloudAPIThreadControlNotificationContent; + })(); + + return CloudAPIThreadControlNotification; + })(); + + Message.CommentMessage = (function() { + + function CommentMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CommentMessage.prototype.message = null; + CommentMessage.prototype.targetMessageKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CommentMessage.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CommentMessage.prototype, "_targetMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["targetMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CommentMessage.create = function create(properties) { + return new CommentMessage(properties); + }; + + CommentMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.Message.encode(m.message, w.uint32(10).fork()).ldelim(); + if (m.targetMessageKey != null && Object.hasOwnProperty.call(m, "targetMessageKey")) + $root.proto.MessageKey.encode(m.targetMessageKey, w.uint32(18).fork()).ldelim(); + return w; + }; + + CommentMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.CommentMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.message = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 2: { + m.targetMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CommentMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.CommentMessage) + return d; + var m = new $root.proto.Message.CommentMessage(); + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.Message.CommentMessage.message: object expected"); + m.message = $root.proto.Message.fromObject(d.message); + } + if (d.targetMessageKey != null) { + if (typeof d.targetMessageKey !== "object") + throw TypeError(".proto.Message.CommentMessage.targetMessageKey: object expected"); + m.targetMessageKey = $root.proto.MessageKey.fromObject(d.targetMessageKey); + } + return m; + }; + + CommentMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.Message.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + if (m.targetMessageKey != null && m.hasOwnProperty("targetMessageKey")) { + d.targetMessageKey = $root.proto.MessageKey.toObject(m.targetMessageKey, o); + if (o.oneofs) + d._targetMessageKey = "targetMessageKey"; + } + return d; + }; + + CommentMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CommentMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.CommentMessage"; + }; + + return CommentMessage; + })(); + + Message.ContactMessage = (function() { + + function ContactMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ContactMessage.prototype.displayName = null; + ContactMessage.prototype.vcard = null; + ContactMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactMessage.prototype, "_displayName", { + get: $util.oneOfGetter($oneOfFields = ["displayName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactMessage.prototype, "_vcard", { + get: $util.oneOfGetter($oneOfFields = ["vcard"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ContactMessage.create = function create(properties) { + return new ContactMessage(properties); + }; + + ContactMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayName != null && Object.hasOwnProperty.call(m, "displayName")) + w.uint32(10).string(m.displayName); + if (m.vcard != null && Object.hasOwnProperty.call(m, "vcard")) + w.uint32(130).string(m.vcard); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + return w; + }; + + ContactMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ContactMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayName = r.string(); + break; + } + case 16: { + m.vcard = r.string(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ContactMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ContactMessage) + return d; + var m = new $root.proto.Message.ContactMessage(); + if (d.displayName != null) { + m.displayName = String(d.displayName); + } + if (d.vcard != null) { + m.vcard = String(d.vcard); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ContactMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + ContactMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayName != null && m.hasOwnProperty("displayName")) { + d.displayName = m.displayName; + if (o.oneofs) + d._displayName = "displayName"; + } + if (m.vcard != null && m.hasOwnProperty("vcard")) { + d.vcard = m.vcard; + if (o.oneofs) + d._vcard = "vcard"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + ContactMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ContactMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ContactMessage"; + }; + + return ContactMessage; + })(); + + Message.ContactsArrayMessage = (function() { + + function ContactsArrayMessage(p) { + this.contacts = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ContactsArrayMessage.prototype.displayName = null; + ContactsArrayMessage.prototype.contacts = $util.emptyArray; + ContactsArrayMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactsArrayMessage.prototype, "_displayName", { + get: $util.oneOfGetter($oneOfFields = ["displayName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactsArrayMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ContactsArrayMessage.create = function create(properties) { + return new ContactsArrayMessage(properties); + }; + + ContactsArrayMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayName != null && Object.hasOwnProperty.call(m, "displayName")) + w.uint32(10).string(m.displayName); + if (m.contacts != null && m.contacts.length) { + for (var i = 0; i < m.contacts.length; ++i) + $root.proto.Message.ContactMessage.encode(m.contacts[i], w.uint32(18).fork()).ldelim(); + } + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + return w; + }; + + ContactsArrayMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ContactsArrayMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayName = r.string(); + break; + } + case 2: { + if (!(m.contacts && m.contacts.length)) + m.contacts = []; + m.contacts.push($root.proto.Message.ContactMessage.decode(r, r.uint32())); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ContactsArrayMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ContactsArrayMessage) + return d; + var m = new $root.proto.Message.ContactsArrayMessage(); + if (d.displayName != null) { + m.displayName = String(d.displayName); + } + if (d.contacts) { + if (!Array.isArray(d.contacts)) + throw TypeError(".proto.Message.ContactsArrayMessage.contacts: array expected"); + m.contacts = []; + for (var i = 0; i < d.contacts.length; ++i) { + if (typeof d.contacts[i] !== "object") + throw TypeError(".proto.Message.ContactsArrayMessage.contacts: object expected"); + m.contacts[i] = $root.proto.Message.ContactMessage.fromObject(d.contacts[i]); + } + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ContactsArrayMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + ContactsArrayMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.contacts = []; + } + if (m.displayName != null && m.hasOwnProperty("displayName")) { + d.displayName = m.displayName; + if (o.oneofs) + d._displayName = "displayName"; + } + if (m.contacts && m.contacts.length) { + d.contacts = []; + for (var j = 0; j < m.contacts.length; ++j) { + d.contacts[j] = $root.proto.Message.ContactMessage.toObject(m.contacts[j], o); + } + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + ContactsArrayMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ContactsArrayMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ContactsArrayMessage"; + }; + + return ContactsArrayMessage; + })(); + + Message.DeclinePaymentRequestMessage = (function() { + + function DeclinePaymentRequestMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeclinePaymentRequestMessage.prototype.key = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeclinePaymentRequestMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeclinePaymentRequestMessage.create = function create(properties) { + return new DeclinePaymentRequestMessage(properties); + }; + + DeclinePaymentRequestMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + return w; + }; + + DeclinePaymentRequestMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.DeclinePaymentRequestMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeclinePaymentRequestMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.DeclinePaymentRequestMessage) + return d; + var m = new $root.proto.Message.DeclinePaymentRequestMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.DeclinePaymentRequestMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + return m; + }; + + DeclinePaymentRequestMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + return d; + }; + + DeclinePaymentRequestMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeclinePaymentRequestMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.DeclinePaymentRequestMessage"; + }; + + return DeclinePaymentRequestMessage; + })(); + + Message.DeviceSentMessage = (function() { + + function DeviceSentMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeviceSentMessage.prototype.destinationJid = null; + DeviceSentMessage.prototype.message = null; + DeviceSentMessage.prototype.phash = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceSentMessage.prototype, "_destinationJid", { + get: $util.oneOfGetter($oneOfFields = ["destinationJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceSentMessage.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeviceSentMessage.prototype, "_phash", { + get: $util.oneOfGetter($oneOfFields = ["phash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeviceSentMessage.create = function create(properties) { + return new DeviceSentMessage(properties); + }; + + DeviceSentMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.destinationJid != null && Object.hasOwnProperty.call(m, "destinationJid")) + w.uint32(10).string(m.destinationJid); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.Message.encode(m.message, w.uint32(18).fork()).ldelim(); + if (m.phash != null && Object.hasOwnProperty.call(m, "phash")) + w.uint32(26).string(m.phash); + return w; + }; + + DeviceSentMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.DeviceSentMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.destinationJid = r.string(); + break; + } + case 2: { + m.message = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 3: { + m.phash = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeviceSentMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.DeviceSentMessage) + return d; + var m = new $root.proto.Message.DeviceSentMessage(); + if (d.destinationJid != null) { + m.destinationJid = String(d.destinationJid); + } + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.Message.DeviceSentMessage.message: object expected"); + m.message = $root.proto.Message.fromObject(d.message); + } + if (d.phash != null) { + m.phash = String(d.phash); + } + return m; + }; + + DeviceSentMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.destinationJid != null && m.hasOwnProperty("destinationJid")) { + d.destinationJid = m.destinationJid; + if (o.oneofs) + d._destinationJid = "destinationJid"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.Message.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + if (m.phash != null && m.hasOwnProperty("phash")) { + d.phash = m.phash; + if (o.oneofs) + d._phash = "phash"; + } + return d; + }; + + DeviceSentMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeviceSentMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.DeviceSentMessage"; + }; + + return DeviceSentMessage; + })(); + + Message.DocumentMessage = (function() { + + function DocumentMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DocumentMessage.prototype.url = null; + DocumentMessage.prototype.mimetype = null; + DocumentMessage.prototype.title = null; + DocumentMessage.prototype.fileSha256 = null; + DocumentMessage.prototype.fileLength = null; + DocumentMessage.prototype.pageCount = null; + DocumentMessage.prototype.mediaKey = null; + DocumentMessage.prototype.fileName = null; + DocumentMessage.prototype.fileEncSha256 = null; + DocumentMessage.prototype.directPath = null; + DocumentMessage.prototype.mediaKeyTimestamp = null; + DocumentMessage.prototype.contactVcard = null; + DocumentMessage.prototype.thumbnailDirectPath = null; + DocumentMessage.prototype.thumbnailSha256 = null; + DocumentMessage.prototype.thumbnailEncSha256 = null; + DocumentMessage.prototype.jpegThumbnail = null; + DocumentMessage.prototype.contextInfo = null; + DocumentMessage.prototype.thumbnailHeight = null; + DocumentMessage.prototype.thumbnailWidth = null; + DocumentMessage.prototype.caption = null; + DocumentMessage.prototype.accessibilityLabel = null; + DocumentMessage.prototype.mediaKeyDomain = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_pageCount", { + get: $util.oneOfGetter($oneOfFields = ["pageCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_fileName", { + get: $util.oneOfGetter($oneOfFields = ["fileName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_contactVcard", { + get: $util.oneOfGetter($oneOfFields = ["contactVcard"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_thumbnailDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_thumbnailSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_thumbnailEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_thumbnailHeight", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailHeight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_thumbnailWidth", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailWidth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_accessibilityLabel", { + get: $util.oneOfGetter($oneOfFields = ["accessibilityLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DocumentMessage.prototype, "_mediaKeyDomain", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyDomain"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DocumentMessage.create = function create(properties) { + return new DocumentMessage(properties); + }; + + DocumentMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(18).string(m.mimetype); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(26).string(m.title); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(34).bytes(m.fileSha256); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(40).uint64(m.fileLength); + if (m.pageCount != null && Object.hasOwnProperty.call(m, "pageCount")) + w.uint32(48).uint32(m.pageCount); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(58).bytes(m.mediaKey); + if (m.fileName != null && Object.hasOwnProperty.call(m, "fileName")) + w.uint32(66).string(m.fileName); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(74).bytes(m.fileEncSha256); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(82).string(m.directPath); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(88).int64(m.mediaKeyTimestamp); + if (m.contactVcard != null && Object.hasOwnProperty.call(m, "contactVcard")) + w.uint32(96).bool(m.contactVcard); + if (m.thumbnailDirectPath != null && Object.hasOwnProperty.call(m, "thumbnailDirectPath")) + w.uint32(106).string(m.thumbnailDirectPath); + if (m.thumbnailSha256 != null && Object.hasOwnProperty.call(m, "thumbnailSha256")) + w.uint32(114).bytes(m.thumbnailSha256); + if (m.thumbnailEncSha256 != null && Object.hasOwnProperty.call(m, "thumbnailEncSha256")) + w.uint32(122).bytes(m.thumbnailEncSha256); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(130).bytes(m.jpegThumbnail); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + if (m.thumbnailHeight != null && Object.hasOwnProperty.call(m, "thumbnailHeight")) + w.uint32(144).uint32(m.thumbnailHeight); + if (m.thumbnailWidth != null && Object.hasOwnProperty.call(m, "thumbnailWidth")) + w.uint32(152).uint32(m.thumbnailWidth); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(162).string(m.caption); + if (m.accessibilityLabel != null && Object.hasOwnProperty.call(m, "accessibilityLabel")) + w.uint32(170).string(m.accessibilityLabel); + if (m.mediaKeyDomain != null && Object.hasOwnProperty.call(m, "mediaKeyDomain")) + w.uint32(176).int32(m.mediaKeyDomain); + return w; + }; + + DocumentMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.DocumentMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.mimetype = r.string(); + break; + } + case 3: { + m.title = r.string(); + break; + } + case 4: { + m.fileSha256 = r.bytes(); + break; + } + case 5: { + m.fileLength = r.uint64(); + break; + } + case 6: { + m.pageCount = r.uint32(); + break; + } + case 7: { + m.mediaKey = r.bytes(); + break; + } + case 8: { + m.fileName = r.string(); + break; + } + case 9: { + m.fileEncSha256 = r.bytes(); + break; + } + case 10: { + m.directPath = r.string(); + break; + } + case 11: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 12: { + m.contactVcard = r.bool(); + break; + } + case 13: { + m.thumbnailDirectPath = r.string(); + break; + } + case 14: { + m.thumbnailSha256 = r.bytes(); + break; + } + case 15: { + m.thumbnailEncSha256 = r.bytes(); + break; + } + case 16: { + m.jpegThumbnail = r.bytes(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 18: { + m.thumbnailHeight = r.uint32(); + break; + } + case 19: { + m.thumbnailWidth = r.uint32(); + break; + } + case 20: { + m.caption = r.string(); + break; + } + case 21: { + m.accessibilityLabel = r.string(); + break; + } + case 22: { + m.mediaKeyDomain = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DocumentMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.DocumentMessage) + return d; + var m = new $root.proto.Message.DocumentMessage(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.pageCount != null) { + m.pageCount = d.pageCount >>> 0; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.fileName != null) { + m.fileName = String(d.fileName); + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.contactVcard != null) { + m.contactVcard = Boolean(d.contactVcard); + } + if (d.thumbnailDirectPath != null) { + m.thumbnailDirectPath = String(d.thumbnailDirectPath); + } + if (d.thumbnailSha256 != null) { + if (typeof d.thumbnailSha256 === "string") + $util.base64.decode(d.thumbnailSha256, m.thumbnailSha256 = $util.newBuffer($util.base64.length(d.thumbnailSha256)), 0); + else if (d.thumbnailSha256.length >= 0) + m.thumbnailSha256 = d.thumbnailSha256; + } + if (d.thumbnailEncSha256 != null) { + if (typeof d.thumbnailEncSha256 === "string") + $util.base64.decode(d.thumbnailEncSha256, m.thumbnailEncSha256 = $util.newBuffer($util.base64.length(d.thumbnailEncSha256)), 0); + else if (d.thumbnailEncSha256.length >= 0) + m.thumbnailEncSha256 = d.thumbnailEncSha256; + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.DocumentMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.thumbnailHeight != null) { + m.thumbnailHeight = d.thumbnailHeight >>> 0; + } + if (d.thumbnailWidth != null) { + m.thumbnailWidth = d.thumbnailWidth >>> 0; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.accessibilityLabel != null) { + m.accessibilityLabel = String(d.accessibilityLabel); + } + switch (d.mediaKeyDomain) { + default: + if (typeof d.mediaKeyDomain === "number") { + m.mediaKeyDomain = d.mediaKeyDomain; + break; + } + break; + case "UNSET": + case 0: + m.mediaKeyDomain = 0; + break; + case "E2EE_CHAT": + case 1: + m.mediaKeyDomain = 1; + break; + case "STATUS": + case 2: + m.mediaKeyDomain = 2; + break; + case "CAPI": + case 3: + m.mediaKeyDomain = 3; + break; + case "BOT": + case 4: + m.mediaKeyDomain = 4; + break; + } + return m; + }; + + DocumentMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.pageCount != null && m.hasOwnProperty("pageCount")) { + d.pageCount = m.pageCount; + if (o.oneofs) + d._pageCount = "pageCount"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.fileName != null && m.hasOwnProperty("fileName")) { + d.fileName = m.fileName; + if (o.oneofs) + d._fileName = "fileName"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.contactVcard != null && m.hasOwnProperty("contactVcard")) { + d.contactVcard = m.contactVcard; + if (o.oneofs) + d._contactVcard = "contactVcard"; + } + if (m.thumbnailDirectPath != null && m.hasOwnProperty("thumbnailDirectPath")) { + d.thumbnailDirectPath = m.thumbnailDirectPath; + if (o.oneofs) + d._thumbnailDirectPath = "thumbnailDirectPath"; + } + if (m.thumbnailSha256 != null && m.hasOwnProperty("thumbnailSha256")) { + d.thumbnailSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailSha256, 0, m.thumbnailSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailSha256) : m.thumbnailSha256; + if (o.oneofs) + d._thumbnailSha256 = "thumbnailSha256"; + } + if (m.thumbnailEncSha256 != null && m.hasOwnProperty("thumbnailEncSha256")) { + d.thumbnailEncSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailEncSha256, 0, m.thumbnailEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailEncSha256) : m.thumbnailEncSha256; + if (o.oneofs) + d._thumbnailEncSha256 = "thumbnailEncSha256"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.thumbnailHeight != null && m.hasOwnProperty("thumbnailHeight")) { + d.thumbnailHeight = m.thumbnailHeight; + if (o.oneofs) + d._thumbnailHeight = "thumbnailHeight"; + } + if (m.thumbnailWidth != null && m.hasOwnProperty("thumbnailWidth")) { + d.thumbnailWidth = m.thumbnailWidth; + if (o.oneofs) + d._thumbnailWidth = "thumbnailWidth"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.accessibilityLabel != null && m.hasOwnProperty("accessibilityLabel")) { + d.accessibilityLabel = m.accessibilityLabel; + if (o.oneofs) + d._accessibilityLabel = "accessibilityLabel"; + } + if (m.mediaKeyDomain != null && m.hasOwnProperty("mediaKeyDomain")) { + d.mediaKeyDomain = o.enums === String ? $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] === undefined ? m.mediaKeyDomain : $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] : m.mediaKeyDomain; + if (o.oneofs) + d._mediaKeyDomain = "mediaKeyDomain"; + } + return d; + }; + + DocumentMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DocumentMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.DocumentMessage"; + }; + + return DocumentMessage; + })(); + + Message.EncCommentMessage = (function() { + + function EncCommentMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EncCommentMessage.prototype.targetMessageKey = null; + EncCommentMessage.prototype.encPayload = null; + EncCommentMessage.prototype.encIv = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncCommentMessage.prototype, "_targetMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["targetMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncCommentMessage.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncCommentMessage.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EncCommentMessage.create = function create(properties) { + return new EncCommentMessage(properties); + }; + + EncCommentMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.targetMessageKey != null && Object.hasOwnProperty.call(m, "targetMessageKey")) + $root.proto.MessageKey.encode(m.targetMessageKey, w.uint32(10).fork()).ldelim(); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(18).bytes(m.encPayload); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(26).bytes(m.encIv); + return w; + }; + + EncCommentMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.EncCommentMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.targetMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.encPayload = r.bytes(); + break; + } + case 3: { + m.encIv = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EncCommentMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.EncCommentMessage) + return d; + var m = new $root.proto.Message.EncCommentMessage(); + if (d.targetMessageKey != null) { + if (typeof d.targetMessageKey !== "object") + throw TypeError(".proto.Message.EncCommentMessage.targetMessageKey: object expected"); + m.targetMessageKey = $root.proto.MessageKey.fromObject(d.targetMessageKey); + } + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + return m; + }; + + EncCommentMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.targetMessageKey != null && m.hasOwnProperty("targetMessageKey")) { + d.targetMessageKey = $root.proto.MessageKey.toObject(m.targetMessageKey, o); + if (o.oneofs) + d._targetMessageKey = "targetMessageKey"; + } + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + return d; + }; + + EncCommentMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EncCommentMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.EncCommentMessage"; + }; + + return EncCommentMessage; + })(); + + Message.EncEventResponseMessage = (function() { + + function EncEventResponseMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EncEventResponseMessage.prototype.eventCreationMessageKey = null; + EncEventResponseMessage.prototype.encPayload = null; + EncEventResponseMessage.prototype.encIv = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncEventResponseMessage.prototype, "_eventCreationMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["eventCreationMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncEventResponseMessage.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncEventResponseMessage.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EncEventResponseMessage.create = function create(properties) { + return new EncEventResponseMessage(properties); + }; + + EncEventResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.eventCreationMessageKey != null && Object.hasOwnProperty.call(m, "eventCreationMessageKey")) + $root.proto.MessageKey.encode(m.eventCreationMessageKey, w.uint32(10).fork()).ldelim(); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(18).bytes(m.encPayload); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(26).bytes(m.encIv); + return w; + }; + + EncEventResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.EncEventResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.eventCreationMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.encPayload = r.bytes(); + break; + } + case 3: { + m.encIv = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EncEventResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.EncEventResponseMessage) + return d; + var m = new $root.proto.Message.EncEventResponseMessage(); + if (d.eventCreationMessageKey != null) { + if (typeof d.eventCreationMessageKey !== "object") + throw TypeError(".proto.Message.EncEventResponseMessage.eventCreationMessageKey: object expected"); + m.eventCreationMessageKey = $root.proto.MessageKey.fromObject(d.eventCreationMessageKey); + } + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + return m; + }; + + EncEventResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.eventCreationMessageKey != null && m.hasOwnProperty("eventCreationMessageKey")) { + d.eventCreationMessageKey = $root.proto.MessageKey.toObject(m.eventCreationMessageKey, o); + if (o.oneofs) + d._eventCreationMessageKey = "eventCreationMessageKey"; + } + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + return d; + }; + + EncEventResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EncEventResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.EncEventResponseMessage"; + }; + + return EncEventResponseMessage; + })(); + + Message.EncReactionMessage = (function() { + + function EncReactionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EncReactionMessage.prototype.targetMessageKey = null; + EncReactionMessage.prototype.encPayload = null; + EncReactionMessage.prototype.encIv = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncReactionMessage.prototype, "_targetMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["targetMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncReactionMessage.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EncReactionMessage.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EncReactionMessage.create = function create(properties) { + return new EncReactionMessage(properties); + }; + + EncReactionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.targetMessageKey != null && Object.hasOwnProperty.call(m, "targetMessageKey")) + $root.proto.MessageKey.encode(m.targetMessageKey, w.uint32(10).fork()).ldelim(); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(18).bytes(m.encPayload); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(26).bytes(m.encIv); + return w; + }; + + EncReactionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.EncReactionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.targetMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.encPayload = r.bytes(); + break; + } + case 3: { + m.encIv = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EncReactionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.EncReactionMessage) + return d; + var m = new $root.proto.Message.EncReactionMessage(); + if (d.targetMessageKey != null) { + if (typeof d.targetMessageKey !== "object") + throw TypeError(".proto.Message.EncReactionMessage.targetMessageKey: object expected"); + m.targetMessageKey = $root.proto.MessageKey.fromObject(d.targetMessageKey); + } + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + return m; + }; + + EncReactionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.targetMessageKey != null && m.hasOwnProperty("targetMessageKey")) { + d.targetMessageKey = $root.proto.MessageKey.toObject(m.targetMessageKey, o); + if (o.oneofs) + d._targetMessageKey = "targetMessageKey"; + } + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + return d; + }; + + EncReactionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EncReactionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.EncReactionMessage"; + }; + + return EncReactionMessage; + })(); + + Message.EventMessage = (function() { + + function EventMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EventMessage.prototype.contextInfo = null; + EventMessage.prototype.isCanceled = null; + EventMessage.prototype.name = null; + EventMessage.prototype.description = null; + EventMessage.prototype.location = null; + EventMessage.prototype.joinLink = null; + EventMessage.prototype.startTime = null; + EventMessage.prototype.endTime = null; + EventMessage.prototype.extraGuestsAllowed = null; + EventMessage.prototype.isScheduleCall = null; + EventMessage.prototype.hasReminder = null; + EventMessage.prototype.reminderOffsetSec = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_isCanceled", { + get: $util.oneOfGetter($oneOfFields = ["isCanceled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_location", { + get: $util.oneOfGetter($oneOfFields = ["location"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_joinLink", { + get: $util.oneOfGetter($oneOfFields = ["joinLink"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_startTime", { + get: $util.oneOfGetter($oneOfFields = ["startTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_endTime", { + get: $util.oneOfGetter($oneOfFields = ["endTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_extraGuestsAllowed", { + get: $util.oneOfGetter($oneOfFields = ["extraGuestsAllowed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_isScheduleCall", { + get: $util.oneOfGetter($oneOfFields = ["isScheduleCall"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_hasReminder", { + get: $util.oneOfGetter($oneOfFields = ["hasReminder"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventMessage.prototype, "_reminderOffsetSec", { + get: $util.oneOfGetter($oneOfFields = ["reminderOffsetSec"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EventMessage.create = function create(properties) { + return new EventMessage(properties); + }; + + EventMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(10).fork()).ldelim(); + if (m.isCanceled != null && Object.hasOwnProperty.call(m, "isCanceled")) + w.uint32(16).bool(m.isCanceled); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(26).string(m.name); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(34).string(m.description); + if (m.location != null && Object.hasOwnProperty.call(m, "location")) + $root.proto.Message.LocationMessage.encode(m.location, w.uint32(42).fork()).ldelim(); + if (m.joinLink != null && Object.hasOwnProperty.call(m, "joinLink")) + w.uint32(50).string(m.joinLink); + if (m.startTime != null && Object.hasOwnProperty.call(m, "startTime")) + w.uint32(56).int64(m.startTime); + if (m.endTime != null && Object.hasOwnProperty.call(m, "endTime")) + w.uint32(64).int64(m.endTime); + if (m.extraGuestsAllowed != null && Object.hasOwnProperty.call(m, "extraGuestsAllowed")) + w.uint32(72).bool(m.extraGuestsAllowed); + if (m.isScheduleCall != null && Object.hasOwnProperty.call(m, "isScheduleCall")) + w.uint32(80).bool(m.isScheduleCall); + if (m.hasReminder != null && Object.hasOwnProperty.call(m, "hasReminder")) + w.uint32(88).bool(m.hasReminder); + if (m.reminderOffsetSec != null && Object.hasOwnProperty.call(m, "reminderOffsetSec")) + w.uint32(96).int64(m.reminderOffsetSec); + return w; + }; + + EventMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.EventMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 2: { + m.isCanceled = r.bool(); + break; + } + case 3: { + m.name = r.string(); + break; + } + case 4: { + m.description = r.string(); + break; + } + case 5: { + m.location = $root.proto.Message.LocationMessage.decode(r, r.uint32()); + break; + } + case 6: { + m.joinLink = r.string(); + break; + } + case 7: { + m.startTime = r.int64(); + break; + } + case 8: { + m.endTime = r.int64(); + break; + } + case 9: { + m.extraGuestsAllowed = r.bool(); + break; + } + case 10: { + m.isScheduleCall = r.bool(); + break; + } + case 11: { + m.hasReminder = r.bool(); + break; + } + case 12: { + m.reminderOffsetSec = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EventMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.EventMessage) + return d; + var m = new $root.proto.Message.EventMessage(); + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.EventMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.isCanceled != null) { + m.isCanceled = Boolean(d.isCanceled); + } + if (d.name != null) { + m.name = String(d.name); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.location != null) { + if (typeof d.location !== "object") + throw TypeError(".proto.Message.EventMessage.location: object expected"); + m.location = $root.proto.Message.LocationMessage.fromObject(d.location); + } + if (d.joinLink != null) { + m.joinLink = String(d.joinLink); + } + if (d.startTime != null) { + if ($util.Long) + (m.startTime = $util.Long.fromValue(d.startTime)).unsigned = false; + else if (typeof d.startTime === "string") + m.startTime = parseInt(d.startTime, 10); + else if (typeof d.startTime === "number") + m.startTime = d.startTime; + else if (typeof d.startTime === "object") + m.startTime = new $util.LongBits(d.startTime.low >>> 0, d.startTime.high >>> 0).toNumber(); + } + if (d.endTime != null) { + if ($util.Long) + (m.endTime = $util.Long.fromValue(d.endTime)).unsigned = false; + else if (typeof d.endTime === "string") + m.endTime = parseInt(d.endTime, 10); + else if (typeof d.endTime === "number") + m.endTime = d.endTime; + else if (typeof d.endTime === "object") + m.endTime = new $util.LongBits(d.endTime.low >>> 0, d.endTime.high >>> 0).toNumber(); + } + if (d.extraGuestsAllowed != null) { + m.extraGuestsAllowed = Boolean(d.extraGuestsAllowed); + } + if (d.isScheduleCall != null) { + m.isScheduleCall = Boolean(d.isScheduleCall); + } + if (d.hasReminder != null) { + m.hasReminder = Boolean(d.hasReminder); + } + if (d.reminderOffsetSec != null) { + if ($util.Long) + (m.reminderOffsetSec = $util.Long.fromValue(d.reminderOffsetSec)).unsigned = false; + else if (typeof d.reminderOffsetSec === "string") + m.reminderOffsetSec = parseInt(d.reminderOffsetSec, 10); + else if (typeof d.reminderOffsetSec === "number") + m.reminderOffsetSec = d.reminderOffsetSec; + else if (typeof d.reminderOffsetSec === "object") + m.reminderOffsetSec = new $util.LongBits(d.reminderOffsetSec.low >>> 0, d.reminderOffsetSec.high >>> 0).toNumber(); + } + return m; + }; + + EventMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.isCanceled != null && m.hasOwnProperty("isCanceled")) { + d.isCanceled = m.isCanceled; + if (o.oneofs) + d._isCanceled = "isCanceled"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.location != null && m.hasOwnProperty("location")) { + d.location = $root.proto.Message.LocationMessage.toObject(m.location, o); + if (o.oneofs) + d._location = "location"; + } + if (m.joinLink != null && m.hasOwnProperty("joinLink")) { + d.joinLink = m.joinLink; + if (o.oneofs) + d._joinLink = "joinLink"; + } + if (m.startTime != null && m.hasOwnProperty("startTime")) { + if (typeof m.startTime === "number") + d.startTime = o.longs === String ? String(m.startTime) : m.startTime; + else + d.startTime = o.longs === String ? longToString(m.startTime) : o.longs === Number ? longToNumber(m.startTime) : m.startTime; + if (o.oneofs) + d._startTime = "startTime"; + } + if (m.endTime != null && m.hasOwnProperty("endTime")) { + if (typeof m.endTime === "number") + d.endTime = o.longs === String ? String(m.endTime) : m.endTime; + else + d.endTime = o.longs === String ? longToString(m.endTime) : o.longs === Number ? longToNumber(m.endTime) : m.endTime; + if (o.oneofs) + d._endTime = "endTime"; + } + if (m.extraGuestsAllowed != null && m.hasOwnProperty("extraGuestsAllowed")) { + d.extraGuestsAllowed = m.extraGuestsAllowed; + if (o.oneofs) + d._extraGuestsAllowed = "extraGuestsAllowed"; + } + if (m.isScheduleCall != null && m.hasOwnProperty("isScheduleCall")) { + d.isScheduleCall = m.isScheduleCall; + if (o.oneofs) + d._isScheduleCall = "isScheduleCall"; + } + if (m.hasReminder != null && m.hasOwnProperty("hasReminder")) { + d.hasReminder = m.hasReminder; + if (o.oneofs) + d._hasReminder = "hasReminder"; + } + if (m.reminderOffsetSec != null && m.hasOwnProperty("reminderOffsetSec")) { + if (typeof m.reminderOffsetSec === "number") + d.reminderOffsetSec = o.longs === String ? String(m.reminderOffsetSec) : m.reminderOffsetSec; + else + d.reminderOffsetSec = o.longs === String ? longToString(m.reminderOffsetSec) : o.longs === Number ? longToNumber(m.reminderOffsetSec) : m.reminderOffsetSec; + if (o.oneofs) + d._reminderOffsetSec = "reminderOffsetSec"; + } + return d; + }; + + EventMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EventMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.EventMessage"; + }; + + return EventMessage; + })(); + + Message.EventResponseMessage = (function() { + + function EventResponseMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EventResponseMessage.prototype.response = null; + EventResponseMessage.prototype.timestampMs = null; + EventResponseMessage.prototype.extraGuestCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventResponseMessage.prototype, "_response", { + get: $util.oneOfGetter($oneOfFields = ["response"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventResponseMessage.prototype, "_timestampMs", { + get: $util.oneOfGetter($oneOfFields = ["timestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventResponseMessage.prototype, "_extraGuestCount", { + get: $util.oneOfGetter($oneOfFields = ["extraGuestCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EventResponseMessage.create = function create(properties) { + return new EventResponseMessage(properties); + }; + + EventResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.response != null && Object.hasOwnProperty.call(m, "response")) + w.uint32(8).int32(m.response); + if (m.timestampMs != null && Object.hasOwnProperty.call(m, "timestampMs")) + w.uint32(16).int64(m.timestampMs); + if (m.extraGuestCount != null && Object.hasOwnProperty.call(m, "extraGuestCount")) + w.uint32(24).int32(m.extraGuestCount); + return w; + }; + + EventResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.EventResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.response = r.int32(); + break; + } + case 2: { + m.timestampMs = r.int64(); + break; + } + case 3: { + m.extraGuestCount = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EventResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.EventResponseMessage) + return d; + var m = new $root.proto.Message.EventResponseMessage(); + switch (d.response) { + default: + if (typeof d.response === "number") { + m.response = d.response; + break; + } + break; + case "UNKNOWN": + case 0: + m.response = 0; + break; + case "GOING": + case 1: + m.response = 1; + break; + case "NOT_GOING": + case 2: + m.response = 2; + break; + case "MAYBE": + case 3: + m.response = 3; + break; + } + if (d.timestampMs != null) { + if ($util.Long) + (m.timestampMs = $util.Long.fromValue(d.timestampMs)).unsigned = false; + else if (typeof d.timestampMs === "string") + m.timestampMs = parseInt(d.timestampMs, 10); + else if (typeof d.timestampMs === "number") + m.timestampMs = d.timestampMs; + else if (typeof d.timestampMs === "object") + m.timestampMs = new $util.LongBits(d.timestampMs.low >>> 0, d.timestampMs.high >>> 0).toNumber(); + } + if (d.extraGuestCount != null) { + m.extraGuestCount = d.extraGuestCount | 0; + } + return m; + }; + + EventResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.response != null && m.hasOwnProperty("response")) { + d.response = o.enums === String ? $root.proto.Message.EventResponseMessage.EventResponseType[m.response] === undefined ? m.response : $root.proto.Message.EventResponseMessage.EventResponseType[m.response] : m.response; + if (o.oneofs) + d._response = "response"; + } + if (m.timestampMs != null && m.hasOwnProperty("timestampMs")) { + if (typeof m.timestampMs === "number") + d.timestampMs = o.longs === String ? String(m.timestampMs) : m.timestampMs; + else + d.timestampMs = o.longs === String ? longToString(m.timestampMs) : o.longs === Number ? longToNumber(m.timestampMs) : m.timestampMs; + if (o.oneofs) + d._timestampMs = "timestampMs"; + } + if (m.extraGuestCount != null && m.hasOwnProperty("extraGuestCount")) { + d.extraGuestCount = m.extraGuestCount; + if (o.oneofs) + d._extraGuestCount = "extraGuestCount"; + } + return d; + }; + + EventResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EventResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.EventResponseMessage"; + }; + + EventResponseMessage.EventResponseType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "GOING"] = 1; + values[valuesById[2] = "NOT_GOING"] = 2; + values[valuesById[3] = "MAYBE"] = 3; + return values; + })(); + + return EventResponseMessage; + })(); + + Message.ExtendedTextMessage = (function() { + + function ExtendedTextMessage(p) { + this.endCardTiles = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ExtendedTextMessage.prototype.text = null; + ExtendedTextMessage.prototype.matchedText = null; + ExtendedTextMessage.prototype.description = null; + ExtendedTextMessage.prototype.title = null; + ExtendedTextMessage.prototype.textArgb = null; + ExtendedTextMessage.prototype.backgroundArgb = null; + ExtendedTextMessage.prototype.font = null; + ExtendedTextMessage.prototype.previewType = null; + ExtendedTextMessage.prototype.jpegThumbnail = null; + ExtendedTextMessage.prototype.contextInfo = null; + ExtendedTextMessage.prototype.doNotPlayInline = null; + ExtendedTextMessage.prototype.thumbnailDirectPath = null; + ExtendedTextMessage.prototype.thumbnailSha256 = null; + ExtendedTextMessage.prototype.thumbnailEncSha256 = null; + ExtendedTextMessage.prototype.mediaKey = null; + ExtendedTextMessage.prototype.mediaKeyTimestamp = null; + ExtendedTextMessage.prototype.thumbnailHeight = null; + ExtendedTextMessage.prototype.thumbnailWidth = null; + ExtendedTextMessage.prototype.inviteLinkGroupType = null; + ExtendedTextMessage.prototype.inviteLinkParentGroupSubjectV2 = null; + ExtendedTextMessage.prototype.inviteLinkParentGroupThumbnailV2 = null; + ExtendedTextMessage.prototype.inviteLinkGroupTypeV2 = null; + ExtendedTextMessage.prototype.viewOnce = null; + ExtendedTextMessage.prototype.videoHeight = null; + ExtendedTextMessage.prototype.videoWidth = null; + ExtendedTextMessage.prototype.faviconMMSMetadata = null; + ExtendedTextMessage.prototype.linkPreviewMetadata = null; + ExtendedTextMessage.prototype.paymentLinkMetadata = null; + ExtendedTextMessage.prototype.endCardTiles = $util.emptyArray; + ExtendedTextMessage.prototype.videoContentUrl = null; + ExtendedTextMessage.prototype.musicMetadata = null; + ExtendedTextMessage.prototype.paymentExtendedMetadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_matchedText", { + get: $util.oneOfGetter($oneOfFields = ["matchedText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_textArgb", { + get: $util.oneOfGetter($oneOfFields = ["textArgb"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_backgroundArgb", { + get: $util.oneOfGetter($oneOfFields = ["backgroundArgb"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_font", { + get: $util.oneOfGetter($oneOfFields = ["font"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_previewType", { + get: $util.oneOfGetter($oneOfFields = ["previewType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_doNotPlayInline", { + get: $util.oneOfGetter($oneOfFields = ["doNotPlayInline"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_thumbnailDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_thumbnailSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_thumbnailEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_thumbnailHeight", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailHeight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_thumbnailWidth", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailWidth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_inviteLinkGroupType", { + get: $util.oneOfGetter($oneOfFields = ["inviteLinkGroupType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_inviteLinkParentGroupSubjectV2", { + get: $util.oneOfGetter($oneOfFields = ["inviteLinkParentGroupSubjectV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_inviteLinkParentGroupThumbnailV2", { + get: $util.oneOfGetter($oneOfFields = ["inviteLinkParentGroupThumbnailV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_inviteLinkGroupTypeV2", { + get: $util.oneOfGetter($oneOfFields = ["inviteLinkGroupTypeV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_viewOnce", { + get: $util.oneOfGetter($oneOfFields = ["viewOnce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_videoHeight", { + get: $util.oneOfGetter($oneOfFields = ["videoHeight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_videoWidth", { + get: $util.oneOfGetter($oneOfFields = ["videoWidth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_faviconMMSMetadata", { + get: $util.oneOfGetter($oneOfFields = ["faviconMMSMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_linkPreviewMetadata", { + get: $util.oneOfGetter($oneOfFields = ["linkPreviewMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_paymentLinkMetadata", { + get: $util.oneOfGetter($oneOfFields = ["paymentLinkMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_videoContentUrl", { + get: $util.oneOfGetter($oneOfFields = ["videoContentUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_musicMetadata", { + get: $util.oneOfGetter($oneOfFields = ["musicMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExtendedTextMessage.prototype, "_paymentExtendedMetadata", { + get: $util.oneOfGetter($oneOfFields = ["paymentExtendedMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ExtendedTextMessage.create = function create(properties) { + return new ExtendedTextMessage(properties); + }; + + ExtendedTextMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + if (m.matchedText != null && Object.hasOwnProperty.call(m, "matchedText")) + w.uint32(18).string(m.matchedText); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(42).string(m.description); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(50).string(m.title); + if (m.textArgb != null && Object.hasOwnProperty.call(m, "textArgb")) + w.uint32(61).fixed32(m.textArgb); + if (m.backgroundArgb != null && Object.hasOwnProperty.call(m, "backgroundArgb")) + w.uint32(69).fixed32(m.backgroundArgb); + if (m.font != null && Object.hasOwnProperty.call(m, "font")) + w.uint32(72).int32(m.font); + if (m.previewType != null && Object.hasOwnProperty.call(m, "previewType")) + w.uint32(80).int32(m.previewType); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(130).bytes(m.jpegThumbnail); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + if (m.doNotPlayInline != null && Object.hasOwnProperty.call(m, "doNotPlayInline")) + w.uint32(144).bool(m.doNotPlayInline); + if (m.thumbnailDirectPath != null && Object.hasOwnProperty.call(m, "thumbnailDirectPath")) + w.uint32(154).string(m.thumbnailDirectPath); + if (m.thumbnailSha256 != null && Object.hasOwnProperty.call(m, "thumbnailSha256")) + w.uint32(162).bytes(m.thumbnailSha256); + if (m.thumbnailEncSha256 != null && Object.hasOwnProperty.call(m, "thumbnailEncSha256")) + w.uint32(170).bytes(m.thumbnailEncSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(178).bytes(m.mediaKey); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(184).int64(m.mediaKeyTimestamp); + if (m.thumbnailHeight != null && Object.hasOwnProperty.call(m, "thumbnailHeight")) + w.uint32(192).uint32(m.thumbnailHeight); + if (m.thumbnailWidth != null && Object.hasOwnProperty.call(m, "thumbnailWidth")) + w.uint32(200).uint32(m.thumbnailWidth); + if (m.inviteLinkGroupType != null && Object.hasOwnProperty.call(m, "inviteLinkGroupType")) + w.uint32(208).int32(m.inviteLinkGroupType); + if (m.inviteLinkParentGroupSubjectV2 != null && Object.hasOwnProperty.call(m, "inviteLinkParentGroupSubjectV2")) + w.uint32(218).string(m.inviteLinkParentGroupSubjectV2); + if (m.inviteLinkParentGroupThumbnailV2 != null && Object.hasOwnProperty.call(m, "inviteLinkParentGroupThumbnailV2")) + w.uint32(226).bytes(m.inviteLinkParentGroupThumbnailV2); + if (m.inviteLinkGroupTypeV2 != null && Object.hasOwnProperty.call(m, "inviteLinkGroupTypeV2")) + w.uint32(232).int32(m.inviteLinkGroupTypeV2); + if (m.viewOnce != null && Object.hasOwnProperty.call(m, "viewOnce")) + w.uint32(240).bool(m.viewOnce); + if (m.videoHeight != null && Object.hasOwnProperty.call(m, "videoHeight")) + w.uint32(248).uint32(m.videoHeight); + if (m.videoWidth != null && Object.hasOwnProperty.call(m, "videoWidth")) + w.uint32(256).uint32(m.videoWidth); + if (m.faviconMMSMetadata != null && Object.hasOwnProperty.call(m, "faviconMMSMetadata")) + $root.proto.Message.MMSThumbnailMetadata.encode(m.faviconMMSMetadata, w.uint32(266).fork()).ldelim(); + if (m.linkPreviewMetadata != null && Object.hasOwnProperty.call(m, "linkPreviewMetadata")) + $root.proto.Message.LinkPreviewMetadata.encode(m.linkPreviewMetadata, w.uint32(274).fork()).ldelim(); + if (m.paymentLinkMetadata != null && Object.hasOwnProperty.call(m, "paymentLinkMetadata")) + $root.proto.Message.PaymentLinkMetadata.encode(m.paymentLinkMetadata, w.uint32(282).fork()).ldelim(); + if (m.endCardTiles != null && m.endCardTiles.length) { + for (var i = 0; i < m.endCardTiles.length; ++i) + $root.proto.Message.VideoEndCard.encode(m.endCardTiles[i], w.uint32(290).fork()).ldelim(); + } + if (m.videoContentUrl != null && Object.hasOwnProperty.call(m, "videoContentUrl")) + w.uint32(298).string(m.videoContentUrl); + if (m.musicMetadata != null && Object.hasOwnProperty.call(m, "musicMetadata")) + $root.proto.EmbeddedMusic.encode(m.musicMetadata, w.uint32(306).fork()).ldelim(); + if (m.paymentExtendedMetadata != null && Object.hasOwnProperty.call(m, "paymentExtendedMetadata")) + $root.proto.Message.PaymentExtendedMetadata.encode(m.paymentExtendedMetadata, w.uint32(314).fork()).ldelim(); + return w; + }; + + ExtendedTextMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ExtendedTextMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.text = r.string(); + break; + } + case 2: { + m.matchedText = r.string(); + break; + } + case 5: { + m.description = r.string(); + break; + } + case 6: { + m.title = r.string(); + break; + } + case 7: { + m.textArgb = r.fixed32(); + break; + } + case 8: { + m.backgroundArgb = r.fixed32(); + break; + } + case 9: { + m.font = r.int32(); + break; + } + case 10: { + m.previewType = r.int32(); + break; + } + case 16: { + m.jpegThumbnail = r.bytes(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 18: { + m.doNotPlayInline = r.bool(); + break; + } + case 19: { + m.thumbnailDirectPath = r.string(); + break; + } + case 20: { + m.thumbnailSha256 = r.bytes(); + break; + } + case 21: { + m.thumbnailEncSha256 = r.bytes(); + break; + } + case 22: { + m.mediaKey = r.bytes(); + break; + } + case 23: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 24: { + m.thumbnailHeight = r.uint32(); + break; + } + case 25: { + m.thumbnailWidth = r.uint32(); + break; + } + case 26: { + m.inviteLinkGroupType = r.int32(); + break; + } + case 27: { + m.inviteLinkParentGroupSubjectV2 = r.string(); + break; + } + case 28: { + m.inviteLinkParentGroupThumbnailV2 = r.bytes(); + break; + } + case 29: { + m.inviteLinkGroupTypeV2 = r.int32(); + break; + } + case 30: { + m.viewOnce = r.bool(); + break; + } + case 31: { + m.videoHeight = r.uint32(); + break; + } + case 32: { + m.videoWidth = r.uint32(); + break; + } + case 33: { + m.faviconMMSMetadata = $root.proto.Message.MMSThumbnailMetadata.decode(r, r.uint32()); + break; + } + case 34: { + m.linkPreviewMetadata = $root.proto.Message.LinkPreviewMetadata.decode(r, r.uint32()); + break; + } + case 35: { + m.paymentLinkMetadata = $root.proto.Message.PaymentLinkMetadata.decode(r, r.uint32()); + break; + } + case 36: { + if (!(m.endCardTiles && m.endCardTiles.length)) + m.endCardTiles = []; + m.endCardTiles.push($root.proto.Message.VideoEndCard.decode(r, r.uint32())); + break; + } + case 37: { + m.videoContentUrl = r.string(); + break; + } + case 38: { + m.musicMetadata = $root.proto.EmbeddedMusic.decode(r, r.uint32()); + break; + } + case 39: { + m.paymentExtendedMetadata = $root.proto.Message.PaymentExtendedMetadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ExtendedTextMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ExtendedTextMessage) + return d; + var m = new $root.proto.Message.ExtendedTextMessage(); + if (d.text != null) { + m.text = String(d.text); + } + if (d.matchedText != null) { + m.matchedText = String(d.matchedText); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.textArgb != null) { + m.textArgb = d.textArgb >>> 0; + } + if (d.backgroundArgb != null) { + m.backgroundArgb = d.backgroundArgb >>> 0; + } + switch (d.font) { + default: + if (typeof d.font === "number") { + m.font = d.font; + break; + } + break; + case "SYSTEM": + case 0: + m.font = 0; + break; + case "SYSTEM_TEXT": + case 1: + m.font = 1; + break; + case "FB_SCRIPT": + case 2: + m.font = 2; + break; + case "SYSTEM_BOLD": + case 6: + m.font = 6; + break; + case "MORNINGBREEZE_REGULAR": + case 7: + m.font = 7; + break; + case "CALISTOGA_REGULAR": + case 8: + m.font = 8; + break; + case "EXO2_EXTRABOLD": + case 9: + m.font = 9; + break; + case "COURIERPRIME_BOLD": + case 10: + m.font = 10; + break; + } + switch (d.previewType) { + default: + if (typeof d.previewType === "number") { + m.previewType = d.previewType; + break; + } + break; + case "NONE": + case 0: + m.previewType = 0; + break; + case "VIDEO": + case 1: + m.previewType = 1; + break; + case "PLACEHOLDER": + case 4: + m.previewType = 4; + break; + case "IMAGE": + case 5: + m.previewType = 5; + break; + case "PAYMENT_LINKS": + case 6: + m.previewType = 6; + break; + case "PROFILE": + case 7: + m.previewType = 7; + break; + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ExtendedTextMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.doNotPlayInline != null) { + m.doNotPlayInline = Boolean(d.doNotPlayInline); + } + if (d.thumbnailDirectPath != null) { + m.thumbnailDirectPath = String(d.thumbnailDirectPath); + } + if (d.thumbnailSha256 != null) { + if (typeof d.thumbnailSha256 === "string") + $util.base64.decode(d.thumbnailSha256, m.thumbnailSha256 = $util.newBuffer($util.base64.length(d.thumbnailSha256)), 0); + else if (d.thumbnailSha256.length >= 0) + m.thumbnailSha256 = d.thumbnailSha256; + } + if (d.thumbnailEncSha256 != null) { + if (typeof d.thumbnailEncSha256 === "string") + $util.base64.decode(d.thumbnailEncSha256, m.thumbnailEncSha256 = $util.newBuffer($util.base64.length(d.thumbnailEncSha256)), 0); + else if (d.thumbnailEncSha256.length >= 0) + m.thumbnailEncSha256 = d.thumbnailEncSha256; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.thumbnailHeight != null) { + m.thumbnailHeight = d.thumbnailHeight >>> 0; + } + if (d.thumbnailWidth != null) { + m.thumbnailWidth = d.thumbnailWidth >>> 0; + } + switch (d.inviteLinkGroupType) { + default: + if (typeof d.inviteLinkGroupType === "number") { + m.inviteLinkGroupType = d.inviteLinkGroupType; + break; + } + break; + case "DEFAULT": + case 0: + m.inviteLinkGroupType = 0; + break; + case "PARENT": + case 1: + m.inviteLinkGroupType = 1; + break; + case "SUB": + case 2: + m.inviteLinkGroupType = 2; + break; + case "DEFAULT_SUB": + case 3: + m.inviteLinkGroupType = 3; + break; + } + if (d.inviteLinkParentGroupSubjectV2 != null) { + m.inviteLinkParentGroupSubjectV2 = String(d.inviteLinkParentGroupSubjectV2); + } + if (d.inviteLinkParentGroupThumbnailV2 != null) { + if (typeof d.inviteLinkParentGroupThumbnailV2 === "string") + $util.base64.decode(d.inviteLinkParentGroupThumbnailV2, m.inviteLinkParentGroupThumbnailV2 = $util.newBuffer($util.base64.length(d.inviteLinkParentGroupThumbnailV2)), 0); + else if (d.inviteLinkParentGroupThumbnailV2.length >= 0) + m.inviteLinkParentGroupThumbnailV2 = d.inviteLinkParentGroupThumbnailV2; + } + switch (d.inviteLinkGroupTypeV2) { + default: + if (typeof d.inviteLinkGroupTypeV2 === "number") { + m.inviteLinkGroupTypeV2 = d.inviteLinkGroupTypeV2; + break; + } + break; + case "DEFAULT": + case 0: + m.inviteLinkGroupTypeV2 = 0; + break; + case "PARENT": + case 1: + m.inviteLinkGroupTypeV2 = 1; + break; + case "SUB": + case 2: + m.inviteLinkGroupTypeV2 = 2; + break; + case "DEFAULT_SUB": + case 3: + m.inviteLinkGroupTypeV2 = 3; + break; + } + if (d.viewOnce != null) { + m.viewOnce = Boolean(d.viewOnce); + } + if (d.videoHeight != null) { + m.videoHeight = d.videoHeight >>> 0; + } + if (d.videoWidth != null) { + m.videoWidth = d.videoWidth >>> 0; + } + if (d.faviconMMSMetadata != null) { + if (typeof d.faviconMMSMetadata !== "object") + throw TypeError(".proto.Message.ExtendedTextMessage.faviconMMSMetadata: object expected"); + m.faviconMMSMetadata = $root.proto.Message.MMSThumbnailMetadata.fromObject(d.faviconMMSMetadata); + } + if (d.linkPreviewMetadata != null) { + if (typeof d.linkPreviewMetadata !== "object") + throw TypeError(".proto.Message.ExtendedTextMessage.linkPreviewMetadata: object expected"); + m.linkPreviewMetadata = $root.proto.Message.LinkPreviewMetadata.fromObject(d.linkPreviewMetadata); + } + if (d.paymentLinkMetadata != null) { + if (typeof d.paymentLinkMetadata !== "object") + throw TypeError(".proto.Message.ExtendedTextMessage.paymentLinkMetadata: object expected"); + m.paymentLinkMetadata = $root.proto.Message.PaymentLinkMetadata.fromObject(d.paymentLinkMetadata); + } + if (d.endCardTiles) { + if (!Array.isArray(d.endCardTiles)) + throw TypeError(".proto.Message.ExtendedTextMessage.endCardTiles: array expected"); + m.endCardTiles = []; + for (var i = 0; i < d.endCardTiles.length; ++i) { + if (typeof d.endCardTiles[i] !== "object") + throw TypeError(".proto.Message.ExtendedTextMessage.endCardTiles: object expected"); + m.endCardTiles[i] = $root.proto.Message.VideoEndCard.fromObject(d.endCardTiles[i]); + } + } + if (d.videoContentUrl != null) { + m.videoContentUrl = String(d.videoContentUrl); + } + if (d.musicMetadata != null) { + if (typeof d.musicMetadata !== "object") + throw TypeError(".proto.Message.ExtendedTextMessage.musicMetadata: object expected"); + m.musicMetadata = $root.proto.EmbeddedMusic.fromObject(d.musicMetadata); + } + if (d.paymentExtendedMetadata != null) { + if (typeof d.paymentExtendedMetadata !== "object") + throw TypeError(".proto.Message.ExtendedTextMessage.paymentExtendedMetadata: object expected"); + m.paymentExtendedMetadata = $root.proto.Message.PaymentExtendedMetadata.fromObject(d.paymentExtendedMetadata); + } + return m; + }; + + ExtendedTextMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.endCardTiles = []; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.matchedText != null && m.hasOwnProperty("matchedText")) { + d.matchedText = m.matchedText; + if (o.oneofs) + d._matchedText = "matchedText"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.textArgb != null && m.hasOwnProperty("textArgb")) { + d.textArgb = m.textArgb; + if (o.oneofs) + d._textArgb = "textArgb"; + } + if (m.backgroundArgb != null && m.hasOwnProperty("backgroundArgb")) { + d.backgroundArgb = m.backgroundArgb; + if (o.oneofs) + d._backgroundArgb = "backgroundArgb"; + } + if (m.font != null && m.hasOwnProperty("font")) { + d.font = o.enums === String ? $root.proto.Message.ExtendedTextMessage.FontType[m.font] === undefined ? m.font : $root.proto.Message.ExtendedTextMessage.FontType[m.font] : m.font; + if (o.oneofs) + d._font = "font"; + } + if (m.previewType != null && m.hasOwnProperty("previewType")) { + d.previewType = o.enums === String ? $root.proto.Message.ExtendedTextMessage.PreviewType[m.previewType] === undefined ? m.previewType : $root.proto.Message.ExtendedTextMessage.PreviewType[m.previewType] : m.previewType; + if (o.oneofs) + d._previewType = "previewType"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.doNotPlayInline != null && m.hasOwnProperty("doNotPlayInline")) { + d.doNotPlayInline = m.doNotPlayInline; + if (o.oneofs) + d._doNotPlayInline = "doNotPlayInline"; + } + if (m.thumbnailDirectPath != null && m.hasOwnProperty("thumbnailDirectPath")) { + d.thumbnailDirectPath = m.thumbnailDirectPath; + if (o.oneofs) + d._thumbnailDirectPath = "thumbnailDirectPath"; + } + if (m.thumbnailSha256 != null && m.hasOwnProperty("thumbnailSha256")) { + d.thumbnailSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailSha256, 0, m.thumbnailSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailSha256) : m.thumbnailSha256; + if (o.oneofs) + d._thumbnailSha256 = "thumbnailSha256"; + } + if (m.thumbnailEncSha256 != null && m.hasOwnProperty("thumbnailEncSha256")) { + d.thumbnailEncSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailEncSha256, 0, m.thumbnailEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailEncSha256) : m.thumbnailEncSha256; + if (o.oneofs) + d._thumbnailEncSha256 = "thumbnailEncSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.thumbnailHeight != null && m.hasOwnProperty("thumbnailHeight")) { + d.thumbnailHeight = m.thumbnailHeight; + if (o.oneofs) + d._thumbnailHeight = "thumbnailHeight"; + } + if (m.thumbnailWidth != null && m.hasOwnProperty("thumbnailWidth")) { + d.thumbnailWidth = m.thumbnailWidth; + if (o.oneofs) + d._thumbnailWidth = "thumbnailWidth"; + } + if (m.inviteLinkGroupType != null && m.hasOwnProperty("inviteLinkGroupType")) { + d.inviteLinkGroupType = o.enums === String ? $root.proto.Message.ExtendedTextMessage.InviteLinkGroupType[m.inviteLinkGroupType] === undefined ? m.inviteLinkGroupType : $root.proto.Message.ExtendedTextMessage.InviteLinkGroupType[m.inviteLinkGroupType] : m.inviteLinkGroupType; + if (o.oneofs) + d._inviteLinkGroupType = "inviteLinkGroupType"; + } + if (m.inviteLinkParentGroupSubjectV2 != null && m.hasOwnProperty("inviteLinkParentGroupSubjectV2")) { + d.inviteLinkParentGroupSubjectV2 = m.inviteLinkParentGroupSubjectV2; + if (o.oneofs) + d._inviteLinkParentGroupSubjectV2 = "inviteLinkParentGroupSubjectV2"; + } + if (m.inviteLinkParentGroupThumbnailV2 != null && m.hasOwnProperty("inviteLinkParentGroupThumbnailV2")) { + d.inviteLinkParentGroupThumbnailV2 = o.bytes === String ? $util.base64.encode(m.inviteLinkParentGroupThumbnailV2, 0, m.inviteLinkParentGroupThumbnailV2.length) : o.bytes === Array ? Array.prototype.slice.call(m.inviteLinkParentGroupThumbnailV2) : m.inviteLinkParentGroupThumbnailV2; + if (o.oneofs) + d._inviteLinkParentGroupThumbnailV2 = "inviteLinkParentGroupThumbnailV2"; + } + if (m.inviteLinkGroupTypeV2 != null && m.hasOwnProperty("inviteLinkGroupTypeV2")) { + d.inviteLinkGroupTypeV2 = o.enums === String ? $root.proto.Message.ExtendedTextMessage.InviteLinkGroupType[m.inviteLinkGroupTypeV2] === undefined ? m.inviteLinkGroupTypeV2 : $root.proto.Message.ExtendedTextMessage.InviteLinkGroupType[m.inviteLinkGroupTypeV2] : m.inviteLinkGroupTypeV2; + if (o.oneofs) + d._inviteLinkGroupTypeV2 = "inviteLinkGroupTypeV2"; + } + if (m.viewOnce != null && m.hasOwnProperty("viewOnce")) { + d.viewOnce = m.viewOnce; + if (o.oneofs) + d._viewOnce = "viewOnce"; + } + if (m.videoHeight != null && m.hasOwnProperty("videoHeight")) { + d.videoHeight = m.videoHeight; + if (o.oneofs) + d._videoHeight = "videoHeight"; + } + if (m.videoWidth != null && m.hasOwnProperty("videoWidth")) { + d.videoWidth = m.videoWidth; + if (o.oneofs) + d._videoWidth = "videoWidth"; + } + if (m.faviconMMSMetadata != null && m.hasOwnProperty("faviconMMSMetadata")) { + d.faviconMMSMetadata = $root.proto.Message.MMSThumbnailMetadata.toObject(m.faviconMMSMetadata, o); + if (o.oneofs) + d._faviconMMSMetadata = "faviconMMSMetadata"; + } + if (m.linkPreviewMetadata != null && m.hasOwnProperty("linkPreviewMetadata")) { + d.linkPreviewMetadata = $root.proto.Message.LinkPreviewMetadata.toObject(m.linkPreviewMetadata, o); + if (o.oneofs) + d._linkPreviewMetadata = "linkPreviewMetadata"; + } + if (m.paymentLinkMetadata != null && m.hasOwnProperty("paymentLinkMetadata")) { + d.paymentLinkMetadata = $root.proto.Message.PaymentLinkMetadata.toObject(m.paymentLinkMetadata, o); + if (o.oneofs) + d._paymentLinkMetadata = "paymentLinkMetadata"; + } + if (m.endCardTiles && m.endCardTiles.length) { + d.endCardTiles = []; + for (var j = 0; j < m.endCardTiles.length; ++j) { + d.endCardTiles[j] = $root.proto.Message.VideoEndCard.toObject(m.endCardTiles[j], o); + } + } + if (m.videoContentUrl != null && m.hasOwnProperty("videoContentUrl")) { + d.videoContentUrl = m.videoContentUrl; + if (o.oneofs) + d._videoContentUrl = "videoContentUrl"; + } + if (m.musicMetadata != null && m.hasOwnProperty("musicMetadata")) { + d.musicMetadata = $root.proto.EmbeddedMusic.toObject(m.musicMetadata, o); + if (o.oneofs) + d._musicMetadata = "musicMetadata"; + } + if (m.paymentExtendedMetadata != null && m.hasOwnProperty("paymentExtendedMetadata")) { + d.paymentExtendedMetadata = $root.proto.Message.PaymentExtendedMetadata.toObject(m.paymentExtendedMetadata, o); + if (o.oneofs) + d._paymentExtendedMetadata = "paymentExtendedMetadata"; + } + return d; + }; + + ExtendedTextMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ExtendedTextMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ExtendedTextMessage"; + }; + + ExtendedTextMessage.FontType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SYSTEM"] = 0; + values[valuesById[1] = "SYSTEM_TEXT"] = 1; + values[valuesById[2] = "FB_SCRIPT"] = 2; + values[valuesById[6] = "SYSTEM_BOLD"] = 6; + values[valuesById[7] = "MORNINGBREEZE_REGULAR"] = 7; + values[valuesById[8] = "CALISTOGA_REGULAR"] = 8; + values[valuesById[9] = "EXO2_EXTRABOLD"] = 9; + values[valuesById[10] = "COURIERPRIME_BOLD"] = 10; + return values; + })(); + + ExtendedTextMessage.InviteLinkGroupType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DEFAULT"] = 0; + values[valuesById[1] = "PARENT"] = 1; + values[valuesById[2] = "SUB"] = 2; + values[valuesById[3] = "DEFAULT_SUB"] = 3; + return values; + })(); + + ExtendedTextMessage.PreviewType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "VIDEO"] = 1; + values[valuesById[4] = "PLACEHOLDER"] = 4; + values[valuesById[5] = "IMAGE"] = 5; + values[valuesById[6] = "PAYMENT_LINKS"] = 6; + values[valuesById[7] = "PROFILE"] = 7; + return values; + })(); + + return ExtendedTextMessage; + })(); + + Message.FullHistorySyncOnDemandRequestMetadata = (function() { + + function FullHistorySyncOnDemandRequestMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + FullHistorySyncOnDemandRequestMetadata.prototype.requestId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FullHistorySyncOnDemandRequestMetadata.prototype, "_requestId", { + get: $util.oneOfGetter($oneOfFields = ["requestId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + FullHistorySyncOnDemandRequestMetadata.create = function create(properties) { + return new FullHistorySyncOnDemandRequestMetadata(properties); + }; + + FullHistorySyncOnDemandRequestMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.requestId != null && Object.hasOwnProperty.call(m, "requestId")) + w.uint32(10).string(m.requestId); + return w; + }; + + FullHistorySyncOnDemandRequestMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.FullHistorySyncOnDemandRequestMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.requestId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + FullHistorySyncOnDemandRequestMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.FullHistorySyncOnDemandRequestMetadata) + return d; + var m = new $root.proto.Message.FullHistorySyncOnDemandRequestMetadata(); + if (d.requestId != null) { + m.requestId = String(d.requestId); + } + return m; + }; + + FullHistorySyncOnDemandRequestMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.requestId != null && m.hasOwnProperty("requestId")) { + d.requestId = m.requestId; + if (o.oneofs) + d._requestId = "requestId"; + } + return d; + }; + + FullHistorySyncOnDemandRequestMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + FullHistorySyncOnDemandRequestMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.FullHistorySyncOnDemandRequestMetadata"; + }; + + return FullHistorySyncOnDemandRequestMetadata; + })(); + + Message.FutureProofMessage = (function() { + + function FutureProofMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + FutureProofMessage.prototype.message = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FutureProofMessage.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + FutureProofMessage.create = function create(properties) { + return new FutureProofMessage(properties); + }; + + FutureProofMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.Message.encode(m.message, w.uint32(10).fork()).ldelim(); + return w; + }; + + FutureProofMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.FutureProofMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.message = $root.proto.Message.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + FutureProofMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.FutureProofMessage) + return d; + var m = new $root.proto.Message.FutureProofMessage(); + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.Message.FutureProofMessage.message: object expected"); + m.message = $root.proto.Message.fromObject(d.message); + } + return m; + }; + + FutureProofMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.Message.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + return d; + }; + + FutureProofMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + FutureProofMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.FutureProofMessage"; + }; + + return FutureProofMessage; + })(); + + Message.GroupInviteMessage = (function() { + + function GroupInviteMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GroupInviteMessage.prototype.groupJid = null; + GroupInviteMessage.prototype.inviteCode = null; + GroupInviteMessage.prototype.inviteExpiration = null; + GroupInviteMessage.prototype.groupName = null; + GroupInviteMessage.prototype.jpegThumbnail = null; + GroupInviteMessage.prototype.caption = null; + GroupInviteMessage.prototype.contextInfo = null; + GroupInviteMessage.prototype.groupType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_groupJid", { + get: $util.oneOfGetter($oneOfFields = ["groupJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_inviteCode", { + get: $util.oneOfGetter($oneOfFields = ["inviteCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_inviteExpiration", { + get: $util.oneOfGetter($oneOfFields = ["inviteExpiration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_groupName", { + get: $util.oneOfGetter($oneOfFields = ["groupName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupInviteMessage.prototype, "_groupType", { + get: $util.oneOfGetter($oneOfFields = ["groupType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GroupInviteMessage.create = function create(properties) { + return new GroupInviteMessage(properties); + }; + + GroupInviteMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.groupJid != null && Object.hasOwnProperty.call(m, "groupJid")) + w.uint32(10).string(m.groupJid); + if (m.inviteCode != null && Object.hasOwnProperty.call(m, "inviteCode")) + w.uint32(18).string(m.inviteCode); + if (m.inviteExpiration != null && Object.hasOwnProperty.call(m, "inviteExpiration")) + w.uint32(24).int64(m.inviteExpiration); + if (m.groupName != null && Object.hasOwnProperty.call(m, "groupName")) + w.uint32(34).string(m.groupName); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(42).bytes(m.jpegThumbnail); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(50).string(m.caption); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(58).fork()).ldelim(); + if (m.groupType != null && Object.hasOwnProperty.call(m, "groupType")) + w.uint32(64).int32(m.groupType); + return w; + }; + + GroupInviteMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.GroupInviteMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.groupJid = r.string(); + break; + } + case 2: { + m.inviteCode = r.string(); + break; + } + case 3: { + m.inviteExpiration = r.int64(); + break; + } + case 4: { + m.groupName = r.string(); + break; + } + case 5: { + m.jpegThumbnail = r.bytes(); + break; + } + case 6: { + m.caption = r.string(); + break; + } + case 7: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 8: { + m.groupType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GroupInviteMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.GroupInviteMessage) + return d; + var m = new $root.proto.Message.GroupInviteMessage(); + if (d.groupJid != null) { + m.groupJid = String(d.groupJid); + } + if (d.inviteCode != null) { + m.inviteCode = String(d.inviteCode); + } + if (d.inviteExpiration != null) { + if ($util.Long) + (m.inviteExpiration = $util.Long.fromValue(d.inviteExpiration)).unsigned = false; + else if (typeof d.inviteExpiration === "string") + m.inviteExpiration = parseInt(d.inviteExpiration, 10); + else if (typeof d.inviteExpiration === "number") + m.inviteExpiration = d.inviteExpiration; + else if (typeof d.inviteExpiration === "object") + m.inviteExpiration = new $util.LongBits(d.inviteExpiration.low >>> 0, d.inviteExpiration.high >>> 0).toNumber(); + } + if (d.groupName != null) { + m.groupName = String(d.groupName); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.GroupInviteMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + switch (d.groupType) { + default: + if (typeof d.groupType === "number") { + m.groupType = d.groupType; + break; + } + break; + case "DEFAULT": + case 0: + m.groupType = 0; + break; + case "PARENT": + case 1: + m.groupType = 1; + break; + } + return m; + }; + + GroupInviteMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.groupJid != null && m.hasOwnProperty("groupJid")) { + d.groupJid = m.groupJid; + if (o.oneofs) + d._groupJid = "groupJid"; + } + if (m.inviteCode != null && m.hasOwnProperty("inviteCode")) { + d.inviteCode = m.inviteCode; + if (o.oneofs) + d._inviteCode = "inviteCode"; + } + if (m.inviteExpiration != null && m.hasOwnProperty("inviteExpiration")) { + if (typeof m.inviteExpiration === "number") + d.inviteExpiration = o.longs === String ? String(m.inviteExpiration) : m.inviteExpiration; + else + d.inviteExpiration = o.longs === String ? longToString(m.inviteExpiration) : o.longs === Number ? longToNumber(m.inviteExpiration) : m.inviteExpiration; + if (o.oneofs) + d._inviteExpiration = "inviteExpiration"; + } + if (m.groupName != null && m.hasOwnProperty("groupName")) { + d.groupName = m.groupName; + if (o.oneofs) + d._groupName = "groupName"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.groupType != null && m.hasOwnProperty("groupType")) { + d.groupType = o.enums === String ? $root.proto.Message.GroupInviteMessage.GroupType[m.groupType] === undefined ? m.groupType : $root.proto.Message.GroupInviteMessage.GroupType[m.groupType] : m.groupType; + if (o.oneofs) + d._groupType = "groupType"; + } + return d; + }; + + GroupInviteMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GroupInviteMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.GroupInviteMessage"; + }; + + GroupInviteMessage.GroupType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DEFAULT"] = 0; + values[valuesById[1] = "PARENT"] = 1; + return values; + })(); + + return GroupInviteMessage; + })(); + + Message.HighlyStructuredMessage = (function() { + + function HighlyStructuredMessage(p) { + this.params = []; + this.localizableParams = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HighlyStructuredMessage.prototype.namespace = null; + HighlyStructuredMessage.prototype.elementName = null; + HighlyStructuredMessage.prototype.params = $util.emptyArray; + HighlyStructuredMessage.prototype.fallbackLg = null; + HighlyStructuredMessage.prototype.fallbackLc = null; + HighlyStructuredMessage.prototype.localizableParams = $util.emptyArray; + HighlyStructuredMessage.prototype.deterministicLg = null; + HighlyStructuredMessage.prototype.deterministicLc = null; + HighlyStructuredMessage.prototype.hydratedHsm = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HighlyStructuredMessage.prototype, "_namespace", { + get: $util.oneOfGetter($oneOfFields = ["namespace"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HighlyStructuredMessage.prototype, "_elementName", { + get: $util.oneOfGetter($oneOfFields = ["elementName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HighlyStructuredMessage.prototype, "_fallbackLg", { + get: $util.oneOfGetter($oneOfFields = ["fallbackLg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HighlyStructuredMessage.prototype, "_fallbackLc", { + get: $util.oneOfGetter($oneOfFields = ["fallbackLc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HighlyStructuredMessage.prototype, "_deterministicLg", { + get: $util.oneOfGetter($oneOfFields = ["deterministicLg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HighlyStructuredMessage.prototype, "_deterministicLc", { + get: $util.oneOfGetter($oneOfFields = ["deterministicLc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HighlyStructuredMessage.prototype, "_hydratedHsm", { + get: $util.oneOfGetter($oneOfFields = ["hydratedHsm"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HighlyStructuredMessage.create = function create(properties) { + return new HighlyStructuredMessage(properties); + }; + + HighlyStructuredMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.namespace != null && Object.hasOwnProperty.call(m, "namespace")) + w.uint32(10).string(m.namespace); + if (m.elementName != null && Object.hasOwnProperty.call(m, "elementName")) + w.uint32(18).string(m.elementName); + if (m.params != null && m.params.length) { + for (var i = 0; i < m.params.length; ++i) + w.uint32(26).string(m.params[i]); + } + if (m.fallbackLg != null && Object.hasOwnProperty.call(m, "fallbackLg")) + w.uint32(34).string(m.fallbackLg); + if (m.fallbackLc != null && Object.hasOwnProperty.call(m, "fallbackLc")) + w.uint32(42).string(m.fallbackLc); + if (m.localizableParams != null && m.localizableParams.length) { + for (var i = 0; i < m.localizableParams.length; ++i) + $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.encode(m.localizableParams[i], w.uint32(50).fork()).ldelim(); + } + if (m.deterministicLg != null && Object.hasOwnProperty.call(m, "deterministicLg")) + w.uint32(58).string(m.deterministicLg); + if (m.deterministicLc != null && Object.hasOwnProperty.call(m, "deterministicLc")) + w.uint32(66).string(m.deterministicLc); + if (m.hydratedHsm != null && Object.hasOwnProperty.call(m, "hydratedHsm")) + $root.proto.Message.TemplateMessage.encode(m.hydratedHsm, w.uint32(74).fork()).ldelim(); + return w; + }; + + HighlyStructuredMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HighlyStructuredMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.namespace = r.string(); + break; + } + case 2: { + m.elementName = r.string(); + break; + } + case 3: { + if (!(m.params && m.params.length)) + m.params = []; + m.params.push(r.string()); + break; + } + case 4: { + m.fallbackLg = r.string(); + break; + } + case 5: { + m.fallbackLc = r.string(); + break; + } + case 6: { + if (!(m.localizableParams && m.localizableParams.length)) + m.localizableParams = []; + m.localizableParams.push($root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.decode(r, r.uint32())); + break; + } + case 7: { + m.deterministicLg = r.string(); + break; + } + case 8: { + m.deterministicLc = r.string(); + break; + } + case 9: { + m.hydratedHsm = $root.proto.Message.TemplateMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HighlyStructuredMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HighlyStructuredMessage) + return d; + var m = new $root.proto.Message.HighlyStructuredMessage(); + if (d.namespace != null) { + m.namespace = String(d.namespace); + } + if (d.elementName != null) { + m.elementName = String(d.elementName); + } + if (d.params) { + if (!Array.isArray(d.params)) + throw TypeError(".proto.Message.HighlyStructuredMessage.params: array expected"); + m.params = []; + for (var i = 0; i < d.params.length; ++i) { + m.params[i] = String(d.params[i]); + } + } + if (d.fallbackLg != null) { + m.fallbackLg = String(d.fallbackLg); + } + if (d.fallbackLc != null) { + m.fallbackLc = String(d.fallbackLc); + } + if (d.localizableParams) { + if (!Array.isArray(d.localizableParams)) + throw TypeError(".proto.Message.HighlyStructuredMessage.localizableParams: array expected"); + m.localizableParams = []; + for (var i = 0; i < d.localizableParams.length; ++i) { + if (typeof d.localizableParams[i] !== "object") + throw TypeError(".proto.Message.HighlyStructuredMessage.localizableParams: object expected"); + m.localizableParams[i] = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.fromObject(d.localizableParams[i]); + } + } + if (d.deterministicLg != null) { + m.deterministicLg = String(d.deterministicLg); + } + if (d.deterministicLc != null) { + m.deterministicLc = String(d.deterministicLc); + } + if (d.hydratedHsm != null) { + if (typeof d.hydratedHsm !== "object") + throw TypeError(".proto.Message.HighlyStructuredMessage.hydratedHsm: object expected"); + m.hydratedHsm = $root.proto.Message.TemplateMessage.fromObject(d.hydratedHsm); + } + return m; + }; + + HighlyStructuredMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.params = []; + d.localizableParams = []; + } + if (m.namespace != null && m.hasOwnProperty("namespace")) { + d.namespace = m.namespace; + if (o.oneofs) + d._namespace = "namespace"; + } + if (m.elementName != null && m.hasOwnProperty("elementName")) { + d.elementName = m.elementName; + if (o.oneofs) + d._elementName = "elementName"; + } + if (m.params && m.params.length) { + d.params = []; + for (var j = 0; j < m.params.length; ++j) { + d.params[j] = m.params[j]; + } + } + if (m.fallbackLg != null && m.hasOwnProperty("fallbackLg")) { + d.fallbackLg = m.fallbackLg; + if (o.oneofs) + d._fallbackLg = "fallbackLg"; + } + if (m.fallbackLc != null && m.hasOwnProperty("fallbackLc")) { + d.fallbackLc = m.fallbackLc; + if (o.oneofs) + d._fallbackLc = "fallbackLc"; + } + if (m.localizableParams && m.localizableParams.length) { + d.localizableParams = []; + for (var j = 0; j < m.localizableParams.length; ++j) { + d.localizableParams[j] = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.toObject(m.localizableParams[j], o); + } + } + if (m.deterministicLg != null && m.hasOwnProperty("deterministicLg")) { + d.deterministicLg = m.deterministicLg; + if (o.oneofs) + d._deterministicLg = "deterministicLg"; + } + if (m.deterministicLc != null && m.hasOwnProperty("deterministicLc")) { + d.deterministicLc = m.deterministicLc; + if (o.oneofs) + d._deterministicLc = "deterministicLc"; + } + if (m.hydratedHsm != null && m.hasOwnProperty("hydratedHsm")) { + d.hydratedHsm = $root.proto.Message.TemplateMessage.toObject(m.hydratedHsm, o); + if (o.oneofs) + d._hydratedHsm = "hydratedHsm"; + } + return d; + }; + + HighlyStructuredMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HighlyStructuredMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HighlyStructuredMessage"; + }; + + HighlyStructuredMessage.HSMLocalizableParameter = (function() { + + function HSMLocalizableParameter(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HSMLocalizableParameter.prototype["default"] = null; + HSMLocalizableParameter.prototype.currency = null; + HSMLocalizableParameter.prototype.dateTime = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMLocalizableParameter.prototype, "_default", { + get: $util.oneOfGetter($oneOfFields = ["default"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(HSMLocalizableParameter.prototype, "paramOneof", { + get: $util.oneOfGetter($oneOfFields = ["currency", "dateTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HSMLocalizableParameter.create = function create(properties) { + return new HSMLocalizableParameter(properties); + }; + + HSMLocalizableParameter.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m["default"] != null && Object.hasOwnProperty.call(m, "default")) + w.uint32(10).string(m["default"]); + if (m.currency != null && Object.hasOwnProperty.call(m, "currency")) + $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency.encode(m.currency, w.uint32(18).fork()).ldelim(); + if (m.dateTime != null && Object.hasOwnProperty.call(m, "dateTime")) + $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.encode(m.dateTime, w.uint32(26).fork()).ldelim(); + return w; + }; + + HSMLocalizableParameter.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m["default"] = r.string(); + break; + } + case 2: { + m.currency = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency.decode(r, r.uint32()); + break; + } + case 3: { + m.dateTime = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HSMLocalizableParameter.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter) + return d; + var m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter(); + if (d["default"] != null) { + m["default"] = String(d["default"]); + } + if (d.currency != null) { + if (typeof d.currency !== "object") + throw TypeError(".proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.currency: object expected"); + m.currency = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency.fromObject(d.currency); + } + if (d.dateTime != null) { + if (typeof d.dateTime !== "object") + throw TypeError(".proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.dateTime: object expected"); + m.dateTime = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.fromObject(d.dateTime); + } + return m; + }; + + HSMLocalizableParameter.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m["default"] != null && m.hasOwnProperty("default")) { + d["default"] = m["default"]; + if (o.oneofs) + d._default = "default"; + } + if (m.currency != null && m.hasOwnProperty("currency")) { + d.currency = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency.toObject(m.currency, o); + if (o.oneofs) + d.paramOneof = "currency"; + } + if (m.dateTime != null && m.hasOwnProperty("dateTime")) { + d.dateTime = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.toObject(m.dateTime, o); + if (o.oneofs) + d.paramOneof = "dateTime"; + } + return d; + }; + + HSMLocalizableParameter.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HSMLocalizableParameter.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HighlyStructuredMessage.HSMLocalizableParameter"; + }; + + HSMLocalizableParameter.HSMCurrency = (function() { + + function HSMCurrency(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HSMCurrency.prototype.currencyCode = null; + HSMCurrency.prototype.amount1000 = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMCurrency.prototype, "_currencyCode", { + get: $util.oneOfGetter($oneOfFields = ["currencyCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMCurrency.prototype, "_amount1000", { + get: $util.oneOfGetter($oneOfFields = ["amount1000"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HSMCurrency.create = function create(properties) { + return new HSMCurrency(properties); + }; + + HSMCurrency.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.currencyCode != null && Object.hasOwnProperty.call(m, "currencyCode")) + w.uint32(10).string(m.currencyCode); + if (m.amount1000 != null && Object.hasOwnProperty.call(m, "amount1000")) + w.uint32(16).int64(m.amount1000); + return w; + }; + + HSMCurrency.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.currencyCode = r.string(); + break; + } + case 2: { + m.amount1000 = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HSMCurrency.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency) + return d; + var m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency(); + if (d.currencyCode != null) { + m.currencyCode = String(d.currencyCode); + } + if (d.amount1000 != null) { + if ($util.Long) + (m.amount1000 = $util.Long.fromValue(d.amount1000)).unsigned = false; + else if (typeof d.amount1000 === "string") + m.amount1000 = parseInt(d.amount1000, 10); + else if (typeof d.amount1000 === "number") + m.amount1000 = d.amount1000; + else if (typeof d.amount1000 === "object") + m.amount1000 = new $util.LongBits(d.amount1000.low >>> 0, d.amount1000.high >>> 0).toNumber(); + } + return m; + }; + + HSMCurrency.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.currencyCode != null && m.hasOwnProperty("currencyCode")) { + d.currencyCode = m.currencyCode; + if (o.oneofs) + d._currencyCode = "currencyCode"; + } + if (m.amount1000 != null && m.hasOwnProperty("amount1000")) { + if (typeof m.amount1000 === "number") + d.amount1000 = o.longs === String ? String(m.amount1000) : m.amount1000; + else + d.amount1000 = o.longs === String ? longToString(m.amount1000) : o.longs === Number ? longToNumber(m.amount1000) : m.amount1000; + if (o.oneofs) + d._amount1000 = "amount1000"; + } + return d; + }; + + HSMCurrency.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HSMCurrency.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency"; + }; + + return HSMCurrency; + })(); + + HSMLocalizableParameter.HSMDateTime = (function() { + + function HSMDateTime(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HSMDateTime.prototype.component = null; + HSMDateTime.prototype.unixEpoch = null; + + let $oneOfFields; + + Object.defineProperty(HSMDateTime.prototype, "datetimeOneof", { + get: $util.oneOfGetter($oneOfFields = ["component", "unixEpoch"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HSMDateTime.create = function create(properties) { + return new HSMDateTime(properties); + }; + + HSMDateTime.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.component != null && Object.hasOwnProperty.call(m, "component")) + $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.encode(m.component, w.uint32(10).fork()).ldelim(); + if (m.unixEpoch != null && Object.hasOwnProperty.call(m, "unixEpoch")) + $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch.encode(m.unixEpoch, w.uint32(18).fork()).ldelim(); + return w; + }; + + HSMDateTime.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.component = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.decode(r, r.uint32()); + break; + } + case 2: { + m.unixEpoch = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HSMDateTime.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime) + return d; + var m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime(); + if (d.component != null) { + if (typeof d.component !== "object") + throw TypeError(".proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.component: object expected"); + m.component = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.fromObject(d.component); + } + if (d.unixEpoch != null) { + if (typeof d.unixEpoch !== "object") + throw TypeError(".proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.unixEpoch: object expected"); + m.unixEpoch = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch.fromObject(d.unixEpoch); + } + return m; + }; + + HSMDateTime.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.component != null && m.hasOwnProperty("component")) { + d.component = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.toObject(m.component, o); + if (o.oneofs) + d.datetimeOneof = "component"; + } + if (m.unixEpoch != null && m.hasOwnProperty("unixEpoch")) { + d.unixEpoch = $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch.toObject(m.unixEpoch, o); + if (o.oneofs) + d.datetimeOneof = "unixEpoch"; + } + return d; + }; + + HSMDateTime.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HSMDateTime.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime"; + }; + + HSMDateTime.HSMDateTimeComponent = (function() { + + function HSMDateTimeComponent(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HSMDateTimeComponent.prototype.dayOfWeek = null; + HSMDateTimeComponent.prototype.year = null; + HSMDateTimeComponent.prototype.month = null; + HSMDateTimeComponent.prototype.dayOfMonth = null; + HSMDateTimeComponent.prototype.hour = null; + HSMDateTimeComponent.prototype.minute = null; + HSMDateTimeComponent.prototype.calendar = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeComponent.prototype, "_dayOfWeek", { + get: $util.oneOfGetter($oneOfFields = ["dayOfWeek"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeComponent.prototype, "_year", { + get: $util.oneOfGetter($oneOfFields = ["year"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeComponent.prototype, "_month", { + get: $util.oneOfGetter($oneOfFields = ["month"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeComponent.prototype, "_dayOfMonth", { + get: $util.oneOfGetter($oneOfFields = ["dayOfMonth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeComponent.prototype, "_hour", { + get: $util.oneOfGetter($oneOfFields = ["hour"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeComponent.prototype, "_minute", { + get: $util.oneOfGetter($oneOfFields = ["minute"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeComponent.prototype, "_calendar", { + get: $util.oneOfGetter($oneOfFields = ["calendar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HSMDateTimeComponent.create = function create(properties) { + return new HSMDateTimeComponent(properties); + }; + + HSMDateTimeComponent.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.dayOfWeek != null && Object.hasOwnProperty.call(m, "dayOfWeek")) + w.uint32(8).int32(m.dayOfWeek); + if (m.year != null && Object.hasOwnProperty.call(m, "year")) + w.uint32(16).uint32(m.year); + if (m.month != null && Object.hasOwnProperty.call(m, "month")) + w.uint32(24).uint32(m.month); + if (m.dayOfMonth != null && Object.hasOwnProperty.call(m, "dayOfMonth")) + w.uint32(32).uint32(m.dayOfMonth); + if (m.hour != null && Object.hasOwnProperty.call(m, "hour")) + w.uint32(40).uint32(m.hour); + if (m.minute != null && Object.hasOwnProperty.call(m, "minute")) + w.uint32(48).uint32(m.minute); + if (m.calendar != null && Object.hasOwnProperty.call(m, "calendar")) + w.uint32(56).int32(m.calendar); + return w; + }; + + HSMDateTimeComponent.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.dayOfWeek = r.int32(); + break; + } + case 2: { + m.year = r.uint32(); + break; + } + case 3: { + m.month = r.uint32(); + break; + } + case 4: { + m.dayOfMonth = r.uint32(); + break; + } + case 5: { + m.hour = r.uint32(); + break; + } + case 6: { + m.minute = r.uint32(); + break; + } + case 7: { + m.calendar = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HSMDateTimeComponent.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent) + return d; + var m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent(); + switch (d.dayOfWeek) { + default: + if (typeof d.dayOfWeek === "number") { + m.dayOfWeek = d.dayOfWeek; + break; + } + break; + case "MONDAY": + case 1: + m.dayOfWeek = 1; + break; + case "TUESDAY": + case 2: + m.dayOfWeek = 2; + break; + case "WEDNESDAY": + case 3: + m.dayOfWeek = 3; + break; + case "THURSDAY": + case 4: + m.dayOfWeek = 4; + break; + case "FRIDAY": + case 5: + m.dayOfWeek = 5; + break; + case "SATURDAY": + case 6: + m.dayOfWeek = 6; + break; + case "SUNDAY": + case 7: + m.dayOfWeek = 7; + break; + } + if (d.year != null) { + m.year = d.year >>> 0; + } + if (d.month != null) { + m.month = d.month >>> 0; + } + if (d.dayOfMonth != null) { + m.dayOfMonth = d.dayOfMonth >>> 0; + } + if (d.hour != null) { + m.hour = d.hour >>> 0; + } + if (d.minute != null) { + m.minute = d.minute >>> 0; + } + switch (d.calendar) { + default: + if (typeof d.calendar === "number") { + m.calendar = d.calendar; + break; + } + break; + case "GREGORIAN": + case 1: + m.calendar = 1; + break; + case "SOLAR_HIJRI": + case 2: + m.calendar = 2; + break; + } + return m; + }; + + HSMDateTimeComponent.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.dayOfWeek != null && m.hasOwnProperty("dayOfWeek")) { + d.dayOfWeek = o.enums === String ? $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType[m.dayOfWeek] === undefined ? m.dayOfWeek : $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType[m.dayOfWeek] : m.dayOfWeek; + if (o.oneofs) + d._dayOfWeek = "dayOfWeek"; + } + if (m.year != null && m.hasOwnProperty("year")) { + d.year = m.year; + if (o.oneofs) + d._year = "year"; + } + if (m.month != null && m.hasOwnProperty("month")) { + d.month = m.month; + if (o.oneofs) + d._month = "month"; + } + if (m.dayOfMonth != null && m.hasOwnProperty("dayOfMonth")) { + d.dayOfMonth = m.dayOfMonth; + if (o.oneofs) + d._dayOfMonth = "dayOfMonth"; + } + if (m.hour != null && m.hasOwnProperty("hour")) { + d.hour = m.hour; + if (o.oneofs) + d._hour = "hour"; + } + if (m.minute != null && m.hasOwnProperty("minute")) { + d.minute = m.minute; + if (o.oneofs) + d._minute = "minute"; + } + if (m.calendar != null && m.hasOwnProperty("calendar")) { + d.calendar = o.enums === String ? $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType[m.calendar] === undefined ? m.calendar : $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType[m.calendar] : m.calendar; + if (o.oneofs) + d._calendar = "calendar"; + } + return d; + }; + + HSMDateTimeComponent.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HSMDateTimeComponent.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent"; + }; + + HSMDateTimeComponent.CalendarType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "GREGORIAN"] = 1; + values[valuesById[2] = "SOLAR_HIJRI"] = 2; + return values; + })(); + + HSMDateTimeComponent.DayOfWeekType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "MONDAY"] = 1; + values[valuesById[2] = "TUESDAY"] = 2; + values[valuesById[3] = "WEDNESDAY"] = 3; + values[valuesById[4] = "THURSDAY"] = 4; + values[valuesById[5] = "FRIDAY"] = 5; + values[valuesById[6] = "SATURDAY"] = 6; + values[valuesById[7] = "SUNDAY"] = 7; + return values; + })(); + + return HSMDateTimeComponent; + })(); + + HSMDateTime.HSMDateTimeUnixEpoch = (function() { + + function HSMDateTimeUnixEpoch(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HSMDateTimeUnixEpoch.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HSMDateTimeUnixEpoch.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HSMDateTimeUnixEpoch.create = function create(properties) { + return new HSMDateTimeUnixEpoch(properties); + }; + + HSMDateTimeUnixEpoch.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(8).int64(m.timestamp); + return w; + }; + + HSMDateTimeUnixEpoch.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.timestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HSMDateTimeUnixEpoch.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch) + return d; + var m = new $root.proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch(); + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + HSMDateTimeUnixEpoch.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + HSMDateTimeUnixEpoch.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HSMDateTimeUnixEpoch.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch"; + }; + + return HSMDateTimeUnixEpoch; + })(); + + return HSMDateTime; + })(); + + return HSMLocalizableParameter; + })(); + + return HighlyStructuredMessage; + })(); + + Message.HistorySyncMessageAccessStatus = (function() { + + function HistorySyncMessageAccessStatus(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySyncMessageAccessStatus.prototype.completeAccessGranted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncMessageAccessStatus.prototype, "_completeAccessGranted", { + get: $util.oneOfGetter($oneOfFields = ["completeAccessGranted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySyncMessageAccessStatus.create = function create(properties) { + return new HistorySyncMessageAccessStatus(properties); + }; + + HistorySyncMessageAccessStatus.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.completeAccessGranted != null && Object.hasOwnProperty.call(m, "completeAccessGranted")) + w.uint32(8).bool(m.completeAccessGranted); + return w; + }; + + HistorySyncMessageAccessStatus.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HistorySyncMessageAccessStatus(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.completeAccessGranted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySyncMessageAccessStatus.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HistorySyncMessageAccessStatus) + return d; + var m = new $root.proto.Message.HistorySyncMessageAccessStatus(); + if (d.completeAccessGranted != null) { + m.completeAccessGranted = Boolean(d.completeAccessGranted); + } + return m; + }; + + HistorySyncMessageAccessStatus.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.completeAccessGranted != null && m.hasOwnProperty("completeAccessGranted")) { + d.completeAccessGranted = m.completeAccessGranted; + if (o.oneofs) + d._completeAccessGranted = "completeAccessGranted"; + } + return d; + }; + + HistorySyncMessageAccessStatus.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySyncMessageAccessStatus.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HistorySyncMessageAccessStatus"; + }; + + return HistorySyncMessageAccessStatus; + })(); + + Message.HistorySyncNotification = (function() { + + function HistorySyncNotification(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySyncNotification.prototype.fileSha256 = null; + HistorySyncNotification.prototype.fileLength = null; + HistorySyncNotification.prototype.mediaKey = null; + HistorySyncNotification.prototype.fileEncSha256 = null; + HistorySyncNotification.prototype.directPath = null; + HistorySyncNotification.prototype.syncType = null; + HistorySyncNotification.prototype.chunkOrder = null; + HistorySyncNotification.prototype.originalMessageId = null; + HistorySyncNotification.prototype.progress = null; + HistorySyncNotification.prototype.oldestMsgInChunkTimestampSec = null; + HistorySyncNotification.prototype.initialHistBootstrapInlinePayload = null; + HistorySyncNotification.prototype.peerDataRequestSessionId = null; + HistorySyncNotification.prototype.fullHistorySyncOnDemandRequestMetadata = null; + HistorySyncNotification.prototype.encHandle = null; + HistorySyncNotification.prototype.messageAccessStatus = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_syncType", { + get: $util.oneOfGetter($oneOfFields = ["syncType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_chunkOrder", { + get: $util.oneOfGetter($oneOfFields = ["chunkOrder"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_originalMessageId", { + get: $util.oneOfGetter($oneOfFields = ["originalMessageId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_progress", { + get: $util.oneOfGetter($oneOfFields = ["progress"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_oldestMsgInChunkTimestampSec", { + get: $util.oneOfGetter($oneOfFields = ["oldestMsgInChunkTimestampSec"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_initialHistBootstrapInlinePayload", { + get: $util.oneOfGetter($oneOfFields = ["initialHistBootstrapInlinePayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_peerDataRequestSessionId", { + get: $util.oneOfGetter($oneOfFields = ["peerDataRequestSessionId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_fullHistorySyncOnDemandRequestMetadata", { + get: $util.oneOfGetter($oneOfFields = ["fullHistorySyncOnDemandRequestMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_encHandle", { + get: $util.oneOfGetter($oneOfFields = ["encHandle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncNotification.prototype, "_messageAccessStatus", { + get: $util.oneOfGetter($oneOfFields = ["messageAccessStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySyncNotification.create = function create(properties) { + return new HistorySyncNotification(properties); + }; + + HistorySyncNotification.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(10).bytes(m.fileSha256); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(16).uint64(m.fileLength); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(26).bytes(m.mediaKey); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(34).bytes(m.fileEncSha256); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(42).string(m.directPath); + if (m.syncType != null && Object.hasOwnProperty.call(m, "syncType")) + w.uint32(48).int32(m.syncType); + if (m.chunkOrder != null && Object.hasOwnProperty.call(m, "chunkOrder")) + w.uint32(56).uint32(m.chunkOrder); + if (m.originalMessageId != null && Object.hasOwnProperty.call(m, "originalMessageId")) + w.uint32(66).string(m.originalMessageId); + if (m.progress != null && Object.hasOwnProperty.call(m, "progress")) + w.uint32(72).uint32(m.progress); + if (m.oldestMsgInChunkTimestampSec != null && Object.hasOwnProperty.call(m, "oldestMsgInChunkTimestampSec")) + w.uint32(80).int64(m.oldestMsgInChunkTimestampSec); + if (m.initialHistBootstrapInlinePayload != null && Object.hasOwnProperty.call(m, "initialHistBootstrapInlinePayload")) + w.uint32(90).bytes(m.initialHistBootstrapInlinePayload); + if (m.peerDataRequestSessionId != null && Object.hasOwnProperty.call(m, "peerDataRequestSessionId")) + w.uint32(98).string(m.peerDataRequestSessionId); + if (m.fullHistorySyncOnDemandRequestMetadata != null && Object.hasOwnProperty.call(m, "fullHistorySyncOnDemandRequestMetadata")) + $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.encode(m.fullHistorySyncOnDemandRequestMetadata, w.uint32(106).fork()).ldelim(); + if (m.encHandle != null && Object.hasOwnProperty.call(m, "encHandle")) + w.uint32(114).string(m.encHandle); + if (m.messageAccessStatus != null && Object.hasOwnProperty.call(m, "messageAccessStatus")) + $root.proto.Message.HistorySyncMessageAccessStatus.encode(m.messageAccessStatus, w.uint32(122).fork()).ldelim(); + return w; + }; + + HistorySyncNotification.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.HistorySyncNotification(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fileSha256 = r.bytes(); + break; + } + case 2: { + m.fileLength = r.uint64(); + break; + } + case 3: { + m.mediaKey = r.bytes(); + break; + } + case 4: { + m.fileEncSha256 = r.bytes(); + break; + } + case 5: { + m.directPath = r.string(); + break; + } + case 6: { + m.syncType = r.int32(); + break; + } + case 7: { + m.chunkOrder = r.uint32(); + break; + } + case 8: { + m.originalMessageId = r.string(); + break; + } + case 9: { + m.progress = r.uint32(); + break; + } + case 10: { + m.oldestMsgInChunkTimestampSec = r.int64(); + break; + } + case 11: { + m.initialHistBootstrapInlinePayload = r.bytes(); + break; + } + case 12: { + m.peerDataRequestSessionId = r.string(); + break; + } + case 13: { + m.fullHistorySyncOnDemandRequestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.decode(r, r.uint32()); + break; + } + case 14: { + m.encHandle = r.string(); + break; + } + case 15: { + m.messageAccessStatus = $root.proto.Message.HistorySyncMessageAccessStatus.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySyncNotification.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.HistorySyncNotification) + return d; + var m = new $root.proto.Message.HistorySyncNotification(); + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + switch (d.syncType) { + default: + if (typeof d.syncType === "number") { + m.syncType = d.syncType; + break; + } + break; + case "INITIAL_BOOTSTRAP": + case 0: + m.syncType = 0; + break; + case "INITIAL_STATUS_V3": + case 1: + m.syncType = 1; + break; + case "FULL": + case 2: + m.syncType = 2; + break; + case "RECENT": + case 3: + m.syncType = 3; + break; + case "PUSH_NAME": + case 4: + m.syncType = 4; + break; + case "NON_BLOCKING_DATA": + case 5: + m.syncType = 5; + break; + case "ON_DEMAND": + case 6: + m.syncType = 6; + break; + case "NO_HISTORY": + case 7: + m.syncType = 7; + break; + case "MESSAGE_ACCESS_STATUS": + case 8: + m.syncType = 8; + break; + } + if (d.chunkOrder != null) { + m.chunkOrder = d.chunkOrder >>> 0; + } + if (d.originalMessageId != null) { + m.originalMessageId = String(d.originalMessageId); + } + if (d.progress != null) { + m.progress = d.progress >>> 0; + } + if (d.oldestMsgInChunkTimestampSec != null) { + if ($util.Long) + (m.oldestMsgInChunkTimestampSec = $util.Long.fromValue(d.oldestMsgInChunkTimestampSec)).unsigned = false; + else if (typeof d.oldestMsgInChunkTimestampSec === "string") + m.oldestMsgInChunkTimestampSec = parseInt(d.oldestMsgInChunkTimestampSec, 10); + else if (typeof d.oldestMsgInChunkTimestampSec === "number") + m.oldestMsgInChunkTimestampSec = d.oldestMsgInChunkTimestampSec; + else if (typeof d.oldestMsgInChunkTimestampSec === "object") + m.oldestMsgInChunkTimestampSec = new $util.LongBits(d.oldestMsgInChunkTimestampSec.low >>> 0, d.oldestMsgInChunkTimestampSec.high >>> 0).toNumber(); + } + if (d.initialHistBootstrapInlinePayload != null) { + if (typeof d.initialHistBootstrapInlinePayload === "string") + $util.base64.decode(d.initialHistBootstrapInlinePayload, m.initialHistBootstrapInlinePayload = $util.newBuffer($util.base64.length(d.initialHistBootstrapInlinePayload)), 0); + else if (d.initialHistBootstrapInlinePayload.length >= 0) + m.initialHistBootstrapInlinePayload = d.initialHistBootstrapInlinePayload; + } + if (d.peerDataRequestSessionId != null) { + m.peerDataRequestSessionId = String(d.peerDataRequestSessionId); + } + if (d.fullHistorySyncOnDemandRequestMetadata != null) { + if (typeof d.fullHistorySyncOnDemandRequestMetadata !== "object") + throw TypeError(".proto.Message.HistorySyncNotification.fullHistorySyncOnDemandRequestMetadata: object expected"); + m.fullHistorySyncOnDemandRequestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.fromObject(d.fullHistorySyncOnDemandRequestMetadata); + } + if (d.encHandle != null) { + m.encHandle = String(d.encHandle); + } + if (d.messageAccessStatus != null) { + if (typeof d.messageAccessStatus !== "object") + throw TypeError(".proto.Message.HistorySyncNotification.messageAccessStatus: object expected"); + m.messageAccessStatus = $root.proto.Message.HistorySyncMessageAccessStatus.fromObject(d.messageAccessStatus); + } + return m; + }; + + HistorySyncNotification.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.syncType != null && m.hasOwnProperty("syncType")) { + d.syncType = o.enums === String ? $root.proto.Message.HistorySyncType[m.syncType] === undefined ? m.syncType : $root.proto.Message.HistorySyncType[m.syncType] : m.syncType; + if (o.oneofs) + d._syncType = "syncType"; + } + if (m.chunkOrder != null && m.hasOwnProperty("chunkOrder")) { + d.chunkOrder = m.chunkOrder; + if (o.oneofs) + d._chunkOrder = "chunkOrder"; + } + if (m.originalMessageId != null && m.hasOwnProperty("originalMessageId")) { + d.originalMessageId = m.originalMessageId; + if (o.oneofs) + d._originalMessageId = "originalMessageId"; + } + if (m.progress != null && m.hasOwnProperty("progress")) { + d.progress = m.progress; + if (o.oneofs) + d._progress = "progress"; + } + if (m.oldestMsgInChunkTimestampSec != null && m.hasOwnProperty("oldestMsgInChunkTimestampSec")) { + if (typeof m.oldestMsgInChunkTimestampSec === "number") + d.oldestMsgInChunkTimestampSec = o.longs === String ? String(m.oldestMsgInChunkTimestampSec) : m.oldestMsgInChunkTimestampSec; + else + d.oldestMsgInChunkTimestampSec = o.longs === String ? longToString(m.oldestMsgInChunkTimestampSec) : o.longs === Number ? longToNumber(m.oldestMsgInChunkTimestampSec) : m.oldestMsgInChunkTimestampSec; + if (o.oneofs) + d._oldestMsgInChunkTimestampSec = "oldestMsgInChunkTimestampSec"; + } + if (m.initialHistBootstrapInlinePayload != null && m.hasOwnProperty("initialHistBootstrapInlinePayload")) { + d.initialHistBootstrapInlinePayload = o.bytes === String ? $util.base64.encode(m.initialHistBootstrapInlinePayload, 0, m.initialHistBootstrapInlinePayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.initialHistBootstrapInlinePayload) : m.initialHistBootstrapInlinePayload; + if (o.oneofs) + d._initialHistBootstrapInlinePayload = "initialHistBootstrapInlinePayload"; + } + if (m.peerDataRequestSessionId != null && m.hasOwnProperty("peerDataRequestSessionId")) { + d.peerDataRequestSessionId = m.peerDataRequestSessionId; + if (o.oneofs) + d._peerDataRequestSessionId = "peerDataRequestSessionId"; + } + if (m.fullHistorySyncOnDemandRequestMetadata != null && m.hasOwnProperty("fullHistorySyncOnDemandRequestMetadata")) { + d.fullHistorySyncOnDemandRequestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.toObject(m.fullHistorySyncOnDemandRequestMetadata, o); + if (o.oneofs) + d._fullHistorySyncOnDemandRequestMetadata = "fullHistorySyncOnDemandRequestMetadata"; + } + if (m.encHandle != null && m.hasOwnProperty("encHandle")) { + d.encHandle = m.encHandle; + if (o.oneofs) + d._encHandle = "encHandle"; + } + if (m.messageAccessStatus != null && m.hasOwnProperty("messageAccessStatus")) { + d.messageAccessStatus = $root.proto.Message.HistorySyncMessageAccessStatus.toObject(m.messageAccessStatus, o); + if (o.oneofs) + d._messageAccessStatus = "messageAccessStatus"; + } + return d; + }; + + HistorySyncNotification.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySyncNotification.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.HistorySyncNotification"; + }; + + return HistorySyncNotification; + })(); + + Message.HistorySyncType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "INITIAL_BOOTSTRAP"] = 0; + values[valuesById[1] = "INITIAL_STATUS_V3"] = 1; + values[valuesById[2] = "FULL"] = 2; + values[valuesById[3] = "RECENT"] = 3; + values[valuesById[4] = "PUSH_NAME"] = 4; + values[valuesById[5] = "NON_BLOCKING_DATA"] = 5; + values[valuesById[6] = "ON_DEMAND"] = 6; + values[valuesById[7] = "NO_HISTORY"] = 7; + values[valuesById[8] = "MESSAGE_ACCESS_STATUS"] = 8; + return values; + })(); + + Message.ImageMessage = (function() { + + function ImageMessage(p) { + this.interactiveAnnotations = []; + this.scanLengths = []; + this.annotations = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ImageMessage.prototype.url = null; + ImageMessage.prototype.mimetype = null; + ImageMessage.prototype.caption = null; + ImageMessage.prototype.fileSha256 = null; + ImageMessage.prototype.fileLength = null; + ImageMessage.prototype.height = null; + ImageMessage.prototype.width = null; + ImageMessage.prototype.mediaKey = null; + ImageMessage.prototype.fileEncSha256 = null; + ImageMessage.prototype.interactiveAnnotations = $util.emptyArray; + ImageMessage.prototype.directPath = null; + ImageMessage.prototype.mediaKeyTimestamp = null; + ImageMessage.prototype.jpegThumbnail = null; + ImageMessage.prototype.contextInfo = null; + ImageMessage.prototype.firstScanSidecar = null; + ImageMessage.prototype.firstScanLength = null; + ImageMessage.prototype.experimentGroupId = null; + ImageMessage.prototype.scansSidecar = null; + ImageMessage.prototype.scanLengths = $util.emptyArray; + ImageMessage.prototype.midQualityFileSha256 = null; + ImageMessage.prototype.midQualityFileEncSha256 = null; + ImageMessage.prototype.viewOnce = null; + ImageMessage.prototype.thumbnailDirectPath = null; + ImageMessage.prototype.thumbnailSha256 = null; + ImageMessage.prototype.thumbnailEncSha256 = null; + ImageMessage.prototype.staticUrl = null; + ImageMessage.prototype.annotations = $util.emptyArray; + ImageMessage.prototype.imageSourceType = null; + ImageMessage.prototype.accessibilityLabel = null; + ImageMessage.prototype.mediaKeyDomain = null; + ImageMessage.prototype.qrUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_firstScanSidecar", { + get: $util.oneOfGetter($oneOfFields = ["firstScanSidecar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_firstScanLength", { + get: $util.oneOfGetter($oneOfFields = ["firstScanLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_experimentGroupId", { + get: $util.oneOfGetter($oneOfFields = ["experimentGroupId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_scansSidecar", { + get: $util.oneOfGetter($oneOfFields = ["scansSidecar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_midQualityFileSha256", { + get: $util.oneOfGetter($oneOfFields = ["midQualityFileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_midQualityFileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["midQualityFileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_viewOnce", { + get: $util.oneOfGetter($oneOfFields = ["viewOnce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_thumbnailDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_thumbnailSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_thumbnailEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_staticUrl", { + get: $util.oneOfGetter($oneOfFields = ["staticUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_imageSourceType", { + get: $util.oneOfGetter($oneOfFields = ["imageSourceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_accessibilityLabel", { + get: $util.oneOfGetter($oneOfFields = ["accessibilityLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_mediaKeyDomain", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyDomain"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ImageMessage.prototype, "_qrUrl", { + get: $util.oneOfGetter($oneOfFields = ["qrUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ImageMessage.create = function create(properties) { + return new ImageMessage(properties); + }; + + ImageMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(18).string(m.mimetype); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(26).string(m.caption); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(34).bytes(m.fileSha256); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(40).uint64(m.fileLength); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(48).uint32(m.height); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(56).uint32(m.width); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(66).bytes(m.mediaKey); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(74).bytes(m.fileEncSha256); + if (m.interactiveAnnotations != null && m.interactiveAnnotations.length) { + for (var i = 0; i < m.interactiveAnnotations.length; ++i) + $root.proto.InteractiveAnnotation.encode(m.interactiveAnnotations[i], w.uint32(82).fork()).ldelim(); + } + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(90).string(m.directPath); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(96).int64(m.mediaKeyTimestamp); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(130).bytes(m.jpegThumbnail); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + if (m.firstScanSidecar != null && Object.hasOwnProperty.call(m, "firstScanSidecar")) + w.uint32(146).bytes(m.firstScanSidecar); + if (m.firstScanLength != null && Object.hasOwnProperty.call(m, "firstScanLength")) + w.uint32(152).uint32(m.firstScanLength); + if (m.experimentGroupId != null && Object.hasOwnProperty.call(m, "experimentGroupId")) + w.uint32(160).uint32(m.experimentGroupId); + if (m.scansSidecar != null && Object.hasOwnProperty.call(m, "scansSidecar")) + w.uint32(170).bytes(m.scansSidecar); + if (m.scanLengths != null && m.scanLengths.length) { + w.uint32(178).fork(); + for (var i = 0; i < m.scanLengths.length; ++i) + w.uint32(m.scanLengths[i]); + w.ldelim(); + } + if (m.midQualityFileSha256 != null && Object.hasOwnProperty.call(m, "midQualityFileSha256")) + w.uint32(186).bytes(m.midQualityFileSha256); + if (m.midQualityFileEncSha256 != null && Object.hasOwnProperty.call(m, "midQualityFileEncSha256")) + w.uint32(194).bytes(m.midQualityFileEncSha256); + if (m.viewOnce != null && Object.hasOwnProperty.call(m, "viewOnce")) + w.uint32(200).bool(m.viewOnce); + if (m.thumbnailDirectPath != null && Object.hasOwnProperty.call(m, "thumbnailDirectPath")) + w.uint32(210).string(m.thumbnailDirectPath); + if (m.thumbnailSha256 != null && Object.hasOwnProperty.call(m, "thumbnailSha256")) + w.uint32(218).bytes(m.thumbnailSha256); + if (m.thumbnailEncSha256 != null && Object.hasOwnProperty.call(m, "thumbnailEncSha256")) + w.uint32(226).bytes(m.thumbnailEncSha256); + if (m.staticUrl != null && Object.hasOwnProperty.call(m, "staticUrl")) + w.uint32(234).string(m.staticUrl); + if (m.annotations != null && m.annotations.length) { + for (var i = 0; i < m.annotations.length; ++i) + $root.proto.InteractiveAnnotation.encode(m.annotations[i], w.uint32(242).fork()).ldelim(); + } + if (m.imageSourceType != null && Object.hasOwnProperty.call(m, "imageSourceType")) + w.uint32(248).int32(m.imageSourceType); + if (m.accessibilityLabel != null && Object.hasOwnProperty.call(m, "accessibilityLabel")) + w.uint32(258).string(m.accessibilityLabel); + if (m.mediaKeyDomain != null && Object.hasOwnProperty.call(m, "mediaKeyDomain")) + w.uint32(264).int32(m.mediaKeyDomain); + if (m.qrUrl != null && Object.hasOwnProperty.call(m, "qrUrl")) + w.uint32(274).string(m.qrUrl); + return w; + }; + + ImageMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ImageMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.mimetype = r.string(); + break; + } + case 3: { + m.caption = r.string(); + break; + } + case 4: { + m.fileSha256 = r.bytes(); + break; + } + case 5: { + m.fileLength = r.uint64(); + break; + } + case 6: { + m.height = r.uint32(); + break; + } + case 7: { + m.width = r.uint32(); + break; + } + case 8: { + m.mediaKey = r.bytes(); + break; + } + case 9: { + m.fileEncSha256 = r.bytes(); + break; + } + case 10: { + if (!(m.interactiveAnnotations && m.interactiveAnnotations.length)) + m.interactiveAnnotations = []; + m.interactiveAnnotations.push($root.proto.InteractiveAnnotation.decode(r, r.uint32())); + break; + } + case 11: { + m.directPath = r.string(); + break; + } + case 12: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 16: { + m.jpegThumbnail = r.bytes(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 18: { + m.firstScanSidecar = r.bytes(); + break; + } + case 19: { + m.firstScanLength = r.uint32(); + break; + } + case 20: { + m.experimentGroupId = r.uint32(); + break; + } + case 21: { + m.scansSidecar = r.bytes(); + break; + } + case 22: { + if (!(m.scanLengths && m.scanLengths.length)) + m.scanLengths = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.scanLengths.push(r.uint32()); + } else + m.scanLengths.push(r.uint32()); + break; + } + case 23: { + m.midQualityFileSha256 = r.bytes(); + break; + } + case 24: { + m.midQualityFileEncSha256 = r.bytes(); + break; + } + case 25: { + m.viewOnce = r.bool(); + break; + } + case 26: { + m.thumbnailDirectPath = r.string(); + break; + } + case 27: { + m.thumbnailSha256 = r.bytes(); + break; + } + case 28: { + m.thumbnailEncSha256 = r.bytes(); + break; + } + case 29: { + m.staticUrl = r.string(); + break; + } + case 30: { + if (!(m.annotations && m.annotations.length)) + m.annotations = []; + m.annotations.push($root.proto.InteractiveAnnotation.decode(r, r.uint32())); + break; + } + case 31: { + m.imageSourceType = r.int32(); + break; + } + case 32: { + m.accessibilityLabel = r.string(); + break; + } + case 33: { + m.mediaKeyDomain = r.int32(); + break; + } + case 34: { + m.qrUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ImageMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ImageMessage) + return d; + var m = new $root.proto.Message.ImageMessage(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.height != null) { + m.height = d.height >>> 0; + } + if (d.width != null) { + m.width = d.width >>> 0; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.interactiveAnnotations) { + if (!Array.isArray(d.interactiveAnnotations)) + throw TypeError(".proto.Message.ImageMessage.interactiveAnnotations: array expected"); + m.interactiveAnnotations = []; + for (var i = 0; i < d.interactiveAnnotations.length; ++i) { + if (typeof d.interactiveAnnotations[i] !== "object") + throw TypeError(".proto.Message.ImageMessage.interactiveAnnotations: object expected"); + m.interactiveAnnotations[i] = $root.proto.InteractiveAnnotation.fromObject(d.interactiveAnnotations[i]); + } + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ImageMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.firstScanSidecar != null) { + if (typeof d.firstScanSidecar === "string") + $util.base64.decode(d.firstScanSidecar, m.firstScanSidecar = $util.newBuffer($util.base64.length(d.firstScanSidecar)), 0); + else if (d.firstScanSidecar.length >= 0) + m.firstScanSidecar = d.firstScanSidecar; + } + if (d.firstScanLength != null) { + m.firstScanLength = d.firstScanLength >>> 0; + } + if (d.experimentGroupId != null) { + m.experimentGroupId = d.experimentGroupId >>> 0; + } + if (d.scansSidecar != null) { + if (typeof d.scansSidecar === "string") + $util.base64.decode(d.scansSidecar, m.scansSidecar = $util.newBuffer($util.base64.length(d.scansSidecar)), 0); + else if (d.scansSidecar.length >= 0) + m.scansSidecar = d.scansSidecar; + } + if (d.scanLengths) { + if (!Array.isArray(d.scanLengths)) + throw TypeError(".proto.Message.ImageMessage.scanLengths: array expected"); + m.scanLengths = []; + for (var i = 0; i < d.scanLengths.length; ++i) { + m.scanLengths[i] = d.scanLengths[i] >>> 0; + } + } + if (d.midQualityFileSha256 != null) { + if (typeof d.midQualityFileSha256 === "string") + $util.base64.decode(d.midQualityFileSha256, m.midQualityFileSha256 = $util.newBuffer($util.base64.length(d.midQualityFileSha256)), 0); + else if (d.midQualityFileSha256.length >= 0) + m.midQualityFileSha256 = d.midQualityFileSha256; + } + if (d.midQualityFileEncSha256 != null) { + if (typeof d.midQualityFileEncSha256 === "string") + $util.base64.decode(d.midQualityFileEncSha256, m.midQualityFileEncSha256 = $util.newBuffer($util.base64.length(d.midQualityFileEncSha256)), 0); + else if (d.midQualityFileEncSha256.length >= 0) + m.midQualityFileEncSha256 = d.midQualityFileEncSha256; + } + if (d.viewOnce != null) { + m.viewOnce = Boolean(d.viewOnce); + } + if (d.thumbnailDirectPath != null) { + m.thumbnailDirectPath = String(d.thumbnailDirectPath); + } + if (d.thumbnailSha256 != null) { + if (typeof d.thumbnailSha256 === "string") + $util.base64.decode(d.thumbnailSha256, m.thumbnailSha256 = $util.newBuffer($util.base64.length(d.thumbnailSha256)), 0); + else if (d.thumbnailSha256.length >= 0) + m.thumbnailSha256 = d.thumbnailSha256; + } + if (d.thumbnailEncSha256 != null) { + if (typeof d.thumbnailEncSha256 === "string") + $util.base64.decode(d.thumbnailEncSha256, m.thumbnailEncSha256 = $util.newBuffer($util.base64.length(d.thumbnailEncSha256)), 0); + else if (d.thumbnailEncSha256.length >= 0) + m.thumbnailEncSha256 = d.thumbnailEncSha256; + } + if (d.staticUrl != null) { + m.staticUrl = String(d.staticUrl); + } + if (d.annotations) { + if (!Array.isArray(d.annotations)) + throw TypeError(".proto.Message.ImageMessage.annotations: array expected"); + m.annotations = []; + for (var i = 0; i < d.annotations.length; ++i) { + if (typeof d.annotations[i] !== "object") + throw TypeError(".proto.Message.ImageMessage.annotations: object expected"); + m.annotations[i] = $root.proto.InteractiveAnnotation.fromObject(d.annotations[i]); + } + } + switch (d.imageSourceType) { + default: + if (typeof d.imageSourceType === "number") { + m.imageSourceType = d.imageSourceType; + break; + } + break; + case "USER_IMAGE": + case 0: + m.imageSourceType = 0; + break; + case "AI_GENERATED": + case 1: + m.imageSourceType = 1; + break; + case "AI_MODIFIED": + case 2: + m.imageSourceType = 2; + break; + case "RASTERIZED_TEXT_STATUS": + case 3: + m.imageSourceType = 3; + break; + } + if (d.accessibilityLabel != null) { + m.accessibilityLabel = String(d.accessibilityLabel); + } + switch (d.mediaKeyDomain) { + default: + if (typeof d.mediaKeyDomain === "number") { + m.mediaKeyDomain = d.mediaKeyDomain; + break; + } + break; + case "UNSET": + case 0: + m.mediaKeyDomain = 0; + break; + case "E2EE_CHAT": + case 1: + m.mediaKeyDomain = 1; + break; + case "STATUS": + case 2: + m.mediaKeyDomain = 2; + break; + case "CAPI": + case 3: + m.mediaKeyDomain = 3; + break; + case "BOT": + case 4: + m.mediaKeyDomain = 4; + break; + } + if (d.qrUrl != null) { + m.qrUrl = String(d.qrUrl); + } + return m; + }; + + ImageMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.interactiveAnnotations = []; + d.scanLengths = []; + d.annotations = []; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.interactiveAnnotations && m.interactiveAnnotations.length) { + d.interactiveAnnotations = []; + for (var j = 0; j < m.interactiveAnnotations.length; ++j) { + d.interactiveAnnotations[j] = $root.proto.InteractiveAnnotation.toObject(m.interactiveAnnotations[j], o); + } + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.firstScanSidecar != null && m.hasOwnProperty("firstScanSidecar")) { + d.firstScanSidecar = o.bytes === String ? $util.base64.encode(m.firstScanSidecar, 0, m.firstScanSidecar.length) : o.bytes === Array ? Array.prototype.slice.call(m.firstScanSidecar) : m.firstScanSidecar; + if (o.oneofs) + d._firstScanSidecar = "firstScanSidecar"; + } + if (m.firstScanLength != null && m.hasOwnProperty("firstScanLength")) { + d.firstScanLength = m.firstScanLength; + if (o.oneofs) + d._firstScanLength = "firstScanLength"; + } + if (m.experimentGroupId != null && m.hasOwnProperty("experimentGroupId")) { + d.experimentGroupId = m.experimentGroupId; + if (o.oneofs) + d._experimentGroupId = "experimentGroupId"; + } + if (m.scansSidecar != null && m.hasOwnProperty("scansSidecar")) { + d.scansSidecar = o.bytes === String ? $util.base64.encode(m.scansSidecar, 0, m.scansSidecar.length) : o.bytes === Array ? Array.prototype.slice.call(m.scansSidecar) : m.scansSidecar; + if (o.oneofs) + d._scansSidecar = "scansSidecar"; + } + if (m.scanLengths && m.scanLengths.length) { + d.scanLengths = []; + for (var j = 0; j < m.scanLengths.length; ++j) { + d.scanLengths[j] = m.scanLengths[j]; + } + } + if (m.midQualityFileSha256 != null && m.hasOwnProperty("midQualityFileSha256")) { + d.midQualityFileSha256 = o.bytes === String ? $util.base64.encode(m.midQualityFileSha256, 0, m.midQualityFileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.midQualityFileSha256) : m.midQualityFileSha256; + if (o.oneofs) + d._midQualityFileSha256 = "midQualityFileSha256"; + } + if (m.midQualityFileEncSha256 != null && m.hasOwnProperty("midQualityFileEncSha256")) { + d.midQualityFileEncSha256 = o.bytes === String ? $util.base64.encode(m.midQualityFileEncSha256, 0, m.midQualityFileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.midQualityFileEncSha256) : m.midQualityFileEncSha256; + if (o.oneofs) + d._midQualityFileEncSha256 = "midQualityFileEncSha256"; + } + if (m.viewOnce != null && m.hasOwnProperty("viewOnce")) { + d.viewOnce = m.viewOnce; + if (o.oneofs) + d._viewOnce = "viewOnce"; + } + if (m.thumbnailDirectPath != null && m.hasOwnProperty("thumbnailDirectPath")) { + d.thumbnailDirectPath = m.thumbnailDirectPath; + if (o.oneofs) + d._thumbnailDirectPath = "thumbnailDirectPath"; + } + if (m.thumbnailSha256 != null && m.hasOwnProperty("thumbnailSha256")) { + d.thumbnailSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailSha256, 0, m.thumbnailSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailSha256) : m.thumbnailSha256; + if (o.oneofs) + d._thumbnailSha256 = "thumbnailSha256"; + } + if (m.thumbnailEncSha256 != null && m.hasOwnProperty("thumbnailEncSha256")) { + d.thumbnailEncSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailEncSha256, 0, m.thumbnailEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailEncSha256) : m.thumbnailEncSha256; + if (o.oneofs) + d._thumbnailEncSha256 = "thumbnailEncSha256"; + } + if (m.staticUrl != null && m.hasOwnProperty("staticUrl")) { + d.staticUrl = m.staticUrl; + if (o.oneofs) + d._staticUrl = "staticUrl"; + } + if (m.annotations && m.annotations.length) { + d.annotations = []; + for (var j = 0; j < m.annotations.length; ++j) { + d.annotations[j] = $root.proto.InteractiveAnnotation.toObject(m.annotations[j], o); + } + } + if (m.imageSourceType != null && m.hasOwnProperty("imageSourceType")) { + d.imageSourceType = o.enums === String ? $root.proto.Message.ImageMessage.ImageSourceType[m.imageSourceType] === undefined ? m.imageSourceType : $root.proto.Message.ImageMessage.ImageSourceType[m.imageSourceType] : m.imageSourceType; + if (o.oneofs) + d._imageSourceType = "imageSourceType"; + } + if (m.accessibilityLabel != null && m.hasOwnProperty("accessibilityLabel")) { + d.accessibilityLabel = m.accessibilityLabel; + if (o.oneofs) + d._accessibilityLabel = "accessibilityLabel"; + } + if (m.mediaKeyDomain != null && m.hasOwnProperty("mediaKeyDomain")) { + d.mediaKeyDomain = o.enums === String ? $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] === undefined ? m.mediaKeyDomain : $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] : m.mediaKeyDomain; + if (o.oneofs) + d._mediaKeyDomain = "mediaKeyDomain"; + } + if (m.qrUrl != null && m.hasOwnProperty("qrUrl")) { + d.qrUrl = m.qrUrl; + if (o.oneofs) + d._qrUrl = "qrUrl"; + } + return d; + }; + + ImageMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ImageMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ImageMessage"; + }; + + ImageMessage.ImageSourceType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "USER_IMAGE"] = 0; + values[valuesById[1] = "AI_GENERATED"] = 1; + values[valuesById[2] = "AI_MODIFIED"] = 2; + values[valuesById[3] = "RASTERIZED_TEXT_STATUS"] = 3; + return values; + })(); + + return ImageMessage; + })(); + + Message.InitialSecurityNotificationSettingSync = (function() { + + function InitialSecurityNotificationSettingSync(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InitialSecurityNotificationSettingSync.prototype.securityNotificationEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InitialSecurityNotificationSettingSync.prototype, "_securityNotificationEnabled", { + get: $util.oneOfGetter($oneOfFields = ["securityNotificationEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InitialSecurityNotificationSettingSync.create = function create(properties) { + return new InitialSecurityNotificationSettingSync(properties); + }; + + InitialSecurityNotificationSettingSync.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.securityNotificationEnabled != null && Object.hasOwnProperty.call(m, "securityNotificationEnabled")) + w.uint32(8).bool(m.securityNotificationEnabled); + return w; + }; + + InitialSecurityNotificationSettingSync.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InitialSecurityNotificationSettingSync(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.securityNotificationEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InitialSecurityNotificationSettingSync.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InitialSecurityNotificationSettingSync) + return d; + var m = new $root.proto.Message.InitialSecurityNotificationSettingSync(); + if (d.securityNotificationEnabled != null) { + m.securityNotificationEnabled = Boolean(d.securityNotificationEnabled); + } + return m; + }; + + InitialSecurityNotificationSettingSync.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.securityNotificationEnabled != null && m.hasOwnProperty("securityNotificationEnabled")) { + d.securityNotificationEnabled = m.securityNotificationEnabled; + if (o.oneofs) + d._securityNotificationEnabled = "securityNotificationEnabled"; + } + return d; + }; + + InitialSecurityNotificationSettingSync.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InitialSecurityNotificationSettingSync.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InitialSecurityNotificationSettingSync"; + }; + + return InitialSecurityNotificationSettingSync; + })(); + + Message.InteractiveMessage = (function() { + + function InteractiveMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InteractiveMessage.prototype.header = null; + InteractiveMessage.prototype.body = null; + InteractiveMessage.prototype.footer = null; + InteractiveMessage.prototype.contextInfo = null; + InteractiveMessage.prototype.urlTrackingMap = null; + InteractiveMessage.prototype.shopStorefrontMessage = null; + InteractiveMessage.prototype.collectionMessage = null; + InteractiveMessage.prototype.nativeFlowMessage = null; + InteractiveMessage.prototype.carouselMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveMessage.prototype, "_header", { + get: $util.oneOfGetter($oneOfFields = ["header"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveMessage.prototype, "_body", { + get: $util.oneOfGetter($oneOfFields = ["body"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveMessage.prototype, "_footer", { + get: $util.oneOfGetter($oneOfFields = ["footer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveMessage.prototype, "_urlTrackingMap", { + get: $util.oneOfGetter($oneOfFields = ["urlTrackingMap"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(InteractiveMessage.prototype, "interactiveMessage", { + get: $util.oneOfGetter($oneOfFields = ["shopStorefrontMessage", "collectionMessage", "nativeFlowMessage", "carouselMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InteractiveMessage.create = function create(properties) { + return new InteractiveMessage(properties); + }; + + InteractiveMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.header != null && Object.hasOwnProperty.call(m, "header")) + $root.proto.Message.InteractiveMessage.Header.encode(m.header, w.uint32(10).fork()).ldelim(); + if (m.body != null && Object.hasOwnProperty.call(m, "body")) + $root.proto.Message.InteractiveMessage.Body.encode(m.body, w.uint32(18).fork()).ldelim(); + if (m.footer != null && Object.hasOwnProperty.call(m, "footer")) + $root.proto.Message.InteractiveMessage.Footer.encode(m.footer, w.uint32(26).fork()).ldelim(); + if (m.shopStorefrontMessage != null && Object.hasOwnProperty.call(m, "shopStorefrontMessage")) + $root.proto.Message.InteractiveMessage.ShopMessage.encode(m.shopStorefrontMessage, w.uint32(34).fork()).ldelim(); + if (m.collectionMessage != null && Object.hasOwnProperty.call(m, "collectionMessage")) + $root.proto.Message.InteractiveMessage.CollectionMessage.encode(m.collectionMessage, w.uint32(42).fork()).ldelim(); + if (m.nativeFlowMessage != null && Object.hasOwnProperty.call(m, "nativeFlowMessage")) + $root.proto.Message.InteractiveMessage.NativeFlowMessage.encode(m.nativeFlowMessage, w.uint32(50).fork()).ldelim(); + if (m.carouselMessage != null && Object.hasOwnProperty.call(m, "carouselMessage")) + $root.proto.Message.InteractiveMessage.CarouselMessage.encode(m.carouselMessage, w.uint32(58).fork()).ldelim(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(122).fork()).ldelim(); + if (m.urlTrackingMap != null && Object.hasOwnProperty.call(m, "urlTrackingMap")) + $root.proto.UrlTrackingMap.encode(m.urlTrackingMap, w.uint32(130).fork()).ldelim(); + return w; + }; + + InteractiveMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.header = $root.proto.Message.InteractiveMessage.Header.decode(r, r.uint32()); + break; + } + case 2: { + m.body = $root.proto.Message.InteractiveMessage.Body.decode(r, r.uint32()); + break; + } + case 3: { + m.footer = $root.proto.Message.InteractiveMessage.Footer.decode(r, r.uint32()); + break; + } + case 15: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 16: { + m.urlTrackingMap = $root.proto.UrlTrackingMap.decode(r, r.uint32()); + break; + } + case 4: { + m.shopStorefrontMessage = $root.proto.Message.InteractiveMessage.ShopMessage.decode(r, r.uint32()); + break; + } + case 5: { + m.collectionMessage = $root.proto.Message.InteractiveMessage.CollectionMessage.decode(r, r.uint32()); + break; + } + case 6: { + m.nativeFlowMessage = $root.proto.Message.InteractiveMessage.NativeFlowMessage.decode(r, r.uint32()); + break; + } + case 7: { + m.carouselMessage = $root.proto.Message.InteractiveMessage.CarouselMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InteractiveMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage) + return d; + var m = new $root.proto.Message.InteractiveMessage(); + if (d.header != null) { + if (typeof d.header !== "object") + throw TypeError(".proto.Message.InteractiveMessage.header: object expected"); + m.header = $root.proto.Message.InteractiveMessage.Header.fromObject(d.header); + } + if (d.body != null) { + if (typeof d.body !== "object") + throw TypeError(".proto.Message.InteractiveMessage.body: object expected"); + m.body = $root.proto.Message.InteractiveMessage.Body.fromObject(d.body); + } + if (d.footer != null) { + if (typeof d.footer !== "object") + throw TypeError(".proto.Message.InteractiveMessage.footer: object expected"); + m.footer = $root.proto.Message.InteractiveMessage.Footer.fromObject(d.footer); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.InteractiveMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.urlTrackingMap != null) { + if (typeof d.urlTrackingMap !== "object") + throw TypeError(".proto.Message.InteractiveMessage.urlTrackingMap: object expected"); + m.urlTrackingMap = $root.proto.UrlTrackingMap.fromObject(d.urlTrackingMap); + } + if (d.shopStorefrontMessage != null) { + if (typeof d.shopStorefrontMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.shopStorefrontMessage: object expected"); + m.shopStorefrontMessage = $root.proto.Message.InteractiveMessage.ShopMessage.fromObject(d.shopStorefrontMessage); + } + if (d.collectionMessage != null) { + if (typeof d.collectionMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.collectionMessage: object expected"); + m.collectionMessage = $root.proto.Message.InteractiveMessage.CollectionMessage.fromObject(d.collectionMessage); + } + if (d.nativeFlowMessage != null) { + if (typeof d.nativeFlowMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.nativeFlowMessage: object expected"); + m.nativeFlowMessage = $root.proto.Message.InteractiveMessage.NativeFlowMessage.fromObject(d.nativeFlowMessage); + } + if (d.carouselMessage != null) { + if (typeof d.carouselMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.carouselMessage: object expected"); + m.carouselMessage = $root.proto.Message.InteractiveMessage.CarouselMessage.fromObject(d.carouselMessage); + } + return m; + }; + + InteractiveMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.header != null && m.hasOwnProperty("header")) { + d.header = $root.proto.Message.InteractiveMessage.Header.toObject(m.header, o); + if (o.oneofs) + d._header = "header"; + } + if (m.body != null && m.hasOwnProperty("body")) { + d.body = $root.proto.Message.InteractiveMessage.Body.toObject(m.body, o); + if (o.oneofs) + d._body = "body"; + } + if (m.footer != null && m.hasOwnProperty("footer")) { + d.footer = $root.proto.Message.InteractiveMessage.Footer.toObject(m.footer, o); + if (o.oneofs) + d._footer = "footer"; + } + if (m.shopStorefrontMessage != null && m.hasOwnProperty("shopStorefrontMessage")) { + d.shopStorefrontMessage = $root.proto.Message.InteractiveMessage.ShopMessage.toObject(m.shopStorefrontMessage, o); + if (o.oneofs) + d.interactiveMessage = "shopStorefrontMessage"; + } + if (m.collectionMessage != null && m.hasOwnProperty("collectionMessage")) { + d.collectionMessage = $root.proto.Message.InteractiveMessage.CollectionMessage.toObject(m.collectionMessage, o); + if (o.oneofs) + d.interactiveMessage = "collectionMessage"; + } + if (m.nativeFlowMessage != null && m.hasOwnProperty("nativeFlowMessage")) { + d.nativeFlowMessage = $root.proto.Message.InteractiveMessage.NativeFlowMessage.toObject(m.nativeFlowMessage, o); + if (o.oneofs) + d.interactiveMessage = "nativeFlowMessage"; + } + if (m.carouselMessage != null && m.hasOwnProperty("carouselMessage")) { + d.carouselMessage = $root.proto.Message.InteractiveMessage.CarouselMessage.toObject(m.carouselMessage, o); + if (o.oneofs) + d.interactiveMessage = "carouselMessage"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.urlTrackingMap != null && m.hasOwnProperty("urlTrackingMap")) { + d.urlTrackingMap = $root.proto.UrlTrackingMap.toObject(m.urlTrackingMap, o); + if (o.oneofs) + d._urlTrackingMap = "urlTrackingMap"; + } + return d; + }; + + InteractiveMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InteractiveMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage"; + }; + + InteractiveMessage.Body = (function() { + + function Body(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Body.prototype.text = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Body.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Body.create = function create(properties) { + return new Body(properties); + }; + + Body.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + return w; + }; + + Body.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.Body(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.text = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Body.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.Body) + return d; + var m = new $root.proto.Message.InteractiveMessage.Body(); + if (d.text != null) { + m.text = String(d.text); + } + return m; + }; + + Body.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + return d; + }; + + Body.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.Body"; + }; + + return Body; + })(); + + InteractiveMessage.CarouselMessage = (function() { + + function CarouselMessage(p) { + this.cards = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CarouselMessage.prototype.cards = $util.emptyArray; + CarouselMessage.prototype.messageVersion = null; + CarouselMessage.prototype.carouselCardType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CarouselMessage.prototype, "_messageVersion", { + get: $util.oneOfGetter($oneOfFields = ["messageVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CarouselMessage.prototype, "_carouselCardType", { + get: $util.oneOfGetter($oneOfFields = ["carouselCardType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CarouselMessage.create = function create(properties) { + return new CarouselMessage(properties); + }; + + CarouselMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.cards != null && m.cards.length) { + for (var i = 0; i < m.cards.length; ++i) + $root.proto.Message.InteractiveMessage.encode(m.cards[i], w.uint32(10).fork()).ldelim(); + } + if (m.messageVersion != null && Object.hasOwnProperty.call(m, "messageVersion")) + w.uint32(16).int32(m.messageVersion); + if (m.carouselCardType != null && Object.hasOwnProperty.call(m, "carouselCardType")) + w.uint32(24).int32(m.carouselCardType); + return w; + }; + + CarouselMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.CarouselMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.cards && m.cards.length)) + m.cards = []; + m.cards.push($root.proto.Message.InteractiveMessage.decode(r, r.uint32())); + break; + } + case 2: { + m.messageVersion = r.int32(); + break; + } + case 3: { + m.carouselCardType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CarouselMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.CarouselMessage) + return d; + var m = new $root.proto.Message.InteractiveMessage.CarouselMessage(); + if (d.cards) { + if (!Array.isArray(d.cards)) + throw TypeError(".proto.Message.InteractiveMessage.CarouselMessage.cards: array expected"); + m.cards = []; + for (var i = 0; i < d.cards.length; ++i) { + if (typeof d.cards[i] !== "object") + throw TypeError(".proto.Message.InteractiveMessage.CarouselMessage.cards: object expected"); + m.cards[i] = $root.proto.Message.InteractiveMessage.fromObject(d.cards[i]); + } + } + if (d.messageVersion != null) { + m.messageVersion = d.messageVersion | 0; + } + switch (d.carouselCardType) { + default: + if (typeof d.carouselCardType === "number") { + m.carouselCardType = d.carouselCardType; + break; + } + break; + case "UNKNOWN": + case 0: + m.carouselCardType = 0; + break; + case "HSCROLL_CARDS": + case 1: + m.carouselCardType = 1; + break; + case "ALBUM_IMAGE": + case 2: + m.carouselCardType = 2; + break; + } + return m; + }; + + CarouselMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.cards = []; + } + if (m.cards && m.cards.length) { + d.cards = []; + for (var j = 0; j < m.cards.length; ++j) { + d.cards[j] = $root.proto.Message.InteractiveMessage.toObject(m.cards[j], o); + } + } + if (m.messageVersion != null && m.hasOwnProperty("messageVersion")) { + d.messageVersion = m.messageVersion; + if (o.oneofs) + d._messageVersion = "messageVersion"; + } + if (m.carouselCardType != null && m.hasOwnProperty("carouselCardType")) { + d.carouselCardType = o.enums === String ? $root.proto.Message.InteractiveMessage.CarouselMessage.CarouselCardType[m.carouselCardType] === undefined ? m.carouselCardType : $root.proto.Message.InteractiveMessage.CarouselMessage.CarouselCardType[m.carouselCardType] : m.carouselCardType; + if (o.oneofs) + d._carouselCardType = "carouselCardType"; + } + return d; + }; + + CarouselMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CarouselMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.CarouselMessage"; + }; + + CarouselMessage.CarouselCardType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "HSCROLL_CARDS"] = 1; + values[valuesById[2] = "ALBUM_IMAGE"] = 2; + return values; + })(); + + return CarouselMessage; + })(); + + InteractiveMessage.CollectionMessage = (function() { + + function CollectionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CollectionMessage.prototype.bizJid = null; + CollectionMessage.prototype.id = null; + CollectionMessage.prototype.messageVersion = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CollectionMessage.prototype, "_bizJid", { + get: $util.oneOfGetter($oneOfFields = ["bizJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CollectionMessage.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CollectionMessage.prototype, "_messageVersion", { + get: $util.oneOfGetter($oneOfFields = ["messageVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CollectionMessage.create = function create(properties) { + return new CollectionMessage(properties); + }; + + CollectionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.bizJid != null && Object.hasOwnProperty.call(m, "bizJid")) + w.uint32(10).string(m.bizJid); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(18).string(m.id); + if (m.messageVersion != null && Object.hasOwnProperty.call(m, "messageVersion")) + w.uint32(24).int32(m.messageVersion); + return w; + }; + + CollectionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.CollectionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.bizJid = r.string(); + break; + } + case 2: { + m.id = r.string(); + break; + } + case 3: { + m.messageVersion = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CollectionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.CollectionMessage) + return d; + var m = new $root.proto.Message.InteractiveMessage.CollectionMessage(); + if (d.bizJid != null) { + m.bizJid = String(d.bizJid); + } + if (d.id != null) { + m.id = String(d.id); + } + if (d.messageVersion != null) { + m.messageVersion = d.messageVersion | 0; + } + return m; + }; + + CollectionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.bizJid != null && m.hasOwnProperty("bizJid")) { + d.bizJid = m.bizJid; + if (o.oneofs) + d._bizJid = "bizJid"; + } + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.messageVersion != null && m.hasOwnProperty("messageVersion")) { + d.messageVersion = m.messageVersion; + if (o.oneofs) + d._messageVersion = "messageVersion"; + } + return d; + }; + + CollectionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CollectionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.CollectionMessage"; + }; + + return CollectionMessage; + })(); + + InteractiveMessage.Footer = (function() { + + function Footer(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Footer.prototype.text = null; + Footer.prototype.hasMediaAttachment = null; + Footer.prototype.audioMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Footer.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Footer.prototype, "_hasMediaAttachment", { + get: $util.oneOfGetter($oneOfFields = ["hasMediaAttachment"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(Footer.prototype, "media", { + get: $util.oneOfGetter($oneOfFields = ["audioMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Footer.create = function create(properties) { + return new Footer(properties); + }; + + Footer.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + if (m.audioMessage != null && Object.hasOwnProperty.call(m, "audioMessage")) + $root.proto.Message.AudioMessage.encode(m.audioMessage, w.uint32(18).fork()).ldelim(); + if (m.hasMediaAttachment != null && Object.hasOwnProperty.call(m, "hasMediaAttachment")) + w.uint32(24).bool(m.hasMediaAttachment); + return w; + }; + + Footer.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.Footer(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.text = r.string(); + break; + } + case 3: { + m.hasMediaAttachment = r.bool(); + break; + } + case 2: { + m.audioMessage = $root.proto.Message.AudioMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Footer.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.Footer) + return d; + var m = new $root.proto.Message.InteractiveMessage.Footer(); + if (d.text != null) { + m.text = String(d.text); + } + if (d.hasMediaAttachment != null) { + m.hasMediaAttachment = Boolean(d.hasMediaAttachment); + } + if (d.audioMessage != null) { + if (typeof d.audioMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.Footer.audioMessage: object expected"); + m.audioMessage = $root.proto.Message.AudioMessage.fromObject(d.audioMessage); + } + return m; + }; + + Footer.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.audioMessage != null && m.hasOwnProperty("audioMessage")) { + d.audioMessage = $root.proto.Message.AudioMessage.toObject(m.audioMessage, o); + if (o.oneofs) + d.media = "audioMessage"; + } + if (m.hasMediaAttachment != null && m.hasOwnProperty("hasMediaAttachment")) { + d.hasMediaAttachment = m.hasMediaAttachment; + if (o.oneofs) + d._hasMediaAttachment = "hasMediaAttachment"; + } + return d; + }; + + Footer.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Footer.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.Footer"; + }; + + return Footer; + })(); + + InteractiveMessage.Header = (function() { + + function Header(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Header.prototype.title = null; + Header.prototype.subtitle = null; + Header.prototype.hasMediaAttachment = null; + Header.prototype.documentMessage = null; + Header.prototype.imageMessage = null; + Header.prototype.jpegThumbnail = null; + Header.prototype.videoMessage = null; + Header.prototype.locationMessage = null; + Header.prototype.productMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Header.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Header.prototype, "_subtitle", { + get: $util.oneOfGetter($oneOfFields = ["subtitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Header.prototype, "_hasMediaAttachment", { + get: $util.oneOfGetter($oneOfFields = ["hasMediaAttachment"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(Header.prototype, "media", { + get: $util.oneOfGetter($oneOfFields = ["documentMessage", "imageMessage", "jpegThumbnail", "videoMessage", "locationMessage", "productMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Header.create = function create(properties) { + return new Header(properties); + }; + + Header.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.subtitle != null && Object.hasOwnProperty.call(m, "subtitle")) + w.uint32(18).string(m.subtitle); + if (m.documentMessage != null && Object.hasOwnProperty.call(m, "documentMessage")) + $root.proto.Message.DocumentMessage.encode(m.documentMessage, w.uint32(26).fork()).ldelim(); + if (m.imageMessage != null && Object.hasOwnProperty.call(m, "imageMessage")) + $root.proto.Message.ImageMessage.encode(m.imageMessage, w.uint32(34).fork()).ldelim(); + if (m.hasMediaAttachment != null && Object.hasOwnProperty.call(m, "hasMediaAttachment")) + w.uint32(40).bool(m.hasMediaAttachment); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(50).bytes(m.jpegThumbnail); + if (m.videoMessage != null && Object.hasOwnProperty.call(m, "videoMessage")) + $root.proto.Message.VideoMessage.encode(m.videoMessage, w.uint32(58).fork()).ldelim(); + if (m.locationMessage != null && Object.hasOwnProperty.call(m, "locationMessage")) + $root.proto.Message.LocationMessage.encode(m.locationMessage, w.uint32(66).fork()).ldelim(); + if (m.productMessage != null && Object.hasOwnProperty.call(m, "productMessage")) + $root.proto.Message.ProductMessage.encode(m.productMessage, w.uint32(74).fork()).ldelim(); + return w; + }; + + Header.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.Header(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.subtitle = r.string(); + break; + } + case 5: { + m.hasMediaAttachment = r.bool(); + break; + } + case 3: { + m.documentMessage = $root.proto.Message.DocumentMessage.decode(r, r.uint32()); + break; + } + case 4: { + m.imageMessage = $root.proto.Message.ImageMessage.decode(r, r.uint32()); + break; + } + case 6: { + m.jpegThumbnail = r.bytes(); + break; + } + case 7: { + m.videoMessage = $root.proto.Message.VideoMessage.decode(r, r.uint32()); + break; + } + case 8: { + m.locationMessage = $root.proto.Message.LocationMessage.decode(r, r.uint32()); + break; + } + case 9: { + m.productMessage = $root.proto.Message.ProductMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Header.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.Header) + return d; + var m = new $root.proto.Message.InteractiveMessage.Header(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.subtitle != null) { + m.subtitle = String(d.subtitle); + } + if (d.hasMediaAttachment != null) { + m.hasMediaAttachment = Boolean(d.hasMediaAttachment); + } + if (d.documentMessage != null) { + if (typeof d.documentMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.Header.documentMessage: object expected"); + m.documentMessage = $root.proto.Message.DocumentMessage.fromObject(d.documentMessage); + } + if (d.imageMessage != null) { + if (typeof d.imageMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.Header.imageMessage: object expected"); + m.imageMessage = $root.proto.Message.ImageMessage.fromObject(d.imageMessage); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.videoMessage != null) { + if (typeof d.videoMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.Header.videoMessage: object expected"); + m.videoMessage = $root.proto.Message.VideoMessage.fromObject(d.videoMessage); + } + if (d.locationMessage != null) { + if (typeof d.locationMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.Header.locationMessage: object expected"); + m.locationMessage = $root.proto.Message.LocationMessage.fromObject(d.locationMessage); + } + if (d.productMessage != null) { + if (typeof d.productMessage !== "object") + throw TypeError(".proto.Message.InteractiveMessage.Header.productMessage: object expected"); + m.productMessage = $root.proto.Message.ProductMessage.fromObject(d.productMessage); + } + return m; + }; + + Header.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.subtitle != null && m.hasOwnProperty("subtitle")) { + d.subtitle = m.subtitle; + if (o.oneofs) + d._subtitle = "subtitle"; + } + if (m.documentMessage != null && m.hasOwnProperty("documentMessage")) { + d.documentMessage = $root.proto.Message.DocumentMessage.toObject(m.documentMessage, o); + if (o.oneofs) + d.media = "documentMessage"; + } + if (m.imageMessage != null && m.hasOwnProperty("imageMessage")) { + d.imageMessage = $root.proto.Message.ImageMessage.toObject(m.imageMessage, o); + if (o.oneofs) + d.media = "imageMessage"; + } + if (m.hasMediaAttachment != null && m.hasOwnProperty("hasMediaAttachment")) { + d.hasMediaAttachment = m.hasMediaAttachment; + if (o.oneofs) + d._hasMediaAttachment = "hasMediaAttachment"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d.media = "jpegThumbnail"; + } + if (m.videoMessage != null && m.hasOwnProperty("videoMessage")) { + d.videoMessage = $root.proto.Message.VideoMessage.toObject(m.videoMessage, o); + if (o.oneofs) + d.media = "videoMessage"; + } + if (m.locationMessage != null && m.hasOwnProperty("locationMessage")) { + d.locationMessage = $root.proto.Message.LocationMessage.toObject(m.locationMessage, o); + if (o.oneofs) + d.media = "locationMessage"; + } + if (m.productMessage != null && m.hasOwnProperty("productMessage")) { + d.productMessage = $root.proto.Message.ProductMessage.toObject(m.productMessage, o); + if (o.oneofs) + d.media = "productMessage"; + } + return d; + }; + + Header.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Header.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.Header"; + }; + + return Header; + })(); + + InteractiveMessage.NativeFlowMessage = (function() { + + function NativeFlowMessage(p) { + this.buttons = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NativeFlowMessage.prototype.buttons = $util.emptyArray; + NativeFlowMessage.prototype.messageParamsJson = null; + NativeFlowMessage.prototype.messageVersion = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowMessage.prototype, "_messageParamsJson", { + get: $util.oneOfGetter($oneOfFields = ["messageParamsJson"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowMessage.prototype, "_messageVersion", { + get: $util.oneOfGetter($oneOfFields = ["messageVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NativeFlowMessage.create = function create(properties) { + return new NativeFlowMessage(properties); + }; + + NativeFlowMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.buttons != null && m.buttons.length) { + for (var i = 0; i < m.buttons.length; ++i) + $root.proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton.encode(m.buttons[i], w.uint32(10).fork()).ldelim(); + } + if (m.messageParamsJson != null && Object.hasOwnProperty.call(m, "messageParamsJson")) + w.uint32(18).string(m.messageParamsJson); + if (m.messageVersion != null && Object.hasOwnProperty.call(m, "messageVersion")) + w.uint32(24).int32(m.messageVersion); + return w; + }; + + NativeFlowMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.NativeFlowMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.buttons && m.buttons.length)) + m.buttons = []; + m.buttons.push($root.proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton.decode(r, r.uint32())); + break; + } + case 2: { + m.messageParamsJson = r.string(); + break; + } + case 3: { + m.messageVersion = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NativeFlowMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.NativeFlowMessage) + return d; + var m = new $root.proto.Message.InteractiveMessage.NativeFlowMessage(); + if (d.buttons) { + if (!Array.isArray(d.buttons)) + throw TypeError(".proto.Message.InteractiveMessage.NativeFlowMessage.buttons: array expected"); + m.buttons = []; + for (var i = 0; i < d.buttons.length; ++i) { + if (typeof d.buttons[i] !== "object") + throw TypeError(".proto.Message.InteractiveMessage.NativeFlowMessage.buttons: object expected"); + m.buttons[i] = $root.proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton.fromObject(d.buttons[i]); + } + } + if (d.messageParamsJson != null) { + m.messageParamsJson = String(d.messageParamsJson); + } + if (d.messageVersion != null) { + m.messageVersion = d.messageVersion | 0; + } + return m; + }; + + NativeFlowMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.buttons = []; + } + if (m.buttons && m.buttons.length) { + d.buttons = []; + for (var j = 0; j < m.buttons.length; ++j) { + d.buttons[j] = $root.proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton.toObject(m.buttons[j], o); + } + } + if (m.messageParamsJson != null && m.hasOwnProperty("messageParamsJson")) { + d.messageParamsJson = m.messageParamsJson; + if (o.oneofs) + d._messageParamsJson = "messageParamsJson"; + } + if (m.messageVersion != null && m.hasOwnProperty("messageVersion")) { + d.messageVersion = m.messageVersion; + if (o.oneofs) + d._messageVersion = "messageVersion"; + } + return d; + }; + + NativeFlowMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NativeFlowMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.NativeFlowMessage"; + }; + + NativeFlowMessage.NativeFlowButton = (function() { + + function NativeFlowButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NativeFlowButton.prototype.name = null; + NativeFlowButton.prototype.buttonParamsJson = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowButton.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowButton.prototype, "_buttonParamsJson", { + get: $util.oneOfGetter($oneOfFields = ["buttonParamsJson"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NativeFlowButton.create = function create(properties) { + return new NativeFlowButton(properties); + }; + + NativeFlowButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.buttonParamsJson != null && Object.hasOwnProperty.call(m, "buttonParamsJson")) + w.uint32(18).string(m.buttonParamsJson); + return w; + }; + + NativeFlowButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + m.buttonParamsJson = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NativeFlowButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton) + return d; + var m = new $root.proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.buttonParamsJson != null) { + m.buttonParamsJson = String(d.buttonParamsJson); + } + return m; + }; + + NativeFlowButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.buttonParamsJson != null && m.hasOwnProperty("buttonParamsJson")) { + d.buttonParamsJson = m.buttonParamsJson; + if (o.oneofs) + d._buttonParamsJson = "buttonParamsJson"; + } + return d; + }; + + NativeFlowButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NativeFlowButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton"; + }; + + return NativeFlowButton; + })(); + + return NativeFlowMessage; + })(); + + InteractiveMessage.ShopMessage = (function() { + + function ShopMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ShopMessage.prototype.id = null; + ShopMessage.prototype.surface = null; + ShopMessage.prototype.messageVersion = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ShopMessage.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ShopMessage.prototype, "_surface", { + get: $util.oneOfGetter($oneOfFields = ["surface"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ShopMessage.prototype, "_messageVersion", { + get: $util.oneOfGetter($oneOfFields = ["messageVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ShopMessage.create = function create(properties) { + return new ShopMessage(properties); + }; + + ShopMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(10).string(m.id); + if (m.surface != null && Object.hasOwnProperty.call(m, "surface")) + w.uint32(16).int32(m.surface); + if (m.messageVersion != null && Object.hasOwnProperty.call(m, "messageVersion")) + w.uint32(24).int32(m.messageVersion); + return w; + }; + + ShopMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveMessage.ShopMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.string(); + break; + } + case 2: { + m.surface = r.int32(); + break; + } + case 3: { + m.messageVersion = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ShopMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveMessage.ShopMessage) + return d; + var m = new $root.proto.Message.InteractiveMessage.ShopMessage(); + if (d.id != null) { + m.id = String(d.id); + } + switch (d.surface) { + default: + if (typeof d.surface === "number") { + m.surface = d.surface; + break; + } + break; + case "UNKNOWN_SURFACE": + case 0: + m.surface = 0; + break; + case "FB": + case 1: + m.surface = 1; + break; + case "IG": + case 2: + m.surface = 2; + break; + case "WA": + case 3: + m.surface = 3; + break; + } + if (d.messageVersion != null) { + m.messageVersion = d.messageVersion | 0; + } + return m; + }; + + ShopMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.surface != null && m.hasOwnProperty("surface")) { + d.surface = o.enums === String ? $root.proto.Message.InteractiveMessage.ShopMessage.Surface[m.surface] === undefined ? m.surface : $root.proto.Message.InteractiveMessage.ShopMessage.Surface[m.surface] : m.surface; + if (o.oneofs) + d._surface = "surface"; + } + if (m.messageVersion != null && m.hasOwnProperty("messageVersion")) { + d.messageVersion = m.messageVersion; + if (o.oneofs) + d._messageVersion = "messageVersion"; + } + return d; + }; + + ShopMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ShopMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveMessage.ShopMessage"; + }; + + ShopMessage.Surface = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_SURFACE"] = 0; + values[valuesById[1] = "FB"] = 1; + values[valuesById[2] = "IG"] = 2; + values[valuesById[3] = "WA"] = 3; + return values; + })(); + + return ShopMessage; + })(); + + return InteractiveMessage; + })(); + + Message.InteractiveResponseMessage = (function() { + + function InteractiveResponseMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InteractiveResponseMessage.prototype.body = null; + InteractiveResponseMessage.prototype.contextInfo = null; + InteractiveResponseMessage.prototype.nativeFlowResponseMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveResponseMessage.prototype, "_body", { + get: $util.oneOfGetter($oneOfFields = ["body"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InteractiveResponseMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(InteractiveResponseMessage.prototype, "interactiveResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["nativeFlowResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InteractiveResponseMessage.create = function create(properties) { + return new InteractiveResponseMessage(properties); + }; + + InteractiveResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.body != null && Object.hasOwnProperty.call(m, "body")) + $root.proto.Message.InteractiveResponseMessage.Body.encode(m.body, w.uint32(10).fork()).ldelim(); + if (m.nativeFlowResponseMessage != null && Object.hasOwnProperty.call(m, "nativeFlowResponseMessage")) + $root.proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage.encode(m.nativeFlowResponseMessage, w.uint32(18).fork()).ldelim(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(122).fork()).ldelim(); + return w; + }; + + InteractiveResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.body = $root.proto.Message.InteractiveResponseMessage.Body.decode(r, r.uint32()); + break; + } + case 15: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 2: { + m.nativeFlowResponseMessage = $root.proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InteractiveResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveResponseMessage) + return d; + var m = new $root.proto.Message.InteractiveResponseMessage(); + if (d.body != null) { + if (typeof d.body !== "object") + throw TypeError(".proto.Message.InteractiveResponseMessage.body: object expected"); + m.body = $root.proto.Message.InteractiveResponseMessage.Body.fromObject(d.body); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.InteractiveResponseMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.nativeFlowResponseMessage != null) { + if (typeof d.nativeFlowResponseMessage !== "object") + throw TypeError(".proto.Message.InteractiveResponseMessage.nativeFlowResponseMessage: object expected"); + m.nativeFlowResponseMessage = $root.proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage.fromObject(d.nativeFlowResponseMessage); + } + return m; + }; + + InteractiveResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.body != null && m.hasOwnProperty("body")) { + d.body = $root.proto.Message.InteractiveResponseMessage.Body.toObject(m.body, o); + if (o.oneofs) + d._body = "body"; + } + if (m.nativeFlowResponseMessage != null && m.hasOwnProperty("nativeFlowResponseMessage")) { + d.nativeFlowResponseMessage = $root.proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage.toObject(m.nativeFlowResponseMessage, o); + if (o.oneofs) + d.interactiveResponseMessage = "nativeFlowResponseMessage"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + InteractiveResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InteractiveResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveResponseMessage"; + }; + + InteractiveResponseMessage.Body = (function() { + + function Body(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Body.prototype.text = null; + Body.prototype.format = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Body.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Body.prototype, "_format", { + get: $util.oneOfGetter($oneOfFields = ["format"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Body.create = function create(properties) { + return new Body(properties); + }; + + Body.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(10).string(m.text); + if (m.format != null && Object.hasOwnProperty.call(m, "format")) + w.uint32(16).int32(m.format); + return w; + }; + + Body.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveResponseMessage.Body(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.text = r.string(); + break; + } + case 2: { + m.format = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Body.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveResponseMessage.Body) + return d; + var m = new $root.proto.Message.InteractiveResponseMessage.Body(); + if (d.text != null) { + m.text = String(d.text); + } + switch (d.format) { + default: + if (typeof d.format === "number") { + m.format = d.format; + break; + } + break; + case "DEFAULT": + case 0: + m.format = 0; + break; + case "EXTENSIONS_1": + case 1: + m.format = 1; + break; + } + return m; + }; + + Body.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.format != null && m.hasOwnProperty("format")) { + d.format = o.enums === String ? $root.proto.Message.InteractiveResponseMessage.Body.Format[m.format] === undefined ? m.format : $root.proto.Message.InteractiveResponseMessage.Body.Format[m.format] : m.format; + if (o.oneofs) + d._format = "format"; + } + return d; + }; + + Body.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveResponseMessage.Body"; + }; + + Body.Format = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DEFAULT"] = 0; + values[valuesById[1] = "EXTENSIONS_1"] = 1; + return values; + })(); + + return Body; + })(); + + InteractiveResponseMessage.NativeFlowResponseMessage = (function() { + + function NativeFlowResponseMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NativeFlowResponseMessage.prototype.name = null; + NativeFlowResponseMessage.prototype.paramsJson = null; + NativeFlowResponseMessage.prototype.version = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowResponseMessage.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowResponseMessage.prototype, "_paramsJson", { + get: $util.oneOfGetter($oneOfFields = ["paramsJson"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NativeFlowResponseMessage.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NativeFlowResponseMessage.create = function create(properties) { + return new NativeFlowResponseMessage(properties); + }; + + NativeFlowResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.paramsJson != null && Object.hasOwnProperty.call(m, "paramsJson")) + w.uint32(18).string(m.paramsJson); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(24).int32(m.version); + return w; + }; + + NativeFlowResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + m.paramsJson = r.string(); + break; + } + case 3: { + m.version = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NativeFlowResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage) + return d; + var m = new $root.proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.paramsJson != null) { + m.paramsJson = String(d.paramsJson); + } + if (d.version != null) { + m.version = d.version | 0; + } + return m; + }; + + NativeFlowResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.paramsJson != null && m.hasOwnProperty("paramsJson")) { + d.paramsJson = m.paramsJson; + if (o.oneofs) + d._paramsJson = "paramsJson"; + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = m.version; + if (o.oneofs) + d._version = "version"; + } + return d; + }; + + NativeFlowResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NativeFlowResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InteractiveResponseMessage.NativeFlowResponseMessage"; + }; + + return NativeFlowResponseMessage; + })(); + + return InteractiveResponseMessage; + })(); + + Message.InvoiceMessage = (function() { + + function InvoiceMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InvoiceMessage.prototype.note = null; + InvoiceMessage.prototype.token = null; + InvoiceMessage.prototype.attachmentType = null; + InvoiceMessage.prototype.attachmentMimetype = null; + InvoiceMessage.prototype.attachmentMediaKey = null; + InvoiceMessage.prototype.attachmentMediaKeyTimestamp = null; + InvoiceMessage.prototype.attachmentFileSha256 = null; + InvoiceMessage.prototype.attachmentFileEncSha256 = null; + InvoiceMessage.prototype.attachmentDirectPath = null; + InvoiceMessage.prototype.attachmentJpegThumbnail = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_note", { + get: $util.oneOfGetter($oneOfFields = ["note"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_token", { + get: $util.oneOfGetter($oneOfFields = ["token"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentType", { + get: $util.oneOfGetter($oneOfFields = ["attachmentType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentMimetype", { + get: $util.oneOfGetter($oneOfFields = ["attachmentMimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentMediaKey", { + get: $util.oneOfGetter($oneOfFields = ["attachmentMediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentMediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["attachmentMediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentFileSha256", { + get: $util.oneOfGetter($oneOfFields = ["attachmentFileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentFileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["attachmentFileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["attachmentDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(InvoiceMessage.prototype, "_attachmentJpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["attachmentJpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + InvoiceMessage.create = function create(properties) { + return new InvoiceMessage(properties); + }; + + InvoiceMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.note != null && Object.hasOwnProperty.call(m, "note")) + w.uint32(10).string(m.note); + if (m.token != null && Object.hasOwnProperty.call(m, "token")) + w.uint32(18).string(m.token); + if (m.attachmentType != null && Object.hasOwnProperty.call(m, "attachmentType")) + w.uint32(24).int32(m.attachmentType); + if (m.attachmentMimetype != null && Object.hasOwnProperty.call(m, "attachmentMimetype")) + w.uint32(34).string(m.attachmentMimetype); + if (m.attachmentMediaKey != null && Object.hasOwnProperty.call(m, "attachmentMediaKey")) + w.uint32(42).bytes(m.attachmentMediaKey); + if (m.attachmentMediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "attachmentMediaKeyTimestamp")) + w.uint32(48).int64(m.attachmentMediaKeyTimestamp); + if (m.attachmentFileSha256 != null && Object.hasOwnProperty.call(m, "attachmentFileSha256")) + w.uint32(58).bytes(m.attachmentFileSha256); + if (m.attachmentFileEncSha256 != null && Object.hasOwnProperty.call(m, "attachmentFileEncSha256")) + w.uint32(66).bytes(m.attachmentFileEncSha256); + if (m.attachmentDirectPath != null && Object.hasOwnProperty.call(m, "attachmentDirectPath")) + w.uint32(74).string(m.attachmentDirectPath); + if (m.attachmentJpegThumbnail != null && Object.hasOwnProperty.call(m, "attachmentJpegThumbnail")) + w.uint32(82).bytes(m.attachmentJpegThumbnail); + return w; + }; + + InvoiceMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.InvoiceMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.note = r.string(); + break; + } + case 2: { + m.token = r.string(); + break; + } + case 3: { + m.attachmentType = r.int32(); + break; + } + case 4: { + m.attachmentMimetype = r.string(); + break; + } + case 5: { + m.attachmentMediaKey = r.bytes(); + break; + } + case 6: { + m.attachmentMediaKeyTimestamp = r.int64(); + break; + } + case 7: { + m.attachmentFileSha256 = r.bytes(); + break; + } + case 8: { + m.attachmentFileEncSha256 = r.bytes(); + break; + } + case 9: { + m.attachmentDirectPath = r.string(); + break; + } + case 10: { + m.attachmentJpegThumbnail = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InvoiceMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.InvoiceMessage) + return d; + var m = new $root.proto.Message.InvoiceMessage(); + if (d.note != null) { + m.note = String(d.note); + } + if (d.token != null) { + m.token = String(d.token); + } + switch (d.attachmentType) { + default: + if (typeof d.attachmentType === "number") { + m.attachmentType = d.attachmentType; + break; + } + break; + case "IMAGE": + case 0: + m.attachmentType = 0; + break; + case "PDF": + case 1: + m.attachmentType = 1; + break; + } + if (d.attachmentMimetype != null) { + m.attachmentMimetype = String(d.attachmentMimetype); + } + if (d.attachmentMediaKey != null) { + if (typeof d.attachmentMediaKey === "string") + $util.base64.decode(d.attachmentMediaKey, m.attachmentMediaKey = $util.newBuffer($util.base64.length(d.attachmentMediaKey)), 0); + else if (d.attachmentMediaKey.length >= 0) + m.attachmentMediaKey = d.attachmentMediaKey; + } + if (d.attachmentMediaKeyTimestamp != null) { + if ($util.Long) + (m.attachmentMediaKeyTimestamp = $util.Long.fromValue(d.attachmentMediaKeyTimestamp)).unsigned = false; + else if (typeof d.attachmentMediaKeyTimestamp === "string") + m.attachmentMediaKeyTimestamp = parseInt(d.attachmentMediaKeyTimestamp, 10); + else if (typeof d.attachmentMediaKeyTimestamp === "number") + m.attachmentMediaKeyTimestamp = d.attachmentMediaKeyTimestamp; + else if (typeof d.attachmentMediaKeyTimestamp === "object") + m.attachmentMediaKeyTimestamp = new $util.LongBits(d.attachmentMediaKeyTimestamp.low >>> 0, d.attachmentMediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.attachmentFileSha256 != null) { + if (typeof d.attachmentFileSha256 === "string") + $util.base64.decode(d.attachmentFileSha256, m.attachmentFileSha256 = $util.newBuffer($util.base64.length(d.attachmentFileSha256)), 0); + else if (d.attachmentFileSha256.length >= 0) + m.attachmentFileSha256 = d.attachmentFileSha256; + } + if (d.attachmentFileEncSha256 != null) { + if (typeof d.attachmentFileEncSha256 === "string") + $util.base64.decode(d.attachmentFileEncSha256, m.attachmentFileEncSha256 = $util.newBuffer($util.base64.length(d.attachmentFileEncSha256)), 0); + else if (d.attachmentFileEncSha256.length >= 0) + m.attachmentFileEncSha256 = d.attachmentFileEncSha256; + } + if (d.attachmentDirectPath != null) { + m.attachmentDirectPath = String(d.attachmentDirectPath); + } + if (d.attachmentJpegThumbnail != null) { + if (typeof d.attachmentJpegThumbnail === "string") + $util.base64.decode(d.attachmentJpegThumbnail, m.attachmentJpegThumbnail = $util.newBuffer($util.base64.length(d.attachmentJpegThumbnail)), 0); + else if (d.attachmentJpegThumbnail.length >= 0) + m.attachmentJpegThumbnail = d.attachmentJpegThumbnail; + } + return m; + }; + + InvoiceMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.note != null && m.hasOwnProperty("note")) { + d.note = m.note; + if (o.oneofs) + d._note = "note"; + } + if (m.token != null && m.hasOwnProperty("token")) { + d.token = m.token; + if (o.oneofs) + d._token = "token"; + } + if (m.attachmentType != null && m.hasOwnProperty("attachmentType")) { + d.attachmentType = o.enums === String ? $root.proto.Message.InvoiceMessage.AttachmentType[m.attachmentType] === undefined ? m.attachmentType : $root.proto.Message.InvoiceMessage.AttachmentType[m.attachmentType] : m.attachmentType; + if (o.oneofs) + d._attachmentType = "attachmentType"; + } + if (m.attachmentMimetype != null && m.hasOwnProperty("attachmentMimetype")) { + d.attachmentMimetype = m.attachmentMimetype; + if (o.oneofs) + d._attachmentMimetype = "attachmentMimetype"; + } + if (m.attachmentMediaKey != null && m.hasOwnProperty("attachmentMediaKey")) { + d.attachmentMediaKey = o.bytes === String ? $util.base64.encode(m.attachmentMediaKey, 0, m.attachmentMediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.attachmentMediaKey) : m.attachmentMediaKey; + if (o.oneofs) + d._attachmentMediaKey = "attachmentMediaKey"; + } + if (m.attachmentMediaKeyTimestamp != null && m.hasOwnProperty("attachmentMediaKeyTimestamp")) { + if (typeof m.attachmentMediaKeyTimestamp === "number") + d.attachmentMediaKeyTimestamp = o.longs === String ? String(m.attachmentMediaKeyTimestamp) : m.attachmentMediaKeyTimestamp; + else + d.attachmentMediaKeyTimestamp = o.longs === String ? longToString(m.attachmentMediaKeyTimestamp) : o.longs === Number ? longToNumber(m.attachmentMediaKeyTimestamp) : m.attachmentMediaKeyTimestamp; + if (o.oneofs) + d._attachmentMediaKeyTimestamp = "attachmentMediaKeyTimestamp"; + } + if (m.attachmentFileSha256 != null && m.hasOwnProperty("attachmentFileSha256")) { + d.attachmentFileSha256 = o.bytes === String ? $util.base64.encode(m.attachmentFileSha256, 0, m.attachmentFileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.attachmentFileSha256) : m.attachmentFileSha256; + if (o.oneofs) + d._attachmentFileSha256 = "attachmentFileSha256"; + } + if (m.attachmentFileEncSha256 != null && m.hasOwnProperty("attachmentFileEncSha256")) { + d.attachmentFileEncSha256 = o.bytes === String ? $util.base64.encode(m.attachmentFileEncSha256, 0, m.attachmentFileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.attachmentFileEncSha256) : m.attachmentFileEncSha256; + if (o.oneofs) + d._attachmentFileEncSha256 = "attachmentFileEncSha256"; + } + if (m.attachmentDirectPath != null && m.hasOwnProperty("attachmentDirectPath")) { + d.attachmentDirectPath = m.attachmentDirectPath; + if (o.oneofs) + d._attachmentDirectPath = "attachmentDirectPath"; + } + if (m.attachmentJpegThumbnail != null && m.hasOwnProperty("attachmentJpegThumbnail")) { + d.attachmentJpegThumbnail = o.bytes === String ? $util.base64.encode(m.attachmentJpegThumbnail, 0, m.attachmentJpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.attachmentJpegThumbnail) : m.attachmentJpegThumbnail; + if (o.oneofs) + d._attachmentJpegThumbnail = "attachmentJpegThumbnail"; + } + return d; + }; + + InvoiceMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InvoiceMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.InvoiceMessage"; + }; + + InvoiceMessage.AttachmentType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "IMAGE"] = 0; + values[valuesById[1] = "PDF"] = 1; + return values; + })(); + + return InvoiceMessage; + })(); + + Message.KeepInChatMessage = (function() { + + function KeepInChatMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + KeepInChatMessage.prototype.key = null; + KeepInChatMessage.prototype.keepType = null; + KeepInChatMessage.prototype.timestampMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChatMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChatMessage.prototype, "_keepType", { + get: $util.oneOfGetter($oneOfFields = ["keepType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeepInChatMessage.prototype, "_timestampMs", { + get: $util.oneOfGetter($oneOfFields = ["timestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + KeepInChatMessage.create = function create(properties) { + return new KeepInChatMessage(properties); + }; + + KeepInChatMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.keepType != null && Object.hasOwnProperty.call(m, "keepType")) + w.uint32(16).int32(m.keepType); + if (m.timestampMs != null && Object.hasOwnProperty.call(m, "timestampMs")) + w.uint32(24).int64(m.timestampMs); + return w; + }; + + KeepInChatMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.KeepInChatMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.keepType = r.int32(); + break; + } + case 3: { + m.timestampMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + KeepInChatMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.KeepInChatMessage) + return d; + var m = new $root.proto.Message.KeepInChatMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.KeepInChatMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + switch (d.keepType) { + default: + if (typeof d.keepType === "number") { + m.keepType = d.keepType; + break; + } + break; + case "UNKNOWN": + case 0: + m.keepType = 0; + break; + case "KEEP_FOR_ALL": + case 1: + m.keepType = 1; + break; + case "UNDO_KEEP_FOR_ALL": + case 2: + m.keepType = 2; + break; + } + if (d.timestampMs != null) { + if ($util.Long) + (m.timestampMs = $util.Long.fromValue(d.timestampMs)).unsigned = false; + else if (typeof d.timestampMs === "string") + m.timestampMs = parseInt(d.timestampMs, 10); + else if (typeof d.timestampMs === "number") + m.timestampMs = d.timestampMs; + else if (typeof d.timestampMs === "object") + m.timestampMs = new $util.LongBits(d.timestampMs.low >>> 0, d.timestampMs.high >>> 0).toNumber(); + } + return m; + }; + + KeepInChatMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.keepType != null && m.hasOwnProperty("keepType")) { + d.keepType = o.enums === String ? $root.proto.KeepType[m.keepType] === undefined ? m.keepType : $root.proto.KeepType[m.keepType] : m.keepType; + if (o.oneofs) + d._keepType = "keepType"; + } + if (m.timestampMs != null && m.hasOwnProperty("timestampMs")) { + if (typeof m.timestampMs === "number") + d.timestampMs = o.longs === String ? String(m.timestampMs) : m.timestampMs; + else + d.timestampMs = o.longs === String ? longToString(m.timestampMs) : o.longs === Number ? longToNumber(m.timestampMs) : m.timestampMs; + if (o.oneofs) + d._timestampMs = "timestampMs"; + } + return d; + }; + + KeepInChatMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + KeepInChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.KeepInChatMessage"; + }; + + return KeepInChatMessage; + })(); + + Message.LinkPreviewMetadata = (function() { + + function LinkPreviewMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LinkPreviewMetadata.prototype.paymentLinkMetadata = null; + LinkPreviewMetadata.prototype.urlMetadata = null; + LinkPreviewMetadata.prototype.fbExperimentId = null; + LinkPreviewMetadata.prototype.linkMediaDuration = null; + LinkPreviewMetadata.prototype.socialMediaPostType = null; + LinkPreviewMetadata.prototype.linkInlineVideoMuted = null; + LinkPreviewMetadata.prototype.videoContentUrl = null; + LinkPreviewMetadata.prototype.musicMetadata = null; + LinkPreviewMetadata.prototype.videoContentCaption = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_paymentLinkMetadata", { + get: $util.oneOfGetter($oneOfFields = ["paymentLinkMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_urlMetadata", { + get: $util.oneOfGetter($oneOfFields = ["urlMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_fbExperimentId", { + get: $util.oneOfGetter($oneOfFields = ["fbExperimentId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_linkMediaDuration", { + get: $util.oneOfGetter($oneOfFields = ["linkMediaDuration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_socialMediaPostType", { + get: $util.oneOfGetter($oneOfFields = ["socialMediaPostType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_linkInlineVideoMuted", { + get: $util.oneOfGetter($oneOfFields = ["linkInlineVideoMuted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_videoContentUrl", { + get: $util.oneOfGetter($oneOfFields = ["videoContentUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_musicMetadata", { + get: $util.oneOfGetter($oneOfFields = ["musicMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewMetadata.prototype, "_videoContentCaption", { + get: $util.oneOfGetter($oneOfFields = ["videoContentCaption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LinkPreviewMetadata.create = function create(properties) { + return new LinkPreviewMetadata(properties); + }; + + LinkPreviewMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.paymentLinkMetadata != null && Object.hasOwnProperty.call(m, "paymentLinkMetadata")) + $root.proto.Message.PaymentLinkMetadata.encode(m.paymentLinkMetadata, w.uint32(10).fork()).ldelim(); + if (m.urlMetadata != null && Object.hasOwnProperty.call(m, "urlMetadata")) + $root.proto.Message.URLMetadata.encode(m.urlMetadata, w.uint32(18).fork()).ldelim(); + if (m.fbExperimentId != null && Object.hasOwnProperty.call(m, "fbExperimentId")) + w.uint32(24).uint32(m.fbExperimentId); + if (m.linkMediaDuration != null && Object.hasOwnProperty.call(m, "linkMediaDuration")) + w.uint32(32).uint32(m.linkMediaDuration); + if (m.socialMediaPostType != null && Object.hasOwnProperty.call(m, "socialMediaPostType")) + w.uint32(40).int32(m.socialMediaPostType); + if (m.linkInlineVideoMuted != null && Object.hasOwnProperty.call(m, "linkInlineVideoMuted")) + w.uint32(48).bool(m.linkInlineVideoMuted); + if (m.videoContentUrl != null && Object.hasOwnProperty.call(m, "videoContentUrl")) + w.uint32(58).string(m.videoContentUrl); + if (m.musicMetadata != null && Object.hasOwnProperty.call(m, "musicMetadata")) + $root.proto.EmbeddedMusic.encode(m.musicMetadata, w.uint32(66).fork()).ldelim(); + if (m.videoContentCaption != null && Object.hasOwnProperty.call(m, "videoContentCaption")) + w.uint32(74).string(m.videoContentCaption); + return w; + }; + + LinkPreviewMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.LinkPreviewMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.paymentLinkMetadata = $root.proto.Message.PaymentLinkMetadata.decode(r, r.uint32()); + break; + } + case 2: { + m.urlMetadata = $root.proto.Message.URLMetadata.decode(r, r.uint32()); + break; + } + case 3: { + m.fbExperimentId = r.uint32(); + break; + } + case 4: { + m.linkMediaDuration = r.uint32(); + break; + } + case 5: { + m.socialMediaPostType = r.int32(); + break; + } + case 6: { + m.linkInlineVideoMuted = r.bool(); + break; + } + case 7: { + m.videoContentUrl = r.string(); + break; + } + case 8: { + m.musicMetadata = $root.proto.EmbeddedMusic.decode(r, r.uint32()); + break; + } + case 9: { + m.videoContentCaption = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LinkPreviewMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.LinkPreviewMetadata) + return d; + var m = new $root.proto.Message.LinkPreviewMetadata(); + if (d.paymentLinkMetadata != null) { + if (typeof d.paymentLinkMetadata !== "object") + throw TypeError(".proto.Message.LinkPreviewMetadata.paymentLinkMetadata: object expected"); + m.paymentLinkMetadata = $root.proto.Message.PaymentLinkMetadata.fromObject(d.paymentLinkMetadata); + } + if (d.urlMetadata != null) { + if (typeof d.urlMetadata !== "object") + throw TypeError(".proto.Message.LinkPreviewMetadata.urlMetadata: object expected"); + m.urlMetadata = $root.proto.Message.URLMetadata.fromObject(d.urlMetadata); + } + if (d.fbExperimentId != null) { + m.fbExperimentId = d.fbExperimentId >>> 0; + } + if (d.linkMediaDuration != null) { + m.linkMediaDuration = d.linkMediaDuration >>> 0; + } + switch (d.socialMediaPostType) { + default: + if (typeof d.socialMediaPostType === "number") { + m.socialMediaPostType = d.socialMediaPostType; + break; + } + break; + case "NONE": + case 0: + m.socialMediaPostType = 0; + break; + case "REEL": + case 1: + m.socialMediaPostType = 1; + break; + case "LIVE_VIDEO": + case 2: + m.socialMediaPostType = 2; + break; + case "LONG_VIDEO": + case 3: + m.socialMediaPostType = 3; + break; + case "SINGLE_IMAGE": + case 4: + m.socialMediaPostType = 4; + break; + case "CAROUSEL": + case 5: + m.socialMediaPostType = 5; + break; + } + if (d.linkInlineVideoMuted != null) { + m.linkInlineVideoMuted = Boolean(d.linkInlineVideoMuted); + } + if (d.videoContentUrl != null) { + m.videoContentUrl = String(d.videoContentUrl); + } + if (d.musicMetadata != null) { + if (typeof d.musicMetadata !== "object") + throw TypeError(".proto.Message.LinkPreviewMetadata.musicMetadata: object expected"); + m.musicMetadata = $root.proto.EmbeddedMusic.fromObject(d.musicMetadata); + } + if (d.videoContentCaption != null) { + m.videoContentCaption = String(d.videoContentCaption); + } + return m; + }; + + LinkPreviewMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.paymentLinkMetadata != null && m.hasOwnProperty("paymentLinkMetadata")) { + d.paymentLinkMetadata = $root.proto.Message.PaymentLinkMetadata.toObject(m.paymentLinkMetadata, o); + if (o.oneofs) + d._paymentLinkMetadata = "paymentLinkMetadata"; + } + if (m.urlMetadata != null && m.hasOwnProperty("urlMetadata")) { + d.urlMetadata = $root.proto.Message.URLMetadata.toObject(m.urlMetadata, o); + if (o.oneofs) + d._urlMetadata = "urlMetadata"; + } + if (m.fbExperimentId != null && m.hasOwnProperty("fbExperimentId")) { + d.fbExperimentId = m.fbExperimentId; + if (o.oneofs) + d._fbExperimentId = "fbExperimentId"; + } + if (m.linkMediaDuration != null && m.hasOwnProperty("linkMediaDuration")) { + d.linkMediaDuration = m.linkMediaDuration; + if (o.oneofs) + d._linkMediaDuration = "linkMediaDuration"; + } + if (m.socialMediaPostType != null && m.hasOwnProperty("socialMediaPostType")) { + d.socialMediaPostType = o.enums === String ? $root.proto.Message.LinkPreviewMetadata.SocialMediaPostType[m.socialMediaPostType] === undefined ? m.socialMediaPostType : $root.proto.Message.LinkPreviewMetadata.SocialMediaPostType[m.socialMediaPostType] : m.socialMediaPostType; + if (o.oneofs) + d._socialMediaPostType = "socialMediaPostType"; + } + if (m.linkInlineVideoMuted != null && m.hasOwnProperty("linkInlineVideoMuted")) { + d.linkInlineVideoMuted = m.linkInlineVideoMuted; + if (o.oneofs) + d._linkInlineVideoMuted = "linkInlineVideoMuted"; + } + if (m.videoContentUrl != null && m.hasOwnProperty("videoContentUrl")) { + d.videoContentUrl = m.videoContentUrl; + if (o.oneofs) + d._videoContentUrl = "videoContentUrl"; + } + if (m.musicMetadata != null && m.hasOwnProperty("musicMetadata")) { + d.musicMetadata = $root.proto.EmbeddedMusic.toObject(m.musicMetadata, o); + if (o.oneofs) + d._musicMetadata = "musicMetadata"; + } + if (m.videoContentCaption != null && m.hasOwnProperty("videoContentCaption")) { + d.videoContentCaption = m.videoContentCaption; + if (o.oneofs) + d._videoContentCaption = "videoContentCaption"; + } + return d; + }; + + LinkPreviewMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LinkPreviewMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.LinkPreviewMetadata"; + }; + + LinkPreviewMetadata.SocialMediaPostType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "REEL"] = 1; + values[valuesById[2] = "LIVE_VIDEO"] = 2; + values[valuesById[3] = "LONG_VIDEO"] = 3; + values[valuesById[4] = "SINGLE_IMAGE"] = 4; + values[valuesById[5] = "CAROUSEL"] = 5; + return values; + })(); + + return LinkPreviewMetadata; + })(); + + Message.ListMessage = (function() { + + function ListMessage(p) { + this.sections = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ListMessage.prototype.title = null; + ListMessage.prototype.description = null; + ListMessage.prototype.buttonText = null; + ListMessage.prototype.listType = null; + ListMessage.prototype.sections = $util.emptyArray; + ListMessage.prototype.productListInfo = null; + ListMessage.prototype.footerText = null; + ListMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListMessage.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListMessage.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListMessage.prototype, "_buttonText", { + get: $util.oneOfGetter($oneOfFields = ["buttonText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListMessage.prototype, "_listType", { + get: $util.oneOfGetter($oneOfFields = ["listType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListMessage.prototype, "_productListInfo", { + get: $util.oneOfGetter($oneOfFields = ["productListInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListMessage.prototype, "_footerText", { + get: $util.oneOfGetter($oneOfFields = ["footerText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ListMessage.create = function create(properties) { + return new ListMessage(properties); + }; + + ListMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(18).string(m.description); + if (m.buttonText != null && Object.hasOwnProperty.call(m, "buttonText")) + w.uint32(26).string(m.buttonText); + if (m.listType != null && Object.hasOwnProperty.call(m, "listType")) + w.uint32(32).int32(m.listType); + if (m.sections != null && m.sections.length) { + for (var i = 0; i < m.sections.length; ++i) + $root.proto.Message.ListMessage.Section.encode(m.sections[i], w.uint32(42).fork()).ldelim(); + } + if (m.productListInfo != null && Object.hasOwnProperty.call(m, "productListInfo")) + $root.proto.Message.ListMessage.ProductListInfo.encode(m.productListInfo, w.uint32(50).fork()).ldelim(); + if (m.footerText != null && Object.hasOwnProperty.call(m, "footerText")) + w.uint32(58).string(m.footerText); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(66).fork()).ldelim(); + return w; + }; + + ListMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.description = r.string(); + break; + } + case 3: { + m.buttonText = r.string(); + break; + } + case 4: { + m.listType = r.int32(); + break; + } + case 5: { + if (!(m.sections && m.sections.length)) + m.sections = []; + m.sections.push($root.proto.Message.ListMessage.Section.decode(r, r.uint32())); + break; + } + case 6: { + m.productListInfo = $root.proto.Message.ListMessage.ProductListInfo.decode(r, r.uint32()); + break; + } + case 7: { + m.footerText = r.string(); + break; + } + case 8: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ListMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListMessage) + return d; + var m = new $root.proto.Message.ListMessage(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.buttonText != null) { + m.buttonText = String(d.buttonText); + } + switch (d.listType) { + default: + if (typeof d.listType === "number") { + m.listType = d.listType; + break; + } + break; + case "UNKNOWN": + case 0: + m.listType = 0; + break; + case "SINGLE_SELECT": + case 1: + m.listType = 1; + break; + case "PRODUCT_LIST": + case 2: + m.listType = 2; + break; + } + if (d.sections) { + if (!Array.isArray(d.sections)) + throw TypeError(".proto.Message.ListMessage.sections: array expected"); + m.sections = []; + for (var i = 0; i < d.sections.length; ++i) { + if (typeof d.sections[i] !== "object") + throw TypeError(".proto.Message.ListMessage.sections: object expected"); + m.sections[i] = $root.proto.Message.ListMessage.Section.fromObject(d.sections[i]); + } + } + if (d.productListInfo != null) { + if (typeof d.productListInfo !== "object") + throw TypeError(".proto.Message.ListMessage.productListInfo: object expected"); + m.productListInfo = $root.proto.Message.ListMessage.ProductListInfo.fromObject(d.productListInfo); + } + if (d.footerText != null) { + m.footerText = String(d.footerText); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ListMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + ListMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.sections = []; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.buttonText != null && m.hasOwnProperty("buttonText")) { + d.buttonText = m.buttonText; + if (o.oneofs) + d._buttonText = "buttonText"; + } + if (m.listType != null && m.hasOwnProperty("listType")) { + d.listType = o.enums === String ? $root.proto.Message.ListMessage.ListType[m.listType] === undefined ? m.listType : $root.proto.Message.ListMessage.ListType[m.listType] : m.listType; + if (o.oneofs) + d._listType = "listType"; + } + if (m.sections && m.sections.length) { + d.sections = []; + for (var j = 0; j < m.sections.length; ++j) { + d.sections[j] = $root.proto.Message.ListMessage.Section.toObject(m.sections[j], o); + } + } + if (m.productListInfo != null && m.hasOwnProperty("productListInfo")) { + d.productListInfo = $root.proto.Message.ListMessage.ProductListInfo.toObject(m.productListInfo, o); + if (o.oneofs) + d._productListInfo = "productListInfo"; + } + if (m.footerText != null && m.hasOwnProperty("footerText")) { + d.footerText = m.footerText; + if (o.oneofs) + d._footerText = "footerText"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + ListMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ListMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListMessage"; + }; + + ListMessage.ListType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "SINGLE_SELECT"] = 1; + values[valuesById[2] = "PRODUCT_LIST"] = 2; + return values; + })(); + + ListMessage.Product = (function() { + + function Product(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Product.prototype.productId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Product.prototype, "_productId", { + get: $util.oneOfGetter($oneOfFields = ["productId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Product.create = function create(properties) { + return new Product(properties); + }; + + Product.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.productId != null && Object.hasOwnProperty.call(m, "productId")) + w.uint32(10).string(m.productId); + return w; + }; + + Product.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListMessage.Product(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.productId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Product.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListMessage.Product) + return d; + var m = new $root.proto.Message.ListMessage.Product(); + if (d.productId != null) { + m.productId = String(d.productId); + } + return m; + }; + + Product.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.productId != null && m.hasOwnProperty("productId")) { + d.productId = m.productId; + if (o.oneofs) + d._productId = "productId"; + } + return d; + }; + + Product.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Product.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListMessage.Product"; + }; + + return Product; + })(); + + ListMessage.ProductListHeaderImage = (function() { + + function ProductListHeaderImage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProductListHeaderImage.prototype.productId = null; + ProductListHeaderImage.prototype.jpegThumbnail = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductListHeaderImage.prototype, "_productId", { + get: $util.oneOfGetter($oneOfFields = ["productId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductListHeaderImage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProductListHeaderImage.create = function create(properties) { + return new ProductListHeaderImage(properties); + }; + + ProductListHeaderImage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.productId != null && Object.hasOwnProperty.call(m, "productId")) + w.uint32(10).string(m.productId); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(18).bytes(m.jpegThumbnail); + return w; + }; + + ProductListHeaderImage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListMessage.ProductListHeaderImage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.productId = r.string(); + break; + } + case 2: { + m.jpegThumbnail = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProductListHeaderImage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListMessage.ProductListHeaderImage) + return d; + var m = new $root.proto.Message.ListMessage.ProductListHeaderImage(); + if (d.productId != null) { + m.productId = String(d.productId); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + return m; + }; + + ProductListHeaderImage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.productId != null && m.hasOwnProperty("productId")) { + d.productId = m.productId; + if (o.oneofs) + d._productId = "productId"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + return d; + }; + + ProductListHeaderImage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProductListHeaderImage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListMessage.ProductListHeaderImage"; + }; + + return ProductListHeaderImage; + })(); + + ListMessage.ProductListInfo = (function() { + + function ProductListInfo(p) { + this.productSections = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProductListInfo.prototype.productSections = $util.emptyArray; + ProductListInfo.prototype.headerImage = null; + ProductListInfo.prototype.businessOwnerJid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductListInfo.prototype, "_headerImage", { + get: $util.oneOfGetter($oneOfFields = ["headerImage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductListInfo.prototype, "_businessOwnerJid", { + get: $util.oneOfGetter($oneOfFields = ["businessOwnerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProductListInfo.create = function create(properties) { + return new ProductListInfo(properties); + }; + + ProductListInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.productSections != null && m.productSections.length) { + for (var i = 0; i < m.productSections.length; ++i) + $root.proto.Message.ListMessage.ProductSection.encode(m.productSections[i], w.uint32(10).fork()).ldelim(); + } + if (m.headerImage != null && Object.hasOwnProperty.call(m, "headerImage")) + $root.proto.Message.ListMessage.ProductListHeaderImage.encode(m.headerImage, w.uint32(18).fork()).ldelim(); + if (m.businessOwnerJid != null && Object.hasOwnProperty.call(m, "businessOwnerJid")) + w.uint32(26).string(m.businessOwnerJid); + return w; + }; + + ProductListInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListMessage.ProductListInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.productSections && m.productSections.length)) + m.productSections = []; + m.productSections.push($root.proto.Message.ListMessage.ProductSection.decode(r, r.uint32())); + break; + } + case 2: { + m.headerImage = $root.proto.Message.ListMessage.ProductListHeaderImage.decode(r, r.uint32()); + break; + } + case 3: { + m.businessOwnerJid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProductListInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListMessage.ProductListInfo) + return d; + var m = new $root.proto.Message.ListMessage.ProductListInfo(); + if (d.productSections) { + if (!Array.isArray(d.productSections)) + throw TypeError(".proto.Message.ListMessage.ProductListInfo.productSections: array expected"); + m.productSections = []; + for (var i = 0; i < d.productSections.length; ++i) { + if (typeof d.productSections[i] !== "object") + throw TypeError(".proto.Message.ListMessage.ProductListInfo.productSections: object expected"); + m.productSections[i] = $root.proto.Message.ListMessage.ProductSection.fromObject(d.productSections[i]); + } + } + if (d.headerImage != null) { + if (typeof d.headerImage !== "object") + throw TypeError(".proto.Message.ListMessage.ProductListInfo.headerImage: object expected"); + m.headerImage = $root.proto.Message.ListMessage.ProductListHeaderImage.fromObject(d.headerImage); + } + if (d.businessOwnerJid != null) { + m.businessOwnerJid = String(d.businessOwnerJid); + } + return m; + }; + + ProductListInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.productSections = []; + } + if (m.productSections && m.productSections.length) { + d.productSections = []; + for (var j = 0; j < m.productSections.length; ++j) { + d.productSections[j] = $root.proto.Message.ListMessage.ProductSection.toObject(m.productSections[j], o); + } + } + if (m.headerImage != null && m.hasOwnProperty("headerImage")) { + d.headerImage = $root.proto.Message.ListMessage.ProductListHeaderImage.toObject(m.headerImage, o); + if (o.oneofs) + d._headerImage = "headerImage"; + } + if (m.businessOwnerJid != null && m.hasOwnProperty("businessOwnerJid")) { + d.businessOwnerJid = m.businessOwnerJid; + if (o.oneofs) + d._businessOwnerJid = "businessOwnerJid"; + } + return d; + }; + + ProductListInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProductListInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListMessage.ProductListInfo"; + }; + + return ProductListInfo; + })(); + + ListMessage.ProductSection = (function() { + + function ProductSection(p) { + this.products = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProductSection.prototype.title = null; + ProductSection.prototype.products = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSection.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProductSection.create = function create(properties) { + return new ProductSection(properties); + }; + + ProductSection.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.products != null && m.products.length) { + for (var i = 0; i < m.products.length; ++i) + $root.proto.Message.ListMessage.Product.encode(m.products[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + ProductSection.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListMessage.ProductSection(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + if (!(m.products && m.products.length)) + m.products = []; + m.products.push($root.proto.Message.ListMessage.Product.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProductSection.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListMessage.ProductSection) + return d; + var m = new $root.proto.Message.ListMessage.ProductSection(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.products) { + if (!Array.isArray(d.products)) + throw TypeError(".proto.Message.ListMessage.ProductSection.products: array expected"); + m.products = []; + for (var i = 0; i < d.products.length; ++i) { + if (typeof d.products[i] !== "object") + throw TypeError(".proto.Message.ListMessage.ProductSection.products: object expected"); + m.products[i] = $root.proto.Message.ListMessage.Product.fromObject(d.products[i]); + } + } + return m; + }; + + ProductSection.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.products = []; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.products && m.products.length) { + d.products = []; + for (var j = 0; j < m.products.length; ++j) { + d.products[j] = $root.proto.Message.ListMessage.Product.toObject(m.products[j], o); + } + } + return d; + }; + + ProductSection.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProductSection.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListMessage.ProductSection"; + }; + + return ProductSection; + })(); + + ListMessage.Row = (function() { + + function Row(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Row.prototype.title = null; + Row.prototype.description = null; + Row.prototype.rowId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Row.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Row.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Row.prototype, "_rowId", { + get: $util.oneOfGetter($oneOfFields = ["rowId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Row.create = function create(properties) { + return new Row(properties); + }; + + Row.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(18).string(m.description); + if (m.rowId != null && Object.hasOwnProperty.call(m, "rowId")) + w.uint32(26).string(m.rowId); + return w; + }; + + Row.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListMessage.Row(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.description = r.string(); + break; + } + case 3: { + m.rowId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Row.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListMessage.Row) + return d; + var m = new $root.proto.Message.ListMessage.Row(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.rowId != null) { + m.rowId = String(d.rowId); + } + return m; + }; + + Row.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.rowId != null && m.hasOwnProperty("rowId")) { + d.rowId = m.rowId; + if (o.oneofs) + d._rowId = "rowId"; + } + return d; + }; + + Row.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Row.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListMessage.Row"; + }; + + return Row; + })(); + + ListMessage.Section = (function() { + + function Section(p) { + this.rows = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Section.prototype.title = null; + Section.prototype.rows = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Section.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Section.create = function create(properties) { + return new Section(properties); + }; + + Section.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.rows != null && m.rows.length) { + for (var i = 0; i < m.rows.length; ++i) + $root.proto.Message.ListMessage.Row.encode(m.rows[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + Section.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListMessage.Section(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + if (!(m.rows && m.rows.length)) + m.rows = []; + m.rows.push($root.proto.Message.ListMessage.Row.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Section.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListMessage.Section) + return d; + var m = new $root.proto.Message.ListMessage.Section(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.rows) { + if (!Array.isArray(d.rows)) + throw TypeError(".proto.Message.ListMessage.Section.rows: array expected"); + m.rows = []; + for (var i = 0; i < d.rows.length; ++i) { + if (typeof d.rows[i] !== "object") + throw TypeError(".proto.Message.ListMessage.Section.rows: object expected"); + m.rows[i] = $root.proto.Message.ListMessage.Row.fromObject(d.rows[i]); + } + } + return m; + }; + + Section.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.rows = []; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.rows && m.rows.length) { + d.rows = []; + for (var j = 0; j < m.rows.length; ++j) { + d.rows[j] = $root.proto.Message.ListMessage.Row.toObject(m.rows[j], o); + } + } + return d; + }; + + Section.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Section.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListMessage.Section"; + }; + + return Section; + })(); + + return ListMessage; + })(); + + Message.ListResponseMessage = (function() { + + function ListResponseMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ListResponseMessage.prototype.title = null; + ListResponseMessage.prototype.listType = null; + ListResponseMessage.prototype.singleSelectReply = null; + ListResponseMessage.prototype.contextInfo = null; + ListResponseMessage.prototype.description = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListResponseMessage.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListResponseMessage.prototype, "_listType", { + get: $util.oneOfGetter($oneOfFields = ["listType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListResponseMessage.prototype, "_singleSelectReply", { + get: $util.oneOfGetter($oneOfFields = ["singleSelectReply"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListResponseMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ListResponseMessage.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ListResponseMessage.create = function create(properties) { + return new ListResponseMessage(properties); + }; + + ListResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.listType != null && Object.hasOwnProperty.call(m, "listType")) + w.uint32(16).int32(m.listType); + if (m.singleSelectReply != null && Object.hasOwnProperty.call(m, "singleSelectReply")) + $root.proto.Message.ListResponseMessage.SingleSelectReply.encode(m.singleSelectReply, w.uint32(26).fork()).ldelim(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(34).fork()).ldelim(); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(42).string(m.description); + return w; + }; + + ListResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.listType = r.int32(); + break; + } + case 3: { + m.singleSelectReply = $root.proto.Message.ListResponseMessage.SingleSelectReply.decode(r, r.uint32()); + break; + } + case 4: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 5: { + m.description = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ListResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListResponseMessage) + return d; + var m = new $root.proto.Message.ListResponseMessage(); + if (d.title != null) { + m.title = String(d.title); + } + switch (d.listType) { + default: + if (typeof d.listType === "number") { + m.listType = d.listType; + break; + } + break; + case "UNKNOWN": + case 0: + m.listType = 0; + break; + case "SINGLE_SELECT": + case 1: + m.listType = 1; + break; + } + if (d.singleSelectReply != null) { + if (typeof d.singleSelectReply !== "object") + throw TypeError(".proto.Message.ListResponseMessage.singleSelectReply: object expected"); + m.singleSelectReply = $root.proto.Message.ListResponseMessage.SingleSelectReply.fromObject(d.singleSelectReply); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ListResponseMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.description != null) { + m.description = String(d.description); + } + return m; + }; + + ListResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.listType != null && m.hasOwnProperty("listType")) { + d.listType = o.enums === String ? $root.proto.Message.ListResponseMessage.ListType[m.listType] === undefined ? m.listType : $root.proto.Message.ListResponseMessage.ListType[m.listType] : m.listType; + if (o.oneofs) + d._listType = "listType"; + } + if (m.singleSelectReply != null && m.hasOwnProperty("singleSelectReply")) { + d.singleSelectReply = $root.proto.Message.ListResponseMessage.SingleSelectReply.toObject(m.singleSelectReply, o); + if (o.oneofs) + d._singleSelectReply = "singleSelectReply"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + return d; + }; + + ListResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ListResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListResponseMessage"; + }; + + ListResponseMessage.ListType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "SINGLE_SELECT"] = 1; + return values; + })(); + + ListResponseMessage.SingleSelectReply = (function() { + + function SingleSelectReply(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SingleSelectReply.prototype.selectedRowId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SingleSelectReply.prototype, "_selectedRowId", { + get: $util.oneOfGetter($oneOfFields = ["selectedRowId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SingleSelectReply.create = function create(properties) { + return new SingleSelectReply(properties); + }; + + SingleSelectReply.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.selectedRowId != null && Object.hasOwnProperty.call(m, "selectedRowId")) + w.uint32(10).string(m.selectedRowId); + return w; + }; + + SingleSelectReply.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ListResponseMessage.SingleSelectReply(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.selectedRowId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SingleSelectReply.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ListResponseMessage.SingleSelectReply) + return d; + var m = new $root.proto.Message.ListResponseMessage.SingleSelectReply(); + if (d.selectedRowId != null) { + m.selectedRowId = String(d.selectedRowId); + } + return m; + }; + + SingleSelectReply.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.selectedRowId != null && m.hasOwnProperty("selectedRowId")) { + d.selectedRowId = m.selectedRowId; + if (o.oneofs) + d._selectedRowId = "selectedRowId"; + } + return d; + }; + + SingleSelectReply.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SingleSelectReply.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ListResponseMessage.SingleSelectReply"; + }; + + return SingleSelectReply; + })(); + + return ListResponseMessage; + })(); + + Message.LiveLocationMessage = (function() { + + function LiveLocationMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LiveLocationMessage.prototype.degreesLatitude = null; + LiveLocationMessage.prototype.degreesLongitude = null; + LiveLocationMessage.prototype.accuracyInMeters = null; + LiveLocationMessage.prototype.speedInMps = null; + LiveLocationMessage.prototype.degreesClockwiseFromMagneticNorth = null; + LiveLocationMessage.prototype.caption = null; + LiveLocationMessage.prototype.sequenceNumber = null; + LiveLocationMessage.prototype.timeOffset = null; + LiveLocationMessage.prototype.jpegThumbnail = null; + LiveLocationMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_degreesLatitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLatitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_degreesLongitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLongitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_accuracyInMeters", { + get: $util.oneOfGetter($oneOfFields = ["accuracyInMeters"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_speedInMps", { + get: $util.oneOfGetter($oneOfFields = ["speedInMps"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_degreesClockwiseFromMagneticNorth", { + get: $util.oneOfGetter($oneOfFields = ["degreesClockwiseFromMagneticNorth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_sequenceNumber", { + get: $util.oneOfGetter($oneOfFields = ["sequenceNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_timeOffset", { + get: $util.oneOfGetter($oneOfFields = ["timeOffset"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LiveLocationMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LiveLocationMessage.create = function create(properties) { + return new LiveLocationMessage(properties); + }; + + LiveLocationMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.degreesLatitude != null && Object.hasOwnProperty.call(m, "degreesLatitude")) + w.uint32(9).double(m.degreesLatitude); + if (m.degreesLongitude != null && Object.hasOwnProperty.call(m, "degreesLongitude")) + w.uint32(17).double(m.degreesLongitude); + if (m.accuracyInMeters != null && Object.hasOwnProperty.call(m, "accuracyInMeters")) + w.uint32(24).uint32(m.accuracyInMeters); + if (m.speedInMps != null && Object.hasOwnProperty.call(m, "speedInMps")) + w.uint32(37).float(m.speedInMps); + if (m.degreesClockwiseFromMagneticNorth != null && Object.hasOwnProperty.call(m, "degreesClockwiseFromMagneticNorth")) + w.uint32(40).uint32(m.degreesClockwiseFromMagneticNorth); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(50).string(m.caption); + if (m.sequenceNumber != null && Object.hasOwnProperty.call(m, "sequenceNumber")) + w.uint32(56).int64(m.sequenceNumber); + if (m.timeOffset != null && Object.hasOwnProperty.call(m, "timeOffset")) + w.uint32(64).uint32(m.timeOffset); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(130).bytes(m.jpegThumbnail); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + return w; + }; + + LiveLocationMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.LiveLocationMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.degreesLatitude = r.double(); + break; + } + case 2: { + m.degreesLongitude = r.double(); + break; + } + case 3: { + m.accuracyInMeters = r.uint32(); + break; + } + case 4: { + m.speedInMps = r.float(); + break; + } + case 5: { + m.degreesClockwiseFromMagneticNorth = r.uint32(); + break; + } + case 6: { + m.caption = r.string(); + break; + } + case 7: { + m.sequenceNumber = r.int64(); + break; + } + case 8: { + m.timeOffset = r.uint32(); + break; + } + case 16: { + m.jpegThumbnail = r.bytes(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LiveLocationMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.LiveLocationMessage) + return d; + var m = new $root.proto.Message.LiveLocationMessage(); + if (d.degreesLatitude != null) { + m.degreesLatitude = Number(d.degreesLatitude); + } + if (d.degreesLongitude != null) { + m.degreesLongitude = Number(d.degreesLongitude); + } + if (d.accuracyInMeters != null) { + m.accuracyInMeters = d.accuracyInMeters >>> 0; + } + if (d.speedInMps != null) { + m.speedInMps = Number(d.speedInMps); + } + if (d.degreesClockwiseFromMagneticNorth != null) { + m.degreesClockwiseFromMagneticNorth = d.degreesClockwiseFromMagneticNorth >>> 0; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.sequenceNumber != null) { + if ($util.Long) + (m.sequenceNumber = $util.Long.fromValue(d.sequenceNumber)).unsigned = false; + else if (typeof d.sequenceNumber === "string") + m.sequenceNumber = parseInt(d.sequenceNumber, 10); + else if (typeof d.sequenceNumber === "number") + m.sequenceNumber = d.sequenceNumber; + else if (typeof d.sequenceNumber === "object") + m.sequenceNumber = new $util.LongBits(d.sequenceNumber.low >>> 0, d.sequenceNumber.high >>> 0).toNumber(); + } + if (d.timeOffset != null) { + m.timeOffset = d.timeOffset >>> 0; + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.LiveLocationMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + LiveLocationMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.degreesLatitude != null && m.hasOwnProperty("degreesLatitude")) { + d.degreesLatitude = o.json && !isFinite(m.degreesLatitude) ? String(m.degreesLatitude) : m.degreesLatitude; + if (o.oneofs) + d._degreesLatitude = "degreesLatitude"; + } + if (m.degreesLongitude != null && m.hasOwnProperty("degreesLongitude")) { + d.degreesLongitude = o.json && !isFinite(m.degreesLongitude) ? String(m.degreesLongitude) : m.degreesLongitude; + if (o.oneofs) + d._degreesLongitude = "degreesLongitude"; + } + if (m.accuracyInMeters != null && m.hasOwnProperty("accuracyInMeters")) { + d.accuracyInMeters = m.accuracyInMeters; + if (o.oneofs) + d._accuracyInMeters = "accuracyInMeters"; + } + if (m.speedInMps != null && m.hasOwnProperty("speedInMps")) { + d.speedInMps = o.json && !isFinite(m.speedInMps) ? String(m.speedInMps) : m.speedInMps; + if (o.oneofs) + d._speedInMps = "speedInMps"; + } + if (m.degreesClockwiseFromMagneticNorth != null && m.hasOwnProperty("degreesClockwiseFromMagneticNorth")) { + d.degreesClockwiseFromMagneticNorth = m.degreesClockwiseFromMagneticNorth; + if (o.oneofs) + d._degreesClockwiseFromMagneticNorth = "degreesClockwiseFromMagneticNorth"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.sequenceNumber != null && m.hasOwnProperty("sequenceNumber")) { + if (typeof m.sequenceNumber === "number") + d.sequenceNumber = o.longs === String ? String(m.sequenceNumber) : m.sequenceNumber; + else + d.sequenceNumber = o.longs === String ? longToString(m.sequenceNumber) : o.longs === Number ? longToNumber(m.sequenceNumber) : m.sequenceNumber; + if (o.oneofs) + d._sequenceNumber = "sequenceNumber"; + } + if (m.timeOffset != null && m.hasOwnProperty("timeOffset")) { + d.timeOffset = m.timeOffset; + if (o.oneofs) + d._timeOffset = "timeOffset"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + LiveLocationMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LiveLocationMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.LiveLocationMessage"; + }; + + return LiveLocationMessage; + })(); + + Message.LocationMessage = (function() { + + function LocationMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LocationMessage.prototype.degreesLatitude = null; + LocationMessage.prototype.degreesLongitude = null; + LocationMessage.prototype.name = null; + LocationMessage.prototype.address = null; + LocationMessage.prototype.url = null; + LocationMessage.prototype.isLive = null; + LocationMessage.prototype.accuracyInMeters = null; + LocationMessage.prototype.speedInMps = null; + LocationMessage.prototype.degreesClockwiseFromMagneticNorth = null; + LocationMessage.prototype.comment = null; + LocationMessage.prototype.jpegThumbnail = null; + LocationMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_degreesLatitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLatitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_degreesLongitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLongitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_address", { + get: $util.oneOfGetter($oneOfFields = ["address"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_isLive", { + get: $util.oneOfGetter($oneOfFields = ["isLive"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_accuracyInMeters", { + get: $util.oneOfGetter($oneOfFields = ["accuracyInMeters"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_speedInMps", { + get: $util.oneOfGetter($oneOfFields = ["speedInMps"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_degreesClockwiseFromMagneticNorth", { + get: $util.oneOfGetter($oneOfFields = ["degreesClockwiseFromMagneticNorth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_comment", { + get: $util.oneOfGetter($oneOfFields = ["comment"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocationMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LocationMessage.create = function create(properties) { + return new LocationMessage(properties); + }; + + LocationMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.degreesLatitude != null && Object.hasOwnProperty.call(m, "degreesLatitude")) + w.uint32(9).double(m.degreesLatitude); + if (m.degreesLongitude != null && Object.hasOwnProperty.call(m, "degreesLongitude")) + w.uint32(17).double(m.degreesLongitude); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(26).string(m.name); + if (m.address != null && Object.hasOwnProperty.call(m, "address")) + w.uint32(34).string(m.address); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(42).string(m.url); + if (m.isLive != null && Object.hasOwnProperty.call(m, "isLive")) + w.uint32(48).bool(m.isLive); + if (m.accuracyInMeters != null && Object.hasOwnProperty.call(m, "accuracyInMeters")) + w.uint32(56).uint32(m.accuracyInMeters); + if (m.speedInMps != null && Object.hasOwnProperty.call(m, "speedInMps")) + w.uint32(69).float(m.speedInMps); + if (m.degreesClockwiseFromMagneticNorth != null && Object.hasOwnProperty.call(m, "degreesClockwiseFromMagneticNorth")) + w.uint32(72).uint32(m.degreesClockwiseFromMagneticNorth); + if (m.comment != null && Object.hasOwnProperty.call(m, "comment")) + w.uint32(90).string(m.comment); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(130).bytes(m.jpegThumbnail); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + return w; + }; + + LocationMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.LocationMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.degreesLatitude = r.double(); + break; + } + case 2: { + m.degreesLongitude = r.double(); + break; + } + case 3: { + m.name = r.string(); + break; + } + case 4: { + m.address = r.string(); + break; + } + case 5: { + m.url = r.string(); + break; + } + case 6: { + m.isLive = r.bool(); + break; + } + case 7: { + m.accuracyInMeters = r.uint32(); + break; + } + case 8: { + m.speedInMps = r.float(); + break; + } + case 9: { + m.degreesClockwiseFromMagneticNorth = r.uint32(); + break; + } + case 11: { + m.comment = r.string(); + break; + } + case 16: { + m.jpegThumbnail = r.bytes(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LocationMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.LocationMessage) + return d; + var m = new $root.proto.Message.LocationMessage(); + if (d.degreesLatitude != null) { + m.degreesLatitude = Number(d.degreesLatitude); + } + if (d.degreesLongitude != null) { + m.degreesLongitude = Number(d.degreesLongitude); + } + if (d.name != null) { + m.name = String(d.name); + } + if (d.address != null) { + m.address = String(d.address); + } + if (d.url != null) { + m.url = String(d.url); + } + if (d.isLive != null) { + m.isLive = Boolean(d.isLive); + } + if (d.accuracyInMeters != null) { + m.accuracyInMeters = d.accuracyInMeters >>> 0; + } + if (d.speedInMps != null) { + m.speedInMps = Number(d.speedInMps); + } + if (d.degreesClockwiseFromMagneticNorth != null) { + m.degreesClockwiseFromMagneticNorth = d.degreesClockwiseFromMagneticNorth >>> 0; + } + if (d.comment != null) { + m.comment = String(d.comment); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.LocationMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + LocationMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.degreesLatitude != null && m.hasOwnProperty("degreesLatitude")) { + d.degreesLatitude = o.json && !isFinite(m.degreesLatitude) ? String(m.degreesLatitude) : m.degreesLatitude; + if (o.oneofs) + d._degreesLatitude = "degreesLatitude"; + } + if (m.degreesLongitude != null && m.hasOwnProperty("degreesLongitude")) { + d.degreesLongitude = o.json && !isFinite(m.degreesLongitude) ? String(m.degreesLongitude) : m.degreesLongitude; + if (o.oneofs) + d._degreesLongitude = "degreesLongitude"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.address != null && m.hasOwnProperty("address")) { + d.address = m.address; + if (o.oneofs) + d._address = "address"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.isLive != null && m.hasOwnProperty("isLive")) { + d.isLive = m.isLive; + if (o.oneofs) + d._isLive = "isLive"; + } + if (m.accuracyInMeters != null && m.hasOwnProperty("accuracyInMeters")) { + d.accuracyInMeters = m.accuracyInMeters; + if (o.oneofs) + d._accuracyInMeters = "accuracyInMeters"; + } + if (m.speedInMps != null && m.hasOwnProperty("speedInMps")) { + d.speedInMps = o.json && !isFinite(m.speedInMps) ? String(m.speedInMps) : m.speedInMps; + if (o.oneofs) + d._speedInMps = "speedInMps"; + } + if (m.degreesClockwiseFromMagneticNorth != null && m.hasOwnProperty("degreesClockwiseFromMagneticNorth")) { + d.degreesClockwiseFromMagneticNorth = m.degreesClockwiseFromMagneticNorth; + if (o.oneofs) + d._degreesClockwiseFromMagneticNorth = "degreesClockwiseFromMagneticNorth"; + } + if (m.comment != null && m.hasOwnProperty("comment")) { + d.comment = m.comment; + if (o.oneofs) + d._comment = "comment"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + LocationMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LocationMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.LocationMessage"; + }; + + return LocationMessage; + })(); + + Message.MMSThumbnailMetadata = (function() { + + function MMSThumbnailMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MMSThumbnailMetadata.prototype.thumbnailDirectPath = null; + MMSThumbnailMetadata.prototype.thumbnailSha256 = null; + MMSThumbnailMetadata.prototype.thumbnailEncSha256 = null; + MMSThumbnailMetadata.prototype.mediaKey = null; + MMSThumbnailMetadata.prototype.mediaKeyTimestamp = null; + MMSThumbnailMetadata.prototype.thumbnailHeight = null; + MMSThumbnailMetadata.prototype.thumbnailWidth = null; + MMSThumbnailMetadata.prototype.mediaKeyDomain = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_thumbnailDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_thumbnailSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_thumbnailEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_thumbnailHeight", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailHeight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_thumbnailWidth", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailWidth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MMSThumbnailMetadata.prototype, "_mediaKeyDomain", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyDomain"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MMSThumbnailMetadata.create = function create(properties) { + return new MMSThumbnailMetadata(properties); + }; + + MMSThumbnailMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.thumbnailDirectPath != null && Object.hasOwnProperty.call(m, "thumbnailDirectPath")) + w.uint32(10).string(m.thumbnailDirectPath); + if (m.thumbnailSha256 != null && Object.hasOwnProperty.call(m, "thumbnailSha256")) + w.uint32(18).bytes(m.thumbnailSha256); + if (m.thumbnailEncSha256 != null && Object.hasOwnProperty.call(m, "thumbnailEncSha256")) + w.uint32(26).bytes(m.thumbnailEncSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(34).bytes(m.mediaKey); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(40).int64(m.mediaKeyTimestamp); + if (m.thumbnailHeight != null && Object.hasOwnProperty.call(m, "thumbnailHeight")) + w.uint32(48).uint32(m.thumbnailHeight); + if (m.thumbnailWidth != null && Object.hasOwnProperty.call(m, "thumbnailWidth")) + w.uint32(56).uint32(m.thumbnailWidth); + if (m.mediaKeyDomain != null && Object.hasOwnProperty.call(m, "mediaKeyDomain")) + w.uint32(64).int32(m.mediaKeyDomain); + return w; + }; + + MMSThumbnailMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.MMSThumbnailMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.thumbnailDirectPath = r.string(); + break; + } + case 2: { + m.thumbnailSha256 = r.bytes(); + break; + } + case 3: { + m.thumbnailEncSha256 = r.bytes(); + break; + } + case 4: { + m.mediaKey = r.bytes(); + break; + } + case 5: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 6: { + m.thumbnailHeight = r.uint32(); + break; + } + case 7: { + m.thumbnailWidth = r.uint32(); + break; + } + case 8: { + m.mediaKeyDomain = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MMSThumbnailMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.MMSThumbnailMetadata) + return d; + var m = new $root.proto.Message.MMSThumbnailMetadata(); + if (d.thumbnailDirectPath != null) { + m.thumbnailDirectPath = String(d.thumbnailDirectPath); + } + if (d.thumbnailSha256 != null) { + if (typeof d.thumbnailSha256 === "string") + $util.base64.decode(d.thumbnailSha256, m.thumbnailSha256 = $util.newBuffer($util.base64.length(d.thumbnailSha256)), 0); + else if (d.thumbnailSha256.length >= 0) + m.thumbnailSha256 = d.thumbnailSha256; + } + if (d.thumbnailEncSha256 != null) { + if (typeof d.thumbnailEncSha256 === "string") + $util.base64.decode(d.thumbnailEncSha256, m.thumbnailEncSha256 = $util.newBuffer($util.base64.length(d.thumbnailEncSha256)), 0); + else if (d.thumbnailEncSha256.length >= 0) + m.thumbnailEncSha256 = d.thumbnailEncSha256; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.thumbnailHeight != null) { + m.thumbnailHeight = d.thumbnailHeight >>> 0; + } + if (d.thumbnailWidth != null) { + m.thumbnailWidth = d.thumbnailWidth >>> 0; + } + switch (d.mediaKeyDomain) { + default: + if (typeof d.mediaKeyDomain === "number") { + m.mediaKeyDomain = d.mediaKeyDomain; + break; + } + break; + case "UNSET": + case 0: + m.mediaKeyDomain = 0; + break; + case "E2EE_CHAT": + case 1: + m.mediaKeyDomain = 1; + break; + case "STATUS": + case 2: + m.mediaKeyDomain = 2; + break; + case "CAPI": + case 3: + m.mediaKeyDomain = 3; + break; + case "BOT": + case 4: + m.mediaKeyDomain = 4; + break; + } + return m; + }; + + MMSThumbnailMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.thumbnailDirectPath != null && m.hasOwnProperty("thumbnailDirectPath")) { + d.thumbnailDirectPath = m.thumbnailDirectPath; + if (o.oneofs) + d._thumbnailDirectPath = "thumbnailDirectPath"; + } + if (m.thumbnailSha256 != null && m.hasOwnProperty("thumbnailSha256")) { + d.thumbnailSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailSha256, 0, m.thumbnailSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailSha256) : m.thumbnailSha256; + if (o.oneofs) + d._thumbnailSha256 = "thumbnailSha256"; + } + if (m.thumbnailEncSha256 != null && m.hasOwnProperty("thumbnailEncSha256")) { + d.thumbnailEncSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailEncSha256, 0, m.thumbnailEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailEncSha256) : m.thumbnailEncSha256; + if (o.oneofs) + d._thumbnailEncSha256 = "thumbnailEncSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.thumbnailHeight != null && m.hasOwnProperty("thumbnailHeight")) { + d.thumbnailHeight = m.thumbnailHeight; + if (o.oneofs) + d._thumbnailHeight = "thumbnailHeight"; + } + if (m.thumbnailWidth != null && m.hasOwnProperty("thumbnailWidth")) { + d.thumbnailWidth = m.thumbnailWidth; + if (o.oneofs) + d._thumbnailWidth = "thumbnailWidth"; + } + if (m.mediaKeyDomain != null && m.hasOwnProperty("mediaKeyDomain")) { + d.mediaKeyDomain = o.enums === String ? $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] === undefined ? m.mediaKeyDomain : $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] : m.mediaKeyDomain; + if (o.oneofs) + d._mediaKeyDomain = "mediaKeyDomain"; + } + return d; + }; + + MMSThumbnailMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MMSThumbnailMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.MMSThumbnailMetadata"; + }; + + return MMSThumbnailMetadata; + })(); + + Message.MediaKeyDomain = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNSET"] = 0; + values[valuesById[1] = "E2EE_CHAT"] = 1; + values[valuesById[2] = "STATUS"] = 2; + values[valuesById[3] = "CAPI"] = 3; + values[valuesById[4] = "BOT"] = 4; + return values; + })(); + + Message.MessageHistoryBundle = (function() { + + function MessageHistoryBundle(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageHistoryBundle.prototype.mimetype = null; + MessageHistoryBundle.prototype.fileSha256 = null; + MessageHistoryBundle.prototype.mediaKey = null; + MessageHistoryBundle.prototype.fileEncSha256 = null; + MessageHistoryBundle.prototype.directPath = null; + MessageHistoryBundle.prototype.mediaKeyTimestamp = null; + MessageHistoryBundle.prototype.contextInfo = null; + MessageHistoryBundle.prototype.messageHistoryMetadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryBundle.prototype, "_messageHistoryMetadata", { + get: $util.oneOfGetter($oneOfFields = ["messageHistoryMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageHistoryBundle.create = function create(properties) { + return new MessageHistoryBundle(properties); + }; + + MessageHistoryBundle.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(10).string(m.mimetype); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(18).bytes(m.fileSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(26).bytes(m.mediaKey); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(34).bytes(m.fileEncSha256); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(42).string(m.directPath); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(48).int64(m.mediaKeyTimestamp); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(58).fork()).ldelim(); + if (m.messageHistoryMetadata != null && Object.hasOwnProperty.call(m, "messageHistoryMetadata")) + $root.proto.Message.MessageHistoryMetadata.encode(m.messageHistoryMetadata, w.uint32(66).fork()).ldelim(); + return w; + }; + + MessageHistoryBundle.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.MessageHistoryBundle(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.mimetype = r.string(); + break; + } + case 2: { + m.fileSha256 = r.bytes(); + break; + } + case 3: { + m.mediaKey = r.bytes(); + break; + } + case 4: { + m.fileEncSha256 = r.bytes(); + break; + } + case 5: { + m.directPath = r.string(); + break; + } + case 6: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 7: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 8: { + m.messageHistoryMetadata = $root.proto.Message.MessageHistoryMetadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageHistoryBundle.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.MessageHistoryBundle) + return d; + var m = new $root.proto.Message.MessageHistoryBundle(); + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.MessageHistoryBundle.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.messageHistoryMetadata != null) { + if (typeof d.messageHistoryMetadata !== "object") + throw TypeError(".proto.Message.MessageHistoryBundle.messageHistoryMetadata: object expected"); + m.messageHistoryMetadata = $root.proto.Message.MessageHistoryMetadata.fromObject(d.messageHistoryMetadata); + } + return m; + }; + + MessageHistoryBundle.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.messageHistoryMetadata != null && m.hasOwnProperty("messageHistoryMetadata")) { + d.messageHistoryMetadata = $root.proto.Message.MessageHistoryMetadata.toObject(m.messageHistoryMetadata, o); + if (o.oneofs) + d._messageHistoryMetadata = "messageHistoryMetadata"; + } + return d; + }; + + MessageHistoryBundle.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageHistoryBundle.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.MessageHistoryBundle"; + }; + + return MessageHistoryBundle; + })(); + + Message.MessageHistoryMetadata = (function() { + + function MessageHistoryMetadata(p) { + this.historyReceivers = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageHistoryMetadata.prototype.historyReceivers = $util.emptyArray; + MessageHistoryMetadata.prototype.oldestMessageTimestamp = null; + MessageHistoryMetadata.prototype.messageCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryMetadata.prototype, "_oldestMessageTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["oldestMessageTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryMetadata.prototype, "_messageCount", { + get: $util.oneOfGetter($oneOfFields = ["messageCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageHistoryMetadata.create = function create(properties) { + return new MessageHistoryMetadata(properties); + }; + + MessageHistoryMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.historyReceivers != null && m.historyReceivers.length) { + for (var i = 0; i < m.historyReceivers.length; ++i) + w.uint32(10).string(m.historyReceivers[i]); + } + if (m.oldestMessageTimestamp != null && Object.hasOwnProperty.call(m, "oldestMessageTimestamp")) + w.uint32(16).int64(m.oldestMessageTimestamp); + if (m.messageCount != null && Object.hasOwnProperty.call(m, "messageCount")) + w.uint32(24).int64(m.messageCount); + return w; + }; + + MessageHistoryMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.MessageHistoryMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.historyReceivers && m.historyReceivers.length)) + m.historyReceivers = []; + m.historyReceivers.push(r.string()); + break; + } + case 2: { + m.oldestMessageTimestamp = r.int64(); + break; + } + case 3: { + m.messageCount = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageHistoryMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.MessageHistoryMetadata) + return d; + var m = new $root.proto.Message.MessageHistoryMetadata(); + if (d.historyReceivers) { + if (!Array.isArray(d.historyReceivers)) + throw TypeError(".proto.Message.MessageHistoryMetadata.historyReceivers: array expected"); + m.historyReceivers = []; + for (var i = 0; i < d.historyReceivers.length; ++i) { + m.historyReceivers[i] = String(d.historyReceivers[i]); + } + } + if (d.oldestMessageTimestamp != null) { + if ($util.Long) + (m.oldestMessageTimestamp = $util.Long.fromValue(d.oldestMessageTimestamp)).unsigned = false; + else if (typeof d.oldestMessageTimestamp === "string") + m.oldestMessageTimestamp = parseInt(d.oldestMessageTimestamp, 10); + else if (typeof d.oldestMessageTimestamp === "number") + m.oldestMessageTimestamp = d.oldestMessageTimestamp; + else if (typeof d.oldestMessageTimestamp === "object") + m.oldestMessageTimestamp = new $util.LongBits(d.oldestMessageTimestamp.low >>> 0, d.oldestMessageTimestamp.high >>> 0).toNumber(); + } + if (d.messageCount != null) { + if ($util.Long) + (m.messageCount = $util.Long.fromValue(d.messageCount)).unsigned = false; + else if (typeof d.messageCount === "string") + m.messageCount = parseInt(d.messageCount, 10); + else if (typeof d.messageCount === "number") + m.messageCount = d.messageCount; + else if (typeof d.messageCount === "object") + m.messageCount = new $util.LongBits(d.messageCount.low >>> 0, d.messageCount.high >>> 0).toNumber(); + } + return m; + }; + + MessageHistoryMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.historyReceivers = []; + } + if (m.historyReceivers && m.historyReceivers.length) { + d.historyReceivers = []; + for (var j = 0; j < m.historyReceivers.length; ++j) { + d.historyReceivers[j] = m.historyReceivers[j]; + } + } + if (m.oldestMessageTimestamp != null && m.hasOwnProperty("oldestMessageTimestamp")) { + if (typeof m.oldestMessageTimestamp === "number") + d.oldestMessageTimestamp = o.longs === String ? String(m.oldestMessageTimestamp) : m.oldestMessageTimestamp; + else + d.oldestMessageTimestamp = o.longs === String ? longToString(m.oldestMessageTimestamp) : o.longs === Number ? longToNumber(m.oldestMessageTimestamp) : m.oldestMessageTimestamp; + if (o.oneofs) + d._oldestMessageTimestamp = "oldestMessageTimestamp"; + } + if (m.messageCount != null && m.hasOwnProperty("messageCount")) { + if (typeof m.messageCount === "number") + d.messageCount = o.longs === String ? String(m.messageCount) : m.messageCount; + else + d.messageCount = o.longs === String ? longToString(m.messageCount) : o.longs === Number ? longToNumber(m.messageCount) : m.messageCount; + if (o.oneofs) + d._messageCount = "messageCount"; + } + return d; + }; + + MessageHistoryMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageHistoryMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.MessageHistoryMetadata"; + }; + + return MessageHistoryMetadata; + })(); + + Message.MessageHistoryNotice = (function() { + + function MessageHistoryNotice(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageHistoryNotice.prototype.contextInfo = null; + MessageHistoryNotice.prototype.messageHistoryMetadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryNotice.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageHistoryNotice.prototype, "_messageHistoryMetadata", { + get: $util.oneOfGetter($oneOfFields = ["messageHistoryMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageHistoryNotice.create = function create(properties) { + return new MessageHistoryNotice(properties); + }; + + MessageHistoryNotice.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(10).fork()).ldelim(); + if (m.messageHistoryMetadata != null && Object.hasOwnProperty.call(m, "messageHistoryMetadata")) + $root.proto.Message.MessageHistoryMetadata.encode(m.messageHistoryMetadata, w.uint32(18).fork()).ldelim(); + return w; + }; + + MessageHistoryNotice.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.MessageHistoryNotice(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 2: { + m.messageHistoryMetadata = $root.proto.Message.MessageHistoryMetadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageHistoryNotice.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.MessageHistoryNotice) + return d; + var m = new $root.proto.Message.MessageHistoryNotice(); + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.MessageHistoryNotice.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.messageHistoryMetadata != null) { + if (typeof d.messageHistoryMetadata !== "object") + throw TypeError(".proto.Message.MessageHistoryNotice.messageHistoryMetadata: object expected"); + m.messageHistoryMetadata = $root.proto.Message.MessageHistoryMetadata.fromObject(d.messageHistoryMetadata); + } + return m; + }; + + MessageHistoryNotice.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.messageHistoryMetadata != null && m.hasOwnProperty("messageHistoryMetadata")) { + d.messageHistoryMetadata = $root.proto.Message.MessageHistoryMetadata.toObject(m.messageHistoryMetadata, o); + if (o.oneofs) + d._messageHistoryMetadata = "messageHistoryMetadata"; + } + return d; + }; + + MessageHistoryNotice.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageHistoryNotice.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.MessageHistoryNotice"; + }; + + return MessageHistoryNotice; + })(); + + Message.NewsletterAdminInviteMessage = (function() { + + function NewsletterAdminInviteMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NewsletterAdminInviteMessage.prototype.newsletterJid = null; + NewsletterAdminInviteMessage.prototype.newsletterName = null; + NewsletterAdminInviteMessage.prototype.jpegThumbnail = null; + NewsletterAdminInviteMessage.prototype.caption = null; + NewsletterAdminInviteMessage.prototype.inviteExpiration = null; + NewsletterAdminInviteMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterAdminInviteMessage.prototype, "_newsletterJid", { + get: $util.oneOfGetter($oneOfFields = ["newsletterJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterAdminInviteMessage.prototype, "_newsletterName", { + get: $util.oneOfGetter($oneOfFields = ["newsletterName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterAdminInviteMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterAdminInviteMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterAdminInviteMessage.prototype, "_inviteExpiration", { + get: $util.oneOfGetter($oneOfFields = ["inviteExpiration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterAdminInviteMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NewsletterAdminInviteMessage.create = function create(properties) { + return new NewsletterAdminInviteMessage(properties); + }; + + NewsletterAdminInviteMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.newsletterJid != null && Object.hasOwnProperty.call(m, "newsletterJid")) + w.uint32(10).string(m.newsletterJid); + if (m.newsletterName != null && Object.hasOwnProperty.call(m, "newsletterName")) + w.uint32(18).string(m.newsletterName); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(26).bytes(m.jpegThumbnail); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(34).string(m.caption); + if (m.inviteExpiration != null && Object.hasOwnProperty.call(m, "inviteExpiration")) + w.uint32(40).int64(m.inviteExpiration); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(50).fork()).ldelim(); + return w; + }; + + NewsletterAdminInviteMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.NewsletterAdminInviteMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.newsletterJid = r.string(); + break; + } + case 2: { + m.newsletterName = r.string(); + break; + } + case 3: { + m.jpegThumbnail = r.bytes(); + break; + } + case 4: { + m.caption = r.string(); + break; + } + case 5: { + m.inviteExpiration = r.int64(); + break; + } + case 6: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NewsletterAdminInviteMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.NewsletterAdminInviteMessage) + return d; + var m = new $root.proto.Message.NewsletterAdminInviteMessage(); + if (d.newsletterJid != null) { + m.newsletterJid = String(d.newsletterJid); + } + if (d.newsletterName != null) { + m.newsletterName = String(d.newsletterName); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.inviteExpiration != null) { + if ($util.Long) + (m.inviteExpiration = $util.Long.fromValue(d.inviteExpiration)).unsigned = false; + else if (typeof d.inviteExpiration === "string") + m.inviteExpiration = parseInt(d.inviteExpiration, 10); + else if (typeof d.inviteExpiration === "number") + m.inviteExpiration = d.inviteExpiration; + else if (typeof d.inviteExpiration === "object") + m.inviteExpiration = new $util.LongBits(d.inviteExpiration.low >>> 0, d.inviteExpiration.high >>> 0).toNumber(); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.NewsletterAdminInviteMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + NewsletterAdminInviteMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.newsletterJid != null && m.hasOwnProperty("newsletterJid")) { + d.newsletterJid = m.newsletterJid; + if (o.oneofs) + d._newsletterJid = "newsletterJid"; + } + if (m.newsletterName != null && m.hasOwnProperty("newsletterName")) { + d.newsletterName = m.newsletterName; + if (o.oneofs) + d._newsletterName = "newsletterName"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.inviteExpiration != null && m.hasOwnProperty("inviteExpiration")) { + if (typeof m.inviteExpiration === "number") + d.inviteExpiration = o.longs === String ? String(m.inviteExpiration) : m.inviteExpiration; + else + d.inviteExpiration = o.longs === String ? longToString(m.inviteExpiration) : o.longs === Number ? longToNumber(m.inviteExpiration) : m.inviteExpiration; + if (o.oneofs) + d._inviteExpiration = "inviteExpiration"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + NewsletterAdminInviteMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NewsletterAdminInviteMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.NewsletterAdminInviteMessage"; + }; + + return NewsletterAdminInviteMessage; + })(); + + Message.NewsletterFollowerInviteMessage = (function() { + + function NewsletterFollowerInviteMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NewsletterFollowerInviteMessage.prototype.newsletterJid = null; + NewsletterFollowerInviteMessage.prototype.newsletterName = null; + NewsletterFollowerInviteMessage.prototype.jpegThumbnail = null; + NewsletterFollowerInviteMessage.prototype.caption = null; + NewsletterFollowerInviteMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterFollowerInviteMessage.prototype, "_newsletterJid", { + get: $util.oneOfGetter($oneOfFields = ["newsletterJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterFollowerInviteMessage.prototype, "_newsletterName", { + get: $util.oneOfGetter($oneOfFields = ["newsletterName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterFollowerInviteMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterFollowerInviteMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterFollowerInviteMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NewsletterFollowerInviteMessage.create = function create(properties) { + return new NewsletterFollowerInviteMessage(properties); + }; + + NewsletterFollowerInviteMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.newsletterJid != null && Object.hasOwnProperty.call(m, "newsletterJid")) + w.uint32(10).string(m.newsletterJid); + if (m.newsletterName != null && Object.hasOwnProperty.call(m, "newsletterName")) + w.uint32(18).string(m.newsletterName); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(26).bytes(m.jpegThumbnail); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(34).string(m.caption); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(42).fork()).ldelim(); + return w; + }; + + NewsletterFollowerInviteMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.NewsletterFollowerInviteMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.newsletterJid = r.string(); + break; + } + case 2: { + m.newsletterName = r.string(); + break; + } + case 3: { + m.jpegThumbnail = r.bytes(); + break; + } + case 4: { + m.caption = r.string(); + break; + } + case 5: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NewsletterFollowerInviteMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.NewsletterFollowerInviteMessage) + return d; + var m = new $root.proto.Message.NewsletterFollowerInviteMessage(); + if (d.newsletterJid != null) { + m.newsletterJid = String(d.newsletterJid); + } + if (d.newsletterName != null) { + m.newsletterName = String(d.newsletterName); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.NewsletterFollowerInviteMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + NewsletterFollowerInviteMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.newsletterJid != null && m.hasOwnProperty("newsletterJid")) { + d.newsletterJid = m.newsletterJid; + if (o.oneofs) + d._newsletterJid = "newsletterJid"; + } + if (m.newsletterName != null && m.hasOwnProperty("newsletterName")) { + d.newsletterName = m.newsletterName; + if (o.oneofs) + d._newsletterName = "newsletterName"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + NewsletterFollowerInviteMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NewsletterFollowerInviteMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.NewsletterFollowerInviteMessage"; + }; + + return NewsletterFollowerInviteMessage; + })(); + + Message.OrderMessage = (function() { + + function OrderMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + OrderMessage.prototype.orderId = null; + OrderMessage.prototype.thumbnail = null; + OrderMessage.prototype.itemCount = null; + OrderMessage.prototype.status = null; + OrderMessage.prototype.surface = null; + OrderMessage.prototype.message = null; + OrderMessage.prototype.orderTitle = null; + OrderMessage.prototype.sellerJid = null; + OrderMessage.prototype.token = null; + OrderMessage.prototype.totalAmount1000 = null; + OrderMessage.prototype.totalCurrencyCode = null; + OrderMessage.prototype.contextInfo = null; + OrderMessage.prototype.messageVersion = null; + OrderMessage.prototype.orderRequestMessageId = null; + OrderMessage.prototype.catalogType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_orderId", { + get: $util.oneOfGetter($oneOfFields = ["orderId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_thumbnail", { + get: $util.oneOfGetter($oneOfFields = ["thumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_itemCount", { + get: $util.oneOfGetter($oneOfFields = ["itemCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_status", { + get: $util.oneOfGetter($oneOfFields = ["status"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_surface", { + get: $util.oneOfGetter($oneOfFields = ["surface"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_orderTitle", { + get: $util.oneOfGetter($oneOfFields = ["orderTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_sellerJid", { + get: $util.oneOfGetter($oneOfFields = ["sellerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_token", { + get: $util.oneOfGetter($oneOfFields = ["token"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_totalAmount1000", { + get: $util.oneOfGetter($oneOfFields = ["totalAmount1000"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_totalCurrencyCode", { + get: $util.oneOfGetter($oneOfFields = ["totalCurrencyCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_messageVersion", { + get: $util.oneOfGetter($oneOfFields = ["messageVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_orderRequestMessageId", { + get: $util.oneOfGetter($oneOfFields = ["orderRequestMessageId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(OrderMessage.prototype, "_catalogType", { + get: $util.oneOfGetter($oneOfFields = ["catalogType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + OrderMessage.create = function create(properties) { + return new OrderMessage(properties); + }; + + OrderMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.orderId != null && Object.hasOwnProperty.call(m, "orderId")) + w.uint32(10).string(m.orderId); + if (m.thumbnail != null && Object.hasOwnProperty.call(m, "thumbnail")) + w.uint32(18).bytes(m.thumbnail); + if (m.itemCount != null && Object.hasOwnProperty.call(m, "itemCount")) + w.uint32(24).int32(m.itemCount); + if (m.status != null && Object.hasOwnProperty.call(m, "status")) + w.uint32(32).int32(m.status); + if (m.surface != null && Object.hasOwnProperty.call(m, "surface")) + w.uint32(40).int32(m.surface); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + w.uint32(50).string(m.message); + if (m.orderTitle != null && Object.hasOwnProperty.call(m, "orderTitle")) + w.uint32(58).string(m.orderTitle); + if (m.sellerJid != null && Object.hasOwnProperty.call(m, "sellerJid")) + w.uint32(66).string(m.sellerJid); + if (m.token != null && Object.hasOwnProperty.call(m, "token")) + w.uint32(74).string(m.token); + if (m.totalAmount1000 != null && Object.hasOwnProperty.call(m, "totalAmount1000")) + w.uint32(80).int64(m.totalAmount1000); + if (m.totalCurrencyCode != null && Object.hasOwnProperty.call(m, "totalCurrencyCode")) + w.uint32(90).string(m.totalCurrencyCode); + if (m.messageVersion != null && Object.hasOwnProperty.call(m, "messageVersion")) + w.uint32(96).int32(m.messageVersion); + if (m.orderRequestMessageId != null && Object.hasOwnProperty.call(m, "orderRequestMessageId")) + $root.proto.MessageKey.encode(m.orderRequestMessageId, w.uint32(106).fork()).ldelim(); + if (m.catalogType != null && Object.hasOwnProperty.call(m, "catalogType")) + w.uint32(122).string(m.catalogType); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + return w; + }; + + OrderMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.OrderMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.orderId = r.string(); + break; + } + case 2: { + m.thumbnail = r.bytes(); + break; + } + case 3: { + m.itemCount = r.int32(); + break; + } + case 4: { + m.status = r.int32(); + break; + } + case 5: { + m.surface = r.int32(); + break; + } + case 6: { + m.message = r.string(); + break; + } + case 7: { + m.orderTitle = r.string(); + break; + } + case 8: { + m.sellerJid = r.string(); + break; + } + case 9: { + m.token = r.string(); + break; + } + case 10: { + m.totalAmount1000 = r.int64(); + break; + } + case 11: { + m.totalCurrencyCode = r.string(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 12: { + m.messageVersion = r.int32(); + break; + } + case 13: { + m.orderRequestMessageId = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 15: { + m.catalogType = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + OrderMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.OrderMessage) + return d; + var m = new $root.proto.Message.OrderMessage(); + if (d.orderId != null) { + m.orderId = String(d.orderId); + } + if (d.thumbnail != null) { + if (typeof d.thumbnail === "string") + $util.base64.decode(d.thumbnail, m.thumbnail = $util.newBuffer($util.base64.length(d.thumbnail)), 0); + else if (d.thumbnail.length >= 0) + m.thumbnail = d.thumbnail; + } + if (d.itemCount != null) { + m.itemCount = d.itemCount | 0; + } + switch (d.status) { + default: + if (typeof d.status === "number") { + m.status = d.status; + break; + } + break; + case "INQUIRY": + case 1: + m.status = 1; + break; + case "ACCEPTED": + case 2: + m.status = 2; + break; + case "DECLINED": + case 3: + m.status = 3; + break; + } + switch (d.surface) { + default: + if (typeof d.surface === "number") { + m.surface = d.surface; + break; + } + break; + case "CATALOG": + case 1: + m.surface = 1; + break; + } + if (d.message != null) { + m.message = String(d.message); + } + if (d.orderTitle != null) { + m.orderTitle = String(d.orderTitle); + } + if (d.sellerJid != null) { + m.sellerJid = String(d.sellerJid); + } + if (d.token != null) { + m.token = String(d.token); + } + if (d.totalAmount1000 != null) { + if ($util.Long) + (m.totalAmount1000 = $util.Long.fromValue(d.totalAmount1000)).unsigned = false; + else if (typeof d.totalAmount1000 === "string") + m.totalAmount1000 = parseInt(d.totalAmount1000, 10); + else if (typeof d.totalAmount1000 === "number") + m.totalAmount1000 = d.totalAmount1000; + else if (typeof d.totalAmount1000 === "object") + m.totalAmount1000 = new $util.LongBits(d.totalAmount1000.low >>> 0, d.totalAmount1000.high >>> 0).toNumber(); + } + if (d.totalCurrencyCode != null) { + m.totalCurrencyCode = String(d.totalCurrencyCode); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.OrderMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.messageVersion != null) { + m.messageVersion = d.messageVersion | 0; + } + if (d.orderRequestMessageId != null) { + if (typeof d.orderRequestMessageId !== "object") + throw TypeError(".proto.Message.OrderMessage.orderRequestMessageId: object expected"); + m.orderRequestMessageId = $root.proto.MessageKey.fromObject(d.orderRequestMessageId); + } + if (d.catalogType != null) { + m.catalogType = String(d.catalogType); + } + return m; + }; + + OrderMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.orderId != null && m.hasOwnProperty("orderId")) { + d.orderId = m.orderId; + if (o.oneofs) + d._orderId = "orderId"; + } + if (m.thumbnail != null && m.hasOwnProperty("thumbnail")) { + d.thumbnail = o.bytes === String ? $util.base64.encode(m.thumbnail, 0, m.thumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnail) : m.thumbnail; + if (o.oneofs) + d._thumbnail = "thumbnail"; + } + if (m.itemCount != null && m.hasOwnProperty("itemCount")) { + d.itemCount = m.itemCount; + if (o.oneofs) + d._itemCount = "itemCount"; + } + if (m.status != null && m.hasOwnProperty("status")) { + d.status = o.enums === String ? $root.proto.Message.OrderMessage.OrderStatus[m.status] === undefined ? m.status : $root.proto.Message.OrderMessage.OrderStatus[m.status] : m.status; + if (o.oneofs) + d._status = "status"; + } + if (m.surface != null && m.hasOwnProperty("surface")) { + d.surface = o.enums === String ? $root.proto.Message.OrderMessage.OrderSurface[m.surface] === undefined ? m.surface : $root.proto.Message.OrderMessage.OrderSurface[m.surface] : m.surface; + if (o.oneofs) + d._surface = "surface"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = m.message; + if (o.oneofs) + d._message = "message"; + } + if (m.orderTitle != null && m.hasOwnProperty("orderTitle")) { + d.orderTitle = m.orderTitle; + if (o.oneofs) + d._orderTitle = "orderTitle"; + } + if (m.sellerJid != null && m.hasOwnProperty("sellerJid")) { + d.sellerJid = m.sellerJid; + if (o.oneofs) + d._sellerJid = "sellerJid"; + } + if (m.token != null && m.hasOwnProperty("token")) { + d.token = m.token; + if (o.oneofs) + d._token = "token"; + } + if (m.totalAmount1000 != null && m.hasOwnProperty("totalAmount1000")) { + if (typeof m.totalAmount1000 === "number") + d.totalAmount1000 = o.longs === String ? String(m.totalAmount1000) : m.totalAmount1000; + else + d.totalAmount1000 = o.longs === String ? longToString(m.totalAmount1000) : o.longs === Number ? longToNumber(m.totalAmount1000) : m.totalAmount1000; + if (o.oneofs) + d._totalAmount1000 = "totalAmount1000"; + } + if (m.totalCurrencyCode != null && m.hasOwnProperty("totalCurrencyCode")) { + d.totalCurrencyCode = m.totalCurrencyCode; + if (o.oneofs) + d._totalCurrencyCode = "totalCurrencyCode"; + } + if (m.messageVersion != null && m.hasOwnProperty("messageVersion")) { + d.messageVersion = m.messageVersion; + if (o.oneofs) + d._messageVersion = "messageVersion"; + } + if (m.orderRequestMessageId != null && m.hasOwnProperty("orderRequestMessageId")) { + d.orderRequestMessageId = $root.proto.MessageKey.toObject(m.orderRequestMessageId, o); + if (o.oneofs) + d._orderRequestMessageId = "orderRequestMessageId"; + } + if (m.catalogType != null && m.hasOwnProperty("catalogType")) { + d.catalogType = m.catalogType; + if (o.oneofs) + d._catalogType = "catalogType"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + OrderMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + OrderMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.OrderMessage"; + }; + + OrderMessage.OrderStatus = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "INQUIRY"] = 1; + values[valuesById[2] = "ACCEPTED"] = 2; + values[valuesById[3] = "DECLINED"] = 3; + return values; + })(); + + OrderMessage.OrderSurface = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "CATALOG"] = 1; + return values; + })(); + + return OrderMessage; + })(); + + Message.PaymentExtendedMetadata = (function() { + + function PaymentExtendedMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentExtendedMetadata.prototype.type = null; + PaymentExtendedMetadata.prototype.platform = null; + PaymentExtendedMetadata.prototype.messageParamsJson = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentExtendedMetadata.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentExtendedMetadata.prototype, "_platform", { + get: $util.oneOfGetter($oneOfFields = ["platform"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentExtendedMetadata.prototype, "_messageParamsJson", { + get: $util.oneOfGetter($oneOfFields = ["messageParamsJson"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentExtendedMetadata.create = function create(properties) { + return new PaymentExtendedMetadata(properties); + }; + + PaymentExtendedMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).uint32(m.type); + if (m.platform != null && Object.hasOwnProperty.call(m, "platform")) + w.uint32(18).string(m.platform); + if (m.messageParamsJson != null && Object.hasOwnProperty.call(m, "messageParamsJson")) + w.uint32(26).string(m.messageParamsJson); + return w; + }; + + PaymentExtendedMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PaymentExtendedMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.uint32(); + break; + } + case 2: { + m.platform = r.string(); + break; + } + case 3: { + m.messageParamsJson = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentExtendedMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PaymentExtendedMetadata) + return d; + var m = new $root.proto.Message.PaymentExtendedMetadata(); + if (d.type != null) { + m.type = d.type >>> 0; + } + if (d.platform != null) { + m.platform = String(d.platform); + } + if (d.messageParamsJson != null) { + m.messageParamsJson = String(d.messageParamsJson); + } + return m; + }; + + PaymentExtendedMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.platform != null && m.hasOwnProperty("platform")) { + d.platform = m.platform; + if (o.oneofs) + d._platform = "platform"; + } + if (m.messageParamsJson != null && m.hasOwnProperty("messageParamsJson")) { + d.messageParamsJson = m.messageParamsJson; + if (o.oneofs) + d._messageParamsJson = "messageParamsJson"; + } + return d; + }; + + PaymentExtendedMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentExtendedMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PaymentExtendedMetadata"; + }; + + return PaymentExtendedMetadata; + })(); + + Message.PaymentInviteMessage = (function() { + + function PaymentInviteMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentInviteMessage.prototype.serviceType = null; + PaymentInviteMessage.prototype.expiryTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInviteMessage.prototype, "_serviceType", { + get: $util.oneOfGetter($oneOfFields = ["serviceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInviteMessage.prototype, "_expiryTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["expiryTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentInviteMessage.create = function create(properties) { + return new PaymentInviteMessage(properties); + }; + + PaymentInviteMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.serviceType != null && Object.hasOwnProperty.call(m, "serviceType")) + w.uint32(8).int32(m.serviceType); + if (m.expiryTimestamp != null && Object.hasOwnProperty.call(m, "expiryTimestamp")) + w.uint32(16).int64(m.expiryTimestamp); + return w; + }; + + PaymentInviteMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PaymentInviteMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.serviceType = r.int32(); + break; + } + case 2: { + m.expiryTimestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentInviteMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PaymentInviteMessage) + return d; + var m = new $root.proto.Message.PaymentInviteMessage(); + switch (d.serviceType) { + default: + if (typeof d.serviceType === "number") { + m.serviceType = d.serviceType; + break; + } + break; + case "UNKNOWN": + case 0: + m.serviceType = 0; + break; + case "FBPAY": + case 1: + m.serviceType = 1; + break; + case "NOVI": + case 2: + m.serviceType = 2; + break; + case "UPI": + case 3: + m.serviceType = 3; + break; + } + if (d.expiryTimestamp != null) { + if ($util.Long) + (m.expiryTimestamp = $util.Long.fromValue(d.expiryTimestamp)).unsigned = false; + else if (typeof d.expiryTimestamp === "string") + m.expiryTimestamp = parseInt(d.expiryTimestamp, 10); + else if (typeof d.expiryTimestamp === "number") + m.expiryTimestamp = d.expiryTimestamp; + else if (typeof d.expiryTimestamp === "object") + m.expiryTimestamp = new $util.LongBits(d.expiryTimestamp.low >>> 0, d.expiryTimestamp.high >>> 0).toNumber(); + } + return m; + }; + + PaymentInviteMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.serviceType != null && m.hasOwnProperty("serviceType")) { + d.serviceType = o.enums === String ? $root.proto.Message.PaymentInviteMessage.ServiceType[m.serviceType] === undefined ? m.serviceType : $root.proto.Message.PaymentInviteMessage.ServiceType[m.serviceType] : m.serviceType; + if (o.oneofs) + d._serviceType = "serviceType"; + } + if (m.expiryTimestamp != null && m.hasOwnProperty("expiryTimestamp")) { + if (typeof m.expiryTimestamp === "number") + d.expiryTimestamp = o.longs === String ? String(m.expiryTimestamp) : m.expiryTimestamp; + else + d.expiryTimestamp = o.longs === String ? longToString(m.expiryTimestamp) : o.longs === Number ? longToNumber(m.expiryTimestamp) : m.expiryTimestamp; + if (o.oneofs) + d._expiryTimestamp = "expiryTimestamp"; + } + return d; + }; + + PaymentInviteMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentInviteMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PaymentInviteMessage"; + }; + + PaymentInviteMessage.ServiceType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "FBPAY"] = 1; + values[valuesById[2] = "NOVI"] = 2; + values[valuesById[3] = "UPI"] = 3; + return values; + })(); + + return PaymentInviteMessage; + })(); + + Message.PaymentLinkMetadata = (function() { + + function PaymentLinkMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentLinkMetadata.prototype.button = null; + PaymentLinkMetadata.prototype.header = null; + PaymentLinkMetadata.prototype.provider = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkMetadata.prototype, "_button", { + get: $util.oneOfGetter($oneOfFields = ["button"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkMetadata.prototype, "_header", { + get: $util.oneOfGetter($oneOfFields = ["header"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkMetadata.prototype, "_provider", { + get: $util.oneOfGetter($oneOfFields = ["provider"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentLinkMetadata.create = function create(properties) { + return new PaymentLinkMetadata(properties); + }; + + PaymentLinkMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.button != null && Object.hasOwnProperty.call(m, "button")) + $root.proto.Message.PaymentLinkMetadata.PaymentLinkButton.encode(m.button, w.uint32(10).fork()).ldelim(); + if (m.header != null && Object.hasOwnProperty.call(m, "header")) + $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader.encode(m.header, w.uint32(18).fork()).ldelim(); + if (m.provider != null && Object.hasOwnProperty.call(m, "provider")) + $root.proto.Message.PaymentLinkMetadata.PaymentLinkProvider.encode(m.provider, w.uint32(26).fork()).ldelim(); + return w; + }; + + PaymentLinkMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PaymentLinkMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.button = $root.proto.Message.PaymentLinkMetadata.PaymentLinkButton.decode(r, r.uint32()); + break; + } + case 2: { + m.header = $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader.decode(r, r.uint32()); + break; + } + case 3: { + m.provider = $root.proto.Message.PaymentLinkMetadata.PaymentLinkProvider.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentLinkMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PaymentLinkMetadata) + return d; + var m = new $root.proto.Message.PaymentLinkMetadata(); + if (d.button != null) { + if (typeof d.button !== "object") + throw TypeError(".proto.Message.PaymentLinkMetadata.button: object expected"); + m.button = $root.proto.Message.PaymentLinkMetadata.PaymentLinkButton.fromObject(d.button); + } + if (d.header != null) { + if (typeof d.header !== "object") + throw TypeError(".proto.Message.PaymentLinkMetadata.header: object expected"); + m.header = $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader.fromObject(d.header); + } + if (d.provider != null) { + if (typeof d.provider !== "object") + throw TypeError(".proto.Message.PaymentLinkMetadata.provider: object expected"); + m.provider = $root.proto.Message.PaymentLinkMetadata.PaymentLinkProvider.fromObject(d.provider); + } + return m; + }; + + PaymentLinkMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.button != null && m.hasOwnProperty("button")) { + d.button = $root.proto.Message.PaymentLinkMetadata.PaymentLinkButton.toObject(m.button, o); + if (o.oneofs) + d._button = "button"; + } + if (m.header != null && m.hasOwnProperty("header")) { + d.header = $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader.toObject(m.header, o); + if (o.oneofs) + d._header = "header"; + } + if (m.provider != null && m.hasOwnProperty("provider")) { + d.provider = $root.proto.Message.PaymentLinkMetadata.PaymentLinkProvider.toObject(m.provider, o); + if (o.oneofs) + d._provider = "provider"; + } + return d; + }; + + PaymentLinkMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentLinkMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PaymentLinkMetadata"; + }; + + PaymentLinkMetadata.PaymentLinkButton = (function() { + + function PaymentLinkButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentLinkButton.prototype.displayText = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkButton.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentLinkButton.create = function create(properties) { + return new PaymentLinkButton(properties); + }; + + PaymentLinkButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + w.uint32(10).string(m.displayText); + return w; + }; + + PaymentLinkButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PaymentLinkMetadata.PaymentLinkButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentLinkButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PaymentLinkMetadata.PaymentLinkButton) + return d; + var m = new $root.proto.Message.PaymentLinkMetadata.PaymentLinkButton(); + if (d.displayText != null) { + m.displayText = String(d.displayText); + } + return m; + }; + + PaymentLinkButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = m.displayText; + if (o.oneofs) + d._displayText = "displayText"; + } + return d; + }; + + PaymentLinkButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentLinkButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PaymentLinkMetadata.PaymentLinkButton"; + }; + + return PaymentLinkButton; + })(); + + PaymentLinkMetadata.PaymentLinkHeader = (function() { + + function PaymentLinkHeader(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentLinkHeader.prototype.headerType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkHeader.prototype, "_headerType", { + get: $util.oneOfGetter($oneOfFields = ["headerType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentLinkHeader.create = function create(properties) { + return new PaymentLinkHeader(properties); + }; + + PaymentLinkHeader.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.headerType != null && Object.hasOwnProperty.call(m, "headerType")) + w.uint32(8).int32(m.headerType); + return w; + }; + + PaymentLinkHeader.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.headerType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentLinkHeader.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader) + return d; + var m = new $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader(); + switch (d.headerType) { + default: + if (typeof d.headerType === "number") { + m.headerType = d.headerType; + break; + } + break; + case "LINK_PREVIEW": + case 0: + m.headerType = 0; + break; + case "ORDER": + case 1: + m.headerType = 1; + break; + } + return m; + }; + + PaymentLinkHeader.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.headerType != null && m.hasOwnProperty("headerType")) { + d.headerType = o.enums === String ? $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType[m.headerType] === undefined ? m.headerType : $root.proto.Message.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType[m.headerType] : m.headerType; + if (o.oneofs) + d._headerType = "headerType"; + } + return d; + }; + + PaymentLinkHeader.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentLinkHeader.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PaymentLinkMetadata.PaymentLinkHeader"; + }; + + PaymentLinkHeader.PaymentLinkHeaderType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "LINK_PREVIEW"] = 0; + values[valuesById[1] = "ORDER"] = 1; + return values; + })(); + + return PaymentLinkHeader; + })(); + + PaymentLinkMetadata.PaymentLinkProvider = (function() { + + function PaymentLinkProvider(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentLinkProvider.prototype.paramsJson = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkProvider.prototype, "_paramsJson", { + get: $util.oneOfGetter($oneOfFields = ["paramsJson"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentLinkProvider.create = function create(properties) { + return new PaymentLinkProvider(properties); + }; + + PaymentLinkProvider.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.paramsJson != null && Object.hasOwnProperty.call(m, "paramsJson")) + w.uint32(10).string(m.paramsJson); + return w; + }; + + PaymentLinkProvider.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PaymentLinkMetadata.PaymentLinkProvider(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.paramsJson = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentLinkProvider.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PaymentLinkMetadata.PaymentLinkProvider) + return d; + var m = new $root.proto.Message.PaymentLinkMetadata.PaymentLinkProvider(); + if (d.paramsJson != null) { + m.paramsJson = String(d.paramsJson); + } + return m; + }; + + PaymentLinkProvider.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.paramsJson != null && m.hasOwnProperty("paramsJson")) { + d.paramsJson = m.paramsJson; + if (o.oneofs) + d._paramsJson = "paramsJson"; + } + return d; + }; + + PaymentLinkProvider.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentLinkProvider.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PaymentLinkMetadata.PaymentLinkProvider"; + }; + + return PaymentLinkProvider; + })(); + + return PaymentLinkMetadata; + })(); + + Message.PeerDataOperationRequestMessage = (function() { + + function PeerDataOperationRequestMessage(p) { + this.requestStickerReupload = []; + this.requestUrlPreview = []; + this.placeholderMessageResendRequest = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PeerDataOperationRequestMessage.prototype.peerDataOperationRequestType = null; + PeerDataOperationRequestMessage.prototype.requestStickerReupload = $util.emptyArray; + PeerDataOperationRequestMessage.prototype.requestUrlPreview = $util.emptyArray; + PeerDataOperationRequestMessage.prototype.historySyncOnDemandRequest = null; + PeerDataOperationRequestMessage.prototype.placeholderMessageResendRequest = $util.emptyArray; + PeerDataOperationRequestMessage.prototype.fullHistorySyncOnDemandRequest = null; + PeerDataOperationRequestMessage.prototype.syncdCollectionFatalRecoveryRequest = null; + PeerDataOperationRequestMessage.prototype.historySyncChunkRetryRequest = null; + PeerDataOperationRequestMessage.prototype.galaxyFlowAction = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestMessage.prototype, "_peerDataOperationRequestType", { + get: $util.oneOfGetter($oneOfFields = ["peerDataOperationRequestType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestMessage.prototype, "_historySyncOnDemandRequest", { + get: $util.oneOfGetter($oneOfFields = ["historySyncOnDemandRequest"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestMessage.prototype, "_fullHistorySyncOnDemandRequest", { + get: $util.oneOfGetter($oneOfFields = ["fullHistorySyncOnDemandRequest"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestMessage.prototype, "_syncdCollectionFatalRecoveryRequest", { + get: $util.oneOfGetter($oneOfFields = ["syncdCollectionFatalRecoveryRequest"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestMessage.prototype, "_historySyncChunkRetryRequest", { + get: $util.oneOfGetter($oneOfFields = ["historySyncChunkRetryRequest"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestMessage.prototype, "_galaxyFlowAction", { + get: $util.oneOfGetter($oneOfFields = ["galaxyFlowAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PeerDataOperationRequestMessage.create = function create(properties) { + return new PeerDataOperationRequestMessage(properties); + }; + + PeerDataOperationRequestMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.peerDataOperationRequestType != null && Object.hasOwnProperty.call(m, "peerDataOperationRequestType")) + w.uint32(8).int32(m.peerDataOperationRequestType); + if (m.requestStickerReupload != null && m.requestStickerReupload.length) { + for (var i = 0; i < m.requestStickerReupload.length; ++i) + $root.proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload.encode(m.requestStickerReupload[i], w.uint32(18).fork()).ldelim(); + } + if (m.requestUrlPreview != null && m.requestUrlPreview.length) { + for (var i = 0; i < m.requestUrlPreview.length; ++i) + $root.proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview.encode(m.requestUrlPreview[i], w.uint32(26).fork()).ldelim(); + } + if (m.historySyncOnDemandRequest != null && Object.hasOwnProperty.call(m, "historySyncOnDemandRequest")) + $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest.encode(m.historySyncOnDemandRequest, w.uint32(34).fork()).ldelim(); + if (m.placeholderMessageResendRequest != null && m.placeholderMessageResendRequest.length) { + for (var i = 0; i < m.placeholderMessageResendRequest.length; ++i) + $root.proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.encode(m.placeholderMessageResendRequest[i], w.uint32(42).fork()).ldelim(); + } + if (m.fullHistorySyncOnDemandRequest != null && Object.hasOwnProperty.call(m, "fullHistorySyncOnDemandRequest")) + $root.proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.encode(m.fullHistorySyncOnDemandRequest, w.uint32(50).fork()).ldelim(); + if (m.syncdCollectionFatalRecoveryRequest != null && Object.hasOwnProperty.call(m, "syncdCollectionFatalRecoveryRequest")) + $root.proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest.encode(m.syncdCollectionFatalRecoveryRequest, w.uint32(58).fork()).ldelim(); + if (m.historySyncChunkRetryRequest != null && Object.hasOwnProperty.call(m, "historySyncChunkRetryRequest")) + $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest.encode(m.historySyncChunkRetryRequest, w.uint32(66).fork()).ldelim(); + if (m.galaxyFlowAction != null && Object.hasOwnProperty.call(m, "galaxyFlowAction")) + $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.encode(m.galaxyFlowAction, w.uint32(74).fork()).ldelim(); + return w; + }; + + PeerDataOperationRequestMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.peerDataOperationRequestType = r.int32(); + break; + } + case 2: { + if (!(m.requestStickerReupload && m.requestStickerReupload.length)) + m.requestStickerReupload = []; + m.requestStickerReupload.push($root.proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload.decode(r, r.uint32())); + break; + } + case 3: { + if (!(m.requestUrlPreview && m.requestUrlPreview.length)) + m.requestUrlPreview = []; + m.requestUrlPreview.push($root.proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview.decode(r, r.uint32())); + break; + } + case 4: { + m.historySyncOnDemandRequest = $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest.decode(r, r.uint32()); + break; + } + case 5: { + if (!(m.placeholderMessageResendRequest && m.placeholderMessageResendRequest.length)) + m.placeholderMessageResendRequest = []; + m.placeholderMessageResendRequest.push($root.proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.decode(r, r.uint32())); + break; + } + case 6: { + m.fullHistorySyncOnDemandRequest = $root.proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.decode(r, r.uint32()); + break; + } + case 7: { + m.syncdCollectionFatalRecoveryRequest = $root.proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest.decode(r, r.uint32()); + break; + } + case 8: { + m.historySyncChunkRetryRequest = $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest.decode(r, r.uint32()); + break; + } + case 9: { + m.galaxyFlowAction = $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PeerDataOperationRequestMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage(); + switch (d.peerDataOperationRequestType) { + default: + if (typeof d.peerDataOperationRequestType === "number") { + m.peerDataOperationRequestType = d.peerDataOperationRequestType; + break; + } + break; + case "UPLOAD_STICKER": + case 0: + m.peerDataOperationRequestType = 0; + break; + case "SEND_RECENT_STICKER_BOOTSTRAP": + case 1: + m.peerDataOperationRequestType = 1; + break; + case "GENERATE_LINK_PREVIEW": + case 2: + m.peerDataOperationRequestType = 2; + break; + case "HISTORY_SYNC_ON_DEMAND": + case 3: + m.peerDataOperationRequestType = 3; + break; + case "PLACEHOLDER_MESSAGE_RESEND": + case 4: + m.peerDataOperationRequestType = 4; + break; + case "WAFFLE_LINKING_NONCE_FETCH": + case 5: + m.peerDataOperationRequestType = 5; + break; + case "FULL_HISTORY_SYNC_ON_DEMAND": + case 6: + m.peerDataOperationRequestType = 6; + break; + case "COMPANION_META_NONCE_FETCH": + case 7: + m.peerDataOperationRequestType = 7; + break; + case "COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY": + case 8: + m.peerDataOperationRequestType = 8; + break; + case "COMPANION_CANONICAL_USER_NONCE_FETCH": + case 9: + m.peerDataOperationRequestType = 9; + break; + case "HISTORY_SYNC_CHUNK_RETRY": + case 10: + m.peerDataOperationRequestType = 10; + break; + case "GALAXY_FLOW_ACTION": + case 11: + m.peerDataOperationRequestType = 11; + break; + } + if (d.requestStickerReupload) { + if (!Array.isArray(d.requestStickerReupload)) + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.requestStickerReupload: array expected"); + m.requestStickerReupload = []; + for (var i = 0; i < d.requestStickerReupload.length; ++i) { + if (typeof d.requestStickerReupload[i] !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.requestStickerReupload: object expected"); + m.requestStickerReupload[i] = $root.proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload.fromObject(d.requestStickerReupload[i]); + } + } + if (d.requestUrlPreview) { + if (!Array.isArray(d.requestUrlPreview)) + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.requestUrlPreview: array expected"); + m.requestUrlPreview = []; + for (var i = 0; i < d.requestUrlPreview.length; ++i) { + if (typeof d.requestUrlPreview[i] !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.requestUrlPreview: object expected"); + m.requestUrlPreview[i] = $root.proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview.fromObject(d.requestUrlPreview[i]); + } + } + if (d.historySyncOnDemandRequest != null) { + if (typeof d.historySyncOnDemandRequest !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.historySyncOnDemandRequest: object expected"); + m.historySyncOnDemandRequest = $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest.fromObject(d.historySyncOnDemandRequest); + } + if (d.placeholderMessageResendRequest) { + if (!Array.isArray(d.placeholderMessageResendRequest)) + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.placeholderMessageResendRequest: array expected"); + m.placeholderMessageResendRequest = []; + for (var i = 0; i < d.placeholderMessageResendRequest.length; ++i) { + if (typeof d.placeholderMessageResendRequest[i] !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.placeholderMessageResendRequest: object expected"); + m.placeholderMessageResendRequest[i] = $root.proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.fromObject(d.placeholderMessageResendRequest[i]); + } + } + if (d.fullHistorySyncOnDemandRequest != null) { + if (typeof d.fullHistorySyncOnDemandRequest !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.fullHistorySyncOnDemandRequest: object expected"); + m.fullHistorySyncOnDemandRequest = $root.proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.fromObject(d.fullHistorySyncOnDemandRequest); + } + if (d.syncdCollectionFatalRecoveryRequest != null) { + if (typeof d.syncdCollectionFatalRecoveryRequest !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.syncdCollectionFatalRecoveryRequest: object expected"); + m.syncdCollectionFatalRecoveryRequest = $root.proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest.fromObject(d.syncdCollectionFatalRecoveryRequest); + } + if (d.historySyncChunkRetryRequest != null) { + if (typeof d.historySyncChunkRetryRequest !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.historySyncChunkRetryRequest: object expected"); + m.historySyncChunkRetryRequest = $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest.fromObject(d.historySyncChunkRetryRequest); + } + if (d.galaxyFlowAction != null) { + if (typeof d.galaxyFlowAction !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.galaxyFlowAction: object expected"); + m.galaxyFlowAction = $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.fromObject(d.galaxyFlowAction); + } + return m; + }; + + PeerDataOperationRequestMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.requestStickerReupload = []; + d.requestUrlPreview = []; + d.placeholderMessageResendRequest = []; + } + if (m.peerDataOperationRequestType != null && m.hasOwnProperty("peerDataOperationRequestType")) { + d.peerDataOperationRequestType = o.enums === String ? $root.proto.Message.PeerDataOperationRequestType[m.peerDataOperationRequestType] === undefined ? m.peerDataOperationRequestType : $root.proto.Message.PeerDataOperationRequestType[m.peerDataOperationRequestType] : m.peerDataOperationRequestType; + if (o.oneofs) + d._peerDataOperationRequestType = "peerDataOperationRequestType"; + } + if (m.requestStickerReupload && m.requestStickerReupload.length) { + d.requestStickerReupload = []; + for (var j = 0; j < m.requestStickerReupload.length; ++j) { + d.requestStickerReupload[j] = $root.proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload.toObject(m.requestStickerReupload[j], o); + } + } + if (m.requestUrlPreview && m.requestUrlPreview.length) { + d.requestUrlPreview = []; + for (var j = 0; j < m.requestUrlPreview.length; ++j) { + d.requestUrlPreview[j] = $root.proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview.toObject(m.requestUrlPreview[j], o); + } + } + if (m.historySyncOnDemandRequest != null && m.hasOwnProperty("historySyncOnDemandRequest")) { + d.historySyncOnDemandRequest = $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest.toObject(m.historySyncOnDemandRequest, o); + if (o.oneofs) + d._historySyncOnDemandRequest = "historySyncOnDemandRequest"; + } + if (m.placeholderMessageResendRequest && m.placeholderMessageResendRequest.length) { + d.placeholderMessageResendRequest = []; + for (var j = 0; j < m.placeholderMessageResendRequest.length; ++j) { + d.placeholderMessageResendRequest[j] = $root.proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.toObject(m.placeholderMessageResendRequest[j], o); + } + } + if (m.fullHistorySyncOnDemandRequest != null && m.hasOwnProperty("fullHistorySyncOnDemandRequest")) { + d.fullHistorySyncOnDemandRequest = $root.proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.toObject(m.fullHistorySyncOnDemandRequest, o); + if (o.oneofs) + d._fullHistorySyncOnDemandRequest = "fullHistorySyncOnDemandRequest"; + } + if (m.syncdCollectionFatalRecoveryRequest != null && m.hasOwnProperty("syncdCollectionFatalRecoveryRequest")) { + d.syncdCollectionFatalRecoveryRequest = $root.proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest.toObject(m.syncdCollectionFatalRecoveryRequest, o); + if (o.oneofs) + d._syncdCollectionFatalRecoveryRequest = "syncdCollectionFatalRecoveryRequest"; + } + if (m.historySyncChunkRetryRequest != null && m.hasOwnProperty("historySyncChunkRetryRequest")) { + d.historySyncChunkRetryRequest = $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest.toObject(m.historySyncChunkRetryRequest, o); + if (o.oneofs) + d._historySyncChunkRetryRequest = "historySyncChunkRetryRequest"; + } + if (m.galaxyFlowAction != null && m.hasOwnProperty("galaxyFlowAction")) { + d.galaxyFlowAction = $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.toObject(m.galaxyFlowAction, o); + if (o.oneofs) + d._galaxyFlowAction = "galaxyFlowAction"; + } + return d; + }; + + PeerDataOperationRequestMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PeerDataOperationRequestMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage"; + }; + + PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest = (function() { + + function FullHistorySyncOnDemandRequest(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + FullHistorySyncOnDemandRequest.prototype.requestMetadata = null; + FullHistorySyncOnDemandRequest.prototype.historySyncConfig = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FullHistorySyncOnDemandRequest.prototype, "_requestMetadata", { + get: $util.oneOfGetter($oneOfFields = ["requestMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FullHistorySyncOnDemandRequest.prototype, "_historySyncConfig", { + get: $util.oneOfGetter($oneOfFields = ["historySyncConfig"]), + set: $util.oneOfSetter($oneOfFields) + }); + + FullHistorySyncOnDemandRequest.create = function create(properties) { + return new FullHistorySyncOnDemandRequest(properties); + }; + + FullHistorySyncOnDemandRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.requestMetadata != null && Object.hasOwnProperty.call(m, "requestMetadata")) + $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.encode(m.requestMetadata, w.uint32(10).fork()).ldelim(); + if (m.historySyncConfig != null && Object.hasOwnProperty.call(m, "historySyncConfig")) + $root.proto.DeviceProps.HistorySyncConfig.encode(m.historySyncConfig, w.uint32(18).fork()).ldelim(); + return w; + }; + + FullHistorySyncOnDemandRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.requestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.decode(r, r.uint32()); + break; + } + case 2: { + m.historySyncConfig = $root.proto.DeviceProps.HistorySyncConfig.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + FullHistorySyncOnDemandRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest(); + if (d.requestMetadata != null) { + if (typeof d.requestMetadata !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.requestMetadata: object expected"); + m.requestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.fromObject(d.requestMetadata); + } + if (d.historySyncConfig != null) { + if (typeof d.historySyncConfig !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.historySyncConfig: object expected"); + m.historySyncConfig = $root.proto.DeviceProps.HistorySyncConfig.fromObject(d.historySyncConfig); + } + return m; + }; + + FullHistorySyncOnDemandRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.requestMetadata != null && m.hasOwnProperty("requestMetadata")) { + d.requestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.toObject(m.requestMetadata, o); + if (o.oneofs) + d._requestMetadata = "requestMetadata"; + } + if (m.historySyncConfig != null && m.hasOwnProperty("historySyncConfig")) { + d.historySyncConfig = $root.proto.DeviceProps.HistorySyncConfig.toObject(m.historySyncConfig, o); + if (o.oneofs) + d._historySyncConfig = "historySyncConfig"; + } + return d; + }; + + FullHistorySyncOnDemandRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + FullHistorySyncOnDemandRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest"; + }; + + return FullHistorySyncOnDemandRequest; + })(); + + PeerDataOperationRequestMessage.GalaxyFlowAction = (function() { + + function GalaxyFlowAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GalaxyFlowAction.prototype.type = null; + GalaxyFlowAction.prototype.flowId = null; + GalaxyFlowAction.prototype.stanzaId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GalaxyFlowAction.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GalaxyFlowAction.prototype, "_flowId", { + get: $util.oneOfGetter($oneOfFields = ["flowId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GalaxyFlowAction.prototype, "_stanzaId", { + get: $util.oneOfGetter($oneOfFields = ["stanzaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GalaxyFlowAction.create = function create(properties) { + return new GalaxyFlowAction(properties); + }; + + GalaxyFlowAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + if (m.flowId != null && Object.hasOwnProperty.call(m, "flowId")) + w.uint32(18).string(m.flowId); + if (m.stanzaId != null && Object.hasOwnProperty.call(m, "stanzaId")) + w.uint32(26).string(m.stanzaId); + return w; + }; + + GalaxyFlowAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + case 2: { + m.flowId = r.string(); + break; + } + case 3: { + m.stanzaId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GalaxyFlowAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "NOTIFY_LAUNCH": + case 1: + m.type = 1; + break; + } + if (d.flowId != null) { + m.flowId = String(d.flowId); + } + if (d.stanzaId != null) { + m.stanzaId = String(d.stanzaId); + } + return m; + }; + + GalaxyFlowAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType[m.type] === undefined ? m.type : $root.proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.flowId != null && m.hasOwnProperty("flowId")) { + d.flowId = m.flowId; + if (o.oneofs) + d._flowId = "flowId"; + } + if (m.stanzaId != null && m.hasOwnProperty("stanzaId")) { + d.stanzaId = m.stanzaId; + if (o.oneofs) + d._stanzaId = "stanzaId"; + } + return d; + }; + + GalaxyFlowAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GalaxyFlowAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction"; + }; + + GalaxyFlowAction.GalaxyFlowActionType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "NOTIFY_LAUNCH"] = 1; + return values; + })(); + + return GalaxyFlowAction; + })(); + + PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest = (function() { + + function HistorySyncChunkRetryRequest(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySyncChunkRetryRequest.prototype.syncType = null; + HistorySyncChunkRetryRequest.prototype.chunkOrder = null; + HistorySyncChunkRetryRequest.prototype.chunkNotificationId = null; + HistorySyncChunkRetryRequest.prototype.regenerateChunk = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryRequest.prototype, "_syncType", { + get: $util.oneOfGetter($oneOfFields = ["syncType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryRequest.prototype, "_chunkOrder", { + get: $util.oneOfGetter($oneOfFields = ["chunkOrder"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryRequest.prototype, "_chunkNotificationId", { + get: $util.oneOfGetter($oneOfFields = ["chunkNotificationId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryRequest.prototype, "_regenerateChunk", { + get: $util.oneOfGetter($oneOfFields = ["regenerateChunk"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySyncChunkRetryRequest.create = function create(properties) { + return new HistorySyncChunkRetryRequest(properties); + }; + + HistorySyncChunkRetryRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.syncType != null && Object.hasOwnProperty.call(m, "syncType")) + w.uint32(8).int32(m.syncType); + if (m.chunkOrder != null && Object.hasOwnProperty.call(m, "chunkOrder")) + w.uint32(16).uint32(m.chunkOrder); + if (m.chunkNotificationId != null && Object.hasOwnProperty.call(m, "chunkNotificationId")) + w.uint32(26).string(m.chunkNotificationId); + if (m.regenerateChunk != null && Object.hasOwnProperty.call(m, "regenerateChunk")) + w.uint32(32).bool(m.regenerateChunk); + return w; + }; + + HistorySyncChunkRetryRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.syncType = r.int32(); + break; + } + case 2: { + m.chunkOrder = r.uint32(); + break; + } + case 3: { + m.chunkNotificationId = r.string(); + break; + } + case 4: { + m.regenerateChunk = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySyncChunkRetryRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest(); + switch (d.syncType) { + default: + if (typeof d.syncType === "number") { + m.syncType = d.syncType; + break; + } + break; + case "INITIAL_BOOTSTRAP": + case 0: + m.syncType = 0; + break; + case "INITIAL_STATUS_V3": + case 1: + m.syncType = 1; + break; + case "FULL": + case 2: + m.syncType = 2; + break; + case "RECENT": + case 3: + m.syncType = 3; + break; + case "PUSH_NAME": + case 4: + m.syncType = 4; + break; + case "NON_BLOCKING_DATA": + case 5: + m.syncType = 5; + break; + case "ON_DEMAND": + case 6: + m.syncType = 6; + break; + case "NO_HISTORY": + case 7: + m.syncType = 7; + break; + case "MESSAGE_ACCESS_STATUS": + case 8: + m.syncType = 8; + break; + } + if (d.chunkOrder != null) { + m.chunkOrder = d.chunkOrder >>> 0; + } + if (d.chunkNotificationId != null) { + m.chunkNotificationId = String(d.chunkNotificationId); + } + if (d.regenerateChunk != null) { + m.regenerateChunk = Boolean(d.regenerateChunk); + } + return m; + }; + + HistorySyncChunkRetryRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.syncType != null && m.hasOwnProperty("syncType")) { + d.syncType = o.enums === String ? $root.proto.Message.HistorySyncType[m.syncType] === undefined ? m.syncType : $root.proto.Message.HistorySyncType[m.syncType] : m.syncType; + if (o.oneofs) + d._syncType = "syncType"; + } + if (m.chunkOrder != null && m.hasOwnProperty("chunkOrder")) { + d.chunkOrder = m.chunkOrder; + if (o.oneofs) + d._chunkOrder = "chunkOrder"; + } + if (m.chunkNotificationId != null && m.hasOwnProperty("chunkNotificationId")) { + d.chunkNotificationId = m.chunkNotificationId; + if (o.oneofs) + d._chunkNotificationId = "chunkNotificationId"; + } + if (m.regenerateChunk != null && m.hasOwnProperty("regenerateChunk")) { + d.regenerateChunk = m.regenerateChunk; + if (o.oneofs) + d._regenerateChunk = "regenerateChunk"; + } + return d; + }; + + HistorySyncChunkRetryRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySyncChunkRetryRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest"; + }; + + return HistorySyncChunkRetryRequest; + })(); + + PeerDataOperationRequestMessage.HistorySyncOnDemandRequest = (function() { + + function HistorySyncOnDemandRequest(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySyncOnDemandRequest.prototype.chatJid = null; + HistorySyncOnDemandRequest.prototype.oldestMsgId = null; + HistorySyncOnDemandRequest.prototype.oldestMsgFromMe = null; + HistorySyncOnDemandRequest.prototype.onDemandMsgCount = null; + HistorySyncOnDemandRequest.prototype.oldestMsgTimestampMs = null; + HistorySyncOnDemandRequest.prototype.accountLid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncOnDemandRequest.prototype, "_chatJid", { + get: $util.oneOfGetter($oneOfFields = ["chatJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncOnDemandRequest.prototype, "_oldestMsgId", { + get: $util.oneOfGetter($oneOfFields = ["oldestMsgId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncOnDemandRequest.prototype, "_oldestMsgFromMe", { + get: $util.oneOfGetter($oneOfFields = ["oldestMsgFromMe"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncOnDemandRequest.prototype, "_onDemandMsgCount", { + get: $util.oneOfGetter($oneOfFields = ["onDemandMsgCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncOnDemandRequest.prototype, "_oldestMsgTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["oldestMsgTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncOnDemandRequest.prototype, "_accountLid", { + get: $util.oneOfGetter($oneOfFields = ["accountLid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySyncOnDemandRequest.create = function create(properties) { + return new HistorySyncOnDemandRequest(properties); + }; + + HistorySyncOnDemandRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.chatJid != null && Object.hasOwnProperty.call(m, "chatJid")) + w.uint32(10).string(m.chatJid); + if (m.oldestMsgId != null && Object.hasOwnProperty.call(m, "oldestMsgId")) + w.uint32(18).string(m.oldestMsgId); + if (m.oldestMsgFromMe != null && Object.hasOwnProperty.call(m, "oldestMsgFromMe")) + w.uint32(24).bool(m.oldestMsgFromMe); + if (m.onDemandMsgCount != null && Object.hasOwnProperty.call(m, "onDemandMsgCount")) + w.uint32(32).int32(m.onDemandMsgCount); + if (m.oldestMsgTimestampMs != null && Object.hasOwnProperty.call(m, "oldestMsgTimestampMs")) + w.uint32(40).int64(m.oldestMsgTimestampMs); + if (m.accountLid != null && Object.hasOwnProperty.call(m, "accountLid")) + w.uint32(50).string(m.accountLid); + return w; + }; + + HistorySyncOnDemandRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.chatJid = r.string(); + break; + } + case 2: { + m.oldestMsgId = r.string(); + break; + } + case 3: { + m.oldestMsgFromMe = r.bool(); + break; + } + case 4: { + m.onDemandMsgCount = r.int32(); + break; + } + case 5: { + m.oldestMsgTimestampMs = r.int64(); + break; + } + case 6: { + m.accountLid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySyncOnDemandRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest(); + if (d.chatJid != null) { + m.chatJid = String(d.chatJid); + } + if (d.oldestMsgId != null) { + m.oldestMsgId = String(d.oldestMsgId); + } + if (d.oldestMsgFromMe != null) { + m.oldestMsgFromMe = Boolean(d.oldestMsgFromMe); + } + if (d.onDemandMsgCount != null) { + m.onDemandMsgCount = d.onDemandMsgCount | 0; + } + if (d.oldestMsgTimestampMs != null) { + if ($util.Long) + (m.oldestMsgTimestampMs = $util.Long.fromValue(d.oldestMsgTimestampMs)).unsigned = false; + else if (typeof d.oldestMsgTimestampMs === "string") + m.oldestMsgTimestampMs = parseInt(d.oldestMsgTimestampMs, 10); + else if (typeof d.oldestMsgTimestampMs === "number") + m.oldestMsgTimestampMs = d.oldestMsgTimestampMs; + else if (typeof d.oldestMsgTimestampMs === "object") + m.oldestMsgTimestampMs = new $util.LongBits(d.oldestMsgTimestampMs.low >>> 0, d.oldestMsgTimestampMs.high >>> 0).toNumber(); + } + if (d.accountLid != null) { + m.accountLid = String(d.accountLid); + } + return m; + }; + + HistorySyncOnDemandRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.chatJid != null && m.hasOwnProperty("chatJid")) { + d.chatJid = m.chatJid; + if (o.oneofs) + d._chatJid = "chatJid"; + } + if (m.oldestMsgId != null && m.hasOwnProperty("oldestMsgId")) { + d.oldestMsgId = m.oldestMsgId; + if (o.oneofs) + d._oldestMsgId = "oldestMsgId"; + } + if (m.oldestMsgFromMe != null && m.hasOwnProperty("oldestMsgFromMe")) { + d.oldestMsgFromMe = m.oldestMsgFromMe; + if (o.oneofs) + d._oldestMsgFromMe = "oldestMsgFromMe"; + } + if (m.onDemandMsgCount != null && m.hasOwnProperty("onDemandMsgCount")) { + d.onDemandMsgCount = m.onDemandMsgCount; + if (o.oneofs) + d._onDemandMsgCount = "onDemandMsgCount"; + } + if (m.oldestMsgTimestampMs != null && m.hasOwnProperty("oldestMsgTimestampMs")) { + if (typeof m.oldestMsgTimestampMs === "number") + d.oldestMsgTimestampMs = o.longs === String ? String(m.oldestMsgTimestampMs) : m.oldestMsgTimestampMs; + else + d.oldestMsgTimestampMs = o.longs === String ? longToString(m.oldestMsgTimestampMs) : o.longs === Number ? longToNumber(m.oldestMsgTimestampMs) : m.oldestMsgTimestampMs; + if (o.oneofs) + d._oldestMsgTimestampMs = "oldestMsgTimestampMs"; + } + if (m.accountLid != null && m.hasOwnProperty("accountLid")) { + d.accountLid = m.accountLid; + if (o.oneofs) + d._accountLid = "accountLid"; + } + return d; + }; + + HistorySyncOnDemandRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySyncOnDemandRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest"; + }; + + return HistorySyncOnDemandRequest; + })(); + + PeerDataOperationRequestMessage.PlaceholderMessageResendRequest = (function() { + + function PlaceholderMessageResendRequest(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PlaceholderMessageResendRequest.prototype.messageKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PlaceholderMessageResendRequest.prototype, "_messageKey", { + get: $util.oneOfGetter($oneOfFields = ["messageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PlaceholderMessageResendRequest.create = function create(properties) { + return new PlaceholderMessageResendRequest(properties); + }; + + PlaceholderMessageResendRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageKey != null && Object.hasOwnProperty.call(m, "messageKey")) + $root.proto.MessageKey.encode(m.messageKey, w.uint32(10).fork()).ldelim(); + return w; + }; + + PlaceholderMessageResendRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PlaceholderMessageResendRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest(); + if (d.messageKey != null) { + if (typeof d.messageKey !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.messageKey: object expected"); + m.messageKey = $root.proto.MessageKey.fromObject(d.messageKey); + } + return m; + }; + + PlaceholderMessageResendRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageKey != null && m.hasOwnProperty("messageKey")) { + d.messageKey = $root.proto.MessageKey.toObject(m.messageKey, o); + if (o.oneofs) + d._messageKey = "messageKey"; + } + return d; + }; + + PlaceholderMessageResendRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PlaceholderMessageResendRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest"; + }; + + return PlaceholderMessageResendRequest; + })(); + + PeerDataOperationRequestMessage.RequestStickerReupload = (function() { + + function RequestStickerReupload(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RequestStickerReupload.prototype.fileSha256 = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestStickerReupload.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RequestStickerReupload.create = function create(properties) { + return new RequestStickerReupload(properties); + }; + + RequestStickerReupload.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(10).string(m.fileSha256); + return w; + }; + + RequestStickerReupload.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fileSha256 = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RequestStickerReupload.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload(); + if (d.fileSha256 != null) { + m.fileSha256 = String(d.fileSha256); + } + return m; + }; + + RequestStickerReupload.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + return d; + }; + + RequestStickerReupload.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RequestStickerReupload.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.RequestStickerReupload"; + }; + + return RequestStickerReupload; + })(); + + PeerDataOperationRequestMessage.RequestUrlPreview = (function() { + + function RequestUrlPreview(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RequestUrlPreview.prototype.url = null; + RequestUrlPreview.prototype.includeHqThumbnail = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestUrlPreview.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestUrlPreview.prototype, "_includeHqThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["includeHqThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RequestUrlPreview.create = function create(properties) { + return new RequestUrlPreview(properties); + }; + + RequestUrlPreview.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.includeHqThumbnail != null && Object.hasOwnProperty.call(m, "includeHqThumbnail")) + w.uint32(16).bool(m.includeHqThumbnail); + return w; + }; + + RequestUrlPreview.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.includeHqThumbnail = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RequestUrlPreview.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.includeHqThumbnail != null) { + m.includeHqThumbnail = Boolean(d.includeHqThumbnail); + } + return m; + }; + + RequestUrlPreview.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.includeHqThumbnail != null && m.hasOwnProperty("includeHqThumbnail")) { + d.includeHqThumbnail = m.includeHqThumbnail; + if (o.oneofs) + d._includeHqThumbnail = "includeHqThumbnail"; + } + return d; + }; + + RequestUrlPreview.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RequestUrlPreview.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.RequestUrlPreview"; + }; + + return RequestUrlPreview; + })(); + + PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest = (function() { + + function SyncDCollectionFatalRecoveryRequest(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncDCollectionFatalRecoveryRequest.prototype.collectionName = null; + SyncDCollectionFatalRecoveryRequest.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncDCollectionFatalRecoveryRequest.prototype, "_collectionName", { + get: $util.oneOfGetter($oneOfFields = ["collectionName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncDCollectionFatalRecoveryRequest.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncDCollectionFatalRecoveryRequest.create = function create(properties) { + return new SyncDCollectionFatalRecoveryRequest(properties); + }; + + SyncDCollectionFatalRecoveryRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.collectionName != null && Object.hasOwnProperty.call(m, "collectionName")) + w.uint32(10).string(m.collectionName); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(16).int64(m.timestamp); + return w; + }; + + SyncDCollectionFatalRecoveryRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.collectionName = r.string(); + break; + } + case 2: { + m.timestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncDCollectionFatalRecoveryRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest(); + if (d.collectionName != null) { + m.collectionName = String(d.collectionName); + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + SyncDCollectionFatalRecoveryRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.collectionName != null && m.hasOwnProperty("collectionName")) { + d.collectionName = m.collectionName; + if (o.oneofs) + d._collectionName = "collectionName"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + SyncDCollectionFatalRecoveryRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncDCollectionFatalRecoveryRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest"; + }; + + return SyncDCollectionFatalRecoveryRequest; + })(); + + return PeerDataOperationRequestMessage; + })(); + + Message.PeerDataOperationRequestResponseMessage = (function() { + + function PeerDataOperationRequestResponseMessage(p) { + this.peerDataOperationResult = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PeerDataOperationRequestResponseMessage.prototype.peerDataOperationRequestType = null; + PeerDataOperationRequestResponseMessage.prototype.stanzaId = null; + PeerDataOperationRequestResponseMessage.prototype.peerDataOperationResult = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestResponseMessage.prototype, "_peerDataOperationRequestType", { + get: $util.oneOfGetter($oneOfFields = ["peerDataOperationRequestType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationRequestResponseMessage.prototype, "_stanzaId", { + get: $util.oneOfGetter($oneOfFields = ["stanzaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PeerDataOperationRequestResponseMessage.create = function create(properties) { + return new PeerDataOperationRequestResponseMessage(properties); + }; + + PeerDataOperationRequestResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.peerDataOperationRequestType != null && Object.hasOwnProperty.call(m, "peerDataOperationRequestType")) + w.uint32(8).int32(m.peerDataOperationRequestType); + if (m.stanzaId != null && Object.hasOwnProperty.call(m, "stanzaId")) + w.uint32(18).string(m.stanzaId); + if (m.peerDataOperationResult != null && m.peerDataOperationResult.length) { + for (var i = 0; i < m.peerDataOperationResult.length; ++i) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.encode(m.peerDataOperationResult[i], w.uint32(26).fork()).ldelim(); + } + return w; + }; + + PeerDataOperationRequestResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.peerDataOperationRequestType = r.int32(); + break; + } + case 2: { + m.stanzaId = r.string(); + break; + } + case 3: { + if (!(m.peerDataOperationResult && m.peerDataOperationResult.length)) + m.peerDataOperationResult = []; + m.peerDataOperationResult.push($root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PeerDataOperationRequestResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage(); + switch (d.peerDataOperationRequestType) { + default: + if (typeof d.peerDataOperationRequestType === "number") { + m.peerDataOperationRequestType = d.peerDataOperationRequestType; + break; + } + break; + case "UPLOAD_STICKER": + case 0: + m.peerDataOperationRequestType = 0; + break; + case "SEND_RECENT_STICKER_BOOTSTRAP": + case 1: + m.peerDataOperationRequestType = 1; + break; + case "GENERATE_LINK_PREVIEW": + case 2: + m.peerDataOperationRequestType = 2; + break; + case "HISTORY_SYNC_ON_DEMAND": + case 3: + m.peerDataOperationRequestType = 3; + break; + case "PLACEHOLDER_MESSAGE_RESEND": + case 4: + m.peerDataOperationRequestType = 4; + break; + case "WAFFLE_LINKING_NONCE_FETCH": + case 5: + m.peerDataOperationRequestType = 5; + break; + case "FULL_HISTORY_SYNC_ON_DEMAND": + case 6: + m.peerDataOperationRequestType = 6; + break; + case "COMPANION_META_NONCE_FETCH": + case 7: + m.peerDataOperationRequestType = 7; + break; + case "COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY": + case 8: + m.peerDataOperationRequestType = 8; + break; + case "COMPANION_CANONICAL_USER_NONCE_FETCH": + case 9: + m.peerDataOperationRequestType = 9; + break; + case "HISTORY_SYNC_CHUNK_RETRY": + case 10: + m.peerDataOperationRequestType = 10; + break; + case "GALAXY_FLOW_ACTION": + case 11: + m.peerDataOperationRequestType = 11; + break; + } + if (d.stanzaId != null) { + m.stanzaId = String(d.stanzaId); + } + if (d.peerDataOperationResult) { + if (!Array.isArray(d.peerDataOperationResult)) + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.peerDataOperationResult: array expected"); + m.peerDataOperationResult = []; + for (var i = 0; i < d.peerDataOperationResult.length; ++i) { + if (typeof d.peerDataOperationResult[i] !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.peerDataOperationResult: object expected"); + m.peerDataOperationResult[i] = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.fromObject(d.peerDataOperationResult[i]); + } + } + return m; + }; + + PeerDataOperationRequestResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.peerDataOperationResult = []; + } + if (m.peerDataOperationRequestType != null && m.hasOwnProperty("peerDataOperationRequestType")) { + d.peerDataOperationRequestType = o.enums === String ? $root.proto.Message.PeerDataOperationRequestType[m.peerDataOperationRequestType] === undefined ? m.peerDataOperationRequestType : $root.proto.Message.PeerDataOperationRequestType[m.peerDataOperationRequestType] : m.peerDataOperationRequestType; + if (o.oneofs) + d._peerDataOperationRequestType = "peerDataOperationRequestType"; + } + if (m.stanzaId != null && m.hasOwnProperty("stanzaId")) { + d.stanzaId = m.stanzaId; + if (o.oneofs) + d._stanzaId = "stanzaId"; + } + if (m.peerDataOperationResult && m.peerDataOperationResult.length) { + d.peerDataOperationResult = []; + for (var j = 0; j < m.peerDataOperationResult.length; ++j) { + d.peerDataOperationResult[j] = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.toObject(m.peerDataOperationResult[j], o); + } + } + return d; + }; + + PeerDataOperationRequestResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PeerDataOperationRequestResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage"; + }; + + PeerDataOperationRequestResponseMessage.PeerDataOperationResult = (function() { + + function PeerDataOperationResult(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PeerDataOperationResult.prototype.mediaUploadResult = null; + PeerDataOperationResult.prototype.stickerMessage = null; + PeerDataOperationResult.prototype.linkPreviewResponse = null; + PeerDataOperationResult.prototype.placeholderMessageResendResponse = null; + PeerDataOperationResult.prototype.waffleNonceFetchRequestResponse = null; + PeerDataOperationResult.prototype.fullHistorySyncOnDemandRequestResponse = null; + PeerDataOperationResult.prototype.companionMetaNonceFetchRequestResponse = null; + PeerDataOperationResult.prototype.syncdSnapshotFatalRecoveryResponse = null; + PeerDataOperationResult.prototype.companionCanonicalUserNonceFetchRequestResponse = null; + PeerDataOperationResult.prototype.historySyncChunkRetryResponse = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_mediaUploadResult", { + get: $util.oneOfGetter($oneOfFields = ["mediaUploadResult"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_stickerMessage", { + get: $util.oneOfGetter($oneOfFields = ["stickerMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_linkPreviewResponse", { + get: $util.oneOfGetter($oneOfFields = ["linkPreviewResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_placeholderMessageResendResponse", { + get: $util.oneOfGetter($oneOfFields = ["placeholderMessageResendResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_waffleNonceFetchRequestResponse", { + get: $util.oneOfGetter($oneOfFields = ["waffleNonceFetchRequestResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_fullHistorySyncOnDemandRequestResponse", { + get: $util.oneOfGetter($oneOfFields = ["fullHistorySyncOnDemandRequestResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_companionMetaNonceFetchRequestResponse", { + get: $util.oneOfGetter($oneOfFields = ["companionMetaNonceFetchRequestResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_syncdSnapshotFatalRecoveryResponse", { + get: $util.oneOfGetter($oneOfFields = ["syncdSnapshotFatalRecoveryResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_companionCanonicalUserNonceFetchRequestResponse", { + get: $util.oneOfGetter($oneOfFields = ["companionCanonicalUserNonceFetchRequestResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PeerDataOperationResult.prototype, "_historySyncChunkRetryResponse", { + get: $util.oneOfGetter($oneOfFields = ["historySyncChunkRetryResponse"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PeerDataOperationResult.create = function create(properties) { + return new PeerDataOperationResult(properties); + }; + + PeerDataOperationResult.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.mediaUploadResult != null && Object.hasOwnProperty.call(m, "mediaUploadResult")) + w.uint32(8).int32(m.mediaUploadResult); + if (m.stickerMessage != null && Object.hasOwnProperty.call(m, "stickerMessage")) + $root.proto.Message.StickerMessage.encode(m.stickerMessage, w.uint32(18).fork()).ldelim(); + if (m.linkPreviewResponse != null && Object.hasOwnProperty.call(m, "linkPreviewResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.encode(m.linkPreviewResponse, w.uint32(26).fork()).ldelim(); + if (m.placeholderMessageResendResponse != null && Object.hasOwnProperty.call(m, "placeholderMessageResendResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse.encode(m.placeholderMessageResendResponse, w.uint32(34).fork()).ldelim(); + if (m.waffleNonceFetchRequestResponse != null && Object.hasOwnProperty.call(m, "waffleNonceFetchRequestResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse.encode(m.waffleNonceFetchRequestResponse, w.uint32(42).fork()).ldelim(); + if (m.fullHistorySyncOnDemandRequestResponse != null && Object.hasOwnProperty.call(m, "fullHistorySyncOnDemandRequestResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.encode(m.fullHistorySyncOnDemandRequestResponse, w.uint32(50).fork()).ldelim(); + if (m.companionMetaNonceFetchRequestResponse != null && Object.hasOwnProperty.call(m, "companionMetaNonceFetchRequestResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse.encode(m.companionMetaNonceFetchRequestResponse, w.uint32(58).fork()).ldelim(); + if (m.syncdSnapshotFatalRecoveryResponse != null && Object.hasOwnProperty.call(m, "syncdSnapshotFatalRecoveryResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse.encode(m.syncdSnapshotFatalRecoveryResponse, w.uint32(66).fork()).ldelim(); + if (m.companionCanonicalUserNonceFetchRequestResponse != null && Object.hasOwnProperty.call(m, "companionCanonicalUserNonceFetchRequestResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse.encode(m.companionCanonicalUserNonceFetchRequestResponse, w.uint32(74).fork()).ldelim(); + if (m.historySyncChunkRetryResponse != null && Object.hasOwnProperty.call(m, "historySyncChunkRetryResponse")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.encode(m.historySyncChunkRetryResponse, w.uint32(82).fork()).ldelim(); + return w; + }; + + PeerDataOperationResult.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.mediaUploadResult = r.int32(); + break; + } + case 2: { + m.stickerMessage = $root.proto.Message.StickerMessage.decode(r, r.uint32()); + break; + } + case 3: { + m.linkPreviewResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.decode(r, r.uint32()); + break; + } + case 4: { + m.placeholderMessageResendResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse.decode(r, r.uint32()); + break; + } + case 5: { + m.waffleNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse.decode(r, r.uint32()); + break; + } + case 6: { + m.fullHistorySyncOnDemandRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.decode(r, r.uint32()); + break; + } + case 7: { + m.companionMetaNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse.decode(r, r.uint32()); + break; + } + case 8: { + m.syncdSnapshotFatalRecoveryResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse.decode(r, r.uint32()); + break; + } + case 9: { + m.companionCanonicalUserNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse.decode(r, r.uint32()); + break; + } + case 10: { + m.historySyncChunkRetryResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PeerDataOperationResult.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult(); + switch (d.mediaUploadResult) { + default: + if (typeof d.mediaUploadResult === "number") { + m.mediaUploadResult = d.mediaUploadResult; + break; + } + break; + case "GENERAL_ERROR": + case 0: + m.mediaUploadResult = 0; + break; + case "SUCCESS": + case 1: + m.mediaUploadResult = 1; + break; + case "NOT_FOUND": + case 2: + m.mediaUploadResult = 2; + break; + case "DECRYPTION_ERROR": + case 3: + m.mediaUploadResult = 3; + break; + } + if (d.stickerMessage != null) { + if (typeof d.stickerMessage !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.stickerMessage: object expected"); + m.stickerMessage = $root.proto.Message.StickerMessage.fromObject(d.stickerMessage); + } + if (d.linkPreviewResponse != null) { + if (typeof d.linkPreviewResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.linkPreviewResponse: object expected"); + m.linkPreviewResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.fromObject(d.linkPreviewResponse); + } + if (d.placeholderMessageResendResponse != null) { + if (typeof d.placeholderMessageResendResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.placeholderMessageResendResponse: object expected"); + m.placeholderMessageResendResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse.fromObject(d.placeholderMessageResendResponse); + } + if (d.waffleNonceFetchRequestResponse != null) { + if (typeof d.waffleNonceFetchRequestResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.waffleNonceFetchRequestResponse: object expected"); + m.waffleNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse.fromObject(d.waffleNonceFetchRequestResponse); + } + if (d.fullHistorySyncOnDemandRequestResponse != null) { + if (typeof d.fullHistorySyncOnDemandRequestResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.fullHistorySyncOnDemandRequestResponse: object expected"); + m.fullHistorySyncOnDemandRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.fromObject(d.fullHistorySyncOnDemandRequestResponse); + } + if (d.companionMetaNonceFetchRequestResponse != null) { + if (typeof d.companionMetaNonceFetchRequestResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.companionMetaNonceFetchRequestResponse: object expected"); + m.companionMetaNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse.fromObject(d.companionMetaNonceFetchRequestResponse); + } + if (d.syncdSnapshotFatalRecoveryResponse != null) { + if (typeof d.syncdSnapshotFatalRecoveryResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.syncdSnapshotFatalRecoveryResponse: object expected"); + m.syncdSnapshotFatalRecoveryResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse.fromObject(d.syncdSnapshotFatalRecoveryResponse); + } + if (d.companionCanonicalUserNonceFetchRequestResponse != null) { + if (typeof d.companionCanonicalUserNonceFetchRequestResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.companionCanonicalUserNonceFetchRequestResponse: object expected"); + m.companionCanonicalUserNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse.fromObject(d.companionCanonicalUserNonceFetchRequestResponse); + } + if (d.historySyncChunkRetryResponse != null) { + if (typeof d.historySyncChunkRetryResponse !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.historySyncChunkRetryResponse: object expected"); + m.historySyncChunkRetryResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.fromObject(d.historySyncChunkRetryResponse); + } + return m; + }; + + PeerDataOperationResult.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.mediaUploadResult != null && m.hasOwnProperty("mediaUploadResult")) { + d.mediaUploadResult = o.enums === String ? $root.proto.MediaRetryNotification.ResultType[m.mediaUploadResult] === undefined ? m.mediaUploadResult : $root.proto.MediaRetryNotification.ResultType[m.mediaUploadResult] : m.mediaUploadResult; + if (o.oneofs) + d._mediaUploadResult = "mediaUploadResult"; + } + if (m.stickerMessage != null && m.hasOwnProperty("stickerMessage")) { + d.stickerMessage = $root.proto.Message.StickerMessage.toObject(m.stickerMessage, o); + if (o.oneofs) + d._stickerMessage = "stickerMessage"; + } + if (m.linkPreviewResponse != null && m.hasOwnProperty("linkPreviewResponse")) { + d.linkPreviewResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.toObject(m.linkPreviewResponse, o); + if (o.oneofs) + d._linkPreviewResponse = "linkPreviewResponse"; + } + if (m.placeholderMessageResendResponse != null && m.hasOwnProperty("placeholderMessageResendResponse")) { + d.placeholderMessageResendResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse.toObject(m.placeholderMessageResendResponse, o); + if (o.oneofs) + d._placeholderMessageResendResponse = "placeholderMessageResendResponse"; + } + if (m.waffleNonceFetchRequestResponse != null && m.hasOwnProperty("waffleNonceFetchRequestResponse")) { + d.waffleNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse.toObject(m.waffleNonceFetchRequestResponse, o); + if (o.oneofs) + d._waffleNonceFetchRequestResponse = "waffleNonceFetchRequestResponse"; + } + if (m.fullHistorySyncOnDemandRequestResponse != null && m.hasOwnProperty("fullHistorySyncOnDemandRequestResponse")) { + d.fullHistorySyncOnDemandRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.toObject(m.fullHistorySyncOnDemandRequestResponse, o); + if (o.oneofs) + d._fullHistorySyncOnDemandRequestResponse = "fullHistorySyncOnDemandRequestResponse"; + } + if (m.companionMetaNonceFetchRequestResponse != null && m.hasOwnProperty("companionMetaNonceFetchRequestResponse")) { + d.companionMetaNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse.toObject(m.companionMetaNonceFetchRequestResponse, o); + if (o.oneofs) + d._companionMetaNonceFetchRequestResponse = "companionMetaNonceFetchRequestResponse"; + } + if (m.syncdSnapshotFatalRecoveryResponse != null && m.hasOwnProperty("syncdSnapshotFatalRecoveryResponse")) { + d.syncdSnapshotFatalRecoveryResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse.toObject(m.syncdSnapshotFatalRecoveryResponse, o); + if (o.oneofs) + d._syncdSnapshotFatalRecoveryResponse = "syncdSnapshotFatalRecoveryResponse"; + } + if (m.companionCanonicalUserNonceFetchRequestResponse != null && m.hasOwnProperty("companionCanonicalUserNonceFetchRequestResponse")) { + d.companionCanonicalUserNonceFetchRequestResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse.toObject(m.companionCanonicalUserNonceFetchRequestResponse, o); + if (o.oneofs) + d._companionCanonicalUserNonceFetchRequestResponse = "companionCanonicalUserNonceFetchRequestResponse"; + } + if (m.historySyncChunkRetryResponse != null && m.hasOwnProperty("historySyncChunkRetryResponse")) { + d.historySyncChunkRetryResponse = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.toObject(m.historySyncChunkRetryResponse, o); + if (o.oneofs) + d._historySyncChunkRetryResponse = "historySyncChunkRetryResponse"; + } + return d; + }; + + PeerDataOperationResult.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PeerDataOperationResult.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult"; + }; + + PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse = (function() { + + function CompanionCanonicalUserNonceFetchResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CompanionCanonicalUserNonceFetchResponse.prototype.nonce = null; + CompanionCanonicalUserNonceFetchResponse.prototype.waFbid = null; + CompanionCanonicalUserNonceFetchResponse.prototype.forceRefresh = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionCanonicalUserNonceFetchResponse.prototype, "_nonce", { + get: $util.oneOfGetter($oneOfFields = ["nonce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionCanonicalUserNonceFetchResponse.prototype, "_waFbid", { + get: $util.oneOfGetter($oneOfFields = ["waFbid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionCanonicalUserNonceFetchResponse.prototype, "_forceRefresh", { + get: $util.oneOfGetter($oneOfFields = ["forceRefresh"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CompanionCanonicalUserNonceFetchResponse.create = function create(properties) { + return new CompanionCanonicalUserNonceFetchResponse(properties); + }; + + CompanionCanonicalUserNonceFetchResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.nonce != null && Object.hasOwnProperty.call(m, "nonce")) + w.uint32(10).string(m.nonce); + if (m.waFbid != null && Object.hasOwnProperty.call(m, "waFbid")) + w.uint32(18).string(m.waFbid); + if (m.forceRefresh != null && Object.hasOwnProperty.call(m, "forceRefresh")) + w.uint32(24).bool(m.forceRefresh); + return w; + }; + + CompanionCanonicalUserNonceFetchResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.nonce = r.string(); + break; + } + case 2: { + m.waFbid = r.string(); + break; + } + case 3: { + m.forceRefresh = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CompanionCanonicalUserNonceFetchResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse(); + if (d.nonce != null) { + m.nonce = String(d.nonce); + } + if (d.waFbid != null) { + m.waFbid = String(d.waFbid); + } + if (d.forceRefresh != null) { + m.forceRefresh = Boolean(d.forceRefresh); + } + return m; + }; + + CompanionCanonicalUserNonceFetchResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.nonce != null && m.hasOwnProperty("nonce")) { + d.nonce = m.nonce; + if (o.oneofs) + d._nonce = "nonce"; + } + if (m.waFbid != null && m.hasOwnProperty("waFbid")) { + d.waFbid = m.waFbid; + if (o.oneofs) + d._waFbid = "waFbid"; + } + if (m.forceRefresh != null && m.hasOwnProperty("forceRefresh")) { + d.forceRefresh = m.forceRefresh; + if (o.oneofs) + d._forceRefresh = "forceRefresh"; + } + return d; + }; + + CompanionCanonicalUserNonceFetchResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CompanionCanonicalUserNonceFetchResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse"; + }; + + return CompanionCanonicalUserNonceFetchResponse; + })(); + + PeerDataOperationResult.CompanionMetaNonceFetchResponse = (function() { + + function CompanionMetaNonceFetchResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CompanionMetaNonceFetchResponse.prototype.nonce = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CompanionMetaNonceFetchResponse.prototype, "_nonce", { + get: $util.oneOfGetter($oneOfFields = ["nonce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CompanionMetaNonceFetchResponse.create = function create(properties) { + return new CompanionMetaNonceFetchResponse(properties); + }; + + CompanionMetaNonceFetchResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.nonce != null && Object.hasOwnProperty.call(m, "nonce")) + w.uint32(10).string(m.nonce); + return w; + }; + + CompanionMetaNonceFetchResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.nonce = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CompanionMetaNonceFetchResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse(); + if (d.nonce != null) { + m.nonce = String(d.nonce); + } + return m; + }; + + CompanionMetaNonceFetchResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.nonce != null && m.hasOwnProperty("nonce")) { + d.nonce = m.nonce; + if (o.oneofs) + d._nonce = "nonce"; + } + return d; + }; + + CompanionMetaNonceFetchResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CompanionMetaNonceFetchResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse"; + }; + + return CompanionMetaNonceFetchResponse; + })(); + + PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse = (function() { + + function FullHistorySyncOnDemandRequestResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + FullHistorySyncOnDemandRequestResponse.prototype.requestMetadata = null; + FullHistorySyncOnDemandRequestResponse.prototype.responseCode = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FullHistorySyncOnDemandRequestResponse.prototype, "_requestMetadata", { + get: $util.oneOfGetter($oneOfFields = ["requestMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FullHistorySyncOnDemandRequestResponse.prototype, "_responseCode", { + get: $util.oneOfGetter($oneOfFields = ["responseCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + FullHistorySyncOnDemandRequestResponse.create = function create(properties) { + return new FullHistorySyncOnDemandRequestResponse(properties); + }; + + FullHistorySyncOnDemandRequestResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.requestMetadata != null && Object.hasOwnProperty.call(m, "requestMetadata")) + $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.encode(m.requestMetadata, w.uint32(10).fork()).ldelim(); + if (m.responseCode != null && Object.hasOwnProperty.call(m, "responseCode")) + w.uint32(16).int32(m.responseCode); + return w; + }; + + FullHistorySyncOnDemandRequestResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.requestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.decode(r, r.uint32()); + break; + } + case 2: { + m.responseCode = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + FullHistorySyncOnDemandRequestResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse(); + if (d.requestMetadata != null) { + if (typeof d.requestMetadata !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.requestMetadata: object expected"); + m.requestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.fromObject(d.requestMetadata); + } + switch (d.responseCode) { + default: + if (typeof d.responseCode === "number") { + m.responseCode = d.responseCode; + break; + } + break; + case "REQUEST_SUCCESS": + case 0: + m.responseCode = 0; + break; + case "REQUEST_TIME_EXPIRED": + case 1: + m.responseCode = 1; + break; + case "DECLINED_SHARING_HISTORY": + case 2: + m.responseCode = 2; + break; + case "GENERIC_ERROR": + case 3: + m.responseCode = 3; + break; + case "ERROR_REQUEST_ON_NON_SMB_PRIMARY": + case 4: + m.responseCode = 4; + break; + case "ERROR_HOSTED_DEVICE_NOT_CONNECTED": + case 5: + m.responseCode = 5; + break; + case "ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET": + case 6: + m.responseCode = 6; + break; + } + return m; + }; + + FullHistorySyncOnDemandRequestResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.requestMetadata != null && m.hasOwnProperty("requestMetadata")) { + d.requestMetadata = $root.proto.Message.FullHistorySyncOnDemandRequestMetadata.toObject(m.requestMetadata, o); + if (o.oneofs) + d._requestMetadata = "requestMetadata"; + } + if (m.responseCode != null && m.hasOwnProperty("responseCode")) { + d.responseCode = o.enums === String ? $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode[m.responseCode] === undefined ? m.responseCode : $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode[m.responseCode] : m.responseCode; + if (o.oneofs) + d._responseCode = "responseCode"; + } + return d; + }; + + FullHistorySyncOnDemandRequestResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + FullHistorySyncOnDemandRequestResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse"; + }; + + return FullHistorySyncOnDemandRequestResponse; + })(); + + PeerDataOperationResult.FullHistorySyncOnDemandResponseCode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "REQUEST_SUCCESS"] = 0; + values[valuesById[1] = "REQUEST_TIME_EXPIRED"] = 1; + values[valuesById[2] = "DECLINED_SHARING_HISTORY"] = 2; + values[valuesById[3] = "GENERIC_ERROR"] = 3; + values[valuesById[4] = "ERROR_REQUEST_ON_NON_SMB_PRIMARY"] = 4; + values[valuesById[5] = "ERROR_HOSTED_DEVICE_NOT_CONNECTED"] = 5; + values[valuesById[6] = "ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET"] = 6; + return values; + })(); + + PeerDataOperationResult.HistorySyncChunkRetryResponse = (function() { + + function HistorySyncChunkRetryResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HistorySyncChunkRetryResponse.prototype.syncType = null; + HistorySyncChunkRetryResponse.prototype.chunkOrder = null; + HistorySyncChunkRetryResponse.prototype.requestId = null; + HistorySyncChunkRetryResponse.prototype.responseCode = null; + HistorySyncChunkRetryResponse.prototype.canRecover = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryResponse.prototype, "_syncType", { + get: $util.oneOfGetter($oneOfFields = ["syncType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryResponse.prototype, "_chunkOrder", { + get: $util.oneOfGetter($oneOfFields = ["chunkOrder"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryResponse.prototype, "_requestId", { + get: $util.oneOfGetter($oneOfFields = ["requestId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryResponse.prototype, "_responseCode", { + get: $util.oneOfGetter($oneOfFields = ["responseCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HistorySyncChunkRetryResponse.prototype, "_canRecover", { + get: $util.oneOfGetter($oneOfFields = ["canRecover"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HistorySyncChunkRetryResponse.create = function create(properties) { + return new HistorySyncChunkRetryResponse(properties); + }; + + HistorySyncChunkRetryResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.syncType != null && Object.hasOwnProperty.call(m, "syncType")) + w.uint32(8).int32(m.syncType); + if (m.chunkOrder != null && Object.hasOwnProperty.call(m, "chunkOrder")) + w.uint32(16).uint32(m.chunkOrder); + if (m.requestId != null && Object.hasOwnProperty.call(m, "requestId")) + w.uint32(26).string(m.requestId); + if (m.responseCode != null && Object.hasOwnProperty.call(m, "responseCode")) + w.uint32(32).int32(m.responseCode); + if (m.canRecover != null && Object.hasOwnProperty.call(m, "canRecover")) + w.uint32(40).bool(m.canRecover); + return w; + }; + + HistorySyncChunkRetryResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.syncType = r.int32(); + break; + } + case 2: { + m.chunkOrder = r.uint32(); + break; + } + case 3: { + m.requestId = r.string(); + break; + } + case 4: { + m.responseCode = r.int32(); + break; + } + case 5: { + m.canRecover = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HistorySyncChunkRetryResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse(); + switch (d.syncType) { + default: + if (typeof d.syncType === "number") { + m.syncType = d.syncType; + break; + } + break; + case "INITIAL_BOOTSTRAP": + case 0: + m.syncType = 0; + break; + case "INITIAL_STATUS_V3": + case 1: + m.syncType = 1; + break; + case "FULL": + case 2: + m.syncType = 2; + break; + case "RECENT": + case 3: + m.syncType = 3; + break; + case "PUSH_NAME": + case 4: + m.syncType = 4; + break; + case "NON_BLOCKING_DATA": + case 5: + m.syncType = 5; + break; + case "ON_DEMAND": + case 6: + m.syncType = 6; + break; + case "NO_HISTORY": + case 7: + m.syncType = 7; + break; + case "MESSAGE_ACCESS_STATUS": + case 8: + m.syncType = 8; + break; + } + if (d.chunkOrder != null) { + m.chunkOrder = d.chunkOrder >>> 0; + } + if (d.requestId != null) { + m.requestId = String(d.requestId); + } + switch (d.responseCode) { + default: + if (typeof d.responseCode === "number") { + m.responseCode = d.responseCode; + break; + } + break; + case "GENERATION_ERROR": + case 1: + m.responseCode = 1; + break; + case "CHUNK_CONSUMED": + case 2: + m.responseCode = 2; + break; + case "TIMEOUT": + case 3: + m.responseCode = 3; + break; + case "SESSION_EXHAUSTED": + case 4: + m.responseCode = 4; + break; + case "CHUNK_EXHAUSTED": + case 5: + m.responseCode = 5; + break; + case "DUPLICATED_REQUEST": + case 6: + m.responseCode = 6; + break; + } + if (d.canRecover != null) { + m.canRecover = Boolean(d.canRecover); + } + return m; + }; + + HistorySyncChunkRetryResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.syncType != null && m.hasOwnProperty("syncType")) { + d.syncType = o.enums === String ? $root.proto.Message.HistorySyncType[m.syncType] === undefined ? m.syncType : $root.proto.Message.HistorySyncType[m.syncType] : m.syncType; + if (o.oneofs) + d._syncType = "syncType"; + } + if (m.chunkOrder != null && m.hasOwnProperty("chunkOrder")) { + d.chunkOrder = m.chunkOrder; + if (o.oneofs) + d._chunkOrder = "chunkOrder"; + } + if (m.requestId != null && m.hasOwnProperty("requestId")) { + d.requestId = m.requestId; + if (o.oneofs) + d._requestId = "requestId"; + } + if (m.responseCode != null && m.hasOwnProperty("responseCode")) { + d.responseCode = o.enums === String ? $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode[m.responseCode] === undefined ? m.responseCode : $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode[m.responseCode] : m.responseCode; + if (o.oneofs) + d._responseCode = "responseCode"; + } + if (m.canRecover != null && m.hasOwnProperty("canRecover")) { + d.canRecover = m.canRecover; + if (o.oneofs) + d._canRecover = "canRecover"; + } + return d; + }; + + HistorySyncChunkRetryResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HistorySyncChunkRetryResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse"; + }; + + return HistorySyncChunkRetryResponse; + })(); + + PeerDataOperationResult.HistorySyncChunkRetryResponseCode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "GENERATION_ERROR"] = 1; + values[valuesById[2] = "CHUNK_CONSUMED"] = 2; + values[valuesById[3] = "TIMEOUT"] = 3; + values[valuesById[4] = "SESSION_EXHAUSTED"] = 4; + values[valuesById[5] = "CHUNK_EXHAUSTED"] = 5; + values[valuesById[6] = "DUPLICATED_REQUEST"] = 6; + return values; + })(); + + PeerDataOperationResult.LinkPreviewResponse = (function() { + + function LinkPreviewResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LinkPreviewResponse.prototype.url = null; + LinkPreviewResponse.prototype.title = null; + LinkPreviewResponse.prototype.description = null; + LinkPreviewResponse.prototype.thumbData = null; + LinkPreviewResponse.prototype.matchText = null; + LinkPreviewResponse.prototype.previewType = null; + LinkPreviewResponse.prototype.hqThumbnail = null; + LinkPreviewResponse.prototype.previewMetadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_thumbData", { + get: $util.oneOfGetter($oneOfFields = ["thumbData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_matchText", { + get: $util.oneOfGetter($oneOfFields = ["matchText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_previewType", { + get: $util.oneOfGetter($oneOfFields = ["previewType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_hqThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["hqThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewResponse.prototype, "_previewMetadata", { + get: $util.oneOfGetter($oneOfFields = ["previewMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LinkPreviewResponse.create = function create(properties) { + return new LinkPreviewResponse(properties); + }; + + LinkPreviewResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(18).string(m.title); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(26).string(m.description); + if (m.thumbData != null && Object.hasOwnProperty.call(m, "thumbData")) + w.uint32(34).bytes(m.thumbData); + if (m.matchText != null && Object.hasOwnProperty.call(m, "matchText")) + w.uint32(50).string(m.matchText); + if (m.previewType != null && Object.hasOwnProperty.call(m, "previewType")) + w.uint32(58).string(m.previewType); + if (m.hqThumbnail != null && Object.hasOwnProperty.call(m, "hqThumbnail")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail.encode(m.hqThumbnail, w.uint32(66).fork()).ldelim(); + if (m.previewMetadata != null && Object.hasOwnProperty.call(m, "previewMetadata")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata.encode(m.previewMetadata, w.uint32(74).fork()).ldelim(); + return w; + }; + + LinkPreviewResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.title = r.string(); + break; + } + case 3: { + m.description = r.string(); + break; + } + case 4: { + m.thumbData = r.bytes(); + break; + } + case 6: { + m.matchText = r.string(); + break; + } + case 7: { + m.previewType = r.string(); + break; + } + case 8: { + m.hqThumbnail = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail.decode(r, r.uint32()); + break; + } + case 9: { + m.previewMetadata = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LinkPreviewResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.thumbData != null) { + if (typeof d.thumbData === "string") + $util.base64.decode(d.thumbData, m.thumbData = $util.newBuffer($util.base64.length(d.thumbData)), 0); + else if (d.thumbData.length >= 0) + m.thumbData = d.thumbData; + } + if (d.matchText != null) { + m.matchText = String(d.matchText); + } + if (d.previewType != null) { + m.previewType = String(d.previewType); + } + if (d.hqThumbnail != null) { + if (typeof d.hqThumbnail !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.hqThumbnail: object expected"); + m.hqThumbnail = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail.fromObject(d.hqThumbnail); + } + if (d.previewMetadata != null) { + if (typeof d.previewMetadata !== "object") + throw TypeError(".proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.previewMetadata: object expected"); + m.previewMetadata = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata.fromObject(d.previewMetadata); + } + return m; + }; + + LinkPreviewResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.thumbData != null && m.hasOwnProperty("thumbData")) { + d.thumbData = o.bytes === String ? $util.base64.encode(m.thumbData, 0, m.thumbData.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbData) : m.thumbData; + if (o.oneofs) + d._thumbData = "thumbData"; + } + if (m.matchText != null && m.hasOwnProperty("matchText")) { + d.matchText = m.matchText; + if (o.oneofs) + d._matchText = "matchText"; + } + if (m.previewType != null && m.hasOwnProperty("previewType")) { + d.previewType = m.previewType; + if (o.oneofs) + d._previewType = "previewType"; + } + if (m.hqThumbnail != null && m.hasOwnProperty("hqThumbnail")) { + d.hqThumbnail = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail.toObject(m.hqThumbnail, o); + if (o.oneofs) + d._hqThumbnail = "hqThumbnail"; + } + if (m.previewMetadata != null && m.hasOwnProperty("previewMetadata")) { + d.previewMetadata = $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata.toObject(m.previewMetadata, o); + if (o.oneofs) + d._previewMetadata = "previewMetadata"; + } + return d; + }; + + LinkPreviewResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LinkPreviewResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse"; + }; + + LinkPreviewResponse.LinkPreviewHighQualityThumbnail = (function() { + + function LinkPreviewHighQualityThumbnail(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LinkPreviewHighQualityThumbnail.prototype.directPath = null; + LinkPreviewHighQualityThumbnail.prototype.thumbHash = null; + LinkPreviewHighQualityThumbnail.prototype.encThumbHash = null; + LinkPreviewHighQualityThumbnail.prototype.mediaKey = null; + LinkPreviewHighQualityThumbnail.prototype.mediaKeyTimestampMs = null; + LinkPreviewHighQualityThumbnail.prototype.thumbWidth = null; + LinkPreviewHighQualityThumbnail.prototype.thumbHeight = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewHighQualityThumbnail.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewHighQualityThumbnail.prototype, "_thumbHash", { + get: $util.oneOfGetter($oneOfFields = ["thumbHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewHighQualityThumbnail.prototype, "_encThumbHash", { + get: $util.oneOfGetter($oneOfFields = ["encThumbHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewHighQualityThumbnail.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewHighQualityThumbnail.prototype, "_mediaKeyTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewHighQualityThumbnail.prototype, "_thumbWidth", { + get: $util.oneOfGetter($oneOfFields = ["thumbWidth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LinkPreviewHighQualityThumbnail.prototype, "_thumbHeight", { + get: $util.oneOfGetter($oneOfFields = ["thumbHeight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LinkPreviewHighQualityThumbnail.create = function create(properties) { + return new LinkPreviewHighQualityThumbnail(properties); + }; + + LinkPreviewHighQualityThumbnail.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(10).string(m.directPath); + if (m.thumbHash != null && Object.hasOwnProperty.call(m, "thumbHash")) + w.uint32(18).string(m.thumbHash); + if (m.encThumbHash != null && Object.hasOwnProperty.call(m, "encThumbHash")) + w.uint32(26).string(m.encThumbHash); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(34).bytes(m.mediaKey); + if (m.mediaKeyTimestampMs != null && Object.hasOwnProperty.call(m, "mediaKeyTimestampMs")) + w.uint32(40).int64(m.mediaKeyTimestampMs); + if (m.thumbWidth != null && Object.hasOwnProperty.call(m, "thumbWidth")) + w.uint32(48).int32(m.thumbWidth); + if (m.thumbHeight != null && Object.hasOwnProperty.call(m, "thumbHeight")) + w.uint32(56).int32(m.thumbHeight); + return w; + }; + + LinkPreviewHighQualityThumbnail.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.directPath = r.string(); + break; + } + case 2: { + m.thumbHash = r.string(); + break; + } + case 3: { + m.encThumbHash = r.string(); + break; + } + case 4: { + m.mediaKey = r.bytes(); + break; + } + case 5: { + m.mediaKeyTimestampMs = r.int64(); + break; + } + case 6: { + m.thumbWidth = r.int32(); + break; + } + case 7: { + m.thumbHeight = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LinkPreviewHighQualityThumbnail.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail(); + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.thumbHash != null) { + m.thumbHash = String(d.thumbHash); + } + if (d.encThumbHash != null) { + m.encThumbHash = String(d.encThumbHash); + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.mediaKeyTimestampMs != null) { + if ($util.Long) + (m.mediaKeyTimestampMs = $util.Long.fromValue(d.mediaKeyTimestampMs)).unsigned = false; + else if (typeof d.mediaKeyTimestampMs === "string") + m.mediaKeyTimestampMs = parseInt(d.mediaKeyTimestampMs, 10); + else if (typeof d.mediaKeyTimestampMs === "number") + m.mediaKeyTimestampMs = d.mediaKeyTimestampMs; + else if (typeof d.mediaKeyTimestampMs === "object") + m.mediaKeyTimestampMs = new $util.LongBits(d.mediaKeyTimestampMs.low >>> 0, d.mediaKeyTimestampMs.high >>> 0).toNumber(); + } + if (d.thumbWidth != null) { + m.thumbWidth = d.thumbWidth | 0; + } + if (d.thumbHeight != null) { + m.thumbHeight = d.thumbHeight | 0; + } + return m; + }; + + LinkPreviewHighQualityThumbnail.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.thumbHash != null && m.hasOwnProperty("thumbHash")) { + d.thumbHash = m.thumbHash; + if (o.oneofs) + d._thumbHash = "thumbHash"; + } + if (m.encThumbHash != null && m.hasOwnProperty("encThumbHash")) { + d.encThumbHash = m.encThumbHash; + if (o.oneofs) + d._encThumbHash = "encThumbHash"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.mediaKeyTimestampMs != null && m.hasOwnProperty("mediaKeyTimestampMs")) { + if (typeof m.mediaKeyTimestampMs === "number") + d.mediaKeyTimestampMs = o.longs === String ? String(m.mediaKeyTimestampMs) : m.mediaKeyTimestampMs; + else + d.mediaKeyTimestampMs = o.longs === String ? longToString(m.mediaKeyTimestampMs) : o.longs === Number ? longToNumber(m.mediaKeyTimestampMs) : m.mediaKeyTimestampMs; + if (o.oneofs) + d._mediaKeyTimestampMs = "mediaKeyTimestampMs"; + } + if (m.thumbWidth != null && m.hasOwnProperty("thumbWidth")) { + d.thumbWidth = m.thumbWidth; + if (o.oneofs) + d._thumbWidth = "thumbWidth"; + } + if (m.thumbHeight != null && m.hasOwnProperty("thumbHeight")) { + d.thumbHeight = m.thumbHeight; + if (o.oneofs) + d._thumbHeight = "thumbHeight"; + } + return d; + }; + + LinkPreviewHighQualityThumbnail.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LinkPreviewHighQualityThumbnail.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail"; + }; + + return LinkPreviewHighQualityThumbnail; + })(); + + LinkPreviewResponse.PaymentLinkPreviewMetadata = (function() { + + function PaymentLinkPreviewMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentLinkPreviewMetadata.prototype.isBusinessVerified = null; + PaymentLinkPreviewMetadata.prototype.providerName = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkPreviewMetadata.prototype, "_isBusinessVerified", { + get: $util.oneOfGetter($oneOfFields = ["isBusinessVerified"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentLinkPreviewMetadata.prototype, "_providerName", { + get: $util.oneOfGetter($oneOfFields = ["providerName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentLinkPreviewMetadata.create = function create(properties) { + return new PaymentLinkPreviewMetadata(properties); + }; + + PaymentLinkPreviewMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isBusinessVerified != null && Object.hasOwnProperty.call(m, "isBusinessVerified")) + w.uint32(8).bool(m.isBusinessVerified); + if (m.providerName != null && Object.hasOwnProperty.call(m, "providerName")) + w.uint32(18).string(m.providerName); + return w; + }; + + PaymentLinkPreviewMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isBusinessVerified = r.bool(); + break; + } + case 2: { + m.providerName = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentLinkPreviewMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata(); + if (d.isBusinessVerified != null) { + m.isBusinessVerified = Boolean(d.isBusinessVerified); + } + if (d.providerName != null) { + m.providerName = String(d.providerName); + } + return m; + }; + + PaymentLinkPreviewMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isBusinessVerified != null && m.hasOwnProperty("isBusinessVerified")) { + d.isBusinessVerified = m.isBusinessVerified; + if (o.oneofs) + d._isBusinessVerified = "isBusinessVerified"; + } + if (m.providerName != null && m.hasOwnProperty("providerName")) { + d.providerName = m.providerName; + if (o.oneofs) + d._providerName = "providerName"; + } + return d; + }; + + PaymentLinkPreviewMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentLinkPreviewMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata"; + }; + + return PaymentLinkPreviewMetadata; + })(); + + return LinkPreviewResponse; + })(); + + PeerDataOperationResult.PlaceholderMessageResendResponse = (function() { + + function PlaceholderMessageResendResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PlaceholderMessageResendResponse.prototype.webMessageInfoBytes = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PlaceholderMessageResendResponse.prototype, "_webMessageInfoBytes", { + get: $util.oneOfGetter($oneOfFields = ["webMessageInfoBytes"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PlaceholderMessageResendResponse.create = function create(properties) { + return new PlaceholderMessageResendResponse(properties); + }; + + PlaceholderMessageResendResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.webMessageInfoBytes != null && Object.hasOwnProperty.call(m, "webMessageInfoBytes")) + w.uint32(10).bytes(m.webMessageInfoBytes); + return w; + }; + + PlaceholderMessageResendResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.webMessageInfoBytes = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PlaceholderMessageResendResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse(); + if (d.webMessageInfoBytes != null) { + if (typeof d.webMessageInfoBytes === "string") + $util.base64.decode(d.webMessageInfoBytes, m.webMessageInfoBytes = $util.newBuffer($util.base64.length(d.webMessageInfoBytes)), 0); + else if (d.webMessageInfoBytes.length >= 0) + m.webMessageInfoBytes = d.webMessageInfoBytes; + } + return m; + }; + + PlaceholderMessageResendResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.webMessageInfoBytes != null && m.hasOwnProperty("webMessageInfoBytes")) { + d.webMessageInfoBytes = o.bytes === String ? $util.base64.encode(m.webMessageInfoBytes, 0, m.webMessageInfoBytes.length) : o.bytes === Array ? Array.prototype.slice.call(m.webMessageInfoBytes) : m.webMessageInfoBytes; + if (o.oneofs) + d._webMessageInfoBytes = "webMessageInfoBytes"; + } + return d; + }; + + PlaceholderMessageResendResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PlaceholderMessageResendResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse"; + }; + + return PlaceholderMessageResendResponse; + })(); + + PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse = (function() { + + function SyncDSnapshotFatalRecoveryResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncDSnapshotFatalRecoveryResponse.prototype.collectionSnapshot = null; + SyncDSnapshotFatalRecoveryResponse.prototype.isCompressed = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncDSnapshotFatalRecoveryResponse.prototype, "_collectionSnapshot", { + get: $util.oneOfGetter($oneOfFields = ["collectionSnapshot"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncDSnapshotFatalRecoveryResponse.prototype, "_isCompressed", { + get: $util.oneOfGetter($oneOfFields = ["isCompressed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncDSnapshotFatalRecoveryResponse.create = function create(properties) { + return new SyncDSnapshotFatalRecoveryResponse(properties); + }; + + SyncDSnapshotFatalRecoveryResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.collectionSnapshot != null && Object.hasOwnProperty.call(m, "collectionSnapshot")) + w.uint32(10).bytes(m.collectionSnapshot); + if (m.isCompressed != null && Object.hasOwnProperty.call(m, "isCompressed")) + w.uint32(16).bool(m.isCompressed); + return w; + }; + + SyncDSnapshotFatalRecoveryResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.collectionSnapshot = r.bytes(); + break; + } + case 2: { + m.isCompressed = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncDSnapshotFatalRecoveryResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse(); + if (d.collectionSnapshot != null) { + if (typeof d.collectionSnapshot === "string") + $util.base64.decode(d.collectionSnapshot, m.collectionSnapshot = $util.newBuffer($util.base64.length(d.collectionSnapshot)), 0); + else if (d.collectionSnapshot.length >= 0) + m.collectionSnapshot = d.collectionSnapshot; + } + if (d.isCompressed != null) { + m.isCompressed = Boolean(d.isCompressed); + } + return m; + }; + + SyncDSnapshotFatalRecoveryResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.collectionSnapshot != null && m.hasOwnProperty("collectionSnapshot")) { + d.collectionSnapshot = o.bytes === String ? $util.base64.encode(m.collectionSnapshot, 0, m.collectionSnapshot.length) : o.bytes === Array ? Array.prototype.slice.call(m.collectionSnapshot) : m.collectionSnapshot; + if (o.oneofs) + d._collectionSnapshot = "collectionSnapshot"; + } + if (m.isCompressed != null && m.hasOwnProperty("isCompressed")) { + d.isCompressed = m.isCompressed; + if (o.oneofs) + d._isCompressed = "isCompressed"; + } + return d; + }; + + SyncDSnapshotFatalRecoveryResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncDSnapshotFatalRecoveryResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse"; + }; + + return SyncDSnapshotFatalRecoveryResponse; + })(); + + PeerDataOperationResult.WaffleNonceFetchResponse = (function() { + + function WaffleNonceFetchResponse(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WaffleNonceFetchResponse.prototype.nonce = null; + WaffleNonceFetchResponse.prototype.waEntFbid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WaffleNonceFetchResponse.prototype, "_nonce", { + get: $util.oneOfGetter($oneOfFields = ["nonce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WaffleNonceFetchResponse.prototype, "_waEntFbid", { + get: $util.oneOfGetter($oneOfFields = ["waEntFbid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WaffleNonceFetchResponse.create = function create(properties) { + return new WaffleNonceFetchResponse(properties); + }; + + WaffleNonceFetchResponse.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.nonce != null && Object.hasOwnProperty.call(m, "nonce")) + w.uint32(10).string(m.nonce); + if (m.waEntFbid != null && Object.hasOwnProperty.call(m, "waEntFbid")) + w.uint32(18).string(m.waEntFbid); + return w; + }; + + WaffleNonceFetchResponse.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.nonce = r.string(); + break; + } + case 2: { + m.waEntFbid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WaffleNonceFetchResponse.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse) + return d; + var m = new $root.proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse(); + if (d.nonce != null) { + m.nonce = String(d.nonce); + } + if (d.waEntFbid != null) { + m.waEntFbid = String(d.waEntFbid); + } + return m; + }; + + WaffleNonceFetchResponse.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.nonce != null && m.hasOwnProperty("nonce")) { + d.nonce = m.nonce; + if (o.oneofs) + d._nonce = "nonce"; + } + if (m.waEntFbid != null && m.hasOwnProperty("waEntFbid")) { + d.waEntFbid = m.waEntFbid; + if (o.oneofs) + d._waEntFbid = "waEntFbid"; + } + return d; + }; + + WaffleNonceFetchResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WaffleNonceFetchResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse"; + }; + + return WaffleNonceFetchResponse; + })(); + + return PeerDataOperationResult; + })(); + + return PeerDataOperationRequestResponseMessage; + })(); + + Message.PeerDataOperationRequestType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UPLOAD_STICKER"] = 0; + values[valuesById[1] = "SEND_RECENT_STICKER_BOOTSTRAP"] = 1; + values[valuesById[2] = "GENERATE_LINK_PREVIEW"] = 2; + values[valuesById[3] = "HISTORY_SYNC_ON_DEMAND"] = 3; + values[valuesById[4] = "PLACEHOLDER_MESSAGE_RESEND"] = 4; + values[valuesById[5] = "WAFFLE_LINKING_NONCE_FETCH"] = 5; + values[valuesById[6] = "FULL_HISTORY_SYNC_ON_DEMAND"] = 6; + values[valuesById[7] = "COMPANION_META_NONCE_FETCH"] = 7; + values[valuesById[8] = "COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY"] = 8; + values[valuesById[9] = "COMPANION_CANONICAL_USER_NONCE_FETCH"] = 9; + values[valuesById[10] = "HISTORY_SYNC_CHUNK_RETRY"] = 10; + values[valuesById[11] = "GALAXY_FLOW_ACTION"] = 11; + return values; + })(); + + Message.PinInChatMessage = (function() { + + function PinInChatMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PinInChatMessage.prototype.key = null; + PinInChatMessage.prototype.type = null; + PinInChatMessage.prototype.senderTimestampMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChatMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChatMessage.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChatMessage.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PinInChatMessage.create = function create(properties) { + return new PinInChatMessage(properties); + }; + + PinInChatMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(16).int32(m.type); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(24).int64(m.senderTimestampMs); + return w; + }; + + PinInChatMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PinInChatMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.type = r.int32(); + break; + } + case 3: { + m.senderTimestampMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PinInChatMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PinInChatMessage) + return d; + var m = new $root.proto.Message.PinInChatMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.PinInChatMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN_TYPE": + case 0: + m.type = 0; + break; + case "PIN_FOR_ALL": + case 1: + m.type = 1; + break; + case "UNPIN_FOR_ALL": + case 2: + m.type = 2; + break; + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + return m; + }; + + PinInChatMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.PinInChatMessage.Type[m.type] === undefined ? m.type : $root.proto.Message.PinInChatMessage.Type[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + return d; + }; + + PinInChatMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PinInChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PinInChatMessage"; + }; + + PinInChatMessage.Type = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_TYPE"] = 0; + values[valuesById[1] = "PIN_FOR_ALL"] = 1; + values[valuesById[2] = "UNPIN_FOR_ALL"] = 2; + return values; + })(); + + return PinInChatMessage; + })(); + + Message.PlaceholderMessage = (function() { + + function PlaceholderMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PlaceholderMessage.prototype.type = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PlaceholderMessage.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PlaceholderMessage.create = function create(properties) { + return new PlaceholderMessage(properties); + }; + + PlaceholderMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + return w; + }; + + PlaceholderMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PlaceholderMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PlaceholderMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PlaceholderMessage) + return d; + var m = new $root.proto.Message.PlaceholderMessage(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "MASK_LINKED_DEVICES": + case 0: + m.type = 0; + break; + } + return m; + }; + + PlaceholderMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.PlaceholderMessage.PlaceholderType[m.type] === undefined ? m.type : $root.proto.Message.PlaceholderMessage.PlaceholderType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + PlaceholderMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PlaceholderMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PlaceholderMessage"; + }; + + PlaceholderMessage.PlaceholderType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "MASK_LINKED_DEVICES"] = 0; + return values; + })(); + + return PlaceholderMessage; + })(); + + Message.PollContentType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "TEXT"] = 1; + values[valuesById[2] = "IMAGE"] = 2; + return values; + })(); + + Message.PollCreationMessage = (function() { + + function PollCreationMessage(p) { + this.options = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollCreationMessage.prototype.encKey = null; + PollCreationMessage.prototype.name = null; + PollCreationMessage.prototype.options = $util.emptyArray; + PollCreationMessage.prototype.selectableOptionsCount = null; + PollCreationMessage.prototype.contextInfo = null; + PollCreationMessage.prototype.pollContentType = null; + PollCreationMessage.prototype.pollType = null; + PollCreationMessage.prototype.correctAnswer = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollCreationMessage.prototype, "_encKey", { + get: $util.oneOfGetter($oneOfFields = ["encKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollCreationMessage.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollCreationMessage.prototype, "_selectableOptionsCount", { + get: $util.oneOfGetter($oneOfFields = ["selectableOptionsCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollCreationMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollCreationMessage.prototype, "_pollContentType", { + get: $util.oneOfGetter($oneOfFields = ["pollContentType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollCreationMessage.prototype, "_pollType", { + get: $util.oneOfGetter($oneOfFields = ["pollType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollCreationMessage.prototype, "_correctAnswer", { + get: $util.oneOfGetter($oneOfFields = ["correctAnswer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollCreationMessage.create = function create(properties) { + return new PollCreationMessage(properties); + }; + + PollCreationMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.encKey != null && Object.hasOwnProperty.call(m, "encKey")) + w.uint32(10).bytes(m.encKey); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(18).string(m.name); + if (m.options != null && m.options.length) { + for (var i = 0; i < m.options.length; ++i) + $root.proto.Message.PollCreationMessage.Option.encode(m.options[i], w.uint32(26).fork()).ldelim(); + } + if (m.selectableOptionsCount != null && Object.hasOwnProperty.call(m, "selectableOptionsCount")) + w.uint32(32).uint32(m.selectableOptionsCount); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(42).fork()).ldelim(); + if (m.pollContentType != null && Object.hasOwnProperty.call(m, "pollContentType")) + w.uint32(48).int32(m.pollContentType); + if (m.pollType != null && Object.hasOwnProperty.call(m, "pollType")) + w.uint32(56).int32(m.pollType); + if (m.correctAnswer != null && Object.hasOwnProperty.call(m, "correctAnswer")) + $root.proto.Message.PollCreationMessage.Option.encode(m.correctAnswer, w.uint32(66).fork()).ldelim(); + return w; + }; + + PollCreationMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollCreationMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.encKey = r.bytes(); + break; + } + case 2: { + m.name = r.string(); + break; + } + case 3: { + if (!(m.options && m.options.length)) + m.options = []; + m.options.push($root.proto.Message.PollCreationMessage.Option.decode(r, r.uint32())); + break; + } + case 4: { + m.selectableOptionsCount = r.uint32(); + break; + } + case 5: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 6: { + m.pollContentType = r.int32(); + break; + } + case 7: { + m.pollType = r.int32(); + break; + } + case 8: { + m.correctAnswer = $root.proto.Message.PollCreationMessage.Option.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollCreationMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollCreationMessage) + return d; + var m = new $root.proto.Message.PollCreationMessage(); + if (d.encKey != null) { + if (typeof d.encKey === "string") + $util.base64.decode(d.encKey, m.encKey = $util.newBuffer($util.base64.length(d.encKey)), 0); + else if (d.encKey.length >= 0) + m.encKey = d.encKey; + } + if (d.name != null) { + m.name = String(d.name); + } + if (d.options) { + if (!Array.isArray(d.options)) + throw TypeError(".proto.Message.PollCreationMessage.options: array expected"); + m.options = []; + for (var i = 0; i < d.options.length; ++i) { + if (typeof d.options[i] !== "object") + throw TypeError(".proto.Message.PollCreationMessage.options: object expected"); + m.options[i] = $root.proto.Message.PollCreationMessage.Option.fromObject(d.options[i]); + } + } + if (d.selectableOptionsCount != null) { + m.selectableOptionsCount = d.selectableOptionsCount >>> 0; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.PollCreationMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + switch (d.pollContentType) { + default: + if (typeof d.pollContentType === "number") { + m.pollContentType = d.pollContentType; + break; + } + break; + case "UNKNOWN": + case 0: + m.pollContentType = 0; + break; + case "TEXT": + case 1: + m.pollContentType = 1; + break; + case "IMAGE": + case 2: + m.pollContentType = 2; + break; + } + switch (d.pollType) { + default: + if (typeof d.pollType === "number") { + m.pollType = d.pollType; + break; + } + break; + case "POLL": + case 0: + m.pollType = 0; + break; + case "QUIZ": + case 1: + m.pollType = 1; + break; + } + if (d.correctAnswer != null) { + if (typeof d.correctAnswer !== "object") + throw TypeError(".proto.Message.PollCreationMessage.correctAnswer: object expected"); + m.correctAnswer = $root.proto.Message.PollCreationMessage.Option.fromObject(d.correctAnswer); + } + return m; + }; + + PollCreationMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.options = []; + } + if (m.encKey != null && m.hasOwnProperty("encKey")) { + d.encKey = o.bytes === String ? $util.base64.encode(m.encKey, 0, m.encKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.encKey) : m.encKey; + if (o.oneofs) + d._encKey = "encKey"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.options && m.options.length) { + d.options = []; + for (var j = 0; j < m.options.length; ++j) { + d.options[j] = $root.proto.Message.PollCreationMessage.Option.toObject(m.options[j], o); + } + } + if (m.selectableOptionsCount != null && m.hasOwnProperty("selectableOptionsCount")) { + d.selectableOptionsCount = m.selectableOptionsCount; + if (o.oneofs) + d._selectableOptionsCount = "selectableOptionsCount"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.pollContentType != null && m.hasOwnProperty("pollContentType")) { + d.pollContentType = o.enums === String ? $root.proto.Message.PollContentType[m.pollContentType] === undefined ? m.pollContentType : $root.proto.Message.PollContentType[m.pollContentType] : m.pollContentType; + if (o.oneofs) + d._pollContentType = "pollContentType"; + } + if (m.pollType != null && m.hasOwnProperty("pollType")) { + d.pollType = o.enums === String ? $root.proto.Message.PollType[m.pollType] === undefined ? m.pollType : $root.proto.Message.PollType[m.pollType] : m.pollType; + if (o.oneofs) + d._pollType = "pollType"; + } + if (m.correctAnswer != null && m.hasOwnProperty("correctAnswer")) { + d.correctAnswer = $root.proto.Message.PollCreationMessage.Option.toObject(m.correctAnswer, o); + if (o.oneofs) + d._correctAnswer = "correctAnswer"; + } + return d; + }; + + PollCreationMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollCreationMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollCreationMessage"; + }; + + PollCreationMessage.Option = (function() { + + function Option(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Option.prototype.optionName = null; + Option.prototype.optionHash = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Option.prototype, "_optionName", { + get: $util.oneOfGetter($oneOfFields = ["optionName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Option.prototype, "_optionHash", { + get: $util.oneOfGetter($oneOfFields = ["optionHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Option.create = function create(properties) { + return new Option(properties); + }; + + Option.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.optionName != null && Object.hasOwnProperty.call(m, "optionName")) + w.uint32(10).string(m.optionName); + if (m.optionHash != null && Object.hasOwnProperty.call(m, "optionHash")) + w.uint32(18).string(m.optionHash); + return w; + }; + + Option.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollCreationMessage.Option(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.optionName = r.string(); + break; + } + case 2: { + m.optionHash = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Option.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollCreationMessage.Option) + return d; + var m = new $root.proto.Message.PollCreationMessage.Option(); + if (d.optionName != null) { + m.optionName = String(d.optionName); + } + if (d.optionHash != null) { + m.optionHash = String(d.optionHash); + } + return m; + }; + + Option.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.optionName != null && m.hasOwnProperty("optionName")) { + d.optionName = m.optionName; + if (o.oneofs) + d._optionName = "optionName"; + } + if (m.optionHash != null && m.hasOwnProperty("optionHash")) { + d.optionHash = m.optionHash; + if (o.oneofs) + d._optionHash = "optionHash"; + } + return d; + }; + + Option.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Option.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollCreationMessage.Option"; + }; + + return Option; + })(); + + return PollCreationMessage; + })(); + + Message.PollEncValue = (function() { + + function PollEncValue(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollEncValue.prototype.encPayload = null; + PollEncValue.prototype.encIv = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollEncValue.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollEncValue.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollEncValue.create = function create(properties) { + return new PollEncValue(properties); + }; + + PollEncValue.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(10).bytes(m.encPayload); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(18).bytes(m.encIv); + return w; + }; + + PollEncValue.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollEncValue(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.encPayload = r.bytes(); + break; + } + case 2: { + m.encIv = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollEncValue.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollEncValue) + return d; + var m = new $root.proto.Message.PollEncValue(); + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + return m; + }; + + PollEncValue.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + return d; + }; + + PollEncValue.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollEncValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollEncValue"; + }; + + return PollEncValue; + })(); + + Message.PollResultSnapshotMessage = (function() { + + function PollResultSnapshotMessage(p) { + this.pollVotes = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollResultSnapshotMessage.prototype.name = null; + PollResultSnapshotMessage.prototype.pollVotes = $util.emptyArray; + PollResultSnapshotMessage.prototype.contextInfo = null; + PollResultSnapshotMessage.prototype.pollType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollResultSnapshotMessage.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollResultSnapshotMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollResultSnapshotMessage.prototype, "_pollType", { + get: $util.oneOfGetter($oneOfFields = ["pollType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollResultSnapshotMessage.create = function create(properties) { + return new PollResultSnapshotMessage(properties); + }; + + PollResultSnapshotMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.pollVotes != null && m.pollVotes.length) { + for (var i = 0; i < m.pollVotes.length; ++i) + $root.proto.Message.PollResultSnapshotMessage.PollVote.encode(m.pollVotes[i], w.uint32(18).fork()).ldelim(); + } + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(26).fork()).ldelim(); + if (m.pollType != null && Object.hasOwnProperty.call(m, "pollType")) + w.uint32(32).int32(m.pollType); + return w; + }; + + PollResultSnapshotMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollResultSnapshotMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + if (!(m.pollVotes && m.pollVotes.length)) + m.pollVotes = []; + m.pollVotes.push($root.proto.Message.PollResultSnapshotMessage.PollVote.decode(r, r.uint32())); + break; + } + case 3: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 4: { + m.pollType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollResultSnapshotMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollResultSnapshotMessage) + return d; + var m = new $root.proto.Message.PollResultSnapshotMessage(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.pollVotes) { + if (!Array.isArray(d.pollVotes)) + throw TypeError(".proto.Message.PollResultSnapshotMessage.pollVotes: array expected"); + m.pollVotes = []; + for (var i = 0; i < d.pollVotes.length; ++i) { + if (typeof d.pollVotes[i] !== "object") + throw TypeError(".proto.Message.PollResultSnapshotMessage.pollVotes: object expected"); + m.pollVotes[i] = $root.proto.Message.PollResultSnapshotMessage.PollVote.fromObject(d.pollVotes[i]); + } + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.PollResultSnapshotMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + switch (d.pollType) { + default: + if (typeof d.pollType === "number") { + m.pollType = d.pollType; + break; + } + break; + case "POLL": + case 0: + m.pollType = 0; + break; + case "QUIZ": + case 1: + m.pollType = 1; + break; + } + return m; + }; + + PollResultSnapshotMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.pollVotes = []; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.pollVotes && m.pollVotes.length) { + d.pollVotes = []; + for (var j = 0; j < m.pollVotes.length; ++j) { + d.pollVotes[j] = $root.proto.Message.PollResultSnapshotMessage.PollVote.toObject(m.pollVotes[j], o); + } + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.pollType != null && m.hasOwnProperty("pollType")) { + d.pollType = o.enums === String ? $root.proto.Message.PollType[m.pollType] === undefined ? m.pollType : $root.proto.Message.PollType[m.pollType] : m.pollType; + if (o.oneofs) + d._pollType = "pollType"; + } + return d; + }; + + PollResultSnapshotMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollResultSnapshotMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollResultSnapshotMessage"; + }; + + PollResultSnapshotMessage.PollVote = (function() { + + function PollVote(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollVote.prototype.optionName = null; + PollVote.prototype.optionVoteCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollVote.prototype, "_optionName", { + get: $util.oneOfGetter($oneOfFields = ["optionName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollVote.prototype, "_optionVoteCount", { + get: $util.oneOfGetter($oneOfFields = ["optionVoteCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollVote.create = function create(properties) { + return new PollVote(properties); + }; + + PollVote.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.optionName != null && Object.hasOwnProperty.call(m, "optionName")) + w.uint32(10).string(m.optionName); + if (m.optionVoteCount != null && Object.hasOwnProperty.call(m, "optionVoteCount")) + w.uint32(16).int64(m.optionVoteCount); + return w; + }; + + PollVote.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollResultSnapshotMessage.PollVote(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.optionName = r.string(); + break; + } + case 2: { + m.optionVoteCount = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollVote.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollResultSnapshotMessage.PollVote) + return d; + var m = new $root.proto.Message.PollResultSnapshotMessage.PollVote(); + if (d.optionName != null) { + m.optionName = String(d.optionName); + } + if (d.optionVoteCount != null) { + if ($util.Long) + (m.optionVoteCount = $util.Long.fromValue(d.optionVoteCount)).unsigned = false; + else if (typeof d.optionVoteCount === "string") + m.optionVoteCount = parseInt(d.optionVoteCount, 10); + else if (typeof d.optionVoteCount === "number") + m.optionVoteCount = d.optionVoteCount; + else if (typeof d.optionVoteCount === "object") + m.optionVoteCount = new $util.LongBits(d.optionVoteCount.low >>> 0, d.optionVoteCount.high >>> 0).toNumber(); + } + return m; + }; + + PollVote.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.optionName != null && m.hasOwnProperty("optionName")) { + d.optionName = m.optionName; + if (o.oneofs) + d._optionName = "optionName"; + } + if (m.optionVoteCount != null && m.hasOwnProperty("optionVoteCount")) { + if (typeof m.optionVoteCount === "number") + d.optionVoteCount = o.longs === String ? String(m.optionVoteCount) : m.optionVoteCount; + else + d.optionVoteCount = o.longs === String ? longToString(m.optionVoteCount) : o.longs === Number ? longToNumber(m.optionVoteCount) : m.optionVoteCount; + if (o.oneofs) + d._optionVoteCount = "optionVoteCount"; + } + return d; + }; + + PollVote.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollVote.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollResultSnapshotMessage.PollVote"; + }; + + return PollVote; + })(); + + return PollResultSnapshotMessage; + })(); + + Message.PollType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "POLL"] = 0; + values[valuesById[1] = "QUIZ"] = 1; + return values; + })(); + + Message.PollUpdateMessage = (function() { + + function PollUpdateMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollUpdateMessage.prototype.pollCreationMessageKey = null; + PollUpdateMessage.prototype.vote = null; + PollUpdateMessage.prototype.metadata = null; + PollUpdateMessage.prototype.senderTimestampMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdateMessage.prototype, "_pollCreationMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["pollCreationMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdateMessage.prototype, "_vote", { + get: $util.oneOfGetter($oneOfFields = ["vote"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdateMessage.prototype, "_metadata", { + get: $util.oneOfGetter($oneOfFields = ["metadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdateMessage.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollUpdateMessage.create = function create(properties) { + return new PollUpdateMessage(properties); + }; + + PollUpdateMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pollCreationMessageKey != null && Object.hasOwnProperty.call(m, "pollCreationMessageKey")) + $root.proto.MessageKey.encode(m.pollCreationMessageKey, w.uint32(10).fork()).ldelim(); + if (m.vote != null && Object.hasOwnProperty.call(m, "vote")) + $root.proto.Message.PollEncValue.encode(m.vote, w.uint32(18).fork()).ldelim(); + if (m.metadata != null && Object.hasOwnProperty.call(m, "metadata")) + $root.proto.Message.PollUpdateMessageMetadata.encode(m.metadata, w.uint32(26).fork()).ldelim(); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(32).int64(m.senderTimestampMs); + return w; + }; + + PollUpdateMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollUpdateMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.pollCreationMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.vote = $root.proto.Message.PollEncValue.decode(r, r.uint32()); + break; + } + case 3: { + m.metadata = $root.proto.Message.PollUpdateMessageMetadata.decode(r, r.uint32()); + break; + } + case 4: { + m.senderTimestampMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollUpdateMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollUpdateMessage) + return d; + var m = new $root.proto.Message.PollUpdateMessage(); + if (d.pollCreationMessageKey != null) { + if (typeof d.pollCreationMessageKey !== "object") + throw TypeError(".proto.Message.PollUpdateMessage.pollCreationMessageKey: object expected"); + m.pollCreationMessageKey = $root.proto.MessageKey.fromObject(d.pollCreationMessageKey); + } + if (d.vote != null) { + if (typeof d.vote !== "object") + throw TypeError(".proto.Message.PollUpdateMessage.vote: object expected"); + m.vote = $root.proto.Message.PollEncValue.fromObject(d.vote); + } + if (d.metadata != null) { + if (typeof d.metadata !== "object") + throw TypeError(".proto.Message.PollUpdateMessage.metadata: object expected"); + m.metadata = $root.proto.Message.PollUpdateMessageMetadata.fromObject(d.metadata); + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + return m; + }; + + PollUpdateMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.pollCreationMessageKey != null && m.hasOwnProperty("pollCreationMessageKey")) { + d.pollCreationMessageKey = $root.proto.MessageKey.toObject(m.pollCreationMessageKey, o); + if (o.oneofs) + d._pollCreationMessageKey = "pollCreationMessageKey"; + } + if (m.vote != null && m.hasOwnProperty("vote")) { + d.vote = $root.proto.Message.PollEncValue.toObject(m.vote, o); + if (o.oneofs) + d._vote = "vote"; + } + if (m.metadata != null && m.hasOwnProperty("metadata")) { + d.metadata = $root.proto.Message.PollUpdateMessageMetadata.toObject(m.metadata, o); + if (o.oneofs) + d._metadata = "metadata"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + return d; + }; + + PollUpdateMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollUpdateMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollUpdateMessage"; + }; + + return PollUpdateMessage; + })(); + + Message.PollUpdateMessageMetadata = (function() { + + function PollUpdateMessageMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollUpdateMessageMetadata.create = function create(properties) { + return new PollUpdateMessageMetadata(properties); + }; + + PollUpdateMessageMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + return w; + }; + + PollUpdateMessageMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollUpdateMessageMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollUpdateMessageMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollUpdateMessageMetadata) + return d; + return new $root.proto.Message.PollUpdateMessageMetadata(); + }; + + PollUpdateMessageMetadata.toObject = function toObject() { + return {}; + }; + + PollUpdateMessageMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollUpdateMessageMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollUpdateMessageMetadata"; + }; + + return PollUpdateMessageMetadata; + })(); + + Message.PollVoteMessage = (function() { + + function PollVoteMessage(p) { + this.selectedOptions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollVoteMessage.prototype.selectedOptions = $util.emptyArray; + + PollVoteMessage.create = function create(properties) { + return new PollVoteMessage(properties); + }; + + PollVoteMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.selectedOptions != null && m.selectedOptions.length) { + for (var i = 0; i < m.selectedOptions.length; ++i) + w.uint32(10).bytes(m.selectedOptions[i]); + } + return w; + }; + + PollVoteMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.PollVoteMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.selectedOptions && m.selectedOptions.length)) + m.selectedOptions = []; + m.selectedOptions.push(r.bytes()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollVoteMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.PollVoteMessage) + return d; + var m = new $root.proto.Message.PollVoteMessage(); + if (d.selectedOptions) { + if (!Array.isArray(d.selectedOptions)) + throw TypeError(".proto.Message.PollVoteMessage.selectedOptions: array expected"); + m.selectedOptions = []; + for (var i = 0; i < d.selectedOptions.length; ++i) { + if (typeof d.selectedOptions[i] === "string") + $util.base64.decode(d.selectedOptions[i], m.selectedOptions[i] = $util.newBuffer($util.base64.length(d.selectedOptions[i])), 0); + else if (d.selectedOptions[i].length >= 0) + m.selectedOptions[i] = d.selectedOptions[i]; + } + } + return m; + }; + + PollVoteMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.selectedOptions = []; + } + if (m.selectedOptions && m.selectedOptions.length) { + d.selectedOptions = []; + for (var j = 0; j < m.selectedOptions.length; ++j) { + d.selectedOptions[j] = o.bytes === String ? $util.base64.encode(m.selectedOptions[j], 0, m.selectedOptions[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.selectedOptions[j]) : m.selectedOptions[j]; + } + } + return d; + }; + + PollVoteMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollVoteMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.PollVoteMessage"; + }; + + return PollVoteMessage; + })(); + + Message.ProductMessage = (function() { + + function ProductMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProductMessage.prototype.product = null; + ProductMessage.prototype.businessOwnerJid = null; + ProductMessage.prototype.catalog = null; + ProductMessage.prototype.body = null; + ProductMessage.prototype.footer = null; + ProductMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductMessage.prototype, "_product", { + get: $util.oneOfGetter($oneOfFields = ["product"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductMessage.prototype, "_businessOwnerJid", { + get: $util.oneOfGetter($oneOfFields = ["businessOwnerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductMessage.prototype, "_catalog", { + get: $util.oneOfGetter($oneOfFields = ["catalog"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductMessage.prototype, "_body", { + get: $util.oneOfGetter($oneOfFields = ["body"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductMessage.prototype, "_footer", { + get: $util.oneOfGetter($oneOfFields = ["footer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProductMessage.create = function create(properties) { + return new ProductMessage(properties); + }; + + ProductMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.product != null && Object.hasOwnProperty.call(m, "product")) + $root.proto.Message.ProductMessage.ProductSnapshot.encode(m.product, w.uint32(10).fork()).ldelim(); + if (m.businessOwnerJid != null && Object.hasOwnProperty.call(m, "businessOwnerJid")) + w.uint32(18).string(m.businessOwnerJid); + if (m.catalog != null && Object.hasOwnProperty.call(m, "catalog")) + $root.proto.Message.ProductMessage.CatalogSnapshot.encode(m.catalog, w.uint32(34).fork()).ldelim(); + if (m.body != null && Object.hasOwnProperty.call(m, "body")) + w.uint32(42).string(m.body); + if (m.footer != null && Object.hasOwnProperty.call(m, "footer")) + w.uint32(50).string(m.footer); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + return w; + }; + + ProductMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ProductMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.product = $root.proto.Message.ProductMessage.ProductSnapshot.decode(r, r.uint32()); + break; + } + case 2: { + m.businessOwnerJid = r.string(); + break; + } + case 4: { + m.catalog = $root.proto.Message.ProductMessage.CatalogSnapshot.decode(r, r.uint32()); + break; + } + case 5: { + m.body = r.string(); + break; + } + case 6: { + m.footer = r.string(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProductMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ProductMessage) + return d; + var m = new $root.proto.Message.ProductMessage(); + if (d.product != null) { + if (typeof d.product !== "object") + throw TypeError(".proto.Message.ProductMessage.product: object expected"); + m.product = $root.proto.Message.ProductMessage.ProductSnapshot.fromObject(d.product); + } + if (d.businessOwnerJid != null) { + m.businessOwnerJid = String(d.businessOwnerJid); + } + if (d.catalog != null) { + if (typeof d.catalog !== "object") + throw TypeError(".proto.Message.ProductMessage.catalog: object expected"); + m.catalog = $root.proto.Message.ProductMessage.CatalogSnapshot.fromObject(d.catalog); + } + if (d.body != null) { + m.body = String(d.body); + } + if (d.footer != null) { + m.footer = String(d.footer); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.ProductMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + ProductMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.product != null && m.hasOwnProperty("product")) { + d.product = $root.proto.Message.ProductMessage.ProductSnapshot.toObject(m.product, o); + if (o.oneofs) + d._product = "product"; + } + if (m.businessOwnerJid != null && m.hasOwnProperty("businessOwnerJid")) { + d.businessOwnerJid = m.businessOwnerJid; + if (o.oneofs) + d._businessOwnerJid = "businessOwnerJid"; + } + if (m.catalog != null && m.hasOwnProperty("catalog")) { + d.catalog = $root.proto.Message.ProductMessage.CatalogSnapshot.toObject(m.catalog, o); + if (o.oneofs) + d._catalog = "catalog"; + } + if (m.body != null && m.hasOwnProperty("body")) { + d.body = m.body; + if (o.oneofs) + d._body = "body"; + } + if (m.footer != null && m.hasOwnProperty("footer")) { + d.footer = m.footer; + if (o.oneofs) + d._footer = "footer"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + ProductMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProductMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ProductMessage"; + }; + + ProductMessage.CatalogSnapshot = (function() { + + function CatalogSnapshot(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CatalogSnapshot.prototype.catalogImage = null; + CatalogSnapshot.prototype.title = null; + CatalogSnapshot.prototype.description = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CatalogSnapshot.prototype, "_catalogImage", { + get: $util.oneOfGetter($oneOfFields = ["catalogImage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CatalogSnapshot.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CatalogSnapshot.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CatalogSnapshot.create = function create(properties) { + return new CatalogSnapshot(properties); + }; + + CatalogSnapshot.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.catalogImage != null && Object.hasOwnProperty.call(m, "catalogImage")) + $root.proto.Message.ImageMessage.encode(m.catalogImage, w.uint32(10).fork()).ldelim(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(18).string(m.title); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(26).string(m.description); + return w; + }; + + CatalogSnapshot.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ProductMessage.CatalogSnapshot(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.catalogImage = $root.proto.Message.ImageMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.title = r.string(); + break; + } + case 3: { + m.description = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CatalogSnapshot.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ProductMessage.CatalogSnapshot) + return d; + var m = new $root.proto.Message.ProductMessage.CatalogSnapshot(); + if (d.catalogImage != null) { + if (typeof d.catalogImage !== "object") + throw TypeError(".proto.Message.ProductMessage.CatalogSnapshot.catalogImage: object expected"); + m.catalogImage = $root.proto.Message.ImageMessage.fromObject(d.catalogImage); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.description != null) { + m.description = String(d.description); + } + return m; + }; + + CatalogSnapshot.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.catalogImage != null && m.hasOwnProperty("catalogImage")) { + d.catalogImage = $root.proto.Message.ImageMessage.toObject(m.catalogImage, o); + if (o.oneofs) + d._catalogImage = "catalogImage"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + return d; + }; + + CatalogSnapshot.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CatalogSnapshot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ProductMessage.CatalogSnapshot"; + }; + + return CatalogSnapshot; + })(); + + ProductMessage.ProductSnapshot = (function() { + + function ProductSnapshot(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProductSnapshot.prototype.productImage = null; + ProductSnapshot.prototype.productId = null; + ProductSnapshot.prototype.title = null; + ProductSnapshot.prototype.description = null; + ProductSnapshot.prototype.currencyCode = null; + ProductSnapshot.prototype.priceAmount1000 = null; + ProductSnapshot.prototype.retailerId = null; + ProductSnapshot.prototype.url = null; + ProductSnapshot.prototype.productImageCount = null; + ProductSnapshot.prototype.firstImageId = null; + ProductSnapshot.prototype.salePriceAmount1000 = null; + ProductSnapshot.prototype.signedUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_productImage", { + get: $util.oneOfGetter($oneOfFields = ["productImage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_productId", { + get: $util.oneOfGetter($oneOfFields = ["productId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_currencyCode", { + get: $util.oneOfGetter($oneOfFields = ["currencyCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_priceAmount1000", { + get: $util.oneOfGetter($oneOfFields = ["priceAmount1000"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_retailerId", { + get: $util.oneOfGetter($oneOfFields = ["retailerId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_productImageCount", { + get: $util.oneOfGetter($oneOfFields = ["productImageCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_firstImageId", { + get: $util.oneOfGetter($oneOfFields = ["firstImageId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_salePriceAmount1000", { + get: $util.oneOfGetter($oneOfFields = ["salePriceAmount1000"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProductSnapshot.prototype, "_signedUrl", { + get: $util.oneOfGetter($oneOfFields = ["signedUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProductSnapshot.create = function create(properties) { + return new ProductSnapshot(properties); + }; + + ProductSnapshot.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.productImage != null && Object.hasOwnProperty.call(m, "productImage")) + $root.proto.Message.ImageMessage.encode(m.productImage, w.uint32(10).fork()).ldelim(); + if (m.productId != null && Object.hasOwnProperty.call(m, "productId")) + w.uint32(18).string(m.productId); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(26).string(m.title); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(34).string(m.description); + if (m.currencyCode != null && Object.hasOwnProperty.call(m, "currencyCode")) + w.uint32(42).string(m.currencyCode); + if (m.priceAmount1000 != null && Object.hasOwnProperty.call(m, "priceAmount1000")) + w.uint32(48).int64(m.priceAmount1000); + if (m.retailerId != null && Object.hasOwnProperty.call(m, "retailerId")) + w.uint32(58).string(m.retailerId); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(66).string(m.url); + if (m.productImageCount != null && Object.hasOwnProperty.call(m, "productImageCount")) + w.uint32(72).uint32(m.productImageCount); + if (m.firstImageId != null && Object.hasOwnProperty.call(m, "firstImageId")) + w.uint32(90).string(m.firstImageId); + if (m.salePriceAmount1000 != null && Object.hasOwnProperty.call(m, "salePriceAmount1000")) + w.uint32(96).int64(m.salePriceAmount1000); + if (m.signedUrl != null && Object.hasOwnProperty.call(m, "signedUrl")) + w.uint32(106).string(m.signedUrl); + return w; + }; + + ProductSnapshot.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ProductMessage.ProductSnapshot(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.productImage = $root.proto.Message.ImageMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.productId = r.string(); + break; + } + case 3: { + m.title = r.string(); + break; + } + case 4: { + m.description = r.string(); + break; + } + case 5: { + m.currencyCode = r.string(); + break; + } + case 6: { + m.priceAmount1000 = r.int64(); + break; + } + case 7: { + m.retailerId = r.string(); + break; + } + case 8: { + m.url = r.string(); + break; + } + case 9: { + m.productImageCount = r.uint32(); + break; + } + case 11: { + m.firstImageId = r.string(); + break; + } + case 12: { + m.salePriceAmount1000 = r.int64(); + break; + } + case 13: { + m.signedUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProductSnapshot.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ProductMessage.ProductSnapshot) + return d; + var m = new $root.proto.Message.ProductMessage.ProductSnapshot(); + if (d.productImage != null) { + if (typeof d.productImage !== "object") + throw TypeError(".proto.Message.ProductMessage.ProductSnapshot.productImage: object expected"); + m.productImage = $root.proto.Message.ImageMessage.fromObject(d.productImage); + } + if (d.productId != null) { + m.productId = String(d.productId); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.currencyCode != null) { + m.currencyCode = String(d.currencyCode); + } + if (d.priceAmount1000 != null) { + if ($util.Long) + (m.priceAmount1000 = $util.Long.fromValue(d.priceAmount1000)).unsigned = false; + else if (typeof d.priceAmount1000 === "string") + m.priceAmount1000 = parseInt(d.priceAmount1000, 10); + else if (typeof d.priceAmount1000 === "number") + m.priceAmount1000 = d.priceAmount1000; + else if (typeof d.priceAmount1000 === "object") + m.priceAmount1000 = new $util.LongBits(d.priceAmount1000.low >>> 0, d.priceAmount1000.high >>> 0).toNumber(); + } + if (d.retailerId != null) { + m.retailerId = String(d.retailerId); + } + if (d.url != null) { + m.url = String(d.url); + } + if (d.productImageCount != null) { + m.productImageCount = d.productImageCount >>> 0; + } + if (d.firstImageId != null) { + m.firstImageId = String(d.firstImageId); + } + if (d.salePriceAmount1000 != null) { + if ($util.Long) + (m.salePriceAmount1000 = $util.Long.fromValue(d.salePriceAmount1000)).unsigned = false; + else if (typeof d.salePriceAmount1000 === "string") + m.salePriceAmount1000 = parseInt(d.salePriceAmount1000, 10); + else if (typeof d.salePriceAmount1000 === "number") + m.salePriceAmount1000 = d.salePriceAmount1000; + else if (typeof d.salePriceAmount1000 === "object") + m.salePriceAmount1000 = new $util.LongBits(d.salePriceAmount1000.low >>> 0, d.salePriceAmount1000.high >>> 0).toNumber(); + } + if (d.signedUrl != null) { + m.signedUrl = String(d.signedUrl); + } + return m; + }; + + ProductSnapshot.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.productImage != null && m.hasOwnProperty("productImage")) { + d.productImage = $root.proto.Message.ImageMessage.toObject(m.productImage, o); + if (o.oneofs) + d._productImage = "productImage"; + } + if (m.productId != null && m.hasOwnProperty("productId")) { + d.productId = m.productId; + if (o.oneofs) + d._productId = "productId"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.currencyCode != null && m.hasOwnProperty("currencyCode")) { + d.currencyCode = m.currencyCode; + if (o.oneofs) + d._currencyCode = "currencyCode"; + } + if (m.priceAmount1000 != null && m.hasOwnProperty("priceAmount1000")) { + if (typeof m.priceAmount1000 === "number") + d.priceAmount1000 = o.longs === String ? String(m.priceAmount1000) : m.priceAmount1000; + else + d.priceAmount1000 = o.longs === String ? longToString(m.priceAmount1000) : o.longs === Number ? longToNumber(m.priceAmount1000) : m.priceAmount1000; + if (o.oneofs) + d._priceAmount1000 = "priceAmount1000"; + } + if (m.retailerId != null && m.hasOwnProperty("retailerId")) { + d.retailerId = m.retailerId; + if (o.oneofs) + d._retailerId = "retailerId"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.productImageCount != null && m.hasOwnProperty("productImageCount")) { + d.productImageCount = m.productImageCount; + if (o.oneofs) + d._productImageCount = "productImageCount"; + } + if (m.firstImageId != null && m.hasOwnProperty("firstImageId")) { + d.firstImageId = m.firstImageId; + if (o.oneofs) + d._firstImageId = "firstImageId"; + } + if (m.salePriceAmount1000 != null && m.hasOwnProperty("salePriceAmount1000")) { + if (typeof m.salePriceAmount1000 === "number") + d.salePriceAmount1000 = o.longs === String ? String(m.salePriceAmount1000) : m.salePriceAmount1000; + else + d.salePriceAmount1000 = o.longs === String ? longToString(m.salePriceAmount1000) : o.longs === Number ? longToNumber(m.salePriceAmount1000) : m.salePriceAmount1000; + if (o.oneofs) + d._salePriceAmount1000 = "salePriceAmount1000"; + } + if (m.signedUrl != null && m.hasOwnProperty("signedUrl")) { + d.signedUrl = m.signedUrl; + if (o.oneofs) + d._signedUrl = "signedUrl"; + } + return d; + }; + + ProductSnapshot.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProductSnapshot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ProductMessage.ProductSnapshot"; + }; + + return ProductSnapshot; + })(); + + return ProductMessage; + })(); + + Message.ProtocolMessage = (function() { + + function ProtocolMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProtocolMessage.prototype.key = null; + ProtocolMessage.prototype.type = null; + ProtocolMessage.prototype.ephemeralExpiration = null; + ProtocolMessage.prototype.ephemeralSettingTimestamp = null; + ProtocolMessage.prototype.historySyncNotification = null; + ProtocolMessage.prototype.appStateSyncKeyShare = null; + ProtocolMessage.prototype.appStateSyncKeyRequest = null; + ProtocolMessage.prototype.initialSecurityNotificationSettingSync = null; + ProtocolMessage.prototype.appStateFatalExceptionNotification = null; + ProtocolMessage.prototype.disappearingMode = null; + ProtocolMessage.prototype.editedMessage = null; + ProtocolMessage.prototype.timestampMs = null; + ProtocolMessage.prototype.peerDataOperationRequestMessage = null; + ProtocolMessage.prototype.peerDataOperationRequestResponseMessage = null; + ProtocolMessage.prototype.botFeedbackMessage = null; + ProtocolMessage.prototype.invokerJid = null; + ProtocolMessage.prototype.requestWelcomeMessageMetadata = null; + ProtocolMessage.prototype.mediaNotifyMessage = null; + ProtocolMessage.prototype.cloudApiThreadControlNotification = null; + ProtocolMessage.prototype.lidMigrationMappingSyncMessage = null; + ProtocolMessage.prototype.limitSharing = null; + ProtocolMessage.prototype.aiPsiMetadata = null; + ProtocolMessage.prototype.aiQueryFanout = null; + ProtocolMessage.prototype.memberLabel = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_ephemeralExpiration", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralExpiration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_ephemeralSettingTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralSettingTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_historySyncNotification", { + get: $util.oneOfGetter($oneOfFields = ["historySyncNotification"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_appStateSyncKeyShare", { + get: $util.oneOfGetter($oneOfFields = ["appStateSyncKeyShare"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_appStateSyncKeyRequest", { + get: $util.oneOfGetter($oneOfFields = ["appStateSyncKeyRequest"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_initialSecurityNotificationSettingSync", { + get: $util.oneOfGetter($oneOfFields = ["initialSecurityNotificationSettingSync"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_appStateFatalExceptionNotification", { + get: $util.oneOfGetter($oneOfFields = ["appStateFatalExceptionNotification"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_disappearingMode", { + get: $util.oneOfGetter($oneOfFields = ["disappearingMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_editedMessage", { + get: $util.oneOfGetter($oneOfFields = ["editedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_timestampMs", { + get: $util.oneOfGetter($oneOfFields = ["timestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_peerDataOperationRequestMessage", { + get: $util.oneOfGetter($oneOfFields = ["peerDataOperationRequestMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_peerDataOperationRequestResponseMessage", { + get: $util.oneOfGetter($oneOfFields = ["peerDataOperationRequestResponseMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_botFeedbackMessage", { + get: $util.oneOfGetter($oneOfFields = ["botFeedbackMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_invokerJid", { + get: $util.oneOfGetter($oneOfFields = ["invokerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_requestWelcomeMessageMetadata", { + get: $util.oneOfGetter($oneOfFields = ["requestWelcomeMessageMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_mediaNotifyMessage", { + get: $util.oneOfGetter($oneOfFields = ["mediaNotifyMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_cloudApiThreadControlNotification", { + get: $util.oneOfGetter($oneOfFields = ["cloudApiThreadControlNotification"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_lidMigrationMappingSyncMessage", { + get: $util.oneOfGetter($oneOfFields = ["lidMigrationMappingSyncMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_limitSharing", { + get: $util.oneOfGetter($oneOfFields = ["limitSharing"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_aiPsiMetadata", { + get: $util.oneOfGetter($oneOfFields = ["aiPsiMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_aiQueryFanout", { + get: $util.oneOfGetter($oneOfFields = ["aiQueryFanout"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProtocolMessage.prototype, "_memberLabel", { + get: $util.oneOfGetter($oneOfFields = ["memberLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProtocolMessage.create = function create(properties) { + return new ProtocolMessage(properties); + }; + + ProtocolMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(16).int32(m.type); + if (m.ephemeralExpiration != null && Object.hasOwnProperty.call(m, "ephemeralExpiration")) + w.uint32(32).uint32(m.ephemeralExpiration); + if (m.ephemeralSettingTimestamp != null && Object.hasOwnProperty.call(m, "ephemeralSettingTimestamp")) + w.uint32(40).int64(m.ephemeralSettingTimestamp); + if (m.historySyncNotification != null && Object.hasOwnProperty.call(m, "historySyncNotification")) + $root.proto.Message.HistorySyncNotification.encode(m.historySyncNotification, w.uint32(50).fork()).ldelim(); + if (m.appStateSyncKeyShare != null && Object.hasOwnProperty.call(m, "appStateSyncKeyShare")) + $root.proto.Message.AppStateSyncKeyShare.encode(m.appStateSyncKeyShare, w.uint32(58).fork()).ldelim(); + if (m.appStateSyncKeyRequest != null && Object.hasOwnProperty.call(m, "appStateSyncKeyRequest")) + $root.proto.Message.AppStateSyncKeyRequest.encode(m.appStateSyncKeyRequest, w.uint32(66).fork()).ldelim(); + if (m.initialSecurityNotificationSettingSync != null && Object.hasOwnProperty.call(m, "initialSecurityNotificationSettingSync")) + $root.proto.Message.InitialSecurityNotificationSettingSync.encode(m.initialSecurityNotificationSettingSync, w.uint32(74).fork()).ldelim(); + if (m.appStateFatalExceptionNotification != null && Object.hasOwnProperty.call(m, "appStateFatalExceptionNotification")) + $root.proto.Message.AppStateFatalExceptionNotification.encode(m.appStateFatalExceptionNotification, w.uint32(82).fork()).ldelim(); + if (m.disappearingMode != null && Object.hasOwnProperty.call(m, "disappearingMode")) + $root.proto.DisappearingMode.encode(m.disappearingMode, w.uint32(90).fork()).ldelim(); + if (m.editedMessage != null && Object.hasOwnProperty.call(m, "editedMessage")) + $root.proto.Message.encode(m.editedMessage, w.uint32(114).fork()).ldelim(); + if (m.timestampMs != null && Object.hasOwnProperty.call(m, "timestampMs")) + w.uint32(120).int64(m.timestampMs); + if (m.peerDataOperationRequestMessage != null && Object.hasOwnProperty.call(m, "peerDataOperationRequestMessage")) + $root.proto.Message.PeerDataOperationRequestMessage.encode(m.peerDataOperationRequestMessage, w.uint32(130).fork()).ldelim(); + if (m.peerDataOperationRequestResponseMessage != null && Object.hasOwnProperty.call(m, "peerDataOperationRequestResponseMessage")) + $root.proto.Message.PeerDataOperationRequestResponseMessage.encode(m.peerDataOperationRequestResponseMessage, w.uint32(138).fork()).ldelim(); + if (m.botFeedbackMessage != null && Object.hasOwnProperty.call(m, "botFeedbackMessage")) + $root.proto.BotFeedbackMessage.encode(m.botFeedbackMessage, w.uint32(146).fork()).ldelim(); + if (m.invokerJid != null && Object.hasOwnProperty.call(m, "invokerJid")) + w.uint32(154).string(m.invokerJid); + if (m.requestWelcomeMessageMetadata != null && Object.hasOwnProperty.call(m, "requestWelcomeMessageMetadata")) + $root.proto.Message.RequestWelcomeMessageMetadata.encode(m.requestWelcomeMessageMetadata, w.uint32(162).fork()).ldelim(); + if (m.mediaNotifyMessage != null && Object.hasOwnProperty.call(m, "mediaNotifyMessage")) + $root.proto.MediaNotifyMessage.encode(m.mediaNotifyMessage, w.uint32(170).fork()).ldelim(); + if (m.cloudApiThreadControlNotification != null && Object.hasOwnProperty.call(m, "cloudApiThreadControlNotification")) + $root.proto.Message.CloudAPIThreadControlNotification.encode(m.cloudApiThreadControlNotification, w.uint32(178).fork()).ldelim(); + if (m.lidMigrationMappingSyncMessage != null && Object.hasOwnProperty.call(m, "lidMigrationMappingSyncMessage")) + $root.proto.LIDMigrationMappingSyncMessage.encode(m.lidMigrationMappingSyncMessage, w.uint32(186).fork()).ldelim(); + if (m.limitSharing != null && Object.hasOwnProperty.call(m, "limitSharing")) + $root.proto.LimitSharing.encode(m.limitSharing, w.uint32(194).fork()).ldelim(); + if (m.aiPsiMetadata != null && Object.hasOwnProperty.call(m, "aiPsiMetadata")) + w.uint32(202).bytes(m.aiPsiMetadata); + if (m.aiQueryFanout != null && Object.hasOwnProperty.call(m, "aiQueryFanout")) + $root.proto.AIQueryFanout.encode(m.aiQueryFanout, w.uint32(210).fork()).ldelim(); + if (m.memberLabel != null && Object.hasOwnProperty.call(m, "memberLabel")) + $root.proto.MemberLabel.encode(m.memberLabel, w.uint32(218).fork()).ldelim(); + return w; + }; + + ProtocolMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ProtocolMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.type = r.int32(); + break; + } + case 4: { + m.ephemeralExpiration = r.uint32(); + break; + } + case 5: { + m.ephemeralSettingTimestamp = r.int64(); + break; + } + case 6: { + m.historySyncNotification = $root.proto.Message.HistorySyncNotification.decode(r, r.uint32()); + break; + } + case 7: { + m.appStateSyncKeyShare = $root.proto.Message.AppStateSyncKeyShare.decode(r, r.uint32()); + break; + } + case 8: { + m.appStateSyncKeyRequest = $root.proto.Message.AppStateSyncKeyRequest.decode(r, r.uint32()); + break; + } + case 9: { + m.initialSecurityNotificationSettingSync = $root.proto.Message.InitialSecurityNotificationSettingSync.decode(r, r.uint32()); + break; + } + case 10: { + m.appStateFatalExceptionNotification = $root.proto.Message.AppStateFatalExceptionNotification.decode(r, r.uint32()); + break; + } + case 11: { + m.disappearingMode = $root.proto.DisappearingMode.decode(r, r.uint32()); + break; + } + case 14: { + m.editedMessage = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 15: { + m.timestampMs = r.int64(); + break; + } + case 16: { + m.peerDataOperationRequestMessage = $root.proto.Message.PeerDataOperationRequestMessage.decode(r, r.uint32()); + break; + } + case 17: { + m.peerDataOperationRequestResponseMessage = $root.proto.Message.PeerDataOperationRequestResponseMessage.decode(r, r.uint32()); + break; + } + case 18: { + m.botFeedbackMessage = $root.proto.BotFeedbackMessage.decode(r, r.uint32()); + break; + } + case 19: { + m.invokerJid = r.string(); + break; + } + case 20: { + m.requestWelcomeMessageMetadata = $root.proto.Message.RequestWelcomeMessageMetadata.decode(r, r.uint32()); + break; + } + case 21: { + m.mediaNotifyMessage = $root.proto.MediaNotifyMessage.decode(r, r.uint32()); + break; + } + case 22: { + m.cloudApiThreadControlNotification = $root.proto.Message.CloudAPIThreadControlNotification.decode(r, r.uint32()); + break; + } + case 23: { + m.lidMigrationMappingSyncMessage = $root.proto.LIDMigrationMappingSyncMessage.decode(r, r.uint32()); + break; + } + case 24: { + m.limitSharing = $root.proto.LimitSharing.decode(r, r.uint32()); + break; + } + case 25: { + m.aiPsiMetadata = r.bytes(); + break; + } + case 26: { + m.aiQueryFanout = $root.proto.AIQueryFanout.decode(r, r.uint32()); + break; + } + case 27: { + m.memberLabel = $root.proto.MemberLabel.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProtocolMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ProtocolMessage) + return d; + var m = new $root.proto.Message.ProtocolMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.ProtocolMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "REVOKE": + case 0: + m.type = 0; + break; + case "EPHEMERAL_SETTING": + case 3: + m.type = 3; + break; + case "EPHEMERAL_SYNC_RESPONSE": + case 4: + m.type = 4; + break; + case "HISTORY_SYNC_NOTIFICATION": + case 5: + m.type = 5; + break; + case "APP_STATE_SYNC_KEY_SHARE": + case 6: + m.type = 6; + break; + case "APP_STATE_SYNC_KEY_REQUEST": + case 7: + m.type = 7; + break; + case "MSG_FANOUT_BACKFILL_REQUEST": + case 8: + m.type = 8; + break; + case "INITIAL_SECURITY_NOTIFICATION_SETTING_SYNC": + case 9: + m.type = 9; + break; + case "APP_STATE_FATAL_EXCEPTION_NOTIFICATION": + case 10: + m.type = 10; + break; + case "SHARE_PHONE_NUMBER": + case 11: + m.type = 11; + break; + case "MESSAGE_EDIT": + case 14: + m.type = 14; + break; + case "PEER_DATA_OPERATION_REQUEST_MESSAGE": + case 16: + m.type = 16; + break; + case "PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE": + case 17: + m.type = 17; + break; + case "REQUEST_WELCOME_MESSAGE": + case 18: + m.type = 18; + break; + case "BOT_FEEDBACK_MESSAGE": + case 19: + m.type = 19; + break; + case "MEDIA_NOTIFY_MESSAGE": + case 20: + m.type = 20; + break; + case "CLOUD_API_THREAD_CONTROL_NOTIFICATION": + case 21: + m.type = 21; + break; + case "LID_MIGRATION_MAPPING_SYNC": + case 22: + m.type = 22; + break; + case "REMINDER_MESSAGE": + case 23: + m.type = 23; + break; + case "BOT_MEMU_ONBOARDING_MESSAGE": + case 24: + m.type = 24; + break; + case "STATUS_MENTION_MESSAGE": + case 25: + m.type = 25; + break; + case "STOP_GENERATION_MESSAGE": + case 26: + m.type = 26; + break; + case "LIMIT_SHARING": + case 27: + m.type = 27; + break; + case "AI_PSI_METADATA": + case 28: + m.type = 28; + break; + case "AI_QUERY_FANOUT": + case 29: + m.type = 29; + break; + case "GROUP_MEMBER_LABEL_CHANGE": + case 30: + m.type = 30; + break; + } + if (d.ephemeralExpiration != null) { + m.ephemeralExpiration = d.ephemeralExpiration >>> 0; + } + if (d.ephemeralSettingTimestamp != null) { + if ($util.Long) + (m.ephemeralSettingTimestamp = $util.Long.fromValue(d.ephemeralSettingTimestamp)).unsigned = false; + else if (typeof d.ephemeralSettingTimestamp === "string") + m.ephemeralSettingTimestamp = parseInt(d.ephemeralSettingTimestamp, 10); + else if (typeof d.ephemeralSettingTimestamp === "number") + m.ephemeralSettingTimestamp = d.ephemeralSettingTimestamp; + else if (typeof d.ephemeralSettingTimestamp === "object") + m.ephemeralSettingTimestamp = new $util.LongBits(d.ephemeralSettingTimestamp.low >>> 0, d.ephemeralSettingTimestamp.high >>> 0).toNumber(); + } + if (d.historySyncNotification != null) { + if (typeof d.historySyncNotification !== "object") + throw TypeError(".proto.Message.ProtocolMessage.historySyncNotification: object expected"); + m.historySyncNotification = $root.proto.Message.HistorySyncNotification.fromObject(d.historySyncNotification); + } + if (d.appStateSyncKeyShare != null) { + if (typeof d.appStateSyncKeyShare !== "object") + throw TypeError(".proto.Message.ProtocolMessage.appStateSyncKeyShare: object expected"); + m.appStateSyncKeyShare = $root.proto.Message.AppStateSyncKeyShare.fromObject(d.appStateSyncKeyShare); + } + if (d.appStateSyncKeyRequest != null) { + if (typeof d.appStateSyncKeyRequest !== "object") + throw TypeError(".proto.Message.ProtocolMessage.appStateSyncKeyRequest: object expected"); + m.appStateSyncKeyRequest = $root.proto.Message.AppStateSyncKeyRequest.fromObject(d.appStateSyncKeyRequest); + } + if (d.initialSecurityNotificationSettingSync != null) { + if (typeof d.initialSecurityNotificationSettingSync !== "object") + throw TypeError(".proto.Message.ProtocolMessage.initialSecurityNotificationSettingSync: object expected"); + m.initialSecurityNotificationSettingSync = $root.proto.Message.InitialSecurityNotificationSettingSync.fromObject(d.initialSecurityNotificationSettingSync); + } + if (d.appStateFatalExceptionNotification != null) { + if (typeof d.appStateFatalExceptionNotification !== "object") + throw TypeError(".proto.Message.ProtocolMessage.appStateFatalExceptionNotification: object expected"); + m.appStateFatalExceptionNotification = $root.proto.Message.AppStateFatalExceptionNotification.fromObject(d.appStateFatalExceptionNotification); + } + if (d.disappearingMode != null) { + if (typeof d.disappearingMode !== "object") + throw TypeError(".proto.Message.ProtocolMessage.disappearingMode: object expected"); + m.disappearingMode = $root.proto.DisappearingMode.fromObject(d.disappearingMode); + } + if (d.editedMessage != null) { + if (typeof d.editedMessage !== "object") + throw TypeError(".proto.Message.ProtocolMessage.editedMessage: object expected"); + m.editedMessage = $root.proto.Message.fromObject(d.editedMessage); + } + if (d.timestampMs != null) { + if ($util.Long) + (m.timestampMs = $util.Long.fromValue(d.timestampMs)).unsigned = false; + else if (typeof d.timestampMs === "string") + m.timestampMs = parseInt(d.timestampMs, 10); + else if (typeof d.timestampMs === "number") + m.timestampMs = d.timestampMs; + else if (typeof d.timestampMs === "object") + m.timestampMs = new $util.LongBits(d.timestampMs.low >>> 0, d.timestampMs.high >>> 0).toNumber(); + } + if (d.peerDataOperationRequestMessage != null) { + if (typeof d.peerDataOperationRequestMessage !== "object") + throw TypeError(".proto.Message.ProtocolMessage.peerDataOperationRequestMessage: object expected"); + m.peerDataOperationRequestMessage = $root.proto.Message.PeerDataOperationRequestMessage.fromObject(d.peerDataOperationRequestMessage); + } + if (d.peerDataOperationRequestResponseMessage != null) { + if (typeof d.peerDataOperationRequestResponseMessage !== "object") + throw TypeError(".proto.Message.ProtocolMessage.peerDataOperationRequestResponseMessage: object expected"); + m.peerDataOperationRequestResponseMessage = $root.proto.Message.PeerDataOperationRequestResponseMessage.fromObject(d.peerDataOperationRequestResponseMessage); + } + if (d.botFeedbackMessage != null) { + if (typeof d.botFeedbackMessage !== "object") + throw TypeError(".proto.Message.ProtocolMessage.botFeedbackMessage: object expected"); + m.botFeedbackMessage = $root.proto.BotFeedbackMessage.fromObject(d.botFeedbackMessage); + } + if (d.invokerJid != null) { + m.invokerJid = String(d.invokerJid); + } + if (d.requestWelcomeMessageMetadata != null) { + if (typeof d.requestWelcomeMessageMetadata !== "object") + throw TypeError(".proto.Message.ProtocolMessage.requestWelcomeMessageMetadata: object expected"); + m.requestWelcomeMessageMetadata = $root.proto.Message.RequestWelcomeMessageMetadata.fromObject(d.requestWelcomeMessageMetadata); + } + if (d.mediaNotifyMessage != null) { + if (typeof d.mediaNotifyMessage !== "object") + throw TypeError(".proto.Message.ProtocolMessage.mediaNotifyMessage: object expected"); + m.mediaNotifyMessage = $root.proto.MediaNotifyMessage.fromObject(d.mediaNotifyMessage); + } + if (d.cloudApiThreadControlNotification != null) { + if (typeof d.cloudApiThreadControlNotification !== "object") + throw TypeError(".proto.Message.ProtocolMessage.cloudApiThreadControlNotification: object expected"); + m.cloudApiThreadControlNotification = $root.proto.Message.CloudAPIThreadControlNotification.fromObject(d.cloudApiThreadControlNotification); + } + if (d.lidMigrationMappingSyncMessage != null) { + if (typeof d.lidMigrationMappingSyncMessage !== "object") + throw TypeError(".proto.Message.ProtocolMessage.lidMigrationMappingSyncMessage: object expected"); + m.lidMigrationMappingSyncMessage = $root.proto.LIDMigrationMappingSyncMessage.fromObject(d.lidMigrationMappingSyncMessage); + } + if (d.limitSharing != null) { + if (typeof d.limitSharing !== "object") + throw TypeError(".proto.Message.ProtocolMessage.limitSharing: object expected"); + m.limitSharing = $root.proto.LimitSharing.fromObject(d.limitSharing); + } + if (d.aiPsiMetadata != null) { + if (typeof d.aiPsiMetadata === "string") + $util.base64.decode(d.aiPsiMetadata, m.aiPsiMetadata = $util.newBuffer($util.base64.length(d.aiPsiMetadata)), 0); + else if (d.aiPsiMetadata.length >= 0) + m.aiPsiMetadata = d.aiPsiMetadata; + } + if (d.aiQueryFanout != null) { + if (typeof d.aiQueryFanout !== "object") + throw TypeError(".proto.Message.ProtocolMessage.aiQueryFanout: object expected"); + m.aiQueryFanout = $root.proto.AIQueryFanout.fromObject(d.aiQueryFanout); + } + if (d.memberLabel != null) { + if (typeof d.memberLabel !== "object") + throw TypeError(".proto.Message.ProtocolMessage.memberLabel: object expected"); + m.memberLabel = $root.proto.MemberLabel.fromObject(d.memberLabel); + } + return m; + }; + + ProtocolMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.ProtocolMessage.Type[m.type] === undefined ? m.type : $root.proto.Message.ProtocolMessage.Type[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.ephemeralExpiration != null && m.hasOwnProperty("ephemeralExpiration")) { + d.ephemeralExpiration = m.ephemeralExpiration; + if (o.oneofs) + d._ephemeralExpiration = "ephemeralExpiration"; + } + if (m.ephemeralSettingTimestamp != null && m.hasOwnProperty("ephemeralSettingTimestamp")) { + if (typeof m.ephemeralSettingTimestamp === "number") + d.ephemeralSettingTimestamp = o.longs === String ? String(m.ephemeralSettingTimestamp) : m.ephemeralSettingTimestamp; + else + d.ephemeralSettingTimestamp = o.longs === String ? longToString(m.ephemeralSettingTimestamp) : o.longs === Number ? longToNumber(m.ephemeralSettingTimestamp) : m.ephemeralSettingTimestamp; + if (o.oneofs) + d._ephemeralSettingTimestamp = "ephemeralSettingTimestamp"; + } + if (m.historySyncNotification != null && m.hasOwnProperty("historySyncNotification")) { + d.historySyncNotification = $root.proto.Message.HistorySyncNotification.toObject(m.historySyncNotification, o); + if (o.oneofs) + d._historySyncNotification = "historySyncNotification"; + } + if (m.appStateSyncKeyShare != null && m.hasOwnProperty("appStateSyncKeyShare")) { + d.appStateSyncKeyShare = $root.proto.Message.AppStateSyncKeyShare.toObject(m.appStateSyncKeyShare, o); + if (o.oneofs) + d._appStateSyncKeyShare = "appStateSyncKeyShare"; + } + if (m.appStateSyncKeyRequest != null && m.hasOwnProperty("appStateSyncKeyRequest")) { + d.appStateSyncKeyRequest = $root.proto.Message.AppStateSyncKeyRequest.toObject(m.appStateSyncKeyRequest, o); + if (o.oneofs) + d._appStateSyncKeyRequest = "appStateSyncKeyRequest"; + } + if (m.initialSecurityNotificationSettingSync != null && m.hasOwnProperty("initialSecurityNotificationSettingSync")) { + d.initialSecurityNotificationSettingSync = $root.proto.Message.InitialSecurityNotificationSettingSync.toObject(m.initialSecurityNotificationSettingSync, o); + if (o.oneofs) + d._initialSecurityNotificationSettingSync = "initialSecurityNotificationSettingSync"; + } + if (m.appStateFatalExceptionNotification != null && m.hasOwnProperty("appStateFatalExceptionNotification")) { + d.appStateFatalExceptionNotification = $root.proto.Message.AppStateFatalExceptionNotification.toObject(m.appStateFatalExceptionNotification, o); + if (o.oneofs) + d._appStateFatalExceptionNotification = "appStateFatalExceptionNotification"; + } + if (m.disappearingMode != null && m.hasOwnProperty("disappearingMode")) { + d.disappearingMode = $root.proto.DisappearingMode.toObject(m.disappearingMode, o); + if (o.oneofs) + d._disappearingMode = "disappearingMode"; + } + if (m.editedMessage != null && m.hasOwnProperty("editedMessage")) { + d.editedMessage = $root.proto.Message.toObject(m.editedMessage, o); + if (o.oneofs) + d._editedMessage = "editedMessage"; + } + if (m.timestampMs != null && m.hasOwnProperty("timestampMs")) { + if (typeof m.timestampMs === "number") + d.timestampMs = o.longs === String ? String(m.timestampMs) : m.timestampMs; + else + d.timestampMs = o.longs === String ? longToString(m.timestampMs) : o.longs === Number ? longToNumber(m.timestampMs) : m.timestampMs; + if (o.oneofs) + d._timestampMs = "timestampMs"; + } + if (m.peerDataOperationRequestMessage != null && m.hasOwnProperty("peerDataOperationRequestMessage")) { + d.peerDataOperationRequestMessage = $root.proto.Message.PeerDataOperationRequestMessage.toObject(m.peerDataOperationRequestMessage, o); + if (o.oneofs) + d._peerDataOperationRequestMessage = "peerDataOperationRequestMessage"; + } + if (m.peerDataOperationRequestResponseMessage != null && m.hasOwnProperty("peerDataOperationRequestResponseMessage")) { + d.peerDataOperationRequestResponseMessage = $root.proto.Message.PeerDataOperationRequestResponseMessage.toObject(m.peerDataOperationRequestResponseMessage, o); + if (o.oneofs) + d._peerDataOperationRequestResponseMessage = "peerDataOperationRequestResponseMessage"; + } + if (m.botFeedbackMessage != null && m.hasOwnProperty("botFeedbackMessage")) { + d.botFeedbackMessage = $root.proto.BotFeedbackMessage.toObject(m.botFeedbackMessage, o); + if (o.oneofs) + d._botFeedbackMessage = "botFeedbackMessage"; + } + if (m.invokerJid != null && m.hasOwnProperty("invokerJid")) { + d.invokerJid = m.invokerJid; + if (o.oneofs) + d._invokerJid = "invokerJid"; + } + if (m.requestWelcomeMessageMetadata != null && m.hasOwnProperty("requestWelcomeMessageMetadata")) { + d.requestWelcomeMessageMetadata = $root.proto.Message.RequestWelcomeMessageMetadata.toObject(m.requestWelcomeMessageMetadata, o); + if (o.oneofs) + d._requestWelcomeMessageMetadata = "requestWelcomeMessageMetadata"; + } + if (m.mediaNotifyMessage != null && m.hasOwnProperty("mediaNotifyMessage")) { + d.mediaNotifyMessage = $root.proto.MediaNotifyMessage.toObject(m.mediaNotifyMessage, o); + if (o.oneofs) + d._mediaNotifyMessage = "mediaNotifyMessage"; + } + if (m.cloudApiThreadControlNotification != null && m.hasOwnProperty("cloudApiThreadControlNotification")) { + d.cloudApiThreadControlNotification = $root.proto.Message.CloudAPIThreadControlNotification.toObject(m.cloudApiThreadControlNotification, o); + if (o.oneofs) + d._cloudApiThreadControlNotification = "cloudApiThreadControlNotification"; + } + if (m.lidMigrationMappingSyncMessage != null && m.hasOwnProperty("lidMigrationMappingSyncMessage")) { + d.lidMigrationMappingSyncMessage = $root.proto.LIDMigrationMappingSyncMessage.toObject(m.lidMigrationMappingSyncMessage, o); + if (o.oneofs) + d._lidMigrationMappingSyncMessage = "lidMigrationMappingSyncMessage"; + } + if (m.limitSharing != null && m.hasOwnProperty("limitSharing")) { + d.limitSharing = $root.proto.LimitSharing.toObject(m.limitSharing, o); + if (o.oneofs) + d._limitSharing = "limitSharing"; + } + if (m.aiPsiMetadata != null && m.hasOwnProperty("aiPsiMetadata")) { + d.aiPsiMetadata = o.bytes === String ? $util.base64.encode(m.aiPsiMetadata, 0, m.aiPsiMetadata.length) : o.bytes === Array ? Array.prototype.slice.call(m.aiPsiMetadata) : m.aiPsiMetadata; + if (o.oneofs) + d._aiPsiMetadata = "aiPsiMetadata"; + } + if (m.aiQueryFanout != null && m.hasOwnProperty("aiQueryFanout")) { + d.aiQueryFanout = $root.proto.AIQueryFanout.toObject(m.aiQueryFanout, o); + if (o.oneofs) + d._aiQueryFanout = "aiQueryFanout"; + } + if (m.memberLabel != null && m.hasOwnProperty("memberLabel")) { + d.memberLabel = $root.proto.MemberLabel.toObject(m.memberLabel, o); + if (o.oneofs) + d._memberLabel = "memberLabel"; + } + return d; + }; + + ProtocolMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProtocolMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ProtocolMessage"; + }; + + ProtocolMessage.Type = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "REVOKE"] = 0; + values[valuesById[3] = "EPHEMERAL_SETTING"] = 3; + values[valuesById[4] = "EPHEMERAL_SYNC_RESPONSE"] = 4; + values[valuesById[5] = "HISTORY_SYNC_NOTIFICATION"] = 5; + values[valuesById[6] = "APP_STATE_SYNC_KEY_SHARE"] = 6; + values[valuesById[7] = "APP_STATE_SYNC_KEY_REQUEST"] = 7; + values[valuesById[8] = "MSG_FANOUT_BACKFILL_REQUEST"] = 8; + values[valuesById[9] = "INITIAL_SECURITY_NOTIFICATION_SETTING_SYNC"] = 9; + values[valuesById[10] = "APP_STATE_FATAL_EXCEPTION_NOTIFICATION"] = 10; + values[valuesById[11] = "SHARE_PHONE_NUMBER"] = 11; + values[valuesById[14] = "MESSAGE_EDIT"] = 14; + values[valuesById[16] = "PEER_DATA_OPERATION_REQUEST_MESSAGE"] = 16; + values[valuesById[17] = "PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE"] = 17; + values[valuesById[18] = "REQUEST_WELCOME_MESSAGE"] = 18; + values[valuesById[19] = "BOT_FEEDBACK_MESSAGE"] = 19; + values[valuesById[20] = "MEDIA_NOTIFY_MESSAGE"] = 20; + values[valuesById[21] = "CLOUD_API_THREAD_CONTROL_NOTIFICATION"] = 21; + values[valuesById[22] = "LID_MIGRATION_MAPPING_SYNC"] = 22; + values[valuesById[23] = "REMINDER_MESSAGE"] = 23; + values[valuesById[24] = "BOT_MEMU_ONBOARDING_MESSAGE"] = 24; + values[valuesById[25] = "STATUS_MENTION_MESSAGE"] = 25; + values[valuesById[26] = "STOP_GENERATION_MESSAGE"] = 26; + values[valuesById[27] = "LIMIT_SHARING"] = 27; + values[valuesById[28] = "AI_PSI_METADATA"] = 28; + values[valuesById[29] = "AI_QUERY_FANOUT"] = 29; + values[valuesById[30] = "GROUP_MEMBER_LABEL_CHANGE"] = 30; + return values; + })(); + + return ProtocolMessage; + })(); + + Message.QuestionResponseMessage = (function() { + + function QuestionResponseMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + QuestionResponseMessage.prototype.key = null; + QuestionResponseMessage.prototype.text = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuestionResponseMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuestionResponseMessage.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + QuestionResponseMessage.create = function create(properties) { + return new QuestionResponseMessage(properties); + }; + + QuestionResponseMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(18).string(m.text); + return w; + }; + + QuestionResponseMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.QuestionResponseMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.text = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + QuestionResponseMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.QuestionResponseMessage) + return d; + var m = new $root.proto.Message.QuestionResponseMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.QuestionResponseMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.text != null) { + m.text = String(d.text); + } + return m; + }; + + QuestionResponseMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + return d; + }; + + QuestionResponseMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + QuestionResponseMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.QuestionResponseMessage"; + }; + + return QuestionResponseMessage; + })(); + + Message.ReactionMessage = (function() { + + function ReactionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ReactionMessage.prototype.key = null; + ReactionMessage.prototype.text = null; + ReactionMessage.prototype.groupingKey = null; + ReactionMessage.prototype.senderTimestampMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ReactionMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ReactionMessage.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ReactionMessage.prototype, "_groupingKey", { + get: $util.oneOfGetter($oneOfFields = ["groupingKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ReactionMessage.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ReactionMessage.create = function create(properties) { + return new ReactionMessage(properties); + }; + + ReactionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(18).string(m.text); + if (m.groupingKey != null && Object.hasOwnProperty.call(m, "groupingKey")) + w.uint32(26).string(m.groupingKey); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(32).int64(m.senderTimestampMs); + return w; + }; + + ReactionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ReactionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.text = r.string(); + break; + } + case 3: { + m.groupingKey = r.string(); + break; + } + case 4: { + m.senderTimestampMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ReactionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ReactionMessage) + return d; + var m = new $root.proto.Message.ReactionMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.ReactionMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.text != null) { + m.text = String(d.text); + } + if (d.groupingKey != null) { + m.groupingKey = String(d.groupingKey); + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + return m; + }; + + ReactionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.groupingKey != null && m.hasOwnProperty("groupingKey")) { + d.groupingKey = m.groupingKey; + if (o.oneofs) + d._groupingKey = "groupingKey"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + return d; + }; + + ReactionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ReactionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ReactionMessage"; + }; + + return ReactionMessage; + })(); + + Message.RequestPaymentMessage = (function() { + + function RequestPaymentMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RequestPaymentMessage.prototype.noteMessage = null; + RequestPaymentMessage.prototype.currencyCodeIso4217 = null; + RequestPaymentMessage.prototype.amount1000 = null; + RequestPaymentMessage.prototype.requestFrom = null; + RequestPaymentMessage.prototype.expiryTimestamp = null; + RequestPaymentMessage.prototype.amount = null; + RequestPaymentMessage.prototype.background = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPaymentMessage.prototype, "_noteMessage", { + get: $util.oneOfGetter($oneOfFields = ["noteMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPaymentMessage.prototype, "_currencyCodeIso4217", { + get: $util.oneOfGetter($oneOfFields = ["currencyCodeIso4217"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPaymentMessage.prototype, "_amount1000", { + get: $util.oneOfGetter($oneOfFields = ["amount1000"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPaymentMessage.prototype, "_requestFrom", { + get: $util.oneOfGetter($oneOfFields = ["requestFrom"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPaymentMessage.prototype, "_expiryTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["expiryTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPaymentMessage.prototype, "_amount", { + get: $util.oneOfGetter($oneOfFields = ["amount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPaymentMessage.prototype, "_background", { + get: $util.oneOfGetter($oneOfFields = ["background"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RequestPaymentMessage.create = function create(properties) { + return new RequestPaymentMessage(properties); + }; + + RequestPaymentMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.currencyCodeIso4217 != null && Object.hasOwnProperty.call(m, "currencyCodeIso4217")) + w.uint32(10).string(m.currencyCodeIso4217); + if (m.amount1000 != null && Object.hasOwnProperty.call(m, "amount1000")) + w.uint32(16).uint64(m.amount1000); + if (m.requestFrom != null && Object.hasOwnProperty.call(m, "requestFrom")) + w.uint32(26).string(m.requestFrom); + if (m.noteMessage != null && Object.hasOwnProperty.call(m, "noteMessage")) + $root.proto.Message.encode(m.noteMessage, w.uint32(34).fork()).ldelim(); + if (m.expiryTimestamp != null && Object.hasOwnProperty.call(m, "expiryTimestamp")) + w.uint32(40).int64(m.expiryTimestamp); + if (m.amount != null && Object.hasOwnProperty.call(m, "amount")) + $root.proto.Money.encode(m.amount, w.uint32(50).fork()).ldelim(); + if (m.background != null && Object.hasOwnProperty.call(m, "background")) + $root.proto.PaymentBackground.encode(m.background, w.uint32(58).fork()).ldelim(); + return w; + }; + + RequestPaymentMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.RequestPaymentMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 4: { + m.noteMessage = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 1: { + m.currencyCodeIso4217 = r.string(); + break; + } + case 2: { + m.amount1000 = r.uint64(); + break; + } + case 3: { + m.requestFrom = r.string(); + break; + } + case 5: { + m.expiryTimestamp = r.int64(); + break; + } + case 6: { + m.amount = $root.proto.Money.decode(r, r.uint32()); + break; + } + case 7: { + m.background = $root.proto.PaymentBackground.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RequestPaymentMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.RequestPaymentMessage) + return d; + var m = new $root.proto.Message.RequestPaymentMessage(); + if (d.noteMessage != null) { + if (typeof d.noteMessage !== "object") + throw TypeError(".proto.Message.RequestPaymentMessage.noteMessage: object expected"); + m.noteMessage = $root.proto.Message.fromObject(d.noteMessage); + } + if (d.currencyCodeIso4217 != null) { + m.currencyCodeIso4217 = String(d.currencyCodeIso4217); + } + if (d.amount1000 != null) { + if ($util.Long) + (m.amount1000 = $util.Long.fromValue(d.amount1000)).unsigned = true; + else if (typeof d.amount1000 === "string") + m.amount1000 = parseInt(d.amount1000, 10); + else if (typeof d.amount1000 === "number") + m.amount1000 = d.amount1000; + else if (typeof d.amount1000 === "object") + m.amount1000 = new $util.LongBits(d.amount1000.low >>> 0, d.amount1000.high >>> 0).toNumber(true); + } + if (d.requestFrom != null) { + m.requestFrom = String(d.requestFrom); + } + if (d.expiryTimestamp != null) { + if ($util.Long) + (m.expiryTimestamp = $util.Long.fromValue(d.expiryTimestamp)).unsigned = false; + else if (typeof d.expiryTimestamp === "string") + m.expiryTimestamp = parseInt(d.expiryTimestamp, 10); + else if (typeof d.expiryTimestamp === "number") + m.expiryTimestamp = d.expiryTimestamp; + else if (typeof d.expiryTimestamp === "object") + m.expiryTimestamp = new $util.LongBits(d.expiryTimestamp.low >>> 0, d.expiryTimestamp.high >>> 0).toNumber(); + } + if (d.amount != null) { + if (typeof d.amount !== "object") + throw TypeError(".proto.Message.RequestPaymentMessage.amount: object expected"); + m.amount = $root.proto.Money.fromObject(d.amount); + } + if (d.background != null) { + if (typeof d.background !== "object") + throw TypeError(".proto.Message.RequestPaymentMessage.background: object expected"); + m.background = $root.proto.PaymentBackground.fromObject(d.background); + } + return m; + }; + + RequestPaymentMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.currencyCodeIso4217 != null && m.hasOwnProperty("currencyCodeIso4217")) { + d.currencyCodeIso4217 = m.currencyCodeIso4217; + if (o.oneofs) + d._currencyCodeIso4217 = "currencyCodeIso4217"; + } + if (m.amount1000 != null && m.hasOwnProperty("amount1000")) { + if (typeof m.amount1000 === "number") + d.amount1000 = o.longs === String ? String(m.amount1000) : m.amount1000; + else + d.amount1000 = o.longs === String ? longToString(m.amount1000, true) : o.longs === Number ? longToNumber(m.amount1000, true) : m.amount1000; + if (o.oneofs) + d._amount1000 = "amount1000"; + } + if (m.requestFrom != null && m.hasOwnProperty("requestFrom")) { + d.requestFrom = m.requestFrom; + if (o.oneofs) + d._requestFrom = "requestFrom"; + } + if (m.noteMessage != null && m.hasOwnProperty("noteMessage")) { + d.noteMessage = $root.proto.Message.toObject(m.noteMessage, o); + if (o.oneofs) + d._noteMessage = "noteMessage"; + } + if (m.expiryTimestamp != null && m.hasOwnProperty("expiryTimestamp")) { + if (typeof m.expiryTimestamp === "number") + d.expiryTimestamp = o.longs === String ? String(m.expiryTimestamp) : m.expiryTimestamp; + else + d.expiryTimestamp = o.longs === String ? longToString(m.expiryTimestamp) : o.longs === Number ? longToNumber(m.expiryTimestamp) : m.expiryTimestamp; + if (o.oneofs) + d._expiryTimestamp = "expiryTimestamp"; + } + if (m.amount != null && m.hasOwnProperty("amount")) { + d.amount = $root.proto.Money.toObject(m.amount, o); + if (o.oneofs) + d._amount = "amount"; + } + if (m.background != null && m.hasOwnProperty("background")) { + d.background = $root.proto.PaymentBackground.toObject(m.background, o); + if (o.oneofs) + d._background = "background"; + } + return d; + }; + + RequestPaymentMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RequestPaymentMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.RequestPaymentMessage"; + }; + + return RequestPaymentMessage; + })(); + + Message.RequestPhoneNumberMessage = (function() { + + function RequestPhoneNumberMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RequestPhoneNumberMessage.prototype.contextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestPhoneNumberMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RequestPhoneNumberMessage.create = function create(properties) { + return new RequestPhoneNumberMessage(properties); + }; + + RequestPhoneNumberMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(10).fork()).ldelim(); + return w; + }; + + RequestPhoneNumberMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.RequestPhoneNumberMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RequestPhoneNumberMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.RequestPhoneNumberMessage) + return d; + var m = new $root.proto.Message.RequestPhoneNumberMessage(); + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.RequestPhoneNumberMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + return m; + }; + + RequestPhoneNumberMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + return d; + }; + + RequestPhoneNumberMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RequestPhoneNumberMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.RequestPhoneNumberMessage"; + }; + + return RequestPhoneNumberMessage; + })(); + + Message.RequestWelcomeMessageMetadata = (function() { + + function RequestWelcomeMessageMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RequestWelcomeMessageMetadata.prototype.localChatState = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RequestWelcomeMessageMetadata.prototype, "_localChatState", { + get: $util.oneOfGetter($oneOfFields = ["localChatState"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RequestWelcomeMessageMetadata.create = function create(properties) { + return new RequestWelcomeMessageMetadata(properties); + }; + + RequestWelcomeMessageMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.localChatState != null && Object.hasOwnProperty.call(m, "localChatState")) + w.uint32(8).int32(m.localChatState); + return w; + }; + + RequestWelcomeMessageMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.RequestWelcomeMessageMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.localChatState = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RequestWelcomeMessageMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.RequestWelcomeMessageMetadata) + return d; + var m = new $root.proto.Message.RequestWelcomeMessageMetadata(); + switch (d.localChatState) { + default: + if (typeof d.localChatState === "number") { + m.localChatState = d.localChatState; + break; + } + break; + case "EMPTY": + case 0: + m.localChatState = 0; + break; + case "NON_EMPTY": + case 1: + m.localChatState = 1; + break; + } + return m; + }; + + RequestWelcomeMessageMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.localChatState != null && m.hasOwnProperty("localChatState")) { + d.localChatState = o.enums === String ? $root.proto.Message.RequestWelcomeMessageMetadata.LocalChatState[m.localChatState] === undefined ? m.localChatState : $root.proto.Message.RequestWelcomeMessageMetadata.LocalChatState[m.localChatState] : m.localChatState; + if (o.oneofs) + d._localChatState = "localChatState"; + } + return d; + }; + + RequestWelcomeMessageMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RequestWelcomeMessageMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.RequestWelcomeMessageMetadata"; + }; + + RequestWelcomeMessageMetadata.LocalChatState = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "EMPTY"] = 0; + values[valuesById[1] = "NON_EMPTY"] = 1; + return values; + })(); + + return RequestWelcomeMessageMetadata; + })(); + + Message.ScheduledCallCreationMessage = (function() { + + function ScheduledCallCreationMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ScheduledCallCreationMessage.prototype.scheduledTimestampMs = null; + ScheduledCallCreationMessage.prototype.callType = null; + ScheduledCallCreationMessage.prototype.title = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ScheduledCallCreationMessage.prototype, "_scheduledTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["scheduledTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ScheduledCallCreationMessage.prototype, "_callType", { + get: $util.oneOfGetter($oneOfFields = ["callType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ScheduledCallCreationMessage.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ScheduledCallCreationMessage.create = function create(properties) { + return new ScheduledCallCreationMessage(properties); + }; + + ScheduledCallCreationMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.scheduledTimestampMs != null && Object.hasOwnProperty.call(m, "scheduledTimestampMs")) + w.uint32(8).int64(m.scheduledTimestampMs); + if (m.callType != null && Object.hasOwnProperty.call(m, "callType")) + w.uint32(16).int32(m.callType); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(26).string(m.title); + return w; + }; + + ScheduledCallCreationMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ScheduledCallCreationMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.scheduledTimestampMs = r.int64(); + break; + } + case 2: { + m.callType = r.int32(); + break; + } + case 3: { + m.title = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ScheduledCallCreationMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ScheduledCallCreationMessage) + return d; + var m = new $root.proto.Message.ScheduledCallCreationMessage(); + if (d.scheduledTimestampMs != null) { + if ($util.Long) + (m.scheduledTimestampMs = $util.Long.fromValue(d.scheduledTimestampMs)).unsigned = false; + else if (typeof d.scheduledTimestampMs === "string") + m.scheduledTimestampMs = parseInt(d.scheduledTimestampMs, 10); + else if (typeof d.scheduledTimestampMs === "number") + m.scheduledTimestampMs = d.scheduledTimestampMs; + else if (typeof d.scheduledTimestampMs === "object") + m.scheduledTimestampMs = new $util.LongBits(d.scheduledTimestampMs.low >>> 0, d.scheduledTimestampMs.high >>> 0).toNumber(); + } + switch (d.callType) { + default: + if (typeof d.callType === "number") { + m.callType = d.callType; + break; + } + break; + case "UNKNOWN": + case 0: + m.callType = 0; + break; + case "VOICE": + case 1: + m.callType = 1; + break; + case "VIDEO": + case 2: + m.callType = 2; + break; + } + if (d.title != null) { + m.title = String(d.title); + } + return m; + }; + + ScheduledCallCreationMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.scheduledTimestampMs != null && m.hasOwnProperty("scheduledTimestampMs")) { + if (typeof m.scheduledTimestampMs === "number") + d.scheduledTimestampMs = o.longs === String ? String(m.scheduledTimestampMs) : m.scheduledTimestampMs; + else + d.scheduledTimestampMs = o.longs === String ? longToString(m.scheduledTimestampMs) : o.longs === Number ? longToNumber(m.scheduledTimestampMs) : m.scheduledTimestampMs; + if (o.oneofs) + d._scheduledTimestampMs = "scheduledTimestampMs"; + } + if (m.callType != null && m.hasOwnProperty("callType")) { + d.callType = o.enums === String ? $root.proto.Message.ScheduledCallCreationMessage.CallType[m.callType] === undefined ? m.callType : $root.proto.Message.ScheduledCallCreationMessage.CallType[m.callType] : m.callType; + if (o.oneofs) + d._callType = "callType"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + return d; + }; + + ScheduledCallCreationMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ScheduledCallCreationMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ScheduledCallCreationMessage"; + }; + + ScheduledCallCreationMessage.CallType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "VOICE"] = 1; + values[valuesById[2] = "VIDEO"] = 2; + return values; + })(); + + return ScheduledCallCreationMessage; + })(); + + Message.ScheduledCallEditMessage = (function() { + + function ScheduledCallEditMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ScheduledCallEditMessage.prototype.key = null; + ScheduledCallEditMessage.prototype.editType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ScheduledCallEditMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ScheduledCallEditMessage.prototype, "_editType", { + get: $util.oneOfGetter($oneOfFields = ["editType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ScheduledCallEditMessage.create = function create(properties) { + return new ScheduledCallEditMessage(properties); + }; + + ScheduledCallEditMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.editType != null && Object.hasOwnProperty.call(m, "editType")) + w.uint32(16).int32(m.editType); + return w; + }; + + ScheduledCallEditMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.ScheduledCallEditMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.editType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ScheduledCallEditMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.ScheduledCallEditMessage) + return d; + var m = new $root.proto.Message.ScheduledCallEditMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.ScheduledCallEditMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + switch (d.editType) { + default: + if (typeof d.editType === "number") { + m.editType = d.editType; + break; + } + break; + case "UNKNOWN": + case 0: + m.editType = 0; + break; + case "CANCEL": + case 1: + m.editType = 1; + break; + } + return m; + }; + + ScheduledCallEditMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.editType != null && m.hasOwnProperty("editType")) { + d.editType = o.enums === String ? $root.proto.Message.ScheduledCallEditMessage.EditType[m.editType] === undefined ? m.editType : $root.proto.Message.ScheduledCallEditMessage.EditType[m.editType] : m.editType; + if (o.oneofs) + d._editType = "editType"; + } + return d; + }; + + ScheduledCallEditMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ScheduledCallEditMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.ScheduledCallEditMessage"; + }; + + ScheduledCallEditMessage.EditType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "CANCEL"] = 1; + return values; + })(); + + return ScheduledCallEditMessage; + })(); + + Message.SecretEncryptedMessage = (function() { + + function SecretEncryptedMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SecretEncryptedMessage.prototype.targetMessageKey = null; + SecretEncryptedMessage.prototype.encPayload = null; + SecretEncryptedMessage.prototype.encIv = null; + SecretEncryptedMessage.prototype.secretEncType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SecretEncryptedMessage.prototype, "_targetMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["targetMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SecretEncryptedMessage.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SecretEncryptedMessage.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SecretEncryptedMessage.prototype, "_secretEncType", { + get: $util.oneOfGetter($oneOfFields = ["secretEncType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SecretEncryptedMessage.create = function create(properties) { + return new SecretEncryptedMessage(properties); + }; + + SecretEncryptedMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.targetMessageKey != null && Object.hasOwnProperty.call(m, "targetMessageKey")) + $root.proto.MessageKey.encode(m.targetMessageKey, w.uint32(10).fork()).ldelim(); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(18).bytes(m.encPayload); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(26).bytes(m.encIv); + if (m.secretEncType != null && Object.hasOwnProperty.call(m, "secretEncType")) + w.uint32(32).int32(m.secretEncType); + return w; + }; + + SecretEncryptedMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.SecretEncryptedMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.targetMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.encPayload = r.bytes(); + break; + } + case 3: { + m.encIv = r.bytes(); + break; + } + case 4: { + m.secretEncType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SecretEncryptedMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.SecretEncryptedMessage) + return d; + var m = new $root.proto.Message.SecretEncryptedMessage(); + if (d.targetMessageKey != null) { + if (typeof d.targetMessageKey !== "object") + throw TypeError(".proto.Message.SecretEncryptedMessage.targetMessageKey: object expected"); + m.targetMessageKey = $root.proto.MessageKey.fromObject(d.targetMessageKey); + } + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + switch (d.secretEncType) { + default: + if (typeof d.secretEncType === "number") { + m.secretEncType = d.secretEncType; + break; + } + break; + case "UNKNOWN": + case 0: + m.secretEncType = 0; + break; + case "EVENT_EDIT": + case 1: + m.secretEncType = 1; + break; + case "MESSAGE_EDIT": + case 2: + m.secretEncType = 2; + break; + } + return m; + }; + + SecretEncryptedMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.targetMessageKey != null && m.hasOwnProperty("targetMessageKey")) { + d.targetMessageKey = $root.proto.MessageKey.toObject(m.targetMessageKey, o); + if (o.oneofs) + d._targetMessageKey = "targetMessageKey"; + } + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + if (m.secretEncType != null && m.hasOwnProperty("secretEncType")) { + d.secretEncType = o.enums === String ? $root.proto.Message.SecretEncryptedMessage.SecretEncType[m.secretEncType] === undefined ? m.secretEncType : $root.proto.Message.SecretEncryptedMessage.SecretEncType[m.secretEncType] : m.secretEncType; + if (o.oneofs) + d._secretEncType = "secretEncType"; + } + return d; + }; + + SecretEncryptedMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SecretEncryptedMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.SecretEncryptedMessage"; + }; + + SecretEncryptedMessage.SecretEncType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "EVENT_EDIT"] = 1; + values[valuesById[2] = "MESSAGE_EDIT"] = 2; + return values; + })(); + + return SecretEncryptedMessage; + })(); + + Message.SendPaymentMessage = (function() { + + function SendPaymentMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SendPaymentMessage.prototype.noteMessage = null; + SendPaymentMessage.prototype.requestMessageKey = null; + SendPaymentMessage.prototype.background = null; + SendPaymentMessage.prototype.transactionData = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SendPaymentMessage.prototype, "_noteMessage", { + get: $util.oneOfGetter($oneOfFields = ["noteMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SendPaymentMessage.prototype, "_requestMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["requestMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SendPaymentMessage.prototype, "_background", { + get: $util.oneOfGetter($oneOfFields = ["background"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SendPaymentMessage.prototype, "_transactionData", { + get: $util.oneOfGetter($oneOfFields = ["transactionData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SendPaymentMessage.create = function create(properties) { + return new SendPaymentMessage(properties); + }; + + SendPaymentMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.noteMessage != null && Object.hasOwnProperty.call(m, "noteMessage")) + $root.proto.Message.encode(m.noteMessage, w.uint32(18).fork()).ldelim(); + if (m.requestMessageKey != null && Object.hasOwnProperty.call(m, "requestMessageKey")) + $root.proto.MessageKey.encode(m.requestMessageKey, w.uint32(26).fork()).ldelim(); + if (m.background != null && Object.hasOwnProperty.call(m, "background")) + $root.proto.PaymentBackground.encode(m.background, w.uint32(34).fork()).ldelim(); + if (m.transactionData != null && Object.hasOwnProperty.call(m, "transactionData")) + w.uint32(42).string(m.transactionData); + return w; + }; + + SendPaymentMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.SendPaymentMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 2: { + m.noteMessage = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 3: { + m.requestMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 4: { + m.background = $root.proto.PaymentBackground.decode(r, r.uint32()); + break; + } + case 5: { + m.transactionData = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SendPaymentMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.SendPaymentMessage) + return d; + var m = new $root.proto.Message.SendPaymentMessage(); + if (d.noteMessage != null) { + if (typeof d.noteMessage !== "object") + throw TypeError(".proto.Message.SendPaymentMessage.noteMessage: object expected"); + m.noteMessage = $root.proto.Message.fromObject(d.noteMessage); + } + if (d.requestMessageKey != null) { + if (typeof d.requestMessageKey !== "object") + throw TypeError(".proto.Message.SendPaymentMessage.requestMessageKey: object expected"); + m.requestMessageKey = $root.proto.MessageKey.fromObject(d.requestMessageKey); + } + if (d.background != null) { + if (typeof d.background !== "object") + throw TypeError(".proto.Message.SendPaymentMessage.background: object expected"); + m.background = $root.proto.PaymentBackground.fromObject(d.background); + } + if (d.transactionData != null) { + m.transactionData = String(d.transactionData); + } + return m; + }; + + SendPaymentMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.noteMessage != null && m.hasOwnProperty("noteMessage")) { + d.noteMessage = $root.proto.Message.toObject(m.noteMessage, o); + if (o.oneofs) + d._noteMessage = "noteMessage"; + } + if (m.requestMessageKey != null && m.hasOwnProperty("requestMessageKey")) { + d.requestMessageKey = $root.proto.MessageKey.toObject(m.requestMessageKey, o); + if (o.oneofs) + d._requestMessageKey = "requestMessageKey"; + } + if (m.background != null && m.hasOwnProperty("background")) { + d.background = $root.proto.PaymentBackground.toObject(m.background, o); + if (o.oneofs) + d._background = "background"; + } + if (m.transactionData != null && m.hasOwnProperty("transactionData")) { + d.transactionData = m.transactionData; + if (o.oneofs) + d._transactionData = "transactionData"; + } + return d; + }; + + SendPaymentMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SendPaymentMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.SendPaymentMessage"; + }; + + return SendPaymentMessage; + })(); + + Message.SenderKeyDistributionMessage = (function() { + + function SenderKeyDistributionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderKeyDistributionMessage.prototype.groupId = null; + SenderKeyDistributionMessage.prototype.axolotlSenderKeyDistributionMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyDistributionMessage.prototype, "_groupId", { + get: $util.oneOfGetter($oneOfFields = ["groupId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyDistributionMessage.prototype, "_axolotlSenderKeyDistributionMessage", { + get: $util.oneOfGetter($oneOfFields = ["axolotlSenderKeyDistributionMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SenderKeyDistributionMessage.create = function create(properties) { + return new SenderKeyDistributionMessage(properties); + }; + + SenderKeyDistributionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.groupId != null && Object.hasOwnProperty.call(m, "groupId")) + w.uint32(10).string(m.groupId); + if (m.axolotlSenderKeyDistributionMessage != null && Object.hasOwnProperty.call(m, "axolotlSenderKeyDistributionMessage")) + w.uint32(18).bytes(m.axolotlSenderKeyDistributionMessage); + return w; + }; + + SenderKeyDistributionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.SenderKeyDistributionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.groupId = r.string(); + break; + } + case 2: { + m.axolotlSenderKeyDistributionMessage = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderKeyDistributionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.SenderKeyDistributionMessage) + return d; + var m = new $root.proto.Message.SenderKeyDistributionMessage(); + if (d.groupId != null) { + m.groupId = String(d.groupId); + } + if (d.axolotlSenderKeyDistributionMessage != null) { + if (typeof d.axolotlSenderKeyDistributionMessage === "string") + $util.base64.decode(d.axolotlSenderKeyDistributionMessage, m.axolotlSenderKeyDistributionMessage = $util.newBuffer($util.base64.length(d.axolotlSenderKeyDistributionMessage)), 0); + else if (d.axolotlSenderKeyDistributionMessage.length >= 0) + m.axolotlSenderKeyDistributionMessage = d.axolotlSenderKeyDistributionMessage; + } + return m; + }; + + SenderKeyDistributionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.groupId != null && m.hasOwnProperty("groupId")) { + d.groupId = m.groupId; + if (o.oneofs) + d._groupId = "groupId"; + } + if (m.axolotlSenderKeyDistributionMessage != null && m.hasOwnProperty("axolotlSenderKeyDistributionMessage")) { + d.axolotlSenderKeyDistributionMessage = o.bytes === String ? $util.base64.encode(m.axolotlSenderKeyDistributionMessage, 0, m.axolotlSenderKeyDistributionMessage.length) : o.bytes === Array ? Array.prototype.slice.call(m.axolotlSenderKeyDistributionMessage) : m.axolotlSenderKeyDistributionMessage; + if (o.oneofs) + d._axolotlSenderKeyDistributionMessage = "axolotlSenderKeyDistributionMessage"; + } + return d; + }; + + SenderKeyDistributionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderKeyDistributionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.SenderKeyDistributionMessage"; + }; + + return SenderKeyDistributionMessage; + })(); + + Message.StatusNotificationMessage = (function() { + + function StatusNotificationMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusNotificationMessage.prototype.responseMessageKey = null; + StatusNotificationMessage.prototype.originalMessageKey = null; + StatusNotificationMessage.prototype.type = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusNotificationMessage.prototype, "_responseMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["responseMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusNotificationMessage.prototype, "_originalMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["originalMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusNotificationMessage.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusNotificationMessage.create = function create(properties) { + return new StatusNotificationMessage(properties); + }; + + StatusNotificationMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.responseMessageKey != null && Object.hasOwnProperty.call(m, "responseMessageKey")) + $root.proto.MessageKey.encode(m.responseMessageKey, w.uint32(10).fork()).ldelim(); + if (m.originalMessageKey != null && Object.hasOwnProperty.call(m, "originalMessageKey")) + $root.proto.MessageKey.encode(m.originalMessageKey, w.uint32(18).fork()).ldelim(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(24).int32(m.type); + return w; + }; + + StatusNotificationMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StatusNotificationMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.responseMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.originalMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 3: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusNotificationMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StatusNotificationMessage) + return d; + var m = new $root.proto.Message.StatusNotificationMessage(); + if (d.responseMessageKey != null) { + if (typeof d.responseMessageKey !== "object") + throw TypeError(".proto.Message.StatusNotificationMessage.responseMessageKey: object expected"); + m.responseMessageKey = $root.proto.MessageKey.fromObject(d.responseMessageKey); + } + if (d.originalMessageKey != null) { + if (typeof d.originalMessageKey !== "object") + throw TypeError(".proto.Message.StatusNotificationMessage.originalMessageKey: object expected"); + m.originalMessageKey = $root.proto.MessageKey.fromObject(d.originalMessageKey); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN": + case 0: + m.type = 0; + break; + case "STATUS_ADD_YOURS": + case 1: + m.type = 1; + break; + case "STATUS_RESHARE": + case 2: + m.type = 2; + break; + case "STATUS_QUESTION_ANSWER_RESHARE": + case 3: + m.type = 3; + break; + } + return m; + }; + + StatusNotificationMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.responseMessageKey != null && m.hasOwnProperty("responseMessageKey")) { + d.responseMessageKey = $root.proto.MessageKey.toObject(m.responseMessageKey, o); + if (o.oneofs) + d._responseMessageKey = "responseMessageKey"; + } + if (m.originalMessageKey != null && m.hasOwnProperty("originalMessageKey")) { + d.originalMessageKey = $root.proto.MessageKey.toObject(m.originalMessageKey, o); + if (o.oneofs) + d._originalMessageKey = "originalMessageKey"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.StatusNotificationMessage.StatusNotificationType[m.type] === undefined ? m.type : $root.proto.Message.StatusNotificationMessage.StatusNotificationType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + StatusNotificationMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusNotificationMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StatusNotificationMessage"; + }; + + StatusNotificationMessage.StatusNotificationType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "STATUS_ADD_YOURS"] = 1; + values[valuesById[2] = "STATUS_RESHARE"] = 2; + values[valuesById[3] = "STATUS_QUESTION_ANSWER_RESHARE"] = 3; + return values; + })(); + + return StatusNotificationMessage; + })(); + + Message.StatusQuestionAnswerMessage = (function() { + + function StatusQuestionAnswerMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusQuestionAnswerMessage.prototype.key = null; + StatusQuestionAnswerMessage.prototype.text = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusQuestionAnswerMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusQuestionAnswerMessage.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusQuestionAnswerMessage.create = function create(properties) { + return new StatusQuestionAnswerMessage(properties); + }; + + StatusQuestionAnswerMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(18).string(m.text); + return w; + }; + + StatusQuestionAnswerMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StatusQuestionAnswerMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.text = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusQuestionAnswerMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StatusQuestionAnswerMessage) + return d; + var m = new $root.proto.Message.StatusQuestionAnswerMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.StatusQuestionAnswerMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.text != null) { + m.text = String(d.text); + } + return m; + }; + + StatusQuestionAnswerMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + return d; + }; + + StatusQuestionAnswerMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusQuestionAnswerMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StatusQuestionAnswerMessage"; + }; + + return StatusQuestionAnswerMessage; + })(); + + Message.StatusQuotedMessage = (function() { + + function StatusQuotedMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusQuotedMessage.prototype.type = null; + StatusQuotedMessage.prototype.text = null; + StatusQuotedMessage.prototype.thumbnail = null; + StatusQuotedMessage.prototype.originalStatusId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusQuotedMessage.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusQuotedMessage.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusQuotedMessage.prototype, "_thumbnail", { + get: $util.oneOfGetter($oneOfFields = ["thumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusQuotedMessage.prototype, "_originalStatusId", { + get: $util.oneOfGetter($oneOfFields = ["originalStatusId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusQuotedMessage.create = function create(properties) { + return new StatusQuotedMessage(properties); + }; + + StatusQuotedMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(18).string(m.text); + if (m.thumbnail != null && Object.hasOwnProperty.call(m, "thumbnail")) + w.uint32(26).bytes(m.thumbnail); + if (m.originalStatusId != null && Object.hasOwnProperty.call(m, "originalStatusId")) + $root.proto.MessageKey.encode(m.originalStatusId, w.uint32(34).fork()).ldelim(); + return w; + }; + + StatusQuotedMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StatusQuotedMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + case 2: { + m.text = r.string(); + break; + } + case 3: { + m.thumbnail = r.bytes(); + break; + } + case 4: { + m.originalStatusId = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusQuotedMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StatusQuotedMessage) + return d; + var m = new $root.proto.Message.StatusQuotedMessage(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "QUESTION_ANSWER": + case 1: + m.type = 1; + break; + } + if (d.text != null) { + m.text = String(d.text); + } + if (d.thumbnail != null) { + if (typeof d.thumbnail === "string") + $util.base64.decode(d.thumbnail, m.thumbnail = $util.newBuffer($util.base64.length(d.thumbnail)), 0); + else if (d.thumbnail.length >= 0) + m.thumbnail = d.thumbnail; + } + if (d.originalStatusId != null) { + if (typeof d.originalStatusId !== "object") + throw TypeError(".proto.Message.StatusQuotedMessage.originalStatusId: object expected"); + m.originalStatusId = $root.proto.MessageKey.fromObject(d.originalStatusId); + } + return m; + }; + + StatusQuotedMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.StatusQuotedMessage.StatusQuotedMessageType[m.type] === undefined ? m.type : $root.proto.Message.StatusQuotedMessage.StatusQuotedMessageType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.thumbnail != null && m.hasOwnProperty("thumbnail")) { + d.thumbnail = o.bytes === String ? $util.base64.encode(m.thumbnail, 0, m.thumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnail) : m.thumbnail; + if (o.oneofs) + d._thumbnail = "thumbnail"; + } + if (m.originalStatusId != null && m.hasOwnProperty("originalStatusId")) { + d.originalStatusId = $root.proto.MessageKey.toObject(m.originalStatusId, o); + if (o.oneofs) + d._originalStatusId = "originalStatusId"; + } + return d; + }; + + StatusQuotedMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusQuotedMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StatusQuotedMessage"; + }; + + StatusQuotedMessage.StatusQuotedMessageType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "QUESTION_ANSWER"] = 1; + return values; + })(); + + return StatusQuotedMessage; + })(); + + Message.StatusStickerInteractionMessage = (function() { + + function StatusStickerInteractionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusStickerInteractionMessage.prototype.key = null; + StatusStickerInteractionMessage.prototype.stickerKey = null; + StatusStickerInteractionMessage.prototype.type = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusStickerInteractionMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusStickerInteractionMessage.prototype, "_stickerKey", { + get: $util.oneOfGetter($oneOfFields = ["stickerKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusStickerInteractionMessage.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusStickerInteractionMessage.create = function create(properties) { + return new StatusStickerInteractionMessage(properties); + }; + + StatusStickerInteractionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.stickerKey != null && Object.hasOwnProperty.call(m, "stickerKey")) + w.uint32(18).string(m.stickerKey); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(24).int32(m.type); + return w; + }; + + StatusStickerInteractionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StatusStickerInteractionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.stickerKey = r.string(); + break; + } + case 3: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusStickerInteractionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StatusStickerInteractionMessage) + return d; + var m = new $root.proto.Message.StatusStickerInteractionMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Message.StatusStickerInteractionMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.stickerKey != null) { + m.stickerKey = String(d.stickerKey); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN": + case 0: + m.type = 0; + break; + case "REACTION": + case 1: + m.type = 1; + break; + } + return m; + }; + + StatusStickerInteractionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.stickerKey != null && m.hasOwnProperty("stickerKey")) { + d.stickerKey = m.stickerKey; + if (o.oneofs) + d._stickerKey = "stickerKey"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.Message.StatusStickerInteractionMessage.StatusStickerType[m.type] === undefined ? m.type : $root.proto.Message.StatusStickerInteractionMessage.StatusStickerType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + StatusStickerInteractionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusStickerInteractionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StatusStickerInteractionMessage"; + }; + + StatusStickerInteractionMessage.StatusStickerType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "REACTION"] = 1; + return values; + })(); + + return StatusStickerInteractionMessage; + })(); + + Message.StickerMessage = (function() { + + function StickerMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StickerMessage.prototype.url = null; + StickerMessage.prototype.fileSha256 = null; + StickerMessage.prototype.fileEncSha256 = null; + StickerMessage.prototype.mediaKey = null; + StickerMessage.prototype.mimetype = null; + StickerMessage.prototype.height = null; + StickerMessage.prototype.width = null; + StickerMessage.prototype.directPath = null; + StickerMessage.prototype.fileLength = null; + StickerMessage.prototype.mediaKeyTimestamp = null; + StickerMessage.prototype.firstFrameLength = null; + StickerMessage.prototype.firstFrameSidecar = null; + StickerMessage.prototype.isAnimated = null; + StickerMessage.prototype.pngThumbnail = null; + StickerMessage.prototype.contextInfo = null; + StickerMessage.prototype.stickerSentTs = null; + StickerMessage.prototype.isAvatar = null; + StickerMessage.prototype.isAiSticker = null; + StickerMessage.prototype.isLottie = null; + StickerMessage.prototype.accessibilityLabel = null; + StickerMessage.prototype.mediaKeyDomain = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_firstFrameLength", { + get: $util.oneOfGetter($oneOfFields = ["firstFrameLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_firstFrameSidecar", { + get: $util.oneOfGetter($oneOfFields = ["firstFrameSidecar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_isAnimated", { + get: $util.oneOfGetter($oneOfFields = ["isAnimated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_pngThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["pngThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_stickerSentTs", { + get: $util.oneOfGetter($oneOfFields = ["stickerSentTs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_isAvatar", { + get: $util.oneOfGetter($oneOfFields = ["isAvatar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_isAiSticker", { + get: $util.oneOfGetter($oneOfFields = ["isAiSticker"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_isLottie", { + get: $util.oneOfGetter($oneOfFields = ["isLottie"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_accessibilityLabel", { + get: $util.oneOfGetter($oneOfFields = ["accessibilityLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMessage.prototype, "_mediaKeyDomain", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyDomain"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StickerMessage.create = function create(properties) { + return new StickerMessage(properties); + }; + + StickerMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(18).bytes(m.fileSha256); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(26).bytes(m.fileEncSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(34).bytes(m.mediaKey); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(42).string(m.mimetype); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(48).uint32(m.height); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(56).uint32(m.width); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(66).string(m.directPath); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(72).uint64(m.fileLength); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(80).int64(m.mediaKeyTimestamp); + if (m.firstFrameLength != null && Object.hasOwnProperty.call(m, "firstFrameLength")) + w.uint32(88).uint32(m.firstFrameLength); + if (m.firstFrameSidecar != null && Object.hasOwnProperty.call(m, "firstFrameSidecar")) + w.uint32(98).bytes(m.firstFrameSidecar); + if (m.isAnimated != null && Object.hasOwnProperty.call(m, "isAnimated")) + w.uint32(104).bool(m.isAnimated); + if (m.pngThumbnail != null && Object.hasOwnProperty.call(m, "pngThumbnail")) + w.uint32(130).bytes(m.pngThumbnail); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + if (m.stickerSentTs != null && Object.hasOwnProperty.call(m, "stickerSentTs")) + w.uint32(144).int64(m.stickerSentTs); + if (m.isAvatar != null && Object.hasOwnProperty.call(m, "isAvatar")) + w.uint32(152).bool(m.isAvatar); + if (m.isAiSticker != null && Object.hasOwnProperty.call(m, "isAiSticker")) + w.uint32(160).bool(m.isAiSticker); + if (m.isLottie != null && Object.hasOwnProperty.call(m, "isLottie")) + w.uint32(168).bool(m.isLottie); + if (m.accessibilityLabel != null && Object.hasOwnProperty.call(m, "accessibilityLabel")) + w.uint32(178).string(m.accessibilityLabel); + if (m.mediaKeyDomain != null && Object.hasOwnProperty.call(m, "mediaKeyDomain")) + w.uint32(184).int32(m.mediaKeyDomain); + return w; + }; + + StickerMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StickerMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.fileSha256 = r.bytes(); + break; + } + case 3: { + m.fileEncSha256 = r.bytes(); + break; + } + case 4: { + m.mediaKey = r.bytes(); + break; + } + case 5: { + m.mimetype = r.string(); + break; + } + case 6: { + m.height = r.uint32(); + break; + } + case 7: { + m.width = r.uint32(); + break; + } + case 8: { + m.directPath = r.string(); + break; + } + case 9: { + m.fileLength = r.uint64(); + break; + } + case 10: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 11: { + m.firstFrameLength = r.uint32(); + break; + } + case 12: { + m.firstFrameSidecar = r.bytes(); + break; + } + case 13: { + m.isAnimated = r.bool(); + break; + } + case 16: { + m.pngThumbnail = r.bytes(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 18: { + m.stickerSentTs = r.int64(); + break; + } + case 19: { + m.isAvatar = r.bool(); + break; + } + case 20: { + m.isAiSticker = r.bool(); + break; + } + case 21: { + m.isLottie = r.bool(); + break; + } + case 22: { + m.accessibilityLabel = r.string(); + break; + } + case 23: { + m.mediaKeyDomain = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StickerMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StickerMessage) + return d; + var m = new $root.proto.Message.StickerMessage(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.height != null) { + m.height = d.height >>> 0; + } + if (d.width != null) { + m.width = d.width >>> 0; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.firstFrameLength != null) { + m.firstFrameLength = d.firstFrameLength >>> 0; + } + if (d.firstFrameSidecar != null) { + if (typeof d.firstFrameSidecar === "string") + $util.base64.decode(d.firstFrameSidecar, m.firstFrameSidecar = $util.newBuffer($util.base64.length(d.firstFrameSidecar)), 0); + else if (d.firstFrameSidecar.length >= 0) + m.firstFrameSidecar = d.firstFrameSidecar; + } + if (d.isAnimated != null) { + m.isAnimated = Boolean(d.isAnimated); + } + if (d.pngThumbnail != null) { + if (typeof d.pngThumbnail === "string") + $util.base64.decode(d.pngThumbnail, m.pngThumbnail = $util.newBuffer($util.base64.length(d.pngThumbnail)), 0); + else if (d.pngThumbnail.length >= 0) + m.pngThumbnail = d.pngThumbnail; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.StickerMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.stickerSentTs != null) { + if ($util.Long) + (m.stickerSentTs = $util.Long.fromValue(d.stickerSentTs)).unsigned = false; + else if (typeof d.stickerSentTs === "string") + m.stickerSentTs = parseInt(d.stickerSentTs, 10); + else if (typeof d.stickerSentTs === "number") + m.stickerSentTs = d.stickerSentTs; + else if (typeof d.stickerSentTs === "object") + m.stickerSentTs = new $util.LongBits(d.stickerSentTs.low >>> 0, d.stickerSentTs.high >>> 0).toNumber(); + } + if (d.isAvatar != null) { + m.isAvatar = Boolean(d.isAvatar); + } + if (d.isAiSticker != null) { + m.isAiSticker = Boolean(d.isAiSticker); + } + if (d.isLottie != null) { + m.isLottie = Boolean(d.isLottie); + } + if (d.accessibilityLabel != null) { + m.accessibilityLabel = String(d.accessibilityLabel); + } + switch (d.mediaKeyDomain) { + default: + if (typeof d.mediaKeyDomain === "number") { + m.mediaKeyDomain = d.mediaKeyDomain; + break; + } + break; + case "UNSET": + case 0: + m.mediaKeyDomain = 0; + break; + case "E2EE_CHAT": + case 1: + m.mediaKeyDomain = 1; + break; + case "STATUS": + case 2: + m.mediaKeyDomain = 2; + break; + case "CAPI": + case 3: + m.mediaKeyDomain = 3; + break; + case "BOT": + case 4: + m.mediaKeyDomain = 4; + break; + } + return m; + }; + + StickerMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.firstFrameLength != null && m.hasOwnProperty("firstFrameLength")) { + d.firstFrameLength = m.firstFrameLength; + if (o.oneofs) + d._firstFrameLength = "firstFrameLength"; + } + if (m.firstFrameSidecar != null && m.hasOwnProperty("firstFrameSidecar")) { + d.firstFrameSidecar = o.bytes === String ? $util.base64.encode(m.firstFrameSidecar, 0, m.firstFrameSidecar.length) : o.bytes === Array ? Array.prototype.slice.call(m.firstFrameSidecar) : m.firstFrameSidecar; + if (o.oneofs) + d._firstFrameSidecar = "firstFrameSidecar"; + } + if (m.isAnimated != null && m.hasOwnProperty("isAnimated")) { + d.isAnimated = m.isAnimated; + if (o.oneofs) + d._isAnimated = "isAnimated"; + } + if (m.pngThumbnail != null && m.hasOwnProperty("pngThumbnail")) { + d.pngThumbnail = o.bytes === String ? $util.base64.encode(m.pngThumbnail, 0, m.pngThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.pngThumbnail) : m.pngThumbnail; + if (o.oneofs) + d._pngThumbnail = "pngThumbnail"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.stickerSentTs != null && m.hasOwnProperty("stickerSentTs")) { + if (typeof m.stickerSentTs === "number") + d.stickerSentTs = o.longs === String ? String(m.stickerSentTs) : m.stickerSentTs; + else + d.stickerSentTs = o.longs === String ? longToString(m.stickerSentTs) : o.longs === Number ? longToNumber(m.stickerSentTs) : m.stickerSentTs; + if (o.oneofs) + d._stickerSentTs = "stickerSentTs"; + } + if (m.isAvatar != null && m.hasOwnProperty("isAvatar")) { + d.isAvatar = m.isAvatar; + if (o.oneofs) + d._isAvatar = "isAvatar"; + } + if (m.isAiSticker != null && m.hasOwnProperty("isAiSticker")) { + d.isAiSticker = m.isAiSticker; + if (o.oneofs) + d._isAiSticker = "isAiSticker"; + } + if (m.isLottie != null && m.hasOwnProperty("isLottie")) { + d.isLottie = m.isLottie; + if (o.oneofs) + d._isLottie = "isLottie"; + } + if (m.accessibilityLabel != null && m.hasOwnProperty("accessibilityLabel")) { + d.accessibilityLabel = m.accessibilityLabel; + if (o.oneofs) + d._accessibilityLabel = "accessibilityLabel"; + } + if (m.mediaKeyDomain != null && m.hasOwnProperty("mediaKeyDomain")) { + d.mediaKeyDomain = o.enums === String ? $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] === undefined ? m.mediaKeyDomain : $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] : m.mediaKeyDomain; + if (o.oneofs) + d._mediaKeyDomain = "mediaKeyDomain"; + } + return d; + }; + + StickerMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StickerMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StickerMessage"; + }; + + return StickerMessage; + })(); + + Message.StickerPackMessage = (function() { + + function StickerPackMessage(p) { + this.stickers = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StickerPackMessage.prototype.stickerPackId = null; + StickerPackMessage.prototype.name = null; + StickerPackMessage.prototype.publisher = null; + StickerPackMessage.prototype.stickers = $util.emptyArray; + StickerPackMessage.prototype.fileLength = null; + StickerPackMessage.prototype.fileSha256 = null; + StickerPackMessage.prototype.fileEncSha256 = null; + StickerPackMessage.prototype.mediaKey = null; + StickerPackMessage.prototype.directPath = null; + StickerPackMessage.prototype.caption = null; + StickerPackMessage.prototype.contextInfo = null; + StickerPackMessage.prototype.packDescription = null; + StickerPackMessage.prototype.mediaKeyTimestamp = null; + StickerPackMessage.prototype.trayIconFileName = null; + StickerPackMessage.prototype.thumbnailDirectPath = null; + StickerPackMessage.prototype.thumbnailSha256 = null; + StickerPackMessage.prototype.thumbnailEncSha256 = null; + StickerPackMessage.prototype.thumbnailHeight = null; + StickerPackMessage.prototype.thumbnailWidth = null; + StickerPackMessage.prototype.imageDataHash = null; + StickerPackMessage.prototype.stickerPackSize = null; + StickerPackMessage.prototype.stickerPackOrigin = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_stickerPackId", { + get: $util.oneOfGetter($oneOfFields = ["stickerPackId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_publisher", { + get: $util.oneOfGetter($oneOfFields = ["publisher"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_packDescription", { + get: $util.oneOfGetter($oneOfFields = ["packDescription"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_trayIconFileName", { + get: $util.oneOfGetter($oneOfFields = ["trayIconFileName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_thumbnailDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_thumbnailSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_thumbnailEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_thumbnailHeight", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailHeight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_thumbnailWidth", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailWidth"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_imageDataHash", { + get: $util.oneOfGetter($oneOfFields = ["imageDataHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_stickerPackSize", { + get: $util.oneOfGetter($oneOfFields = ["stickerPackSize"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerPackMessage.prototype, "_stickerPackOrigin", { + get: $util.oneOfGetter($oneOfFields = ["stickerPackOrigin"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StickerPackMessage.create = function create(properties) { + return new StickerPackMessage(properties); + }; + + StickerPackMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.stickerPackId != null && Object.hasOwnProperty.call(m, "stickerPackId")) + w.uint32(10).string(m.stickerPackId); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(18).string(m.name); + if (m.publisher != null && Object.hasOwnProperty.call(m, "publisher")) + w.uint32(26).string(m.publisher); + if (m.stickers != null && m.stickers.length) { + for (var i = 0; i < m.stickers.length; ++i) + $root.proto.Message.StickerPackMessage.Sticker.encode(m.stickers[i], w.uint32(34).fork()).ldelim(); + } + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(40).uint64(m.fileLength); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(50).bytes(m.fileSha256); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(58).bytes(m.fileEncSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(66).bytes(m.mediaKey); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(74).string(m.directPath); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(82).string(m.caption); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(90).fork()).ldelim(); + if (m.packDescription != null && Object.hasOwnProperty.call(m, "packDescription")) + w.uint32(98).string(m.packDescription); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(104).int64(m.mediaKeyTimestamp); + if (m.trayIconFileName != null && Object.hasOwnProperty.call(m, "trayIconFileName")) + w.uint32(114).string(m.trayIconFileName); + if (m.thumbnailDirectPath != null && Object.hasOwnProperty.call(m, "thumbnailDirectPath")) + w.uint32(122).string(m.thumbnailDirectPath); + if (m.thumbnailSha256 != null && Object.hasOwnProperty.call(m, "thumbnailSha256")) + w.uint32(130).bytes(m.thumbnailSha256); + if (m.thumbnailEncSha256 != null && Object.hasOwnProperty.call(m, "thumbnailEncSha256")) + w.uint32(138).bytes(m.thumbnailEncSha256); + if (m.thumbnailHeight != null && Object.hasOwnProperty.call(m, "thumbnailHeight")) + w.uint32(144).uint32(m.thumbnailHeight); + if (m.thumbnailWidth != null && Object.hasOwnProperty.call(m, "thumbnailWidth")) + w.uint32(152).uint32(m.thumbnailWidth); + if (m.imageDataHash != null && Object.hasOwnProperty.call(m, "imageDataHash")) + w.uint32(162).string(m.imageDataHash); + if (m.stickerPackSize != null && Object.hasOwnProperty.call(m, "stickerPackSize")) + w.uint32(168).uint64(m.stickerPackSize); + if (m.stickerPackOrigin != null && Object.hasOwnProperty.call(m, "stickerPackOrigin")) + w.uint32(176).int32(m.stickerPackOrigin); + return w; + }; + + StickerPackMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StickerPackMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.stickerPackId = r.string(); + break; + } + case 2: { + m.name = r.string(); + break; + } + case 3: { + m.publisher = r.string(); + break; + } + case 4: { + if (!(m.stickers && m.stickers.length)) + m.stickers = []; + m.stickers.push($root.proto.Message.StickerPackMessage.Sticker.decode(r, r.uint32())); + break; + } + case 5: { + m.fileLength = r.uint64(); + break; + } + case 6: { + m.fileSha256 = r.bytes(); + break; + } + case 7: { + m.fileEncSha256 = r.bytes(); + break; + } + case 8: { + m.mediaKey = r.bytes(); + break; + } + case 9: { + m.directPath = r.string(); + break; + } + case 10: { + m.caption = r.string(); + break; + } + case 11: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 12: { + m.packDescription = r.string(); + break; + } + case 13: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 14: { + m.trayIconFileName = r.string(); + break; + } + case 15: { + m.thumbnailDirectPath = r.string(); + break; + } + case 16: { + m.thumbnailSha256 = r.bytes(); + break; + } + case 17: { + m.thumbnailEncSha256 = r.bytes(); + break; + } + case 18: { + m.thumbnailHeight = r.uint32(); + break; + } + case 19: { + m.thumbnailWidth = r.uint32(); + break; + } + case 20: { + m.imageDataHash = r.string(); + break; + } + case 21: { + m.stickerPackSize = r.uint64(); + break; + } + case 22: { + m.stickerPackOrigin = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StickerPackMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StickerPackMessage) + return d; + var m = new $root.proto.Message.StickerPackMessage(); + if (d.stickerPackId != null) { + m.stickerPackId = String(d.stickerPackId); + } + if (d.name != null) { + m.name = String(d.name); + } + if (d.publisher != null) { + m.publisher = String(d.publisher); + } + if (d.stickers) { + if (!Array.isArray(d.stickers)) + throw TypeError(".proto.Message.StickerPackMessage.stickers: array expected"); + m.stickers = []; + for (var i = 0; i < d.stickers.length; ++i) { + if (typeof d.stickers[i] !== "object") + throw TypeError(".proto.Message.StickerPackMessage.stickers: object expected"); + m.stickers[i] = $root.proto.Message.StickerPackMessage.Sticker.fromObject(d.stickers[i]); + } + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.StickerPackMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.packDescription != null) { + m.packDescription = String(d.packDescription); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.trayIconFileName != null) { + m.trayIconFileName = String(d.trayIconFileName); + } + if (d.thumbnailDirectPath != null) { + m.thumbnailDirectPath = String(d.thumbnailDirectPath); + } + if (d.thumbnailSha256 != null) { + if (typeof d.thumbnailSha256 === "string") + $util.base64.decode(d.thumbnailSha256, m.thumbnailSha256 = $util.newBuffer($util.base64.length(d.thumbnailSha256)), 0); + else if (d.thumbnailSha256.length >= 0) + m.thumbnailSha256 = d.thumbnailSha256; + } + if (d.thumbnailEncSha256 != null) { + if (typeof d.thumbnailEncSha256 === "string") + $util.base64.decode(d.thumbnailEncSha256, m.thumbnailEncSha256 = $util.newBuffer($util.base64.length(d.thumbnailEncSha256)), 0); + else if (d.thumbnailEncSha256.length >= 0) + m.thumbnailEncSha256 = d.thumbnailEncSha256; + } + if (d.thumbnailHeight != null) { + m.thumbnailHeight = d.thumbnailHeight >>> 0; + } + if (d.thumbnailWidth != null) { + m.thumbnailWidth = d.thumbnailWidth >>> 0; + } + if (d.imageDataHash != null) { + m.imageDataHash = String(d.imageDataHash); + } + if (d.stickerPackSize != null) { + if ($util.Long) + (m.stickerPackSize = $util.Long.fromValue(d.stickerPackSize)).unsigned = true; + else if (typeof d.stickerPackSize === "string") + m.stickerPackSize = parseInt(d.stickerPackSize, 10); + else if (typeof d.stickerPackSize === "number") + m.stickerPackSize = d.stickerPackSize; + else if (typeof d.stickerPackSize === "object") + m.stickerPackSize = new $util.LongBits(d.stickerPackSize.low >>> 0, d.stickerPackSize.high >>> 0).toNumber(true); + } + switch (d.stickerPackOrigin) { + default: + if (typeof d.stickerPackOrigin === "number") { + m.stickerPackOrigin = d.stickerPackOrigin; + break; + } + break; + case "FIRST_PARTY": + case 0: + m.stickerPackOrigin = 0; + break; + case "THIRD_PARTY": + case 1: + m.stickerPackOrigin = 1; + break; + case "USER_CREATED": + case 2: + m.stickerPackOrigin = 2; + break; + } + return m; + }; + + StickerPackMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.stickers = []; + } + if (m.stickerPackId != null && m.hasOwnProperty("stickerPackId")) { + d.stickerPackId = m.stickerPackId; + if (o.oneofs) + d._stickerPackId = "stickerPackId"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.publisher != null && m.hasOwnProperty("publisher")) { + d.publisher = m.publisher; + if (o.oneofs) + d._publisher = "publisher"; + } + if (m.stickers && m.stickers.length) { + d.stickers = []; + for (var j = 0; j < m.stickers.length; ++j) { + d.stickers[j] = $root.proto.Message.StickerPackMessage.Sticker.toObject(m.stickers[j], o); + } + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.packDescription != null && m.hasOwnProperty("packDescription")) { + d.packDescription = m.packDescription; + if (o.oneofs) + d._packDescription = "packDescription"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.trayIconFileName != null && m.hasOwnProperty("trayIconFileName")) { + d.trayIconFileName = m.trayIconFileName; + if (o.oneofs) + d._trayIconFileName = "trayIconFileName"; + } + if (m.thumbnailDirectPath != null && m.hasOwnProperty("thumbnailDirectPath")) { + d.thumbnailDirectPath = m.thumbnailDirectPath; + if (o.oneofs) + d._thumbnailDirectPath = "thumbnailDirectPath"; + } + if (m.thumbnailSha256 != null && m.hasOwnProperty("thumbnailSha256")) { + d.thumbnailSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailSha256, 0, m.thumbnailSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailSha256) : m.thumbnailSha256; + if (o.oneofs) + d._thumbnailSha256 = "thumbnailSha256"; + } + if (m.thumbnailEncSha256 != null && m.hasOwnProperty("thumbnailEncSha256")) { + d.thumbnailEncSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailEncSha256, 0, m.thumbnailEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailEncSha256) : m.thumbnailEncSha256; + if (o.oneofs) + d._thumbnailEncSha256 = "thumbnailEncSha256"; + } + if (m.thumbnailHeight != null && m.hasOwnProperty("thumbnailHeight")) { + d.thumbnailHeight = m.thumbnailHeight; + if (o.oneofs) + d._thumbnailHeight = "thumbnailHeight"; + } + if (m.thumbnailWidth != null && m.hasOwnProperty("thumbnailWidth")) { + d.thumbnailWidth = m.thumbnailWidth; + if (o.oneofs) + d._thumbnailWidth = "thumbnailWidth"; + } + if (m.imageDataHash != null && m.hasOwnProperty("imageDataHash")) { + d.imageDataHash = m.imageDataHash; + if (o.oneofs) + d._imageDataHash = "imageDataHash"; + } + if (m.stickerPackSize != null && m.hasOwnProperty("stickerPackSize")) { + if (typeof m.stickerPackSize === "number") + d.stickerPackSize = o.longs === String ? String(m.stickerPackSize) : m.stickerPackSize; + else + d.stickerPackSize = o.longs === String ? longToString(m.stickerPackSize, true) : o.longs === Number ? longToNumber(m.stickerPackSize, true) : m.stickerPackSize; + if (o.oneofs) + d._stickerPackSize = "stickerPackSize"; + } + if (m.stickerPackOrigin != null && m.hasOwnProperty("stickerPackOrigin")) { + d.stickerPackOrigin = o.enums === String ? $root.proto.Message.StickerPackMessage.StickerPackOrigin[m.stickerPackOrigin] === undefined ? m.stickerPackOrigin : $root.proto.Message.StickerPackMessage.StickerPackOrigin[m.stickerPackOrigin] : m.stickerPackOrigin; + if (o.oneofs) + d._stickerPackOrigin = "stickerPackOrigin"; + } + return d; + }; + + StickerPackMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StickerPackMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StickerPackMessage"; + }; + + StickerPackMessage.Sticker = (function() { + + function Sticker(p) { + this.emojis = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Sticker.prototype.fileName = null; + Sticker.prototype.isAnimated = null; + Sticker.prototype.emojis = $util.emptyArray; + Sticker.prototype.accessibilityLabel = null; + Sticker.prototype.isLottie = null; + Sticker.prototype.mimetype = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Sticker.prototype, "_fileName", { + get: $util.oneOfGetter($oneOfFields = ["fileName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Sticker.prototype, "_isAnimated", { + get: $util.oneOfGetter($oneOfFields = ["isAnimated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Sticker.prototype, "_accessibilityLabel", { + get: $util.oneOfGetter($oneOfFields = ["accessibilityLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Sticker.prototype, "_isLottie", { + get: $util.oneOfGetter($oneOfFields = ["isLottie"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Sticker.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Sticker.create = function create(properties) { + return new Sticker(properties); + }; + + Sticker.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fileName != null && Object.hasOwnProperty.call(m, "fileName")) + w.uint32(10).string(m.fileName); + if (m.isAnimated != null && Object.hasOwnProperty.call(m, "isAnimated")) + w.uint32(16).bool(m.isAnimated); + if (m.emojis != null && m.emojis.length) { + for (var i = 0; i < m.emojis.length; ++i) + w.uint32(26).string(m.emojis[i]); + } + if (m.accessibilityLabel != null && Object.hasOwnProperty.call(m, "accessibilityLabel")) + w.uint32(34).string(m.accessibilityLabel); + if (m.isLottie != null && Object.hasOwnProperty.call(m, "isLottie")) + w.uint32(40).bool(m.isLottie); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(50).string(m.mimetype); + return w; + }; + + Sticker.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StickerPackMessage.Sticker(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fileName = r.string(); + break; + } + case 2: { + m.isAnimated = r.bool(); + break; + } + case 3: { + if (!(m.emojis && m.emojis.length)) + m.emojis = []; + m.emojis.push(r.string()); + break; + } + case 4: { + m.accessibilityLabel = r.string(); + break; + } + case 5: { + m.isLottie = r.bool(); + break; + } + case 6: { + m.mimetype = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Sticker.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StickerPackMessage.Sticker) + return d; + var m = new $root.proto.Message.StickerPackMessage.Sticker(); + if (d.fileName != null) { + m.fileName = String(d.fileName); + } + if (d.isAnimated != null) { + m.isAnimated = Boolean(d.isAnimated); + } + if (d.emojis) { + if (!Array.isArray(d.emojis)) + throw TypeError(".proto.Message.StickerPackMessage.Sticker.emojis: array expected"); + m.emojis = []; + for (var i = 0; i < d.emojis.length; ++i) { + m.emojis[i] = String(d.emojis[i]); + } + } + if (d.accessibilityLabel != null) { + m.accessibilityLabel = String(d.accessibilityLabel); + } + if (d.isLottie != null) { + m.isLottie = Boolean(d.isLottie); + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + return m; + }; + + Sticker.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.emojis = []; + } + if (m.fileName != null && m.hasOwnProperty("fileName")) { + d.fileName = m.fileName; + if (o.oneofs) + d._fileName = "fileName"; + } + if (m.isAnimated != null && m.hasOwnProperty("isAnimated")) { + d.isAnimated = m.isAnimated; + if (o.oneofs) + d._isAnimated = "isAnimated"; + } + if (m.emojis && m.emojis.length) { + d.emojis = []; + for (var j = 0; j < m.emojis.length; ++j) { + d.emojis[j] = m.emojis[j]; + } + } + if (m.accessibilityLabel != null && m.hasOwnProperty("accessibilityLabel")) { + d.accessibilityLabel = m.accessibilityLabel; + if (o.oneofs) + d._accessibilityLabel = "accessibilityLabel"; + } + if (m.isLottie != null && m.hasOwnProperty("isLottie")) { + d.isLottie = m.isLottie; + if (o.oneofs) + d._isLottie = "isLottie"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + return d; + }; + + Sticker.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Sticker.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StickerPackMessage.Sticker"; + }; + + return Sticker; + })(); + + StickerPackMessage.StickerPackOrigin = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "FIRST_PARTY"] = 0; + values[valuesById[1] = "THIRD_PARTY"] = 1; + values[valuesById[2] = "USER_CREATED"] = 2; + return values; + })(); + + return StickerPackMessage; + })(); + + Message.StickerSyncRMRMessage = (function() { + + function StickerSyncRMRMessage(p) { + this.filehash = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StickerSyncRMRMessage.prototype.filehash = $util.emptyArray; + StickerSyncRMRMessage.prototype.rmrSource = null; + StickerSyncRMRMessage.prototype.requestTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerSyncRMRMessage.prototype, "_rmrSource", { + get: $util.oneOfGetter($oneOfFields = ["rmrSource"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerSyncRMRMessage.prototype, "_requestTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["requestTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StickerSyncRMRMessage.create = function create(properties) { + return new StickerSyncRMRMessage(properties); + }; + + StickerSyncRMRMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.filehash != null && m.filehash.length) { + for (var i = 0; i < m.filehash.length; ++i) + w.uint32(10).string(m.filehash[i]); + } + if (m.rmrSource != null && Object.hasOwnProperty.call(m, "rmrSource")) + w.uint32(18).string(m.rmrSource); + if (m.requestTimestamp != null && Object.hasOwnProperty.call(m, "requestTimestamp")) + w.uint32(24).int64(m.requestTimestamp); + return w; + }; + + StickerSyncRMRMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.StickerSyncRMRMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.filehash && m.filehash.length)) + m.filehash = []; + m.filehash.push(r.string()); + break; + } + case 2: { + m.rmrSource = r.string(); + break; + } + case 3: { + m.requestTimestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StickerSyncRMRMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.StickerSyncRMRMessage) + return d; + var m = new $root.proto.Message.StickerSyncRMRMessage(); + if (d.filehash) { + if (!Array.isArray(d.filehash)) + throw TypeError(".proto.Message.StickerSyncRMRMessage.filehash: array expected"); + m.filehash = []; + for (var i = 0; i < d.filehash.length; ++i) { + m.filehash[i] = String(d.filehash[i]); + } + } + if (d.rmrSource != null) { + m.rmrSource = String(d.rmrSource); + } + if (d.requestTimestamp != null) { + if ($util.Long) + (m.requestTimestamp = $util.Long.fromValue(d.requestTimestamp)).unsigned = false; + else if (typeof d.requestTimestamp === "string") + m.requestTimestamp = parseInt(d.requestTimestamp, 10); + else if (typeof d.requestTimestamp === "number") + m.requestTimestamp = d.requestTimestamp; + else if (typeof d.requestTimestamp === "object") + m.requestTimestamp = new $util.LongBits(d.requestTimestamp.low >>> 0, d.requestTimestamp.high >>> 0).toNumber(); + } + return m; + }; + + StickerSyncRMRMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.filehash = []; + } + if (m.filehash && m.filehash.length) { + d.filehash = []; + for (var j = 0; j < m.filehash.length; ++j) { + d.filehash[j] = m.filehash[j]; + } + } + if (m.rmrSource != null && m.hasOwnProperty("rmrSource")) { + d.rmrSource = m.rmrSource; + if (o.oneofs) + d._rmrSource = "rmrSource"; + } + if (m.requestTimestamp != null && m.hasOwnProperty("requestTimestamp")) { + if (typeof m.requestTimestamp === "number") + d.requestTimestamp = o.longs === String ? String(m.requestTimestamp) : m.requestTimestamp; + else + d.requestTimestamp = o.longs === String ? longToString(m.requestTimestamp) : o.longs === Number ? longToNumber(m.requestTimestamp) : m.requestTimestamp; + if (o.oneofs) + d._requestTimestamp = "requestTimestamp"; + } + return d; + }; + + StickerSyncRMRMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StickerSyncRMRMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.StickerSyncRMRMessage"; + }; + + return StickerSyncRMRMessage; + })(); + + Message.TemplateButtonReplyMessage = (function() { + + function TemplateButtonReplyMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + TemplateButtonReplyMessage.prototype.selectedId = null; + TemplateButtonReplyMessage.prototype.selectedDisplayText = null; + TemplateButtonReplyMessage.prototype.contextInfo = null; + TemplateButtonReplyMessage.prototype.selectedIndex = null; + TemplateButtonReplyMessage.prototype.selectedCarouselCardIndex = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateButtonReplyMessage.prototype, "_selectedId", { + get: $util.oneOfGetter($oneOfFields = ["selectedId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateButtonReplyMessage.prototype, "_selectedDisplayText", { + get: $util.oneOfGetter($oneOfFields = ["selectedDisplayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateButtonReplyMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateButtonReplyMessage.prototype, "_selectedIndex", { + get: $util.oneOfGetter($oneOfFields = ["selectedIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateButtonReplyMessage.prototype, "_selectedCarouselCardIndex", { + get: $util.oneOfGetter($oneOfFields = ["selectedCarouselCardIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + TemplateButtonReplyMessage.create = function create(properties) { + return new TemplateButtonReplyMessage(properties); + }; + + TemplateButtonReplyMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.selectedId != null && Object.hasOwnProperty.call(m, "selectedId")) + w.uint32(10).string(m.selectedId); + if (m.selectedDisplayText != null && Object.hasOwnProperty.call(m, "selectedDisplayText")) + w.uint32(18).string(m.selectedDisplayText); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(26).fork()).ldelim(); + if (m.selectedIndex != null && Object.hasOwnProperty.call(m, "selectedIndex")) + w.uint32(32).uint32(m.selectedIndex); + if (m.selectedCarouselCardIndex != null && Object.hasOwnProperty.call(m, "selectedCarouselCardIndex")) + w.uint32(40).uint32(m.selectedCarouselCardIndex); + return w; + }; + + TemplateButtonReplyMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.TemplateButtonReplyMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.selectedId = r.string(); + break; + } + case 2: { + m.selectedDisplayText = r.string(); + break; + } + case 3: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 4: { + m.selectedIndex = r.uint32(); + break; + } + case 5: { + m.selectedCarouselCardIndex = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + TemplateButtonReplyMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.TemplateButtonReplyMessage) + return d; + var m = new $root.proto.Message.TemplateButtonReplyMessage(); + if (d.selectedId != null) { + m.selectedId = String(d.selectedId); + } + if (d.selectedDisplayText != null) { + m.selectedDisplayText = String(d.selectedDisplayText); + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.TemplateButtonReplyMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.selectedIndex != null) { + m.selectedIndex = d.selectedIndex >>> 0; + } + if (d.selectedCarouselCardIndex != null) { + m.selectedCarouselCardIndex = d.selectedCarouselCardIndex >>> 0; + } + return m; + }; + + TemplateButtonReplyMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.selectedId != null && m.hasOwnProperty("selectedId")) { + d.selectedId = m.selectedId; + if (o.oneofs) + d._selectedId = "selectedId"; + } + if (m.selectedDisplayText != null && m.hasOwnProperty("selectedDisplayText")) { + d.selectedDisplayText = m.selectedDisplayText; + if (o.oneofs) + d._selectedDisplayText = "selectedDisplayText"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.selectedIndex != null && m.hasOwnProperty("selectedIndex")) { + d.selectedIndex = m.selectedIndex; + if (o.oneofs) + d._selectedIndex = "selectedIndex"; + } + if (m.selectedCarouselCardIndex != null && m.hasOwnProperty("selectedCarouselCardIndex")) { + d.selectedCarouselCardIndex = m.selectedCarouselCardIndex; + if (o.oneofs) + d._selectedCarouselCardIndex = "selectedCarouselCardIndex"; + } + return d; + }; + + TemplateButtonReplyMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TemplateButtonReplyMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.TemplateButtonReplyMessage"; + }; + + return TemplateButtonReplyMessage; + })(); + + Message.TemplateMessage = (function() { + + function TemplateMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + TemplateMessage.prototype.contextInfo = null; + TemplateMessage.prototype.hydratedTemplate = null; + TemplateMessage.prototype.templateId = null; + TemplateMessage.prototype.fourRowTemplate = null; + TemplateMessage.prototype.hydratedFourRowTemplate = null; + TemplateMessage.prototype.interactiveMessageTemplate = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateMessage.prototype, "_hydratedTemplate", { + get: $util.oneOfGetter($oneOfFields = ["hydratedTemplate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateMessage.prototype, "_templateId", { + get: $util.oneOfGetter($oneOfFields = ["templateId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(TemplateMessage.prototype, "format", { + get: $util.oneOfGetter($oneOfFields = ["fourRowTemplate", "hydratedFourRowTemplate", "interactiveMessageTemplate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + TemplateMessage.create = function create(properties) { + return new TemplateMessage(properties); + }; + + TemplateMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fourRowTemplate != null && Object.hasOwnProperty.call(m, "fourRowTemplate")) + $root.proto.Message.TemplateMessage.FourRowTemplate.encode(m.fourRowTemplate, w.uint32(10).fork()).ldelim(); + if (m.hydratedFourRowTemplate != null && Object.hasOwnProperty.call(m, "hydratedFourRowTemplate")) + $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.encode(m.hydratedFourRowTemplate, w.uint32(18).fork()).ldelim(); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(26).fork()).ldelim(); + if (m.hydratedTemplate != null && Object.hasOwnProperty.call(m, "hydratedTemplate")) + $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.encode(m.hydratedTemplate, w.uint32(34).fork()).ldelim(); + if (m.interactiveMessageTemplate != null && Object.hasOwnProperty.call(m, "interactiveMessageTemplate")) + $root.proto.Message.InteractiveMessage.encode(m.interactiveMessageTemplate, w.uint32(42).fork()).ldelim(); + if (m.templateId != null && Object.hasOwnProperty.call(m, "templateId")) + w.uint32(74).string(m.templateId); + return w; + }; + + TemplateMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.TemplateMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 3: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 4: { + m.hydratedTemplate = $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.decode(r, r.uint32()); + break; + } + case 9: { + m.templateId = r.string(); + break; + } + case 1: { + m.fourRowTemplate = $root.proto.Message.TemplateMessage.FourRowTemplate.decode(r, r.uint32()); + break; + } + case 2: { + m.hydratedFourRowTemplate = $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.decode(r, r.uint32()); + break; + } + case 5: { + m.interactiveMessageTemplate = $root.proto.Message.InteractiveMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + TemplateMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.TemplateMessage) + return d; + var m = new $root.proto.Message.TemplateMessage(); + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.TemplateMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.hydratedTemplate != null) { + if (typeof d.hydratedTemplate !== "object") + throw TypeError(".proto.Message.TemplateMessage.hydratedTemplate: object expected"); + m.hydratedTemplate = $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.fromObject(d.hydratedTemplate); + } + if (d.templateId != null) { + m.templateId = String(d.templateId); + } + if (d.fourRowTemplate != null) { + if (typeof d.fourRowTemplate !== "object") + throw TypeError(".proto.Message.TemplateMessage.fourRowTemplate: object expected"); + m.fourRowTemplate = $root.proto.Message.TemplateMessage.FourRowTemplate.fromObject(d.fourRowTemplate); + } + if (d.hydratedFourRowTemplate != null) { + if (typeof d.hydratedFourRowTemplate !== "object") + throw TypeError(".proto.Message.TemplateMessage.hydratedFourRowTemplate: object expected"); + m.hydratedFourRowTemplate = $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.fromObject(d.hydratedFourRowTemplate); + } + if (d.interactiveMessageTemplate != null) { + if (typeof d.interactiveMessageTemplate !== "object") + throw TypeError(".proto.Message.TemplateMessage.interactiveMessageTemplate: object expected"); + m.interactiveMessageTemplate = $root.proto.Message.InteractiveMessage.fromObject(d.interactiveMessageTemplate); + } + return m; + }; + + TemplateMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fourRowTemplate != null && m.hasOwnProperty("fourRowTemplate")) { + d.fourRowTemplate = $root.proto.Message.TemplateMessage.FourRowTemplate.toObject(m.fourRowTemplate, o); + if (o.oneofs) + d.format = "fourRowTemplate"; + } + if (m.hydratedFourRowTemplate != null && m.hasOwnProperty("hydratedFourRowTemplate")) { + d.hydratedFourRowTemplate = $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.toObject(m.hydratedFourRowTemplate, o); + if (o.oneofs) + d.format = "hydratedFourRowTemplate"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.hydratedTemplate != null && m.hasOwnProperty("hydratedTemplate")) { + d.hydratedTemplate = $root.proto.Message.TemplateMessage.HydratedFourRowTemplate.toObject(m.hydratedTemplate, o); + if (o.oneofs) + d._hydratedTemplate = "hydratedTemplate"; + } + if (m.interactiveMessageTemplate != null && m.hasOwnProperty("interactiveMessageTemplate")) { + d.interactiveMessageTemplate = $root.proto.Message.InteractiveMessage.toObject(m.interactiveMessageTemplate, o); + if (o.oneofs) + d.format = "interactiveMessageTemplate"; + } + if (m.templateId != null && m.hasOwnProperty("templateId")) { + d.templateId = m.templateId; + if (o.oneofs) + d._templateId = "templateId"; + } + return d; + }; + + TemplateMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TemplateMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.TemplateMessage"; + }; + + TemplateMessage.FourRowTemplate = (function() { + + function FourRowTemplate(p) { + this.buttons = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + FourRowTemplate.prototype.content = null; + FourRowTemplate.prototype.footer = null; + FourRowTemplate.prototype.buttons = $util.emptyArray; + FourRowTemplate.prototype.documentMessage = null; + FourRowTemplate.prototype.highlyStructuredMessage = null; + FourRowTemplate.prototype.imageMessage = null; + FourRowTemplate.prototype.videoMessage = null; + FourRowTemplate.prototype.locationMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FourRowTemplate.prototype, "_content", { + get: $util.oneOfGetter($oneOfFields = ["content"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(FourRowTemplate.prototype, "_footer", { + get: $util.oneOfGetter($oneOfFields = ["footer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(FourRowTemplate.prototype, "title", { + get: $util.oneOfGetter($oneOfFields = ["documentMessage", "highlyStructuredMessage", "imageMessage", "videoMessage", "locationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + FourRowTemplate.create = function create(properties) { + return new FourRowTemplate(properties); + }; + + FourRowTemplate.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.documentMessage != null && Object.hasOwnProperty.call(m, "documentMessage")) + $root.proto.Message.DocumentMessage.encode(m.documentMessage, w.uint32(10).fork()).ldelim(); + if (m.highlyStructuredMessage != null && Object.hasOwnProperty.call(m, "highlyStructuredMessage")) + $root.proto.Message.HighlyStructuredMessage.encode(m.highlyStructuredMessage, w.uint32(18).fork()).ldelim(); + if (m.imageMessage != null && Object.hasOwnProperty.call(m, "imageMessage")) + $root.proto.Message.ImageMessage.encode(m.imageMessage, w.uint32(26).fork()).ldelim(); + if (m.videoMessage != null && Object.hasOwnProperty.call(m, "videoMessage")) + $root.proto.Message.VideoMessage.encode(m.videoMessage, w.uint32(34).fork()).ldelim(); + if (m.locationMessage != null && Object.hasOwnProperty.call(m, "locationMessage")) + $root.proto.Message.LocationMessage.encode(m.locationMessage, w.uint32(42).fork()).ldelim(); + if (m.content != null && Object.hasOwnProperty.call(m, "content")) + $root.proto.Message.HighlyStructuredMessage.encode(m.content, w.uint32(50).fork()).ldelim(); + if (m.footer != null && Object.hasOwnProperty.call(m, "footer")) + $root.proto.Message.HighlyStructuredMessage.encode(m.footer, w.uint32(58).fork()).ldelim(); + if (m.buttons != null && m.buttons.length) { + for (var i = 0; i < m.buttons.length; ++i) + $root.proto.TemplateButton.encode(m.buttons[i], w.uint32(66).fork()).ldelim(); + } + return w; + }; + + FourRowTemplate.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.TemplateMessage.FourRowTemplate(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 6: { + m.content = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + case 7: { + m.footer = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + case 8: { + if (!(m.buttons && m.buttons.length)) + m.buttons = []; + m.buttons.push($root.proto.TemplateButton.decode(r, r.uint32())); + break; + } + case 1: { + m.documentMessage = $root.proto.Message.DocumentMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.highlyStructuredMessage = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + case 3: { + m.imageMessage = $root.proto.Message.ImageMessage.decode(r, r.uint32()); + break; + } + case 4: { + m.videoMessage = $root.proto.Message.VideoMessage.decode(r, r.uint32()); + break; + } + case 5: { + m.locationMessage = $root.proto.Message.LocationMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + FourRowTemplate.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.TemplateMessage.FourRowTemplate) + return d; + var m = new $root.proto.Message.TemplateMessage.FourRowTemplate(); + if (d.content != null) { + if (typeof d.content !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.content: object expected"); + m.content = $root.proto.Message.HighlyStructuredMessage.fromObject(d.content); + } + if (d.footer != null) { + if (typeof d.footer !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.footer: object expected"); + m.footer = $root.proto.Message.HighlyStructuredMessage.fromObject(d.footer); + } + if (d.buttons) { + if (!Array.isArray(d.buttons)) + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.buttons: array expected"); + m.buttons = []; + for (var i = 0; i < d.buttons.length; ++i) { + if (typeof d.buttons[i] !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.buttons: object expected"); + m.buttons[i] = $root.proto.TemplateButton.fromObject(d.buttons[i]); + } + } + if (d.documentMessage != null) { + if (typeof d.documentMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.documentMessage: object expected"); + m.documentMessage = $root.proto.Message.DocumentMessage.fromObject(d.documentMessage); + } + if (d.highlyStructuredMessage != null) { + if (typeof d.highlyStructuredMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.highlyStructuredMessage: object expected"); + m.highlyStructuredMessage = $root.proto.Message.HighlyStructuredMessage.fromObject(d.highlyStructuredMessage); + } + if (d.imageMessage != null) { + if (typeof d.imageMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.imageMessage: object expected"); + m.imageMessage = $root.proto.Message.ImageMessage.fromObject(d.imageMessage); + } + if (d.videoMessage != null) { + if (typeof d.videoMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.videoMessage: object expected"); + m.videoMessage = $root.proto.Message.VideoMessage.fromObject(d.videoMessage); + } + if (d.locationMessage != null) { + if (typeof d.locationMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.FourRowTemplate.locationMessage: object expected"); + m.locationMessage = $root.proto.Message.LocationMessage.fromObject(d.locationMessage); + } + return m; + }; + + FourRowTemplate.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.buttons = []; + } + if (m.documentMessage != null && m.hasOwnProperty("documentMessage")) { + d.documentMessage = $root.proto.Message.DocumentMessage.toObject(m.documentMessage, o); + if (o.oneofs) + d.title = "documentMessage"; + } + if (m.highlyStructuredMessage != null && m.hasOwnProperty("highlyStructuredMessage")) { + d.highlyStructuredMessage = $root.proto.Message.HighlyStructuredMessage.toObject(m.highlyStructuredMessage, o); + if (o.oneofs) + d.title = "highlyStructuredMessage"; + } + if (m.imageMessage != null && m.hasOwnProperty("imageMessage")) { + d.imageMessage = $root.proto.Message.ImageMessage.toObject(m.imageMessage, o); + if (o.oneofs) + d.title = "imageMessage"; + } + if (m.videoMessage != null && m.hasOwnProperty("videoMessage")) { + d.videoMessage = $root.proto.Message.VideoMessage.toObject(m.videoMessage, o); + if (o.oneofs) + d.title = "videoMessage"; + } + if (m.locationMessage != null && m.hasOwnProperty("locationMessage")) { + d.locationMessage = $root.proto.Message.LocationMessage.toObject(m.locationMessage, o); + if (o.oneofs) + d.title = "locationMessage"; + } + if (m.content != null && m.hasOwnProperty("content")) { + d.content = $root.proto.Message.HighlyStructuredMessage.toObject(m.content, o); + if (o.oneofs) + d._content = "content"; + } + if (m.footer != null && m.hasOwnProperty("footer")) { + d.footer = $root.proto.Message.HighlyStructuredMessage.toObject(m.footer, o); + if (o.oneofs) + d._footer = "footer"; + } + if (m.buttons && m.buttons.length) { + d.buttons = []; + for (var j = 0; j < m.buttons.length; ++j) { + d.buttons[j] = $root.proto.TemplateButton.toObject(m.buttons[j], o); + } + } + return d; + }; + + FourRowTemplate.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + FourRowTemplate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.TemplateMessage.FourRowTemplate"; + }; + + return FourRowTemplate; + })(); + + TemplateMessage.HydratedFourRowTemplate = (function() { + + function HydratedFourRowTemplate(p) { + this.hydratedButtons = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + HydratedFourRowTemplate.prototype.hydratedContentText = null; + HydratedFourRowTemplate.prototype.hydratedFooterText = null; + HydratedFourRowTemplate.prototype.hydratedButtons = $util.emptyArray; + HydratedFourRowTemplate.prototype.templateId = null; + HydratedFourRowTemplate.prototype.maskLinkedDevices = null; + HydratedFourRowTemplate.prototype.documentMessage = null; + HydratedFourRowTemplate.prototype.hydratedTitleText = null; + HydratedFourRowTemplate.prototype.imageMessage = null; + HydratedFourRowTemplate.prototype.videoMessage = null; + HydratedFourRowTemplate.prototype.locationMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedFourRowTemplate.prototype, "_hydratedContentText", { + get: $util.oneOfGetter($oneOfFields = ["hydratedContentText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedFourRowTemplate.prototype, "_hydratedFooterText", { + get: $util.oneOfGetter($oneOfFields = ["hydratedFooterText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedFourRowTemplate.prototype, "_templateId", { + get: $util.oneOfGetter($oneOfFields = ["templateId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(HydratedFourRowTemplate.prototype, "_maskLinkedDevices", { + get: $util.oneOfGetter($oneOfFields = ["maskLinkedDevices"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(HydratedFourRowTemplate.prototype, "title", { + get: $util.oneOfGetter($oneOfFields = ["documentMessage", "hydratedTitleText", "imageMessage", "videoMessage", "locationMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + HydratedFourRowTemplate.create = function create(properties) { + return new HydratedFourRowTemplate(properties); + }; + + HydratedFourRowTemplate.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.documentMessage != null && Object.hasOwnProperty.call(m, "documentMessage")) + $root.proto.Message.DocumentMessage.encode(m.documentMessage, w.uint32(10).fork()).ldelim(); + if (m.hydratedTitleText != null && Object.hasOwnProperty.call(m, "hydratedTitleText")) + w.uint32(18).string(m.hydratedTitleText); + if (m.imageMessage != null && Object.hasOwnProperty.call(m, "imageMessage")) + $root.proto.Message.ImageMessage.encode(m.imageMessage, w.uint32(26).fork()).ldelim(); + if (m.videoMessage != null && Object.hasOwnProperty.call(m, "videoMessage")) + $root.proto.Message.VideoMessage.encode(m.videoMessage, w.uint32(34).fork()).ldelim(); + if (m.locationMessage != null && Object.hasOwnProperty.call(m, "locationMessage")) + $root.proto.Message.LocationMessage.encode(m.locationMessage, w.uint32(42).fork()).ldelim(); + if (m.hydratedContentText != null && Object.hasOwnProperty.call(m, "hydratedContentText")) + w.uint32(50).string(m.hydratedContentText); + if (m.hydratedFooterText != null && Object.hasOwnProperty.call(m, "hydratedFooterText")) + w.uint32(58).string(m.hydratedFooterText); + if (m.hydratedButtons != null && m.hydratedButtons.length) { + for (var i = 0; i < m.hydratedButtons.length; ++i) + $root.proto.HydratedTemplateButton.encode(m.hydratedButtons[i], w.uint32(66).fork()).ldelim(); + } + if (m.templateId != null && Object.hasOwnProperty.call(m, "templateId")) + w.uint32(74).string(m.templateId); + if (m.maskLinkedDevices != null && Object.hasOwnProperty.call(m, "maskLinkedDevices")) + w.uint32(80).bool(m.maskLinkedDevices); + return w; + }; + + HydratedFourRowTemplate.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.TemplateMessage.HydratedFourRowTemplate(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 6: { + m.hydratedContentText = r.string(); + break; + } + case 7: { + m.hydratedFooterText = r.string(); + break; + } + case 8: { + if (!(m.hydratedButtons && m.hydratedButtons.length)) + m.hydratedButtons = []; + m.hydratedButtons.push($root.proto.HydratedTemplateButton.decode(r, r.uint32())); + break; + } + case 9: { + m.templateId = r.string(); + break; + } + case 10: { + m.maskLinkedDevices = r.bool(); + break; + } + case 1: { + m.documentMessage = $root.proto.Message.DocumentMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.hydratedTitleText = r.string(); + break; + } + case 3: { + m.imageMessage = $root.proto.Message.ImageMessage.decode(r, r.uint32()); + break; + } + case 4: { + m.videoMessage = $root.proto.Message.VideoMessage.decode(r, r.uint32()); + break; + } + case 5: { + m.locationMessage = $root.proto.Message.LocationMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + HydratedFourRowTemplate.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.TemplateMessage.HydratedFourRowTemplate) + return d; + var m = new $root.proto.Message.TemplateMessage.HydratedFourRowTemplate(); + if (d.hydratedContentText != null) { + m.hydratedContentText = String(d.hydratedContentText); + } + if (d.hydratedFooterText != null) { + m.hydratedFooterText = String(d.hydratedFooterText); + } + if (d.hydratedButtons) { + if (!Array.isArray(d.hydratedButtons)) + throw TypeError(".proto.Message.TemplateMessage.HydratedFourRowTemplate.hydratedButtons: array expected"); + m.hydratedButtons = []; + for (var i = 0; i < d.hydratedButtons.length; ++i) { + if (typeof d.hydratedButtons[i] !== "object") + throw TypeError(".proto.Message.TemplateMessage.HydratedFourRowTemplate.hydratedButtons: object expected"); + m.hydratedButtons[i] = $root.proto.HydratedTemplateButton.fromObject(d.hydratedButtons[i]); + } + } + if (d.templateId != null) { + m.templateId = String(d.templateId); + } + if (d.maskLinkedDevices != null) { + m.maskLinkedDevices = Boolean(d.maskLinkedDevices); + } + if (d.documentMessage != null) { + if (typeof d.documentMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.HydratedFourRowTemplate.documentMessage: object expected"); + m.documentMessage = $root.proto.Message.DocumentMessage.fromObject(d.documentMessage); + } + if (d.hydratedTitleText != null) { + m.hydratedTitleText = String(d.hydratedTitleText); + } + if (d.imageMessage != null) { + if (typeof d.imageMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.HydratedFourRowTemplate.imageMessage: object expected"); + m.imageMessage = $root.proto.Message.ImageMessage.fromObject(d.imageMessage); + } + if (d.videoMessage != null) { + if (typeof d.videoMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.HydratedFourRowTemplate.videoMessage: object expected"); + m.videoMessage = $root.proto.Message.VideoMessage.fromObject(d.videoMessage); + } + if (d.locationMessage != null) { + if (typeof d.locationMessage !== "object") + throw TypeError(".proto.Message.TemplateMessage.HydratedFourRowTemplate.locationMessage: object expected"); + m.locationMessage = $root.proto.Message.LocationMessage.fromObject(d.locationMessage); + } + return m; + }; + + HydratedFourRowTemplate.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.hydratedButtons = []; + } + if (m.documentMessage != null && m.hasOwnProperty("documentMessage")) { + d.documentMessage = $root.proto.Message.DocumentMessage.toObject(m.documentMessage, o); + if (o.oneofs) + d.title = "documentMessage"; + } + if (m.hydratedTitleText != null && m.hasOwnProperty("hydratedTitleText")) { + d.hydratedTitleText = m.hydratedTitleText; + if (o.oneofs) + d.title = "hydratedTitleText"; + } + if (m.imageMessage != null && m.hasOwnProperty("imageMessage")) { + d.imageMessage = $root.proto.Message.ImageMessage.toObject(m.imageMessage, o); + if (o.oneofs) + d.title = "imageMessage"; + } + if (m.videoMessage != null && m.hasOwnProperty("videoMessage")) { + d.videoMessage = $root.proto.Message.VideoMessage.toObject(m.videoMessage, o); + if (o.oneofs) + d.title = "videoMessage"; + } + if (m.locationMessage != null && m.hasOwnProperty("locationMessage")) { + d.locationMessage = $root.proto.Message.LocationMessage.toObject(m.locationMessage, o); + if (o.oneofs) + d.title = "locationMessage"; + } + if (m.hydratedContentText != null && m.hasOwnProperty("hydratedContentText")) { + d.hydratedContentText = m.hydratedContentText; + if (o.oneofs) + d._hydratedContentText = "hydratedContentText"; + } + if (m.hydratedFooterText != null && m.hasOwnProperty("hydratedFooterText")) { + d.hydratedFooterText = m.hydratedFooterText; + if (o.oneofs) + d._hydratedFooterText = "hydratedFooterText"; + } + if (m.hydratedButtons && m.hydratedButtons.length) { + d.hydratedButtons = []; + for (var j = 0; j < m.hydratedButtons.length; ++j) { + d.hydratedButtons[j] = $root.proto.HydratedTemplateButton.toObject(m.hydratedButtons[j], o); + } + } + if (m.templateId != null && m.hasOwnProperty("templateId")) { + d.templateId = m.templateId; + if (o.oneofs) + d._templateId = "templateId"; + } + if (m.maskLinkedDevices != null && m.hasOwnProperty("maskLinkedDevices")) { + d.maskLinkedDevices = m.maskLinkedDevices; + if (o.oneofs) + d._maskLinkedDevices = "maskLinkedDevices"; + } + return d; + }; + + HydratedFourRowTemplate.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + HydratedFourRowTemplate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.TemplateMessage.HydratedFourRowTemplate"; + }; + + return HydratedFourRowTemplate; + })(); + + return TemplateMessage; + })(); + + Message.URLMetadata = (function() { + + function URLMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + URLMetadata.prototype.fbExperimentId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(URLMetadata.prototype, "_fbExperimentId", { + get: $util.oneOfGetter($oneOfFields = ["fbExperimentId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + URLMetadata.create = function create(properties) { + return new URLMetadata(properties); + }; + + URLMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fbExperimentId != null && Object.hasOwnProperty.call(m, "fbExperimentId")) + w.uint32(8).uint32(m.fbExperimentId); + return w; + }; + + URLMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.URLMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fbExperimentId = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + URLMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.URLMetadata) + return d; + var m = new $root.proto.Message.URLMetadata(); + if (d.fbExperimentId != null) { + m.fbExperimentId = d.fbExperimentId >>> 0; + } + return m; + }; + + URLMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fbExperimentId != null && m.hasOwnProperty("fbExperimentId")) { + d.fbExperimentId = m.fbExperimentId; + if (o.oneofs) + d._fbExperimentId = "fbExperimentId"; + } + return d; + }; + + URLMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + URLMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.URLMetadata"; + }; + + return URLMetadata; + })(); + + Message.VideoEndCard = (function() { + + function VideoEndCard(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + VideoEndCard.prototype.username = ""; + VideoEndCard.prototype.caption = ""; + VideoEndCard.prototype.thumbnailImageUrl = ""; + VideoEndCard.prototype.profilePictureUrl = ""; + + VideoEndCard.create = function create(properties) { + return new VideoEndCard(properties); + }; + + VideoEndCard.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.username != null && Object.hasOwnProperty.call(m, "username")) + w.uint32(10).string(m.username); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(18).string(m.caption); + if (m.thumbnailImageUrl != null && Object.hasOwnProperty.call(m, "thumbnailImageUrl")) + w.uint32(26).string(m.thumbnailImageUrl); + if (m.profilePictureUrl != null && Object.hasOwnProperty.call(m, "profilePictureUrl")) + w.uint32(34).string(m.profilePictureUrl); + return w; + }; + + VideoEndCard.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.VideoEndCard(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.username = r.string(); + break; + } + case 2: { + m.caption = r.string(); + break; + } + case 3: { + m.thumbnailImageUrl = r.string(); + break; + } + case 4: { + m.profilePictureUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + VideoEndCard.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.VideoEndCard) + return d; + var m = new $root.proto.Message.VideoEndCard(); + if (d.username != null) { + m.username = String(d.username); + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.thumbnailImageUrl != null) { + m.thumbnailImageUrl = String(d.thumbnailImageUrl); + } + if (d.profilePictureUrl != null) { + m.profilePictureUrl = String(d.profilePictureUrl); + } + return m; + }; + + VideoEndCard.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.username = ""; + d.caption = ""; + d.thumbnailImageUrl = ""; + d.profilePictureUrl = ""; + } + if (m.username != null && m.hasOwnProperty("username")) { + d.username = m.username; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + } + if (m.thumbnailImageUrl != null && m.hasOwnProperty("thumbnailImageUrl")) { + d.thumbnailImageUrl = m.thumbnailImageUrl; + } + if (m.profilePictureUrl != null && m.hasOwnProperty("profilePictureUrl")) { + d.profilePictureUrl = m.profilePictureUrl; + } + return d; + }; + + VideoEndCard.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + VideoEndCard.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.VideoEndCard"; + }; + + return VideoEndCard; + })(); + + Message.VideoMessage = (function() { + + function VideoMessage(p) { + this.interactiveAnnotations = []; + this.annotations = []; + this.processedVideos = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + VideoMessage.prototype.url = null; + VideoMessage.prototype.mimetype = null; + VideoMessage.prototype.fileSha256 = null; + VideoMessage.prototype.fileLength = null; + VideoMessage.prototype.seconds = null; + VideoMessage.prototype.mediaKey = null; + VideoMessage.prototype.caption = null; + VideoMessage.prototype.gifPlayback = null; + VideoMessage.prototype.height = null; + VideoMessage.prototype.width = null; + VideoMessage.prototype.fileEncSha256 = null; + VideoMessage.prototype.interactiveAnnotations = $util.emptyArray; + VideoMessage.prototype.directPath = null; + VideoMessage.prototype.mediaKeyTimestamp = null; + VideoMessage.prototype.jpegThumbnail = null; + VideoMessage.prototype.contextInfo = null; + VideoMessage.prototype.streamingSidecar = null; + VideoMessage.prototype.gifAttribution = null; + VideoMessage.prototype.viewOnce = null; + VideoMessage.prototype.thumbnailDirectPath = null; + VideoMessage.prototype.thumbnailSha256 = null; + VideoMessage.prototype.thumbnailEncSha256 = null; + VideoMessage.prototype.staticUrl = null; + VideoMessage.prototype.annotations = $util.emptyArray; + VideoMessage.prototype.accessibilityLabel = null; + VideoMessage.prototype.processedVideos = $util.emptyArray; + VideoMessage.prototype.externalShareFullVideoDurationInSeconds = null; + VideoMessage.prototype.motionPhotoPresentationOffsetMs = null; + VideoMessage.prototype.metadataUrl = null; + VideoMessage.prototype.videoSourceType = null; + VideoMessage.prototype.mediaKeyDomain = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_seconds", { + get: $util.oneOfGetter($oneOfFields = ["seconds"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_gifPlayback", { + get: $util.oneOfGetter($oneOfFields = ["gifPlayback"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_contextInfo", { + get: $util.oneOfGetter($oneOfFields = ["contextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_streamingSidecar", { + get: $util.oneOfGetter($oneOfFields = ["streamingSidecar"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_gifAttribution", { + get: $util.oneOfGetter($oneOfFields = ["gifAttribution"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_viewOnce", { + get: $util.oneOfGetter($oneOfFields = ["viewOnce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_thumbnailDirectPath", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailDirectPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_thumbnailSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_thumbnailEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["thumbnailEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_staticUrl", { + get: $util.oneOfGetter($oneOfFields = ["staticUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_accessibilityLabel", { + get: $util.oneOfGetter($oneOfFields = ["accessibilityLabel"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_externalShareFullVideoDurationInSeconds", { + get: $util.oneOfGetter($oneOfFields = ["externalShareFullVideoDurationInSeconds"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_motionPhotoPresentationOffsetMs", { + get: $util.oneOfGetter($oneOfFields = ["motionPhotoPresentationOffsetMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_metadataUrl", { + get: $util.oneOfGetter($oneOfFields = ["metadataUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_videoSourceType", { + get: $util.oneOfGetter($oneOfFields = ["videoSourceType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VideoMessage.prototype, "_mediaKeyDomain", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyDomain"]), + set: $util.oneOfSetter($oneOfFields) + }); + + VideoMessage.create = function create(properties) { + return new VideoMessage(properties); + }; + + VideoMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(18).string(m.mimetype); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(26).bytes(m.fileSha256); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(32).uint64(m.fileLength); + if (m.seconds != null && Object.hasOwnProperty.call(m, "seconds")) + w.uint32(40).uint32(m.seconds); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(50).bytes(m.mediaKey); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(58).string(m.caption); + if (m.gifPlayback != null && Object.hasOwnProperty.call(m, "gifPlayback")) + w.uint32(64).bool(m.gifPlayback); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(72).uint32(m.height); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(80).uint32(m.width); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(90).bytes(m.fileEncSha256); + if (m.interactiveAnnotations != null && m.interactiveAnnotations.length) { + for (var i = 0; i < m.interactiveAnnotations.length; ++i) + $root.proto.InteractiveAnnotation.encode(m.interactiveAnnotations[i], w.uint32(98).fork()).ldelim(); + } + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(106).string(m.directPath); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(112).int64(m.mediaKeyTimestamp); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(130).bytes(m.jpegThumbnail); + if (m.contextInfo != null && Object.hasOwnProperty.call(m, "contextInfo")) + $root.proto.ContextInfo.encode(m.contextInfo, w.uint32(138).fork()).ldelim(); + if (m.streamingSidecar != null && Object.hasOwnProperty.call(m, "streamingSidecar")) + w.uint32(146).bytes(m.streamingSidecar); + if (m.gifAttribution != null && Object.hasOwnProperty.call(m, "gifAttribution")) + w.uint32(152).int32(m.gifAttribution); + if (m.viewOnce != null && Object.hasOwnProperty.call(m, "viewOnce")) + w.uint32(160).bool(m.viewOnce); + if (m.thumbnailDirectPath != null && Object.hasOwnProperty.call(m, "thumbnailDirectPath")) + w.uint32(170).string(m.thumbnailDirectPath); + if (m.thumbnailSha256 != null && Object.hasOwnProperty.call(m, "thumbnailSha256")) + w.uint32(178).bytes(m.thumbnailSha256); + if (m.thumbnailEncSha256 != null && Object.hasOwnProperty.call(m, "thumbnailEncSha256")) + w.uint32(186).bytes(m.thumbnailEncSha256); + if (m.staticUrl != null && Object.hasOwnProperty.call(m, "staticUrl")) + w.uint32(194).string(m.staticUrl); + if (m.annotations != null && m.annotations.length) { + for (var i = 0; i < m.annotations.length; ++i) + $root.proto.InteractiveAnnotation.encode(m.annotations[i], w.uint32(202).fork()).ldelim(); + } + if (m.accessibilityLabel != null && Object.hasOwnProperty.call(m, "accessibilityLabel")) + w.uint32(210).string(m.accessibilityLabel); + if (m.processedVideos != null && m.processedVideos.length) { + for (var i = 0; i < m.processedVideos.length; ++i) + $root.proto.ProcessedVideo.encode(m.processedVideos[i], w.uint32(218).fork()).ldelim(); + } + if (m.externalShareFullVideoDurationInSeconds != null && Object.hasOwnProperty.call(m, "externalShareFullVideoDurationInSeconds")) + w.uint32(224).uint32(m.externalShareFullVideoDurationInSeconds); + if (m.motionPhotoPresentationOffsetMs != null && Object.hasOwnProperty.call(m, "motionPhotoPresentationOffsetMs")) + w.uint32(232).uint64(m.motionPhotoPresentationOffsetMs); + if (m.metadataUrl != null && Object.hasOwnProperty.call(m, "metadataUrl")) + w.uint32(242).string(m.metadataUrl); + if (m.videoSourceType != null && Object.hasOwnProperty.call(m, "videoSourceType")) + w.uint32(248).int32(m.videoSourceType); + if (m.mediaKeyDomain != null && Object.hasOwnProperty.call(m, "mediaKeyDomain")) + w.uint32(256).int32(m.mediaKeyDomain); + return w; + }; + + VideoMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Message.VideoMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.mimetype = r.string(); + break; + } + case 3: { + m.fileSha256 = r.bytes(); + break; + } + case 4: { + m.fileLength = r.uint64(); + break; + } + case 5: { + m.seconds = r.uint32(); + break; + } + case 6: { + m.mediaKey = r.bytes(); + break; + } + case 7: { + m.caption = r.string(); + break; + } + case 8: { + m.gifPlayback = r.bool(); + break; + } + case 9: { + m.height = r.uint32(); + break; + } + case 10: { + m.width = r.uint32(); + break; + } + case 11: { + m.fileEncSha256 = r.bytes(); + break; + } + case 12: { + if (!(m.interactiveAnnotations && m.interactiveAnnotations.length)) + m.interactiveAnnotations = []; + m.interactiveAnnotations.push($root.proto.InteractiveAnnotation.decode(r, r.uint32())); + break; + } + case 13: { + m.directPath = r.string(); + break; + } + case 14: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 16: { + m.jpegThumbnail = r.bytes(); + break; + } + case 17: { + m.contextInfo = $root.proto.ContextInfo.decode(r, r.uint32()); + break; + } + case 18: { + m.streamingSidecar = r.bytes(); + break; + } + case 19: { + m.gifAttribution = r.int32(); + break; + } + case 20: { + m.viewOnce = r.bool(); + break; + } + case 21: { + m.thumbnailDirectPath = r.string(); + break; + } + case 22: { + m.thumbnailSha256 = r.bytes(); + break; + } + case 23: { + m.thumbnailEncSha256 = r.bytes(); + break; + } + case 24: { + m.staticUrl = r.string(); + break; + } + case 25: { + if (!(m.annotations && m.annotations.length)) + m.annotations = []; + m.annotations.push($root.proto.InteractiveAnnotation.decode(r, r.uint32())); + break; + } + case 26: { + m.accessibilityLabel = r.string(); + break; + } + case 27: { + if (!(m.processedVideos && m.processedVideos.length)) + m.processedVideos = []; + m.processedVideos.push($root.proto.ProcessedVideo.decode(r, r.uint32())); + break; + } + case 28: { + m.externalShareFullVideoDurationInSeconds = r.uint32(); + break; + } + case 29: { + m.motionPhotoPresentationOffsetMs = r.uint64(); + break; + } + case 30: { + m.metadataUrl = r.string(); + break; + } + case 31: { + m.videoSourceType = r.int32(); + break; + } + case 32: { + m.mediaKeyDomain = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + VideoMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Message.VideoMessage) + return d; + var m = new $root.proto.Message.VideoMessage(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.seconds != null) { + m.seconds = d.seconds >>> 0; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.gifPlayback != null) { + m.gifPlayback = Boolean(d.gifPlayback); + } + if (d.height != null) { + m.height = d.height >>> 0; + } + if (d.width != null) { + m.width = d.width >>> 0; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.interactiveAnnotations) { + if (!Array.isArray(d.interactiveAnnotations)) + throw TypeError(".proto.Message.VideoMessage.interactiveAnnotations: array expected"); + m.interactiveAnnotations = []; + for (var i = 0; i < d.interactiveAnnotations.length; ++i) { + if (typeof d.interactiveAnnotations[i] !== "object") + throw TypeError(".proto.Message.VideoMessage.interactiveAnnotations: object expected"); + m.interactiveAnnotations[i] = $root.proto.InteractiveAnnotation.fromObject(d.interactiveAnnotations[i]); + } + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + if (d.contextInfo != null) { + if (typeof d.contextInfo !== "object") + throw TypeError(".proto.Message.VideoMessage.contextInfo: object expected"); + m.contextInfo = $root.proto.ContextInfo.fromObject(d.contextInfo); + } + if (d.streamingSidecar != null) { + if (typeof d.streamingSidecar === "string") + $util.base64.decode(d.streamingSidecar, m.streamingSidecar = $util.newBuffer($util.base64.length(d.streamingSidecar)), 0); + else if (d.streamingSidecar.length >= 0) + m.streamingSidecar = d.streamingSidecar; + } + switch (d.gifAttribution) { + default: + if (typeof d.gifAttribution === "number") { + m.gifAttribution = d.gifAttribution; + break; + } + break; + case "NONE": + case 0: + m.gifAttribution = 0; + break; + case "GIPHY": + case 1: + m.gifAttribution = 1; + break; + case "TENOR": + case 2: + m.gifAttribution = 2; + break; + case "KLIPY": + case 3: + m.gifAttribution = 3; + break; + } + if (d.viewOnce != null) { + m.viewOnce = Boolean(d.viewOnce); + } + if (d.thumbnailDirectPath != null) { + m.thumbnailDirectPath = String(d.thumbnailDirectPath); + } + if (d.thumbnailSha256 != null) { + if (typeof d.thumbnailSha256 === "string") + $util.base64.decode(d.thumbnailSha256, m.thumbnailSha256 = $util.newBuffer($util.base64.length(d.thumbnailSha256)), 0); + else if (d.thumbnailSha256.length >= 0) + m.thumbnailSha256 = d.thumbnailSha256; + } + if (d.thumbnailEncSha256 != null) { + if (typeof d.thumbnailEncSha256 === "string") + $util.base64.decode(d.thumbnailEncSha256, m.thumbnailEncSha256 = $util.newBuffer($util.base64.length(d.thumbnailEncSha256)), 0); + else if (d.thumbnailEncSha256.length >= 0) + m.thumbnailEncSha256 = d.thumbnailEncSha256; + } + if (d.staticUrl != null) { + m.staticUrl = String(d.staticUrl); + } + if (d.annotations) { + if (!Array.isArray(d.annotations)) + throw TypeError(".proto.Message.VideoMessage.annotations: array expected"); + m.annotations = []; + for (var i = 0; i < d.annotations.length; ++i) { + if (typeof d.annotations[i] !== "object") + throw TypeError(".proto.Message.VideoMessage.annotations: object expected"); + m.annotations[i] = $root.proto.InteractiveAnnotation.fromObject(d.annotations[i]); + } + } + if (d.accessibilityLabel != null) { + m.accessibilityLabel = String(d.accessibilityLabel); + } + if (d.processedVideos) { + if (!Array.isArray(d.processedVideos)) + throw TypeError(".proto.Message.VideoMessage.processedVideos: array expected"); + m.processedVideos = []; + for (var i = 0; i < d.processedVideos.length; ++i) { + if (typeof d.processedVideos[i] !== "object") + throw TypeError(".proto.Message.VideoMessage.processedVideos: object expected"); + m.processedVideos[i] = $root.proto.ProcessedVideo.fromObject(d.processedVideos[i]); + } + } + if (d.externalShareFullVideoDurationInSeconds != null) { + m.externalShareFullVideoDurationInSeconds = d.externalShareFullVideoDurationInSeconds >>> 0; + } + if (d.motionPhotoPresentationOffsetMs != null) { + if ($util.Long) + (m.motionPhotoPresentationOffsetMs = $util.Long.fromValue(d.motionPhotoPresentationOffsetMs)).unsigned = true; + else if (typeof d.motionPhotoPresentationOffsetMs === "string") + m.motionPhotoPresentationOffsetMs = parseInt(d.motionPhotoPresentationOffsetMs, 10); + else if (typeof d.motionPhotoPresentationOffsetMs === "number") + m.motionPhotoPresentationOffsetMs = d.motionPhotoPresentationOffsetMs; + else if (typeof d.motionPhotoPresentationOffsetMs === "object") + m.motionPhotoPresentationOffsetMs = new $util.LongBits(d.motionPhotoPresentationOffsetMs.low >>> 0, d.motionPhotoPresentationOffsetMs.high >>> 0).toNumber(true); + } + if (d.metadataUrl != null) { + m.metadataUrl = String(d.metadataUrl); + } + switch (d.videoSourceType) { + default: + if (typeof d.videoSourceType === "number") { + m.videoSourceType = d.videoSourceType; + break; + } + break; + case "USER_VIDEO": + case 0: + m.videoSourceType = 0; + break; + case "AI_GENERATED": + case 1: + m.videoSourceType = 1; + break; + } + switch (d.mediaKeyDomain) { + default: + if (typeof d.mediaKeyDomain === "number") { + m.mediaKeyDomain = d.mediaKeyDomain; + break; + } + break; + case "UNSET": + case 0: + m.mediaKeyDomain = 0; + break; + case "E2EE_CHAT": + case 1: + m.mediaKeyDomain = 1; + break; + case "STATUS": + case 2: + m.mediaKeyDomain = 2; + break; + case "CAPI": + case 3: + m.mediaKeyDomain = 3; + break; + case "BOT": + case 4: + m.mediaKeyDomain = 4; + break; + } + return m; + }; + + VideoMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.interactiveAnnotations = []; + d.annotations = []; + d.processedVideos = []; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.seconds != null && m.hasOwnProperty("seconds")) { + d.seconds = m.seconds; + if (o.oneofs) + d._seconds = "seconds"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.gifPlayback != null && m.hasOwnProperty("gifPlayback")) { + d.gifPlayback = m.gifPlayback; + if (o.oneofs) + d._gifPlayback = "gifPlayback"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.interactiveAnnotations && m.interactiveAnnotations.length) { + d.interactiveAnnotations = []; + for (var j = 0; j < m.interactiveAnnotations.length; ++j) { + d.interactiveAnnotations[j] = $root.proto.InteractiveAnnotation.toObject(m.interactiveAnnotations[j], o); + } + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + if (m.contextInfo != null && m.hasOwnProperty("contextInfo")) { + d.contextInfo = $root.proto.ContextInfo.toObject(m.contextInfo, o); + if (o.oneofs) + d._contextInfo = "contextInfo"; + } + if (m.streamingSidecar != null && m.hasOwnProperty("streamingSidecar")) { + d.streamingSidecar = o.bytes === String ? $util.base64.encode(m.streamingSidecar, 0, m.streamingSidecar.length) : o.bytes === Array ? Array.prototype.slice.call(m.streamingSidecar) : m.streamingSidecar; + if (o.oneofs) + d._streamingSidecar = "streamingSidecar"; + } + if (m.gifAttribution != null && m.hasOwnProperty("gifAttribution")) { + d.gifAttribution = o.enums === String ? $root.proto.Message.VideoMessage.Attribution[m.gifAttribution] === undefined ? m.gifAttribution : $root.proto.Message.VideoMessage.Attribution[m.gifAttribution] : m.gifAttribution; + if (o.oneofs) + d._gifAttribution = "gifAttribution"; + } + if (m.viewOnce != null && m.hasOwnProperty("viewOnce")) { + d.viewOnce = m.viewOnce; + if (o.oneofs) + d._viewOnce = "viewOnce"; + } + if (m.thumbnailDirectPath != null && m.hasOwnProperty("thumbnailDirectPath")) { + d.thumbnailDirectPath = m.thumbnailDirectPath; + if (o.oneofs) + d._thumbnailDirectPath = "thumbnailDirectPath"; + } + if (m.thumbnailSha256 != null && m.hasOwnProperty("thumbnailSha256")) { + d.thumbnailSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailSha256, 0, m.thumbnailSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailSha256) : m.thumbnailSha256; + if (o.oneofs) + d._thumbnailSha256 = "thumbnailSha256"; + } + if (m.thumbnailEncSha256 != null && m.hasOwnProperty("thumbnailEncSha256")) { + d.thumbnailEncSha256 = o.bytes === String ? $util.base64.encode(m.thumbnailEncSha256, 0, m.thumbnailEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.thumbnailEncSha256) : m.thumbnailEncSha256; + if (o.oneofs) + d._thumbnailEncSha256 = "thumbnailEncSha256"; + } + if (m.staticUrl != null && m.hasOwnProperty("staticUrl")) { + d.staticUrl = m.staticUrl; + if (o.oneofs) + d._staticUrl = "staticUrl"; + } + if (m.annotations && m.annotations.length) { + d.annotations = []; + for (var j = 0; j < m.annotations.length; ++j) { + d.annotations[j] = $root.proto.InteractiveAnnotation.toObject(m.annotations[j], o); + } + } + if (m.accessibilityLabel != null && m.hasOwnProperty("accessibilityLabel")) { + d.accessibilityLabel = m.accessibilityLabel; + if (o.oneofs) + d._accessibilityLabel = "accessibilityLabel"; + } + if (m.processedVideos && m.processedVideos.length) { + d.processedVideos = []; + for (var j = 0; j < m.processedVideos.length; ++j) { + d.processedVideos[j] = $root.proto.ProcessedVideo.toObject(m.processedVideos[j], o); + } + } + if (m.externalShareFullVideoDurationInSeconds != null && m.hasOwnProperty("externalShareFullVideoDurationInSeconds")) { + d.externalShareFullVideoDurationInSeconds = m.externalShareFullVideoDurationInSeconds; + if (o.oneofs) + d._externalShareFullVideoDurationInSeconds = "externalShareFullVideoDurationInSeconds"; + } + if (m.motionPhotoPresentationOffsetMs != null && m.hasOwnProperty("motionPhotoPresentationOffsetMs")) { + if (typeof m.motionPhotoPresentationOffsetMs === "number") + d.motionPhotoPresentationOffsetMs = o.longs === String ? String(m.motionPhotoPresentationOffsetMs) : m.motionPhotoPresentationOffsetMs; + else + d.motionPhotoPresentationOffsetMs = o.longs === String ? longToString(m.motionPhotoPresentationOffsetMs, true) : o.longs === Number ? longToNumber(m.motionPhotoPresentationOffsetMs, true) : m.motionPhotoPresentationOffsetMs; + if (o.oneofs) + d._motionPhotoPresentationOffsetMs = "motionPhotoPresentationOffsetMs"; + } + if (m.metadataUrl != null && m.hasOwnProperty("metadataUrl")) { + d.metadataUrl = m.metadataUrl; + if (o.oneofs) + d._metadataUrl = "metadataUrl"; + } + if (m.videoSourceType != null && m.hasOwnProperty("videoSourceType")) { + d.videoSourceType = o.enums === String ? $root.proto.Message.VideoMessage.VideoSourceType[m.videoSourceType] === undefined ? m.videoSourceType : $root.proto.Message.VideoMessage.VideoSourceType[m.videoSourceType] : m.videoSourceType; + if (o.oneofs) + d._videoSourceType = "videoSourceType"; + } + if (m.mediaKeyDomain != null && m.hasOwnProperty("mediaKeyDomain")) { + d.mediaKeyDomain = o.enums === String ? $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] === undefined ? m.mediaKeyDomain : $root.proto.Message.MediaKeyDomain[m.mediaKeyDomain] : m.mediaKeyDomain; + if (o.oneofs) + d._mediaKeyDomain = "mediaKeyDomain"; + } + return d; + }; + + VideoMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + VideoMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Message.VideoMessage"; + }; + + VideoMessage.Attribution = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "GIPHY"] = 1; + values[valuesById[2] = "TENOR"] = 2; + values[valuesById[3] = "KLIPY"] = 3; + return values; + })(); + + VideoMessage.VideoSourceType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "USER_VIDEO"] = 0; + values[valuesById[1] = "AI_GENERATED"] = 1; + return values; + })(); + + return VideoMessage; + })(); + + return Message; + })(); + + proto.MessageAddOn = (function() { + + function MessageAddOn(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageAddOn.prototype.messageAddOnType = null; + MessageAddOn.prototype.messageAddOn = null; + MessageAddOn.prototype.senderTimestampMs = null; + MessageAddOn.prototype.serverTimestampMs = null; + MessageAddOn.prototype.status = null; + MessageAddOn.prototype.addOnContextInfo = null; + MessageAddOn.prototype.messageAddOnKey = null; + MessageAddOn.prototype.legacyMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_messageAddOnType", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOnType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_messageAddOn", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOn"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_serverTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["serverTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_status", { + get: $util.oneOfGetter($oneOfFields = ["status"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_addOnContextInfo", { + get: $util.oneOfGetter($oneOfFields = ["addOnContextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_messageAddOnKey", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOnKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOn.prototype, "_legacyMessage", { + get: $util.oneOfGetter($oneOfFields = ["legacyMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageAddOn.create = function create(properties) { + return new MessageAddOn(properties); + }; + + MessageAddOn.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageAddOnType != null && Object.hasOwnProperty.call(m, "messageAddOnType")) + w.uint32(8).int32(m.messageAddOnType); + if (m.messageAddOn != null && Object.hasOwnProperty.call(m, "messageAddOn")) + $root.proto.Message.encode(m.messageAddOn, w.uint32(18).fork()).ldelim(); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(24).int64(m.senderTimestampMs); + if (m.serverTimestampMs != null && Object.hasOwnProperty.call(m, "serverTimestampMs")) + w.uint32(32).int64(m.serverTimestampMs); + if (m.status != null && Object.hasOwnProperty.call(m, "status")) + w.uint32(40).int32(m.status); + if (m.addOnContextInfo != null && Object.hasOwnProperty.call(m, "addOnContextInfo")) + $root.proto.MessageAddOnContextInfo.encode(m.addOnContextInfo, w.uint32(50).fork()).ldelim(); + if (m.messageAddOnKey != null && Object.hasOwnProperty.call(m, "messageAddOnKey")) + $root.proto.MessageKey.encode(m.messageAddOnKey, w.uint32(58).fork()).ldelim(); + if (m.legacyMessage != null && Object.hasOwnProperty.call(m, "legacyMessage")) + $root.proto.LegacyMessage.encode(m.legacyMessage, w.uint32(66).fork()).ldelim(); + return w; + }; + + MessageAddOn.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MessageAddOn(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageAddOnType = r.int32(); + break; + } + case 2: { + m.messageAddOn = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 3: { + m.senderTimestampMs = r.int64(); + break; + } + case 4: { + m.serverTimestampMs = r.int64(); + break; + } + case 5: { + m.status = r.int32(); + break; + } + case 6: { + m.addOnContextInfo = $root.proto.MessageAddOnContextInfo.decode(r, r.uint32()); + break; + } + case 7: { + m.messageAddOnKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 8: { + m.legacyMessage = $root.proto.LegacyMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageAddOn.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MessageAddOn) + return d; + var m = new $root.proto.MessageAddOn(); + switch (d.messageAddOnType) { + default: + if (typeof d.messageAddOnType === "number") { + m.messageAddOnType = d.messageAddOnType; + break; + } + break; + case "UNDEFINED": + case 0: + m.messageAddOnType = 0; + break; + case "REACTION": + case 1: + m.messageAddOnType = 1; + break; + case "EVENT_RESPONSE": + case 2: + m.messageAddOnType = 2; + break; + case "POLL_UPDATE": + case 3: + m.messageAddOnType = 3; + break; + case "PIN_IN_CHAT": + case 4: + m.messageAddOnType = 4; + break; + } + if (d.messageAddOn != null) { + if (typeof d.messageAddOn !== "object") + throw TypeError(".proto.MessageAddOn.messageAddOn: object expected"); + m.messageAddOn = $root.proto.Message.fromObject(d.messageAddOn); + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + if (d.serverTimestampMs != null) { + if ($util.Long) + (m.serverTimestampMs = $util.Long.fromValue(d.serverTimestampMs)).unsigned = false; + else if (typeof d.serverTimestampMs === "string") + m.serverTimestampMs = parseInt(d.serverTimestampMs, 10); + else if (typeof d.serverTimestampMs === "number") + m.serverTimestampMs = d.serverTimestampMs; + else if (typeof d.serverTimestampMs === "object") + m.serverTimestampMs = new $util.LongBits(d.serverTimestampMs.low >>> 0, d.serverTimestampMs.high >>> 0).toNumber(); + } + switch (d.status) { + default: + if (typeof d.status === "number") { + m.status = d.status; + break; + } + break; + case "ERROR": + case 0: + m.status = 0; + break; + case "PENDING": + case 1: + m.status = 1; + break; + case "SERVER_ACK": + case 2: + m.status = 2; + break; + case "DELIVERY_ACK": + case 3: + m.status = 3; + break; + case "READ": + case 4: + m.status = 4; + break; + case "PLAYED": + case 5: + m.status = 5; + break; + } + if (d.addOnContextInfo != null) { + if (typeof d.addOnContextInfo !== "object") + throw TypeError(".proto.MessageAddOn.addOnContextInfo: object expected"); + m.addOnContextInfo = $root.proto.MessageAddOnContextInfo.fromObject(d.addOnContextInfo); + } + if (d.messageAddOnKey != null) { + if (typeof d.messageAddOnKey !== "object") + throw TypeError(".proto.MessageAddOn.messageAddOnKey: object expected"); + m.messageAddOnKey = $root.proto.MessageKey.fromObject(d.messageAddOnKey); + } + if (d.legacyMessage != null) { + if (typeof d.legacyMessage !== "object") + throw TypeError(".proto.MessageAddOn.legacyMessage: object expected"); + m.legacyMessage = $root.proto.LegacyMessage.fromObject(d.legacyMessage); + } + return m; + }; + + MessageAddOn.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageAddOnType != null && m.hasOwnProperty("messageAddOnType")) { + d.messageAddOnType = o.enums === String ? $root.proto.MessageAddOn.MessageAddOnType[m.messageAddOnType] === undefined ? m.messageAddOnType : $root.proto.MessageAddOn.MessageAddOnType[m.messageAddOnType] : m.messageAddOnType; + if (o.oneofs) + d._messageAddOnType = "messageAddOnType"; + } + if (m.messageAddOn != null && m.hasOwnProperty("messageAddOn")) { + d.messageAddOn = $root.proto.Message.toObject(m.messageAddOn, o); + if (o.oneofs) + d._messageAddOn = "messageAddOn"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + if (m.serverTimestampMs != null && m.hasOwnProperty("serverTimestampMs")) { + if (typeof m.serverTimestampMs === "number") + d.serverTimestampMs = o.longs === String ? String(m.serverTimestampMs) : m.serverTimestampMs; + else + d.serverTimestampMs = o.longs === String ? longToString(m.serverTimestampMs) : o.longs === Number ? longToNumber(m.serverTimestampMs) : m.serverTimestampMs; + if (o.oneofs) + d._serverTimestampMs = "serverTimestampMs"; + } + if (m.status != null && m.hasOwnProperty("status")) { + d.status = o.enums === String ? $root.proto.WebMessageInfo.Status[m.status] === undefined ? m.status : $root.proto.WebMessageInfo.Status[m.status] : m.status; + if (o.oneofs) + d._status = "status"; + } + if (m.addOnContextInfo != null && m.hasOwnProperty("addOnContextInfo")) { + d.addOnContextInfo = $root.proto.MessageAddOnContextInfo.toObject(m.addOnContextInfo, o); + if (o.oneofs) + d._addOnContextInfo = "addOnContextInfo"; + } + if (m.messageAddOnKey != null && m.hasOwnProperty("messageAddOnKey")) { + d.messageAddOnKey = $root.proto.MessageKey.toObject(m.messageAddOnKey, o); + if (o.oneofs) + d._messageAddOnKey = "messageAddOnKey"; + } + if (m.legacyMessage != null && m.hasOwnProperty("legacyMessage")) { + d.legacyMessage = $root.proto.LegacyMessage.toObject(m.legacyMessage, o); + if (o.oneofs) + d._legacyMessage = "legacyMessage"; + } + return d; + }; + + MessageAddOn.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageAddOn.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MessageAddOn"; + }; + + MessageAddOn.MessageAddOnType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNDEFINED"] = 0; + values[valuesById[1] = "REACTION"] = 1; + values[valuesById[2] = "EVENT_RESPONSE"] = 2; + values[valuesById[3] = "POLL_UPDATE"] = 3; + values[valuesById[4] = "PIN_IN_CHAT"] = 4; + return values; + })(); + + return MessageAddOn; + })(); + + proto.MessageAddOnContextInfo = (function() { + + function MessageAddOnContextInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageAddOnContextInfo.prototype.messageAddOnDurationInSecs = null; + MessageAddOnContextInfo.prototype.messageAddOnExpiryType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOnContextInfo.prototype, "_messageAddOnDurationInSecs", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOnDurationInSecs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAddOnContextInfo.prototype, "_messageAddOnExpiryType", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOnExpiryType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageAddOnContextInfo.create = function create(properties) { + return new MessageAddOnContextInfo(properties); + }; + + MessageAddOnContextInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageAddOnDurationInSecs != null && Object.hasOwnProperty.call(m, "messageAddOnDurationInSecs")) + w.uint32(8).uint32(m.messageAddOnDurationInSecs); + if (m.messageAddOnExpiryType != null && Object.hasOwnProperty.call(m, "messageAddOnExpiryType")) + w.uint32(16).int32(m.messageAddOnExpiryType); + return w; + }; + + MessageAddOnContextInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MessageAddOnContextInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageAddOnDurationInSecs = r.uint32(); + break; + } + case 2: { + m.messageAddOnExpiryType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageAddOnContextInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MessageAddOnContextInfo) + return d; + var m = new $root.proto.MessageAddOnContextInfo(); + if (d.messageAddOnDurationInSecs != null) { + m.messageAddOnDurationInSecs = d.messageAddOnDurationInSecs >>> 0; + } + switch (d.messageAddOnExpiryType) { + default: + if (typeof d.messageAddOnExpiryType === "number") { + m.messageAddOnExpiryType = d.messageAddOnExpiryType; + break; + } + break; + case "STATIC": + case 1: + m.messageAddOnExpiryType = 1; + break; + case "DEPENDENT_ON_PARENT": + case 2: + m.messageAddOnExpiryType = 2; + break; + } + return m; + }; + + MessageAddOnContextInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageAddOnDurationInSecs != null && m.hasOwnProperty("messageAddOnDurationInSecs")) { + d.messageAddOnDurationInSecs = m.messageAddOnDurationInSecs; + if (o.oneofs) + d._messageAddOnDurationInSecs = "messageAddOnDurationInSecs"; + } + if (m.messageAddOnExpiryType != null && m.hasOwnProperty("messageAddOnExpiryType")) { + d.messageAddOnExpiryType = o.enums === String ? $root.proto.MessageContextInfo.MessageAddonExpiryType[m.messageAddOnExpiryType] === undefined ? m.messageAddOnExpiryType : $root.proto.MessageContextInfo.MessageAddonExpiryType[m.messageAddOnExpiryType] : m.messageAddOnExpiryType; + if (o.oneofs) + d._messageAddOnExpiryType = "messageAddOnExpiryType"; + } + return d; + }; + + MessageAddOnContextInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageAddOnContextInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MessageAddOnContextInfo"; + }; + + return MessageAddOnContextInfo; + })(); + + proto.MessageAssociation = (function() { + + function MessageAssociation(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageAssociation.prototype.associationType = null; + MessageAssociation.prototype.parentMessageKey = null; + MessageAssociation.prototype.messageIndex = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAssociation.prototype, "_associationType", { + get: $util.oneOfGetter($oneOfFields = ["associationType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAssociation.prototype, "_parentMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["parentMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageAssociation.prototype, "_messageIndex", { + get: $util.oneOfGetter($oneOfFields = ["messageIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageAssociation.create = function create(properties) { + return new MessageAssociation(properties); + }; + + MessageAssociation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.associationType != null && Object.hasOwnProperty.call(m, "associationType")) + w.uint32(8).int32(m.associationType); + if (m.parentMessageKey != null && Object.hasOwnProperty.call(m, "parentMessageKey")) + $root.proto.MessageKey.encode(m.parentMessageKey, w.uint32(18).fork()).ldelim(); + if (m.messageIndex != null && Object.hasOwnProperty.call(m, "messageIndex")) + w.uint32(24).int32(m.messageIndex); + return w; + }; + + MessageAssociation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MessageAssociation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.associationType = r.int32(); + break; + } + case 2: { + m.parentMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 3: { + m.messageIndex = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageAssociation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MessageAssociation) + return d; + var m = new $root.proto.MessageAssociation(); + switch (d.associationType) { + default: + if (typeof d.associationType === "number") { + m.associationType = d.associationType; + break; + } + break; + case "UNKNOWN": + case 0: + m.associationType = 0; + break; + case "MEDIA_ALBUM": + case 1: + m.associationType = 1; + break; + case "BOT_PLUGIN": + case 2: + m.associationType = 2; + break; + case "EVENT_COVER_IMAGE": + case 3: + m.associationType = 3; + break; + case "STATUS_POLL": + case 4: + m.associationType = 4; + break; + case "HD_VIDEO_DUAL_UPLOAD": + case 5: + m.associationType = 5; + break; + case "STATUS_EXTERNAL_RESHARE": + case 6: + m.associationType = 6; + break; + case "MEDIA_POLL": + case 7: + m.associationType = 7; + break; + case "STATUS_ADD_YOURS": + case 8: + m.associationType = 8; + break; + case "STATUS_NOTIFICATION": + case 9: + m.associationType = 9; + break; + case "HD_IMAGE_DUAL_UPLOAD": + case 10: + m.associationType = 10; + break; + case "STICKER_ANNOTATION": + case 11: + m.associationType = 11; + break; + case "MOTION_PHOTO": + case 12: + m.associationType = 12; + break; + case "STATUS_LINK_ACTION": + case 13: + m.associationType = 13; + break; + case "VIEW_ALL_REPLIES": + case 14: + m.associationType = 14; + break; + case "STATUS_ADD_YOURS_AI_IMAGINE": + case 15: + m.associationType = 15; + break; + case "STATUS_QUESTION": + case 16: + m.associationType = 16; + break; + case "STATUS_ADD_YOURS_DIWALI": + case 17: + m.associationType = 17; + break; + case "STATUS_REACTION": + case 18: + m.associationType = 18; + break; + case "HEVC_VIDEO_DUAL_UPLOAD": + case 19: + m.associationType = 19; + break; + } + if (d.parentMessageKey != null) { + if (typeof d.parentMessageKey !== "object") + throw TypeError(".proto.MessageAssociation.parentMessageKey: object expected"); + m.parentMessageKey = $root.proto.MessageKey.fromObject(d.parentMessageKey); + } + if (d.messageIndex != null) { + m.messageIndex = d.messageIndex | 0; + } + return m; + }; + + MessageAssociation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.associationType != null && m.hasOwnProperty("associationType")) { + d.associationType = o.enums === String ? $root.proto.MessageAssociation.AssociationType[m.associationType] === undefined ? m.associationType : $root.proto.MessageAssociation.AssociationType[m.associationType] : m.associationType; + if (o.oneofs) + d._associationType = "associationType"; + } + if (m.parentMessageKey != null && m.hasOwnProperty("parentMessageKey")) { + d.parentMessageKey = $root.proto.MessageKey.toObject(m.parentMessageKey, o); + if (o.oneofs) + d._parentMessageKey = "parentMessageKey"; + } + if (m.messageIndex != null && m.hasOwnProperty("messageIndex")) { + d.messageIndex = m.messageIndex; + if (o.oneofs) + d._messageIndex = "messageIndex"; + } + return d; + }; + + MessageAssociation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageAssociation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MessageAssociation"; + }; + + MessageAssociation.AssociationType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "MEDIA_ALBUM"] = 1; + values[valuesById[2] = "BOT_PLUGIN"] = 2; + values[valuesById[3] = "EVENT_COVER_IMAGE"] = 3; + values[valuesById[4] = "STATUS_POLL"] = 4; + values[valuesById[5] = "HD_VIDEO_DUAL_UPLOAD"] = 5; + values[valuesById[6] = "STATUS_EXTERNAL_RESHARE"] = 6; + values[valuesById[7] = "MEDIA_POLL"] = 7; + values[valuesById[8] = "STATUS_ADD_YOURS"] = 8; + values[valuesById[9] = "STATUS_NOTIFICATION"] = 9; + values[valuesById[10] = "HD_IMAGE_DUAL_UPLOAD"] = 10; + values[valuesById[11] = "STICKER_ANNOTATION"] = 11; + values[valuesById[12] = "MOTION_PHOTO"] = 12; + values[valuesById[13] = "STATUS_LINK_ACTION"] = 13; + values[valuesById[14] = "VIEW_ALL_REPLIES"] = 14; + values[valuesById[15] = "STATUS_ADD_YOURS_AI_IMAGINE"] = 15; + values[valuesById[16] = "STATUS_QUESTION"] = 16; + values[valuesById[17] = "STATUS_ADD_YOURS_DIWALI"] = 17; + values[valuesById[18] = "STATUS_REACTION"] = 18; + values[valuesById[19] = "HEVC_VIDEO_DUAL_UPLOAD"] = 19; + return values; + })(); + + return MessageAssociation; + })(); + + proto.MessageContextInfo = (function() { + + function MessageContextInfo(p) { + this.threadId = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageContextInfo.prototype.deviceListMetadata = null; + MessageContextInfo.prototype.deviceListMetadataVersion = null; + MessageContextInfo.prototype.messageSecret = null; + MessageContextInfo.prototype.paddingBytes = null; + MessageContextInfo.prototype.messageAddOnDurationInSecs = null; + MessageContextInfo.prototype.botMessageSecret = null; + MessageContextInfo.prototype.botMetadata = null; + MessageContextInfo.prototype.reportingTokenVersion = null; + MessageContextInfo.prototype.messageAddOnExpiryType = null; + MessageContextInfo.prototype.messageAssociation = null; + MessageContextInfo.prototype.capiCreatedGroup = null; + MessageContextInfo.prototype.supportPayload = null; + MessageContextInfo.prototype.limitSharing = null; + MessageContextInfo.prototype.limitSharingV2 = null; + MessageContextInfo.prototype.threadId = $util.emptyArray; + MessageContextInfo.prototype.weblinkRenderConfig = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_deviceListMetadata", { + get: $util.oneOfGetter($oneOfFields = ["deviceListMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_deviceListMetadataVersion", { + get: $util.oneOfGetter($oneOfFields = ["deviceListMetadataVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_messageSecret", { + get: $util.oneOfGetter($oneOfFields = ["messageSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_paddingBytes", { + get: $util.oneOfGetter($oneOfFields = ["paddingBytes"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_messageAddOnDurationInSecs", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOnDurationInSecs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_botMessageSecret", { + get: $util.oneOfGetter($oneOfFields = ["botMessageSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_botMetadata", { + get: $util.oneOfGetter($oneOfFields = ["botMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_reportingTokenVersion", { + get: $util.oneOfGetter($oneOfFields = ["reportingTokenVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_messageAddOnExpiryType", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOnExpiryType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_messageAssociation", { + get: $util.oneOfGetter($oneOfFields = ["messageAssociation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_capiCreatedGroup", { + get: $util.oneOfGetter($oneOfFields = ["capiCreatedGroup"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_supportPayload", { + get: $util.oneOfGetter($oneOfFields = ["supportPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_limitSharing", { + get: $util.oneOfGetter($oneOfFields = ["limitSharing"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_limitSharingV2", { + get: $util.oneOfGetter($oneOfFields = ["limitSharingV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageContextInfo.prototype, "_weblinkRenderConfig", { + get: $util.oneOfGetter($oneOfFields = ["weblinkRenderConfig"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageContextInfo.create = function create(properties) { + return new MessageContextInfo(properties); + }; + + MessageContextInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.deviceListMetadata != null && Object.hasOwnProperty.call(m, "deviceListMetadata")) + $root.proto.DeviceListMetadata.encode(m.deviceListMetadata, w.uint32(10).fork()).ldelim(); + if (m.deviceListMetadataVersion != null && Object.hasOwnProperty.call(m, "deviceListMetadataVersion")) + w.uint32(16).int32(m.deviceListMetadataVersion); + if (m.messageSecret != null && Object.hasOwnProperty.call(m, "messageSecret")) + w.uint32(26).bytes(m.messageSecret); + if (m.paddingBytes != null && Object.hasOwnProperty.call(m, "paddingBytes")) + w.uint32(34).bytes(m.paddingBytes); + if (m.messageAddOnDurationInSecs != null && Object.hasOwnProperty.call(m, "messageAddOnDurationInSecs")) + w.uint32(40).uint32(m.messageAddOnDurationInSecs); + if (m.botMessageSecret != null && Object.hasOwnProperty.call(m, "botMessageSecret")) + w.uint32(50).bytes(m.botMessageSecret); + if (m.botMetadata != null && Object.hasOwnProperty.call(m, "botMetadata")) + $root.proto.BotMetadata.encode(m.botMetadata, w.uint32(58).fork()).ldelim(); + if (m.reportingTokenVersion != null && Object.hasOwnProperty.call(m, "reportingTokenVersion")) + w.uint32(64).int32(m.reportingTokenVersion); + if (m.messageAddOnExpiryType != null && Object.hasOwnProperty.call(m, "messageAddOnExpiryType")) + w.uint32(72).int32(m.messageAddOnExpiryType); + if (m.messageAssociation != null && Object.hasOwnProperty.call(m, "messageAssociation")) + $root.proto.MessageAssociation.encode(m.messageAssociation, w.uint32(82).fork()).ldelim(); + if (m.capiCreatedGroup != null && Object.hasOwnProperty.call(m, "capiCreatedGroup")) + w.uint32(88).bool(m.capiCreatedGroup); + if (m.supportPayload != null && Object.hasOwnProperty.call(m, "supportPayload")) + w.uint32(98).string(m.supportPayload); + if (m.limitSharing != null && Object.hasOwnProperty.call(m, "limitSharing")) + $root.proto.LimitSharing.encode(m.limitSharing, w.uint32(106).fork()).ldelim(); + if (m.limitSharingV2 != null && Object.hasOwnProperty.call(m, "limitSharingV2")) + $root.proto.LimitSharing.encode(m.limitSharingV2, w.uint32(114).fork()).ldelim(); + if (m.threadId != null && m.threadId.length) { + for (var i = 0; i < m.threadId.length; ++i) + $root.proto.ThreadID.encode(m.threadId[i], w.uint32(122).fork()).ldelim(); + } + if (m.weblinkRenderConfig != null && Object.hasOwnProperty.call(m, "weblinkRenderConfig")) + w.uint32(128).int32(m.weblinkRenderConfig); + return w; + }; + + MessageContextInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MessageContextInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.deviceListMetadata = $root.proto.DeviceListMetadata.decode(r, r.uint32()); + break; + } + case 2: { + m.deviceListMetadataVersion = r.int32(); + break; + } + case 3: { + m.messageSecret = r.bytes(); + break; + } + case 4: { + m.paddingBytes = r.bytes(); + break; + } + case 5: { + m.messageAddOnDurationInSecs = r.uint32(); + break; + } + case 6: { + m.botMessageSecret = r.bytes(); + break; + } + case 7: { + m.botMetadata = $root.proto.BotMetadata.decode(r, r.uint32()); + break; + } + case 8: { + m.reportingTokenVersion = r.int32(); + break; + } + case 9: { + m.messageAddOnExpiryType = r.int32(); + break; + } + case 10: { + m.messageAssociation = $root.proto.MessageAssociation.decode(r, r.uint32()); + break; + } + case 11: { + m.capiCreatedGroup = r.bool(); + break; + } + case 12: { + m.supportPayload = r.string(); + break; + } + case 13: { + m.limitSharing = $root.proto.LimitSharing.decode(r, r.uint32()); + break; + } + case 14: { + m.limitSharingV2 = $root.proto.LimitSharing.decode(r, r.uint32()); + break; + } + case 15: { + if (!(m.threadId && m.threadId.length)) + m.threadId = []; + m.threadId.push($root.proto.ThreadID.decode(r, r.uint32())); + break; + } + case 16: { + m.weblinkRenderConfig = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageContextInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MessageContextInfo) + return d; + var m = new $root.proto.MessageContextInfo(); + if (d.deviceListMetadata != null) { + if (typeof d.deviceListMetadata !== "object") + throw TypeError(".proto.MessageContextInfo.deviceListMetadata: object expected"); + m.deviceListMetadata = $root.proto.DeviceListMetadata.fromObject(d.deviceListMetadata); + } + if (d.deviceListMetadataVersion != null) { + m.deviceListMetadataVersion = d.deviceListMetadataVersion | 0; + } + if (d.messageSecret != null) { + if (typeof d.messageSecret === "string") + $util.base64.decode(d.messageSecret, m.messageSecret = $util.newBuffer($util.base64.length(d.messageSecret)), 0); + else if (d.messageSecret.length >= 0) + m.messageSecret = d.messageSecret; + } + if (d.paddingBytes != null) { + if (typeof d.paddingBytes === "string") + $util.base64.decode(d.paddingBytes, m.paddingBytes = $util.newBuffer($util.base64.length(d.paddingBytes)), 0); + else if (d.paddingBytes.length >= 0) + m.paddingBytes = d.paddingBytes; + } + if (d.messageAddOnDurationInSecs != null) { + m.messageAddOnDurationInSecs = d.messageAddOnDurationInSecs >>> 0; + } + if (d.botMessageSecret != null) { + if (typeof d.botMessageSecret === "string") + $util.base64.decode(d.botMessageSecret, m.botMessageSecret = $util.newBuffer($util.base64.length(d.botMessageSecret)), 0); + else if (d.botMessageSecret.length >= 0) + m.botMessageSecret = d.botMessageSecret; + } + if (d.botMetadata != null) { + if (typeof d.botMetadata !== "object") + throw TypeError(".proto.MessageContextInfo.botMetadata: object expected"); + m.botMetadata = $root.proto.BotMetadata.fromObject(d.botMetadata); + } + if (d.reportingTokenVersion != null) { + m.reportingTokenVersion = d.reportingTokenVersion | 0; + } + switch (d.messageAddOnExpiryType) { + default: + if (typeof d.messageAddOnExpiryType === "number") { + m.messageAddOnExpiryType = d.messageAddOnExpiryType; + break; + } + break; + case "STATIC": + case 1: + m.messageAddOnExpiryType = 1; + break; + case "DEPENDENT_ON_PARENT": + case 2: + m.messageAddOnExpiryType = 2; + break; + } + if (d.messageAssociation != null) { + if (typeof d.messageAssociation !== "object") + throw TypeError(".proto.MessageContextInfo.messageAssociation: object expected"); + m.messageAssociation = $root.proto.MessageAssociation.fromObject(d.messageAssociation); + } + if (d.capiCreatedGroup != null) { + m.capiCreatedGroup = Boolean(d.capiCreatedGroup); + } + if (d.supportPayload != null) { + m.supportPayload = String(d.supportPayload); + } + if (d.limitSharing != null) { + if (typeof d.limitSharing !== "object") + throw TypeError(".proto.MessageContextInfo.limitSharing: object expected"); + m.limitSharing = $root.proto.LimitSharing.fromObject(d.limitSharing); + } + if (d.limitSharingV2 != null) { + if (typeof d.limitSharingV2 !== "object") + throw TypeError(".proto.MessageContextInfo.limitSharingV2: object expected"); + m.limitSharingV2 = $root.proto.LimitSharing.fromObject(d.limitSharingV2); + } + if (d.threadId) { + if (!Array.isArray(d.threadId)) + throw TypeError(".proto.MessageContextInfo.threadId: array expected"); + m.threadId = []; + for (var i = 0; i < d.threadId.length; ++i) { + if (typeof d.threadId[i] !== "object") + throw TypeError(".proto.MessageContextInfo.threadId: object expected"); + m.threadId[i] = $root.proto.ThreadID.fromObject(d.threadId[i]); + } + } + switch (d.weblinkRenderConfig) { + default: + if (typeof d.weblinkRenderConfig === "number") { + m.weblinkRenderConfig = d.weblinkRenderConfig; + break; + } + break; + case "WEBVIEW": + case 0: + m.weblinkRenderConfig = 0; + break; + case "SYSTEM": + case 1: + m.weblinkRenderConfig = 1; + break; + } + return m; + }; + + MessageContextInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.threadId = []; + } + if (m.deviceListMetadata != null && m.hasOwnProperty("deviceListMetadata")) { + d.deviceListMetadata = $root.proto.DeviceListMetadata.toObject(m.deviceListMetadata, o); + if (o.oneofs) + d._deviceListMetadata = "deviceListMetadata"; + } + if (m.deviceListMetadataVersion != null && m.hasOwnProperty("deviceListMetadataVersion")) { + d.deviceListMetadataVersion = m.deviceListMetadataVersion; + if (o.oneofs) + d._deviceListMetadataVersion = "deviceListMetadataVersion"; + } + if (m.messageSecret != null && m.hasOwnProperty("messageSecret")) { + d.messageSecret = o.bytes === String ? $util.base64.encode(m.messageSecret, 0, m.messageSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.messageSecret) : m.messageSecret; + if (o.oneofs) + d._messageSecret = "messageSecret"; + } + if (m.paddingBytes != null && m.hasOwnProperty("paddingBytes")) { + d.paddingBytes = o.bytes === String ? $util.base64.encode(m.paddingBytes, 0, m.paddingBytes.length) : o.bytes === Array ? Array.prototype.slice.call(m.paddingBytes) : m.paddingBytes; + if (o.oneofs) + d._paddingBytes = "paddingBytes"; + } + if (m.messageAddOnDurationInSecs != null && m.hasOwnProperty("messageAddOnDurationInSecs")) { + d.messageAddOnDurationInSecs = m.messageAddOnDurationInSecs; + if (o.oneofs) + d._messageAddOnDurationInSecs = "messageAddOnDurationInSecs"; + } + if (m.botMessageSecret != null && m.hasOwnProperty("botMessageSecret")) { + d.botMessageSecret = o.bytes === String ? $util.base64.encode(m.botMessageSecret, 0, m.botMessageSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.botMessageSecret) : m.botMessageSecret; + if (o.oneofs) + d._botMessageSecret = "botMessageSecret"; + } + if (m.botMetadata != null && m.hasOwnProperty("botMetadata")) { + d.botMetadata = $root.proto.BotMetadata.toObject(m.botMetadata, o); + if (o.oneofs) + d._botMetadata = "botMetadata"; + } + if (m.reportingTokenVersion != null && m.hasOwnProperty("reportingTokenVersion")) { + d.reportingTokenVersion = m.reportingTokenVersion; + if (o.oneofs) + d._reportingTokenVersion = "reportingTokenVersion"; + } + if (m.messageAddOnExpiryType != null && m.hasOwnProperty("messageAddOnExpiryType")) { + d.messageAddOnExpiryType = o.enums === String ? $root.proto.MessageContextInfo.MessageAddonExpiryType[m.messageAddOnExpiryType] === undefined ? m.messageAddOnExpiryType : $root.proto.MessageContextInfo.MessageAddonExpiryType[m.messageAddOnExpiryType] : m.messageAddOnExpiryType; + if (o.oneofs) + d._messageAddOnExpiryType = "messageAddOnExpiryType"; + } + if (m.messageAssociation != null && m.hasOwnProperty("messageAssociation")) { + d.messageAssociation = $root.proto.MessageAssociation.toObject(m.messageAssociation, o); + if (o.oneofs) + d._messageAssociation = "messageAssociation"; + } + if (m.capiCreatedGroup != null && m.hasOwnProperty("capiCreatedGroup")) { + d.capiCreatedGroup = m.capiCreatedGroup; + if (o.oneofs) + d._capiCreatedGroup = "capiCreatedGroup"; + } + if (m.supportPayload != null && m.hasOwnProperty("supportPayload")) { + d.supportPayload = m.supportPayload; + if (o.oneofs) + d._supportPayload = "supportPayload"; + } + if (m.limitSharing != null && m.hasOwnProperty("limitSharing")) { + d.limitSharing = $root.proto.LimitSharing.toObject(m.limitSharing, o); + if (o.oneofs) + d._limitSharing = "limitSharing"; + } + if (m.limitSharingV2 != null && m.hasOwnProperty("limitSharingV2")) { + d.limitSharingV2 = $root.proto.LimitSharing.toObject(m.limitSharingV2, o); + if (o.oneofs) + d._limitSharingV2 = "limitSharingV2"; + } + if (m.threadId && m.threadId.length) { + d.threadId = []; + for (var j = 0; j < m.threadId.length; ++j) { + d.threadId[j] = $root.proto.ThreadID.toObject(m.threadId[j], o); + } + } + if (m.weblinkRenderConfig != null && m.hasOwnProperty("weblinkRenderConfig")) { + d.weblinkRenderConfig = o.enums === String ? $root.proto.WebLinkRenderConfig[m.weblinkRenderConfig] === undefined ? m.weblinkRenderConfig : $root.proto.WebLinkRenderConfig[m.weblinkRenderConfig] : m.weblinkRenderConfig; + if (o.oneofs) + d._weblinkRenderConfig = "weblinkRenderConfig"; + } + return d; + }; + + MessageContextInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageContextInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MessageContextInfo"; + }; + + MessageContextInfo.MessageAddonExpiryType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "STATIC"] = 1; + values[valuesById[2] = "DEPENDENT_ON_PARENT"] = 2; + return values; + })(); + + return MessageContextInfo; + })(); + + proto.MessageKey = (function() { + + function MessageKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageKey.prototype.remoteJid = null; + MessageKey.prototype.fromMe = null; + MessageKey.prototype.id = null; + MessageKey.prototype.participant = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_remoteJid", { + get: $util.oneOfGetter($oneOfFields = ["remoteJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_fromMe", { + get: $util.oneOfGetter($oneOfFields = ["fromMe"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_participant", { + get: $util.oneOfGetter($oneOfFields = ["participant"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageKey.create = function create(properties) { + return new MessageKey(properties); + }; + + MessageKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.remoteJid != null && Object.hasOwnProperty.call(m, "remoteJid")) + w.uint32(10).string(m.remoteJid); + if (m.fromMe != null && Object.hasOwnProperty.call(m, "fromMe")) + w.uint32(16).bool(m.fromMe); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(26).string(m.id); + if (m.participant != null && Object.hasOwnProperty.call(m, "participant")) + w.uint32(34).string(m.participant); + return w; + }; + + MessageKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MessageKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.remoteJid = r.string(); + break; + } + case 2: { + m.fromMe = r.bool(); + break; + } + case 3: { + m.id = r.string(); + break; + } + case 4: { + m.participant = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MessageKey) + return d; + var m = new $root.proto.MessageKey(); + if (d.remoteJid != null) { + m.remoteJid = String(d.remoteJid); + } + if (d.fromMe != null) { + m.fromMe = Boolean(d.fromMe); + } + if (d.id != null) { + m.id = String(d.id); + } + if (d.participant != null) { + m.participant = String(d.participant); + } + return m; + }; + + MessageKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.remoteJid != null && m.hasOwnProperty("remoteJid")) { + d.remoteJid = m.remoteJid; + if (o.oneofs) + d._remoteJid = "remoteJid"; + } + if (m.fromMe != null && m.hasOwnProperty("fromMe")) { + d.fromMe = m.fromMe; + if (o.oneofs) + d._fromMe = "fromMe"; + } + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.participant != null && m.hasOwnProperty("participant")) { + d.participant = m.participant; + if (o.oneofs) + d._participant = "participant"; + } + return d; + }; + + MessageKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MessageKey"; + }; + + return MessageKey; + })(); + + proto.MessageSecretMessage = (function() { + + function MessageSecretMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageSecretMessage.prototype.version = null; + MessageSecretMessage.prototype.encIv = null; + MessageSecretMessage.prototype.encPayload = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageSecretMessage.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageSecretMessage.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageSecretMessage.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageSecretMessage.create = function create(properties) { + return new MessageSecretMessage(properties); + }; + + MessageSecretMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(13).sfixed32(m.version); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(18).bytes(m.encIv); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(26).bytes(m.encPayload); + return w; + }; + + MessageSecretMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MessageSecretMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.version = r.sfixed32(); + break; + } + case 2: { + m.encIv = r.bytes(); + break; + } + case 3: { + m.encPayload = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageSecretMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MessageSecretMessage) + return d; + var m = new $root.proto.MessageSecretMessage(); + if (d.version != null) { + m.version = d.version | 0; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + return m; + }; + + MessageSecretMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.version != null && m.hasOwnProperty("version")) { + d.version = m.version; + if (o.oneofs) + d._version = "version"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + return d; + }; + + MessageSecretMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageSecretMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MessageSecretMessage"; + }; + + return MessageSecretMessage; + })(); + + proto.Money = (function() { + + function Money(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Money.prototype.value = null; + Money.prototype.offset = null; + Money.prototype.currencyCode = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Money.prototype, "_value", { + get: $util.oneOfGetter($oneOfFields = ["value"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Money.prototype, "_offset", { + get: $util.oneOfGetter($oneOfFields = ["offset"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Money.prototype, "_currencyCode", { + get: $util.oneOfGetter($oneOfFields = ["currencyCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Money.create = function create(properties) { + return new Money(properties); + }; + + Money.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.value != null && Object.hasOwnProperty.call(m, "value")) + w.uint32(8).int64(m.value); + if (m.offset != null && Object.hasOwnProperty.call(m, "offset")) + w.uint32(16).uint32(m.offset); + if (m.currencyCode != null && Object.hasOwnProperty.call(m, "currencyCode")) + w.uint32(26).string(m.currencyCode); + return w; + }; + + Money.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Money(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.value = r.int64(); + break; + } + case 2: { + m.offset = r.uint32(); + break; + } + case 3: { + m.currencyCode = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Money.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Money) + return d; + var m = new $root.proto.Money(); + if (d.value != null) { + if ($util.Long) + (m.value = $util.Long.fromValue(d.value)).unsigned = false; + else if (typeof d.value === "string") + m.value = parseInt(d.value, 10); + else if (typeof d.value === "number") + m.value = d.value; + else if (typeof d.value === "object") + m.value = new $util.LongBits(d.value.low >>> 0, d.value.high >>> 0).toNumber(); + } + if (d.offset != null) { + m.offset = d.offset >>> 0; + } + if (d.currencyCode != null) { + m.currencyCode = String(d.currencyCode); + } + return m; + }; + + Money.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.value != null && m.hasOwnProperty("value")) { + if (typeof m.value === "number") + d.value = o.longs === String ? String(m.value) : m.value; + else + d.value = o.longs === String ? longToString(m.value) : o.longs === Number ? longToNumber(m.value) : m.value; + if (o.oneofs) + d._value = "value"; + } + if (m.offset != null && m.hasOwnProperty("offset")) { + d.offset = m.offset; + if (o.oneofs) + d._offset = "offset"; + } + if (m.currencyCode != null && m.hasOwnProperty("currencyCode")) { + d.currencyCode = m.currencyCode; + if (o.oneofs) + d._currencyCode = "currencyCode"; + } + return d; + }; + + Money.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Money.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Money"; + }; + + return Money; + })(); + + proto.MsgOpaqueData = (function() { + + function MsgOpaqueData(p) { + this.pollOptions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MsgOpaqueData.prototype.body = null; + MsgOpaqueData.prototype.caption = null; + MsgOpaqueData.prototype.lng = null; + MsgOpaqueData.prototype.isLive = null; + MsgOpaqueData.prototype.lat = null; + MsgOpaqueData.prototype.paymentAmount1000 = null; + MsgOpaqueData.prototype.paymentNoteMsgBody = null; + MsgOpaqueData.prototype.matchedText = null; + MsgOpaqueData.prototype.title = null; + MsgOpaqueData.prototype.description = null; + MsgOpaqueData.prototype.futureproofBuffer = null; + MsgOpaqueData.prototype.clientUrl = null; + MsgOpaqueData.prototype.loc = null; + MsgOpaqueData.prototype.pollName = null; + MsgOpaqueData.prototype.pollOptions = $util.emptyArray; + MsgOpaqueData.prototype.pollSelectableOptionsCount = null; + MsgOpaqueData.prototype.messageSecret = null; + MsgOpaqueData.prototype.originalSelfAuthor = null; + MsgOpaqueData.prototype.senderTimestampMs = null; + MsgOpaqueData.prototype.pollUpdateParentKey = null; + MsgOpaqueData.prototype.encPollVote = null; + MsgOpaqueData.prototype.isSentCagPollCreation = null; + MsgOpaqueData.prototype.pollContentType = null; + MsgOpaqueData.prototype.pollType = null; + MsgOpaqueData.prototype.correctOptionIndex = null; + MsgOpaqueData.prototype.pollVotesSnapshot = null; + MsgOpaqueData.prototype.encReactionTargetMessageKey = null; + MsgOpaqueData.prototype.encReactionEncPayload = null; + MsgOpaqueData.prototype.encReactionEncIv = null; + MsgOpaqueData.prototype.botMessageSecret = null; + MsgOpaqueData.prototype.targetMessageKey = null; + MsgOpaqueData.prototype.encPayload = null; + MsgOpaqueData.prototype.encIv = null; + MsgOpaqueData.prototype.eventName = null; + MsgOpaqueData.prototype.isEventCanceled = null; + MsgOpaqueData.prototype.eventDescription = null; + MsgOpaqueData.prototype.eventJoinLink = null; + MsgOpaqueData.prototype.eventStartTime = null; + MsgOpaqueData.prototype.eventLocation = null; + MsgOpaqueData.prototype.eventEndTime = null; + MsgOpaqueData.prototype.eventIsScheduledCall = null; + MsgOpaqueData.prototype.eventExtraGuestsAllowed = null; + MsgOpaqueData.prototype.plainProtobufBytes = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_body", { + get: $util.oneOfGetter($oneOfFields = ["body"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_caption", { + get: $util.oneOfGetter($oneOfFields = ["caption"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_lng", { + get: $util.oneOfGetter($oneOfFields = ["lng"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_isLive", { + get: $util.oneOfGetter($oneOfFields = ["isLive"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_lat", { + get: $util.oneOfGetter($oneOfFields = ["lat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_paymentAmount1000", { + get: $util.oneOfGetter($oneOfFields = ["paymentAmount1000"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_paymentNoteMsgBody", { + get: $util.oneOfGetter($oneOfFields = ["paymentNoteMsgBody"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_matchedText", { + get: $util.oneOfGetter($oneOfFields = ["matchedText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_description", { + get: $util.oneOfGetter($oneOfFields = ["description"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_futureproofBuffer", { + get: $util.oneOfGetter($oneOfFields = ["futureproofBuffer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_clientUrl", { + get: $util.oneOfGetter($oneOfFields = ["clientUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_loc", { + get: $util.oneOfGetter($oneOfFields = ["loc"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_pollName", { + get: $util.oneOfGetter($oneOfFields = ["pollName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_pollSelectableOptionsCount", { + get: $util.oneOfGetter($oneOfFields = ["pollSelectableOptionsCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_messageSecret", { + get: $util.oneOfGetter($oneOfFields = ["messageSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_originalSelfAuthor", { + get: $util.oneOfGetter($oneOfFields = ["originalSelfAuthor"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_pollUpdateParentKey", { + get: $util.oneOfGetter($oneOfFields = ["pollUpdateParentKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_encPollVote", { + get: $util.oneOfGetter($oneOfFields = ["encPollVote"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_isSentCagPollCreation", { + get: $util.oneOfGetter($oneOfFields = ["isSentCagPollCreation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_pollContentType", { + get: $util.oneOfGetter($oneOfFields = ["pollContentType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_pollType", { + get: $util.oneOfGetter($oneOfFields = ["pollType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_correctOptionIndex", { + get: $util.oneOfGetter($oneOfFields = ["correctOptionIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_pollVotesSnapshot", { + get: $util.oneOfGetter($oneOfFields = ["pollVotesSnapshot"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_encReactionTargetMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["encReactionTargetMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_encReactionEncPayload", { + get: $util.oneOfGetter($oneOfFields = ["encReactionEncPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_encReactionEncIv", { + get: $util.oneOfGetter($oneOfFields = ["encReactionEncIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_botMessageSecret", { + get: $util.oneOfGetter($oneOfFields = ["botMessageSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_targetMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["targetMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventName", { + get: $util.oneOfGetter($oneOfFields = ["eventName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_isEventCanceled", { + get: $util.oneOfGetter($oneOfFields = ["isEventCanceled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventDescription", { + get: $util.oneOfGetter($oneOfFields = ["eventDescription"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventJoinLink", { + get: $util.oneOfGetter($oneOfFields = ["eventJoinLink"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventStartTime", { + get: $util.oneOfGetter($oneOfFields = ["eventStartTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventLocation", { + get: $util.oneOfGetter($oneOfFields = ["eventLocation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventEndTime", { + get: $util.oneOfGetter($oneOfFields = ["eventEndTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventIsScheduledCall", { + get: $util.oneOfGetter($oneOfFields = ["eventIsScheduledCall"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_eventExtraGuestsAllowed", { + get: $util.oneOfGetter($oneOfFields = ["eventExtraGuestsAllowed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgOpaqueData.prototype, "_plainProtobufBytes", { + get: $util.oneOfGetter($oneOfFields = ["plainProtobufBytes"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MsgOpaqueData.create = function create(properties) { + return new MsgOpaqueData(properties); + }; + + MsgOpaqueData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.body != null && Object.hasOwnProperty.call(m, "body")) + w.uint32(10).string(m.body); + if (m.caption != null && Object.hasOwnProperty.call(m, "caption")) + w.uint32(26).string(m.caption); + if (m.lng != null && Object.hasOwnProperty.call(m, "lng")) + w.uint32(41).double(m.lng); + if (m.isLive != null && Object.hasOwnProperty.call(m, "isLive")) + w.uint32(48).bool(m.isLive); + if (m.lat != null && Object.hasOwnProperty.call(m, "lat")) + w.uint32(57).double(m.lat); + if (m.paymentAmount1000 != null && Object.hasOwnProperty.call(m, "paymentAmount1000")) + w.uint32(64).int32(m.paymentAmount1000); + if (m.paymentNoteMsgBody != null && Object.hasOwnProperty.call(m, "paymentNoteMsgBody")) + w.uint32(74).string(m.paymentNoteMsgBody); + if (m.matchedText != null && Object.hasOwnProperty.call(m, "matchedText")) + w.uint32(90).string(m.matchedText); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(98).string(m.title); + if (m.description != null && Object.hasOwnProperty.call(m, "description")) + w.uint32(106).string(m.description); + if (m.futureproofBuffer != null && Object.hasOwnProperty.call(m, "futureproofBuffer")) + w.uint32(114).bytes(m.futureproofBuffer); + if (m.clientUrl != null && Object.hasOwnProperty.call(m, "clientUrl")) + w.uint32(122).string(m.clientUrl); + if (m.loc != null && Object.hasOwnProperty.call(m, "loc")) + w.uint32(130).string(m.loc); + if (m.pollName != null && Object.hasOwnProperty.call(m, "pollName")) + w.uint32(138).string(m.pollName); + if (m.pollOptions != null && m.pollOptions.length) { + for (var i = 0; i < m.pollOptions.length; ++i) + $root.proto.MsgOpaqueData.PollOption.encode(m.pollOptions[i], w.uint32(146).fork()).ldelim(); + } + if (m.pollSelectableOptionsCount != null && Object.hasOwnProperty.call(m, "pollSelectableOptionsCount")) + w.uint32(160).uint32(m.pollSelectableOptionsCount); + if (m.messageSecret != null && Object.hasOwnProperty.call(m, "messageSecret")) + w.uint32(170).bytes(m.messageSecret); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(176).int64(m.senderTimestampMs); + if (m.pollUpdateParentKey != null && Object.hasOwnProperty.call(m, "pollUpdateParentKey")) + w.uint32(186).string(m.pollUpdateParentKey); + if (m.encPollVote != null && Object.hasOwnProperty.call(m, "encPollVote")) + $root.proto.PollEncValue.encode(m.encPollVote, w.uint32(194).fork()).ldelim(); + if (m.encReactionTargetMessageKey != null && Object.hasOwnProperty.call(m, "encReactionTargetMessageKey")) + w.uint32(202).string(m.encReactionTargetMessageKey); + if (m.encReactionEncPayload != null && Object.hasOwnProperty.call(m, "encReactionEncPayload")) + w.uint32(210).bytes(m.encReactionEncPayload); + if (m.encReactionEncIv != null && Object.hasOwnProperty.call(m, "encReactionEncIv")) + w.uint32(218).bytes(m.encReactionEncIv); + if (m.isSentCagPollCreation != null && Object.hasOwnProperty.call(m, "isSentCagPollCreation")) + w.uint32(224).bool(m.isSentCagPollCreation); + if (m.botMessageSecret != null && Object.hasOwnProperty.call(m, "botMessageSecret")) + w.uint32(234).bytes(m.botMessageSecret); + if (m.targetMessageKey != null && Object.hasOwnProperty.call(m, "targetMessageKey")) + w.uint32(242).string(m.targetMessageKey); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(250).bytes(m.encPayload); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(258).bytes(m.encIv); + if (m.eventName != null && Object.hasOwnProperty.call(m, "eventName")) + w.uint32(266).string(m.eventName); + if (m.isEventCanceled != null && Object.hasOwnProperty.call(m, "isEventCanceled")) + w.uint32(272).bool(m.isEventCanceled); + if (m.eventDescription != null && Object.hasOwnProperty.call(m, "eventDescription")) + w.uint32(282).string(m.eventDescription); + if (m.eventJoinLink != null && Object.hasOwnProperty.call(m, "eventJoinLink")) + w.uint32(290).string(m.eventJoinLink); + if (m.eventStartTime != null && Object.hasOwnProperty.call(m, "eventStartTime")) + w.uint32(296).int64(m.eventStartTime); + if (m.eventLocation != null && Object.hasOwnProperty.call(m, "eventLocation")) + $root.proto.MsgOpaqueData.EventLocation.encode(m.eventLocation, w.uint32(306).fork()).ldelim(); + if (m.eventEndTime != null && Object.hasOwnProperty.call(m, "eventEndTime")) + w.uint32(320).int64(m.eventEndTime); + if (m.pollVotesSnapshot != null && Object.hasOwnProperty.call(m, "pollVotesSnapshot")) + $root.proto.MsgOpaqueData.PollVotesSnapshot.encode(m.pollVotesSnapshot, w.uint32(330).fork()).ldelim(); + if (m.pollContentType != null && Object.hasOwnProperty.call(m, "pollContentType")) + w.uint32(336).int32(m.pollContentType); + if (m.plainProtobufBytes != null && Object.hasOwnProperty.call(m, "plainProtobufBytes")) + w.uint32(346).bytes(m.plainProtobufBytes); + if (m.eventIsScheduledCall != null && Object.hasOwnProperty.call(m, "eventIsScheduledCall")) + w.uint32(352).bool(m.eventIsScheduledCall); + if (m.eventExtraGuestsAllowed != null && Object.hasOwnProperty.call(m, "eventExtraGuestsAllowed")) + w.uint32(360).bool(m.eventExtraGuestsAllowed); + if (m.pollType != null && Object.hasOwnProperty.call(m, "pollType")) + w.uint32(368).int32(m.pollType); + if (m.correctOptionIndex != null && Object.hasOwnProperty.call(m, "correctOptionIndex")) + w.uint32(376).int32(m.correctOptionIndex); + if (m.originalSelfAuthor != null && Object.hasOwnProperty.call(m, "originalSelfAuthor")) + w.uint32(410).string(m.originalSelfAuthor); + return w; + }; + + MsgOpaqueData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MsgOpaqueData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.body = r.string(); + break; + } + case 3: { + m.caption = r.string(); + break; + } + case 5: { + m.lng = r.double(); + break; + } + case 6: { + m.isLive = r.bool(); + break; + } + case 7: { + m.lat = r.double(); + break; + } + case 8: { + m.paymentAmount1000 = r.int32(); + break; + } + case 9: { + m.paymentNoteMsgBody = r.string(); + break; + } + case 11: { + m.matchedText = r.string(); + break; + } + case 12: { + m.title = r.string(); + break; + } + case 13: { + m.description = r.string(); + break; + } + case 14: { + m.futureproofBuffer = r.bytes(); + break; + } + case 15: { + m.clientUrl = r.string(); + break; + } + case 16: { + m.loc = r.string(); + break; + } + case 17: { + m.pollName = r.string(); + break; + } + case 18: { + if (!(m.pollOptions && m.pollOptions.length)) + m.pollOptions = []; + m.pollOptions.push($root.proto.MsgOpaqueData.PollOption.decode(r, r.uint32())); + break; + } + case 20: { + m.pollSelectableOptionsCount = r.uint32(); + break; + } + case 21: { + m.messageSecret = r.bytes(); + break; + } + case 51: { + m.originalSelfAuthor = r.string(); + break; + } + case 22: { + m.senderTimestampMs = r.int64(); + break; + } + case 23: { + m.pollUpdateParentKey = r.string(); + break; + } + case 24: { + m.encPollVote = $root.proto.PollEncValue.decode(r, r.uint32()); + break; + } + case 28: { + m.isSentCagPollCreation = r.bool(); + break; + } + case 42: { + m.pollContentType = r.int32(); + break; + } + case 46: { + m.pollType = r.int32(); + break; + } + case 47: { + m.correctOptionIndex = r.int32(); + break; + } + case 41: { + m.pollVotesSnapshot = $root.proto.MsgOpaqueData.PollVotesSnapshot.decode(r, r.uint32()); + break; + } + case 25: { + m.encReactionTargetMessageKey = r.string(); + break; + } + case 26: { + m.encReactionEncPayload = r.bytes(); + break; + } + case 27: { + m.encReactionEncIv = r.bytes(); + break; + } + case 29: { + m.botMessageSecret = r.bytes(); + break; + } + case 30: { + m.targetMessageKey = r.string(); + break; + } + case 31: { + m.encPayload = r.bytes(); + break; + } + case 32: { + m.encIv = r.bytes(); + break; + } + case 33: { + m.eventName = r.string(); + break; + } + case 34: { + m.isEventCanceled = r.bool(); + break; + } + case 35: { + m.eventDescription = r.string(); + break; + } + case 36: { + m.eventJoinLink = r.string(); + break; + } + case 37: { + m.eventStartTime = r.int64(); + break; + } + case 38: { + m.eventLocation = $root.proto.MsgOpaqueData.EventLocation.decode(r, r.uint32()); + break; + } + case 40: { + m.eventEndTime = r.int64(); + break; + } + case 44: { + m.eventIsScheduledCall = r.bool(); + break; + } + case 45: { + m.eventExtraGuestsAllowed = r.bool(); + break; + } + case 43: { + m.plainProtobufBytes = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MsgOpaqueData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MsgOpaqueData) + return d; + var m = new $root.proto.MsgOpaqueData(); + if (d.body != null) { + m.body = String(d.body); + } + if (d.caption != null) { + m.caption = String(d.caption); + } + if (d.lng != null) { + m.lng = Number(d.lng); + } + if (d.isLive != null) { + m.isLive = Boolean(d.isLive); + } + if (d.lat != null) { + m.lat = Number(d.lat); + } + if (d.paymentAmount1000 != null) { + m.paymentAmount1000 = d.paymentAmount1000 | 0; + } + if (d.paymentNoteMsgBody != null) { + m.paymentNoteMsgBody = String(d.paymentNoteMsgBody); + } + if (d.matchedText != null) { + m.matchedText = String(d.matchedText); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.description != null) { + m.description = String(d.description); + } + if (d.futureproofBuffer != null) { + if (typeof d.futureproofBuffer === "string") + $util.base64.decode(d.futureproofBuffer, m.futureproofBuffer = $util.newBuffer($util.base64.length(d.futureproofBuffer)), 0); + else if (d.futureproofBuffer.length >= 0) + m.futureproofBuffer = d.futureproofBuffer; + } + if (d.clientUrl != null) { + m.clientUrl = String(d.clientUrl); + } + if (d.loc != null) { + m.loc = String(d.loc); + } + if (d.pollName != null) { + m.pollName = String(d.pollName); + } + if (d.pollOptions) { + if (!Array.isArray(d.pollOptions)) + throw TypeError(".proto.MsgOpaqueData.pollOptions: array expected"); + m.pollOptions = []; + for (var i = 0; i < d.pollOptions.length; ++i) { + if (typeof d.pollOptions[i] !== "object") + throw TypeError(".proto.MsgOpaqueData.pollOptions: object expected"); + m.pollOptions[i] = $root.proto.MsgOpaqueData.PollOption.fromObject(d.pollOptions[i]); + } + } + if (d.pollSelectableOptionsCount != null) { + m.pollSelectableOptionsCount = d.pollSelectableOptionsCount >>> 0; + } + if (d.messageSecret != null) { + if (typeof d.messageSecret === "string") + $util.base64.decode(d.messageSecret, m.messageSecret = $util.newBuffer($util.base64.length(d.messageSecret)), 0); + else if (d.messageSecret.length >= 0) + m.messageSecret = d.messageSecret; + } + if (d.originalSelfAuthor != null) { + m.originalSelfAuthor = String(d.originalSelfAuthor); + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + if (d.pollUpdateParentKey != null) { + m.pollUpdateParentKey = String(d.pollUpdateParentKey); + } + if (d.encPollVote != null) { + if (typeof d.encPollVote !== "object") + throw TypeError(".proto.MsgOpaqueData.encPollVote: object expected"); + m.encPollVote = $root.proto.PollEncValue.fromObject(d.encPollVote); + } + if (d.isSentCagPollCreation != null) { + m.isSentCagPollCreation = Boolean(d.isSentCagPollCreation); + } + switch (d.pollContentType) { + default: + if (typeof d.pollContentType === "number") { + m.pollContentType = d.pollContentType; + break; + } + break; + case "UNKNOWN": + case 0: + m.pollContentType = 0; + break; + case "TEXT": + case 1: + m.pollContentType = 1; + break; + case "IMAGE": + case 2: + m.pollContentType = 2; + break; + } + switch (d.pollType) { + default: + if (typeof d.pollType === "number") { + m.pollType = d.pollType; + break; + } + break; + case "POLL": + case 0: + m.pollType = 0; + break; + case "QUIZ": + case 1: + m.pollType = 1; + break; + } + if (d.correctOptionIndex != null) { + m.correctOptionIndex = d.correctOptionIndex | 0; + } + if (d.pollVotesSnapshot != null) { + if (typeof d.pollVotesSnapshot !== "object") + throw TypeError(".proto.MsgOpaqueData.pollVotesSnapshot: object expected"); + m.pollVotesSnapshot = $root.proto.MsgOpaqueData.PollVotesSnapshot.fromObject(d.pollVotesSnapshot); + } + if (d.encReactionTargetMessageKey != null) { + m.encReactionTargetMessageKey = String(d.encReactionTargetMessageKey); + } + if (d.encReactionEncPayload != null) { + if (typeof d.encReactionEncPayload === "string") + $util.base64.decode(d.encReactionEncPayload, m.encReactionEncPayload = $util.newBuffer($util.base64.length(d.encReactionEncPayload)), 0); + else if (d.encReactionEncPayload.length >= 0) + m.encReactionEncPayload = d.encReactionEncPayload; + } + if (d.encReactionEncIv != null) { + if (typeof d.encReactionEncIv === "string") + $util.base64.decode(d.encReactionEncIv, m.encReactionEncIv = $util.newBuffer($util.base64.length(d.encReactionEncIv)), 0); + else if (d.encReactionEncIv.length >= 0) + m.encReactionEncIv = d.encReactionEncIv; + } + if (d.botMessageSecret != null) { + if (typeof d.botMessageSecret === "string") + $util.base64.decode(d.botMessageSecret, m.botMessageSecret = $util.newBuffer($util.base64.length(d.botMessageSecret)), 0); + else if (d.botMessageSecret.length >= 0) + m.botMessageSecret = d.botMessageSecret; + } + if (d.targetMessageKey != null) { + m.targetMessageKey = String(d.targetMessageKey); + } + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + if (d.eventName != null) { + m.eventName = String(d.eventName); + } + if (d.isEventCanceled != null) { + m.isEventCanceled = Boolean(d.isEventCanceled); + } + if (d.eventDescription != null) { + m.eventDescription = String(d.eventDescription); + } + if (d.eventJoinLink != null) { + m.eventJoinLink = String(d.eventJoinLink); + } + if (d.eventStartTime != null) { + if ($util.Long) + (m.eventStartTime = $util.Long.fromValue(d.eventStartTime)).unsigned = false; + else if (typeof d.eventStartTime === "string") + m.eventStartTime = parseInt(d.eventStartTime, 10); + else if (typeof d.eventStartTime === "number") + m.eventStartTime = d.eventStartTime; + else if (typeof d.eventStartTime === "object") + m.eventStartTime = new $util.LongBits(d.eventStartTime.low >>> 0, d.eventStartTime.high >>> 0).toNumber(); + } + if (d.eventLocation != null) { + if (typeof d.eventLocation !== "object") + throw TypeError(".proto.MsgOpaqueData.eventLocation: object expected"); + m.eventLocation = $root.proto.MsgOpaqueData.EventLocation.fromObject(d.eventLocation); + } + if (d.eventEndTime != null) { + if ($util.Long) + (m.eventEndTime = $util.Long.fromValue(d.eventEndTime)).unsigned = false; + else if (typeof d.eventEndTime === "string") + m.eventEndTime = parseInt(d.eventEndTime, 10); + else if (typeof d.eventEndTime === "number") + m.eventEndTime = d.eventEndTime; + else if (typeof d.eventEndTime === "object") + m.eventEndTime = new $util.LongBits(d.eventEndTime.low >>> 0, d.eventEndTime.high >>> 0).toNumber(); + } + if (d.eventIsScheduledCall != null) { + m.eventIsScheduledCall = Boolean(d.eventIsScheduledCall); + } + if (d.eventExtraGuestsAllowed != null) { + m.eventExtraGuestsAllowed = Boolean(d.eventExtraGuestsAllowed); + } + if (d.plainProtobufBytes != null) { + if (typeof d.plainProtobufBytes === "string") + $util.base64.decode(d.plainProtobufBytes, m.plainProtobufBytes = $util.newBuffer($util.base64.length(d.plainProtobufBytes)), 0); + else if (d.plainProtobufBytes.length >= 0) + m.plainProtobufBytes = d.plainProtobufBytes; + } + return m; + }; + + MsgOpaqueData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.pollOptions = []; + } + if (m.body != null && m.hasOwnProperty("body")) { + d.body = m.body; + if (o.oneofs) + d._body = "body"; + } + if (m.caption != null && m.hasOwnProperty("caption")) { + d.caption = m.caption; + if (o.oneofs) + d._caption = "caption"; + } + if (m.lng != null && m.hasOwnProperty("lng")) { + d.lng = o.json && !isFinite(m.lng) ? String(m.lng) : m.lng; + if (o.oneofs) + d._lng = "lng"; + } + if (m.isLive != null && m.hasOwnProperty("isLive")) { + d.isLive = m.isLive; + if (o.oneofs) + d._isLive = "isLive"; + } + if (m.lat != null && m.hasOwnProperty("lat")) { + d.lat = o.json && !isFinite(m.lat) ? String(m.lat) : m.lat; + if (o.oneofs) + d._lat = "lat"; + } + if (m.paymentAmount1000 != null && m.hasOwnProperty("paymentAmount1000")) { + d.paymentAmount1000 = m.paymentAmount1000; + if (o.oneofs) + d._paymentAmount1000 = "paymentAmount1000"; + } + if (m.paymentNoteMsgBody != null && m.hasOwnProperty("paymentNoteMsgBody")) { + d.paymentNoteMsgBody = m.paymentNoteMsgBody; + if (o.oneofs) + d._paymentNoteMsgBody = "paymentNoteMsgBody"; + } + if (m.matchedText != null && m.hasOwnProperty("matchedText")) { + d.matchedText = m.matchedText; + if (o.oneofs) + d._matchedText = "matchedText"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.description != null && m.hasOwnProperty("description")) { + d.description = m.description; + if (o.oneofs) + d._description = "description"; + } + if (m.futureproofBuffer != null && m.hasOwnProperty("futureproofBuffer")) { + d.futureproofBuffer = o.bytes === String ? $util.base64.encode(m.futureproofBuffer, 0, m.futureproofBuffer.length) : o.bytes === Array ? Array.prototype.slice.call(m.futureproofBuffer) : m.futureproofBuffer; + if (o.oneofs) + d._futureproofBuffer = "futureproofBuffer"; + } + if (m.clientUrl != null && m.hasOwnProperty("clientUrl")) { + d.clientUrl = m.clientUrl; + if (o.oneofs) + d._clientUrl = "clientUrl"; + } + if (m.loc != null && m.hasOwnProperty("loc")) { + d.loc = m.loc; + if (o.oneofs) + d._loc = "loc"; + } + if (m.pollName != null && m.hasOwnProperty("pollName")) { + d.pollName = m.pollName; + if (o.oneofs) + d._pollName = "pollName"; + } + if (m.pollOptions && m.pollOptions.length) { + d.pollOptions = []; + for (var j = 0; j < m.pollOptions.length; ++j) { + d.pollOptions[j] = $root.proto.MsgOpaqueData.PollOption.toObject(m.pollOptions[j], o); + } + } + if (m.pollSelectableOptionsCount != null && m.hasOwnProperty("pollSelectableOptionsCount")) { + d.pollSelectableOptionsCount = m.pollSelectableOptionsCount; + if (o.oneofs) + d._pollSelectableOptionsCount = "pollSelectableOptionsCount"; + } + if (m.messageSecret != null && m.hasOwnProperty("messageSecret")) { + d.messageSecret = o.bytes === String ? $util.base64.encode(m.messageSecret, 0, m.messageSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.messageSecret) : m.messageSecret; + if (o.oneofs) + d._messageSecret = "messageSecret"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + if (m.pollUpdateParentKey != null && m.hasOwnProperty("pollUpdateParentKey")) { + d.pollUpdateParentKey = m.pollUpdateParentKey; + if (o.oneofs) + d._pollUpdateParentKey = "pollUpdateParentKey"; + } + if (m.encPollVote != null && m.hasOwnProperty("encPollVote")) { + d.encPollVote = $root.proto.PollEncValue.toObject(m.encPollVote, o); + if (o.oneofs) + d._encPollVote = "encPollVote"; + } + if (m.encReactionTargetMessageKey != null && m.hasOwnProperty("encReactionTargetMessageKey")) { + d.encReactionTargetMessageKey = m.encReactionTargetMessageKey; + if (o.oneofs) + d._encReactionTargetMessageKey = "encReactionTargetMessageKey"; + } + if (m.encReactionEncPayload != null && m.hasOwnProperty("encReactionEncPayload")) { + d.encReactionEncPayload = o.bytes === String ? $util.base64.encode(m.encReactionEncPayload, 0, m.encReactionEncPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encReactionEncPayload) : m.encReactionEncPayload; + if (o.oneofs) + d._encReactionEncPayload = "encReactionEncPayload"; + } + if (m.encReactionEncIv != null && m.hasOwnProperty("encReactionEncIv")) { + d.encReactionEncIv = o.bytes === String ? $util.base64.encode(m.encReactionEncIv, 0, m.encReactionEncIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encReactionEncIv) : m.encReactionEncIv; + if (o.oneofs) + d._encReactionEncIv = "encReactionEncIv"; + } + if (m.isSentCagPollCreation != null && m.hasOwnProperty("isSentCagPollCreation")) { + d.isSentCagPollCreation = m.isSentCagPollCreation; + if (o.oneofs) + d._isSentCagPollCreation = "isSentCagPollCreation"; + } + if (m.botMessageSecret != null && m.hasOwnProperty("botMessageSecret")) { + d.botMessageSecret = o.bytes === String ? $util.base64.encode(m.botMessageSecret, 0, m.botMessageSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.botMessageSecret) : m.botMessageSecret; + if (o.oneofs) + d._botMessageSecret = "botMessageSecret"; + } + if (m.targetMessageKey != null && m.hasOwnProperty("targetMessageKey")) { + d.targetMessageKey = m.targetMessageKey; + if (o.oneofs) + d._targetMessageKey = "targetMessageKey"; + } + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + if (m.eventName != null && m.hasOwnProperty("eventName")) { + d.eventName = m.eventName; + if (o.oneofs) + d._eventName = "eventName"; + } + if (m.isEventCanceled != null && m.hasOwnProperty("isEventCanceled")) { + d.isEventCanceled = m.isEventCanceled; + if (o.oneofs) + d._isEventCanceled = "isEventCanceled"; + } + if (m.eventDescription != null && m.hasOwnProperty("eventDescription")) { + d.eventDescription = m.eventDescription; + if (o.oneofs) + d._eventDescription = "eventDescription"; + } + if (m.eventJoinLink != null && m.hasOwnProperty("eventJoinLink")) { + d.eventJoinLink = m.eventJoinLink; + if (o.oneofs) + d._eventJoinLink = "eventJoinLink"; + } + if (m.eventStartTime != null && m.hasOwnProperty("eventStartTime")) { + if (typeof m.eventStartTime === "number") + d.eventStartTime = o.longs === String ? String(m.eventStartTime) : m.eventStartTime; + else + d.eventStartTime = o.longs === String ? longToString(m.eventStartTime) : o.longs === Number ? longToNumber(m.eventStartTime) : m.eventStartTime; + if (o.oneofs) + d._eventStartTime = "eventStartTime"; + } + if (m.eventLocation != null && m.hasOwnProperty("eventLocation")) { + d.eventLocation = $root.proto.MsgOpaqueData.EventLocation.toObject(m.eventLocation, o); + if (o.oneofs) + d._eventLocation = "eventLocation"; + } + if (m.eventEndTime != null && m.hasOwnProperty("eventEndTime")) { + if (typeof m.eventEndTime === "number") + d.eventEndTime = o.longs === String ? String(m.eventEndTime) : m.eventEndTime; + else + d.eventEndTime = o.longs === String ? longToString(m.eventEndTime) : o.longs === Number ? longToNumber(m.eventEndTime) : m.eventEndTime; + if (o.oneofs) + d._eventEndTime = "eventEndTime"; + } + if (m.pollVotesSnapshot != null && m.hasOwnProperty("pollVotesSnapshot")) { + d.pollVotesSnapshot = $root.proto.MsgOpaqueData.PollVotesSnapshot.toObject(m.pollVotesSnapshot, o); + if (o.oneofs) + d._pollVotesSnapshot = "pollVotesSnapshot"; + } + if (m.pollContentType != null && m.hasOwnProperty("pollContentType")) { + d.pollContentType = o.enums === String ? $root.proto.MsgOpaqueData.PollContentType[m.pollContentType] === undefined ? m.pollContentType : $root.proto.MsgOpaqueData.PollContentType[m.pollContentType] : m.pollContentType; + if (o.oneofs) + d._pollContentType = "pollContentType"; + } + if (m.plainProtobufBytes != null && m.hasOwnProperty("plainProtobufBytes")) { + d.plainProtobufBytes = o.bytes === String ? $util.base64.encode(m.plainProtobufBytes, 0, m.plainProtobufBytes.length) : o.bytes === Array ? Array.prototype.slice.call(m.plainProtobufBytes) : m.plainProtobufBytes; + if (o.oneofs) + d._plainProtobufBytes = "plainProtobufBytes"; + } + if (m.eventIsScheduledCall != null && m.hasOwnProperty("eventIsScheduledCall")) { + d.eventIsScheduledCall = m.eventIsScheduledCall; + if (o.oneofs) + d._eventIsScheduledCall = "eventIsScheduledCall"; + } + if (m.eventExtraGuestsAllowed != null && m.hasOwnProperty("eventExtraGuestsAllowed")) { + d.eventExtraGuestsAllowed = m.eventExtraGuestsAllowed; + if (o.oneofs) + d._eventExtraGuestsAllowed = "eventExtraGuestsAllowed"; + } + if (m.pollType != null && m.hasOwnProperty("pollType")) { + d.pollType = o.enums === String ? $root.proto.MsgOpaqueData.PollType[m.pollType] === undefined ? m.pollType : $root.proto.MsgOpaqueData.PollType[m.pollType] : m.pollType; + if (o.oneofs) + d._pollType = "pollType"; + } + if (m.correctOptionIndex != null && m.hasOwnProperty("correctOptionIndex")) { + d.correctOptionIndex = m.correctOptionIndex; + if (o.oneofs) + d._correctOptionIndex = "correctOptionIndex"; + } + if (m.originalSelfAuthor != null && m.hasOwnProperty("originalSelfAuthor")) { + d.originalSelfAuthor = m.originalSelfAuthor; + if (o.oneofs) + d._originalSelfAuthor = "originalSelfAuthor"; + } + return d; + }; + + MsgOpaqueData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MsgOpaqueData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MsgOpaqueData"; + }; + + MsgOpaqueData.EventLocation = (function() { + + function EventLocation(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + EventLocation.prototype.degreesLatitude = null; + EventLocation.prototype.degreesLongitude = null; + EventLocation.prototype.name = null; + EventLocation.prototype.address = null; + EventLocation.prototype.url = null; + EventLocation.prototype.jpegThumbnail = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventLocation.prototype, "_degreesLatitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLatitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventLocation.prototype, "_degreesLongitude", { + get: $util.oneOfGetter($oneOfFields = ["degreesLongitude"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventLocation.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventLocation.prototype, "_address", { + get: $util.oneOfGetter($oneOfFields = ["address"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventLocation.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(EventLocation.prototype, "_jpegThumbnail", { + get: $util.oneOfGetter($oneOfFields = ["jpegThumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + EventLocation.create = function create(properties) { + return new EventLocation(properties); + }; + + EventLocation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.degreesLatitude != null && Object.hasOwnProperty.call(m, "degreesLatitude")) + w.uint32(9).double(m.degreesLatitude); + if (m.degreesLongitude != null && Object.hasOwnProperty.call(m, "degreesLongitude")) + w.uint32(17).double(m.degreesLongitude); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(26).string(m.name); + if (m.address != null && Object.hasOwnProperty.call(m, "address")) + w.uint32(34).string(m.address); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(42).string(m.url); + if (m.jpegThumbnail != null && Object.hasOwnProperty.call(m, "jpegThumbnail")) + w.uint32(50).bytes(m.jpegThumbnail); + return w; + }; + + EventLocation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MsgOpaqueData.EventLocation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.degreesLatitude = r.double(); + break; + } + case 2: { + m.degreesLongitude = r.double(); + break; + } + case 3: { + m.name = r.string(); + break; + } + case 4: { + m.address = r.string(); + break; + } + case 5: { + m.url = r.string(); + break; + } + case 6: { + m.jpegThumbnail = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + EventLocation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MsgOpaqueData.EventLocation) + return d; + var m = new $root.proto.MsgOpaqueData.EventLocation(); + if (d.degreesLatitude != null) { + m.degreesLatitude = Number(d.degreesLatitude); + } + if (d.degreesLongitude != null) { + m.degreesLongitude = Number(d.degreesLongitude); + } + if (d.name != null) { + m.name = String(d.name); + } + if (d.address != null) { + m.address = String(d.address); + } + if (d.url != null) { + m.url = String(d.url); + } + if (d.jpegThumbnail != null) { + if (typeof d.jpegThumbnail === "string") + $util.base64.decode(d.jpegThumbnail, m.jpegThumbnail = $util.newBuffer($util.base64.length(d.jpegThumbnail)), 0); + else if (d.jpegThumbnail.length >= 0) + m.jpegThumbnail = d.jpegThumbnail; + } + return m; + }; + + EventLocation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.degreesLatitude != null && m.hasOwnProperty("degreesLatitude")) { + d.degreesLatitude = o.json && !isFinite(m.degreesLatitude) ? String(m.degreesLatitude) : m.degreesLatitude; + if (o.oneofs) + d._degreesLatitude = "degreesLatitude"; + } + if (m.degreesLongitude != null && m.hasOwnProperty("degreesLongitude")) { + d.degreesLongitude = o.json && !isFinite(m.degreesLongitude) ? String(m.degreesLongitude) : m.degreesLongitude; + if (o.oneofs) + d._degreesLongitude = "degreesLongitude"; + } + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.address != null && m.hasOwnProperty("address")) { + d.address = m.address; + if (o.oneofs) + d._address = "address"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.jpegThumbnail != null && m.hasOwnProperty("jpegThumbnail")) { + d.jpegThumbnail = o.bytes === String ? $util.base64.encode(m.jpegThumbnail, 0, m.jpegThumbnail.length) : o.bytes === Array ? Array.prototype.slice.call(m.jpegThumbnail) : m.jpegThumbnail; + if (o.oneofs) + d._jpegThumbnail = "jpegThumbnail"; + } + return d; + }; + + EventLocation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + EventLocation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MsgOpaqueData.EventLocation"; + }; + + return EventLocation; + })(); + + MsgOpaqueData.PollContentType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "TEXT"] = 1; + values[valuesById[2] = "IMAGE"] = 2; + return values; + })(); + + MsgOpaqueData.PollOption = (function() { + + function PollOption(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollOption.prototype.name = null; + PollOption.prototype.hash = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollOption.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollOption.prototype, "_hash", { + get: $util.oneOfGetter($oneOfFields = ["hash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollOption.create = function create(properties) { + return new PollOption(properties); + }; + + PollOption.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.hash != null && Object.hasOwnProperty.call(m, "hash")) + w.uint32(18).string(m.hash); + return w; + }; + + PollOption.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MsgOpaqueData.PollOption(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + m.hash = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollOption.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MsgOpaqueData.PollOption) + return d; + var m = new $root.proto.MsgOpaqueData.PollOption(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.hash != null) { + m.hash = String(d.hash); + } + return m; + }; + + PollOption.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.hash != null && m.hasOwnProperty("hash")) { + d.hash = m.hash; + if (o.oneofs) + d._hash = "hash"; + } + return d; + }; + + PollOption.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollOption.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MsgOpaqueData.PollOption"; + }; + + return PollOption; + })(); + + MsgOpaqueData.PollType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "POLL"] = 0; + values[valuesById[1] = "QUIZ"] = 1; + return values; + })(); + + MsgOpaqueData.PollVoteSnapshot = (function() { + + function PollVoteSnapshot(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollVoteSnapshot.prototype.option = null; + PollVoteSnapshot.prototype.optionVoteCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollVoteSnapshot.prototype, "_option", { + get: $util.oneOfGetter($oneOfFields = ["option"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollVoteSnapshot.prototype, "_optionVoteCount", { + get: $util.oneOfGetter($oneOfFields = ["optionVoteCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollVoteSnapshot.create = function create(properties) { + return new PollVoteSnapshot(properties); + }; + + PollVoteSnapshot.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.option != null && Object.hasOwnProperty.call(m, "option")) + $root.proto.MsgOpaqueData.PollOption.encode(m.option, w.uint32(10).fork()).ldelim(); + if (m.optionVoteCount != null && Object.hasOwnProperty.call(m, "optionVoteCount")) + w.uint32(16).int32(m.optionVoteCount); + return w; + }; + + PollVoteSnapshot.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MsgOpaqueData.PollVoteSnapshot(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.option = $root.proto.MsgOpaqueData.PollOption.decode(r, r.uint32()); + break; + } + case 2: { + m.optionVoteCount = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollVoteSnapshot.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MsgOpaqueData.PollVoteSnapshot) + return d; + var m = new $root.proto.MsgOpaqueData.PollVoteSnapshot(); + if (d.option != null) { + if (typeof d.option !== "object") + throw TypeError(".proto.MsgOpaqueData.PollVoteSnapshot.option: object expected"); + m.option = $root.proto.MsgOpaqueData.PollOption.fromObject(d.option); + } + if (d.optionVoteCount != null) { + m.optionVoteCount = d.optionVoteCount | 0; + } + return m; + }; + + PollVoteSnapshot.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.option != null && m.hasOwnProperty("option")) { + d.option = $root.proto.MsgOpaqueData.PollOption.toObject(m.option, o); + if (o.oneofs) + d._option = "option"; + } + if (m.optionVoteCount != null && m.hasOwnProperty("optionVoteCount")) { + d.optionVoteCount = m.optionVoteCount; + if (o.oneofs) + d._optionVoteCount = "optionVoteCount"; + } + return d; + }; + + PollVoteSnapshot.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollVoteSnapshot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MsgOpaqueData.PollVoteSnapshot"; + }; + + return PollVoteSnapshot; + })(); + + MsgOpaqueData.PollVotesSnapshot = (function() { + + function PollVotesSnapshot(p) { + this.pollVotes = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollVotesSnapshot.prototype.pollVotes = $util.emptyArray; + + PollVotesSnapshot.create = function create(properties) { + return new PollVotesSnapshot(properties); + }; + + PollVotesSnapshot.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pollVotes != null && m.pollVotes.length) { + for (var i = 0; i < m.pollVotes.length; ++i) + $root.proto.MsgOpaqueData.PollVoteSnapshot.encode(m.pollVotes[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + PollVotesSnapshot.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MsgOpaqueData.PollVotesSnapshot(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.pollVotes && m.pollVotes.length)) + m.pollVotes = []; + m.pollVotes.push($root.proto.MsgOpaqueData.PollVoteSnapshot.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollVotesSnapshot.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MsgOpaqueData.PollVotesSnapshot) + return d; + var m = new $root.proto.MsgOpaqueData.PollVotesSnapshot(); + if (d.pollVotes) { + if (!Array.isArray(d.pollVotes)) + throw TypeError(".proto.MsgOpaqueData.PollVotesSnapshot.pollVotes: array expected"); + m.pollVotes = []; + for (var i = 0; i < d.pollVotes.length; ++i) { + if (typeof d.pollVotes[i] !== "object") + throw TypeError(".proto.MsgOpaqueData.PollVotesSnapshot.pollVotes: object expected"); + m.pollVotes[i] = $root.proto.MsgOpaqueData.PollVoteSnapshot.fromObject(d.pollVotes[i]); + } + } + return m; + }; + + PollVotesSnapshot.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.pollVotes = []; + } + if (m.pollVotes && m.pollVotes.length) { + d.pollVotes = []; + for (var j = 0; j < m.pollVotes.length; ++j) { + d.pollVotes[j] = $root.proto.MsgOpaqueData.PollVoteSnapshot.toObject(m.pollVotes[j], o); + } + } + return d; + }; + + PollVotesSnapshot.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollVotesSnapshot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MsgOpaqueData.PollVotesSnapshot"; + }; + + return PollVotesSnapshot; + })(); + + return MsgOpaqueData; + })(); + + proto.MsgRowOpaqueData = (function() { + + function MsgRowOpaqueData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MsgRowOpaqueData.prototype.currentMsg = null; + MsgRowOpaqueData.prototype.quotedMsg = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgRowOpaqueData.prototype, "_currentMsg", { + get: $util.oneOfGetter($oneOfFields = ["currentMsg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MsgRowOpaqueData.prototype, "_quotedMsg", { + get: $util.oneOfGetter($oneOfFields = ["quotedMsg"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MsgRowOpaqueData.create = function create(properties) { + return new MsgRowOpaqueData(properties); + }; + + MsgRowOpaqueData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.currentMsg != null && Object.hasOwnProperty.call(m, "currentMsg")) + $root.proto.MsgOpaqueData.encode(m.currentMsg, w.uint32(10).fork()).ldelim(); + if (m.quotedMsg != null && Object.hasOwnProperty.call(m, "quotedMsg")) + $root.proto.MsgOpaqueData.encode(m.quotedMsg, w.uint32(18).fork()).ldelim(); + return w; + }; + + MsgRowOpaqueData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.MsgRowOpaqueData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.currentMsg = $root.proto.MsgOpaqueData.decode(r, r.uint32()); + break; + } + case 2: { + m.quotedMsg = $root.proto.MsgOpaqueData.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MsgRowOpaqueData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.MsgRowOpaqueData) + return d; + var m = new $root.proto.MsgRowOpaqueData(); + if (d.currentMsg != null) { + if (typeof d.currentMsg !== "object") + throw TypeError(".proto.MsgRowOpaqueData.currentMsg: object expected"); + m.currentMsg = $root.proto.MsgOpaqueData.fromObject(d.currentMsg); + } + if (d.quotedMsg != null) { + if (typeof d.quotedMsg !== "object") + throw TypeError(".proto.MsgRowOpaqueData.quotedMsg: object expected"); + m.quotedMsg = $root.proto.MsgOpaqueData.fromObject(d.quotedMsg); + } + return m; + }; + + MsgRowOpaqueData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.currentMsg != null && m.hasOwnProperty("currentMsg")) { + d.currentMsg = $root.proto.MsgOpaqueData.toObject(m.currentMsg, o); + if (o.oneofs) + d._currentMsg = "currentMsg"; + } + if (m.quotedMsg != null && m.hasOwnProperty("quotedMsg")) { + d.quotedMsg = $root.proto.MsgOpaqueData.toObject(m.quotedMsg, o); + if (o.oneofs) + d._quotedMsg = "quotedMsg"; + } + return d; + }; + + MsgRowOpaqueData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MsgRowOpaqueData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.MsgRowOpaqueData"; + }; + + return MsgRowOpaqueData; + })(); + + proto.MutationProps = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[2] = "STAR_ACTION"] = 2; + values[valuesById[3] = "CONTACT_ACTION"] = 3; + values[valuesById[4] = "MUTE_ACTION"] = 4; + values[valuesById[5] = "PIN_ACTION"] = 5; + values[valuesById[6] = "SECURITY_NOTIFICATION_SETTING"] = 6; + values[valuesById[7] = "PUSH_NAME_SETTING"] = 7; + values[valuesById[8] = "QUICK_REPLY_ACTION"] = 8; + values[valuesById[11] = "RECENT_EMOJI_WEIGHTS_ACTION"] = 11; + values[valuesById[13] = "LABEL_MESSAGE_ACTION"] = 13; + values[valuesById[14] = "LABEL_EDIT_ACTION"] = 14; + values[valuesById[15] = "LABEL_ASSOCIATION_ACTION"] = 15; + values[valuesById[16] = "LOCALE_SETTING"] = 16; + values[valuesById[17] = "ARCHIVE_CHAT_ACTION"] = 17; + values[valuesById[18] = "DELETE_MESSAGE_FOR_ME_ACTION"] = 18; + values[valuesById[19] = "KEY_EXPIRATION"] = 19; + values[valuesById[20] = "MARK_CHAT_AS_READ_ACTION"] = 20; + values[valuesById[21] = "CLEAR_CHAT_ACTION"] = 21; + values[valuesById[22] = "DELETE_CHAT_ACTION"] = 22; + values[valuesById[23] = "UNARCHIVE_CHATS_SETTING"] = 23; + values[valuesById[24] = "PRIMARY_FEATURE"] = 24; + values[valuesById[26] = "ANDROID_UNSUPPORTED_ACTIONS"] = 26; + values[valuesById[27] = "AGENT_ACTION"] = 27; + values[valuesById[28] = "SUBSCRIPTION_ACTION"] = 28; + values[valuesById[29] = "USER_STATUS_MUTE_ACTION"] = 29; + values[valuesById[30] = "TIME_FORMAT_ACTION"] = 30; + values[valuesById[31] = "NUX_ACTION"] = 31; + values[valuesById[32] = "PRIMARY_VERSION_ACTION"] = 32; + values[valuesById[33] = "STICKER_ACTION"] = 33; + values[valuesById[34] = "REMOVE_RECENT_STICKER_ACTION"] = 34; + values[valuesById[35] = "CHAT_ASSIGNMENT"] = 35; + values[valuesById[36] = "CHAT_ASSIGNMENT_OPENED_STATUS"] = 36; + values[valuesById[37] = "PN_FOR_LID_CHAT_ACTION"] = 37; + values[valuesById[38] = "MARKETING_MESSAGE_ACTION"] = 38; + values[valuesById[39] = "MARKETING_MESSAGE_BROADCAST_ACTION"] = 39; + values[valuesById[40] = "EXTERNAL_WEB_BETA_ACTION"] = 40; + values[valuesById[41] = "PRIVACY_SETTING_RELAY_ALL_CALLS"] = 41; + values[valuesById[42] = "CALL_LOG_ACTION"] = 42; + values[valuesById[43] = "UGC_BOT"] = 43; + values[valuesById[44] = "STATUS_PRIVACY"] = 44; + values[valuesById[45] = "BOT_WELCOME_REQUEST_ACTION"] = 45; + values[valuesById[46] = "DELETE_INDIVIDUAL_CALL_LOG"] = 46; + values[valuesById[47] = "LABEL_REORDERING_ACTION"] = 47; + values[valuesById[48] = "PAYMENT_INFO_ACTION"] = 48; + values[valuesById[49] = "CUSTOM_PAYMENT_METHODS_ACTION"] = 49; + values[valuesById[50] = "LOCK_CHAT_ACTION"] = 50; + values[valuesById[51] = "CHAT_LOCK_SETTINGS"] = 51; + values[valuesById[52] = "WAMO_USER_IDENTIFIER_ACTION"] = 52; + values[valuesById[53] = "PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION"] = 53; + values[valuesById[54] = "DEVICE_CAPABILITIES"] = 54; + values[valuesById[55] = "NOTE_EDIT_ACTION"] = 55; + values[valuesById[56] = "FAVORITES_ACTION"] = 56; + values[valuesById[57] = "MERCHANT_PAYMENT_PARTNER_ACTION"] = 57; + values[valuesById[58] = "WAFFLE_ACCOUNT_LINK_STATE_ACTION"] = 58; + values[valuesById[59] = "USERNAME_CHAT_START_MODE"] = 59; + values[valuesById[60] = "NOTIFICATION_ACTIVITY_SETTING_ACTION"] = 60; + values[valuesById[61] = "LID_CONTACT_ACTION"] = 61; + values[valuesById[62] = "CTWA_PER_CUSTOMER_DATA_SHARING_ACTION"] = 62; + values[valuesById[63] = "PAYMENT_TOS_ACTION"] = 63; + values[valuesById[64] = "PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION"] = 64; + values[valuesById[65] = "BUSINESS_BROADCAST_ASSOCIATION_ACTION"] = 65; + values[valuesById[66] = "DETECTED_OUTCOMES_STATUS_ACTION"] = 66; + values[valuesById[68] = "MAIBA_AI_FEATURES_CONTROL_ACTION"] = 68; + values[valuesById[69] = "BUSINESS_BROADCAST_LIST_ACTION"] = 69; + values[valuesById[70] = "MUSIC_USER_ID_ACTION"] = 70; + values[valuesById[71] = "STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION"] = 71; + values[valuesById[72] = "AVATAR_UPDATED_ACTION"] = 72; + values[valuesById[73] = "GALAXY_FLOW_ACTION"] = 73; + values[valuesById[74] = "PRIVATE_PROCESSING_SETTING_ACTION"] = 74; + values[valuesById[75] = "NEWSLETTER_SAVED_INTERESTS_ACTION"] = 75; + values[valuesById[76] = "AI_THREAD_RENAME_ACTION"] = 76; + values[valuesById[77] = "INTERACTIVE_MESSAGE_ACTION"] = 77; + values[valuesById[10001] = "SHARE_OWN_PN"] = 10001; + values[valuesById[10002] = "BUSINESS_BROADCAST_ACTION"] = 10002; + return values; + })(); + + proto.NoiseCertificate = (function() { + + function NoiseCertificate(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NoiseCertificate.prototype.details = null; + NoiseCertificate.prototype.signature = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoiseCertificate.prototype, "_details", { + get: $util.oneOfGetter($oneOfFields = ["details"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoiseCertificate.prototype, "_signature", { + get: $util.oneOfGetter($oneOfFields = ["signature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NoiseCertificate.create = function create(properties) { + return new NoiseCertificate(properties); + }; + + NoiseCertificate.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.details != null && Object.hasOwnProperty.call(m, "details")) + w.uint32(10).bytes(m.details); + if (m.signature != null && Object.hasOwnProperty.call(m, "signature")) + w.uint32(18).bytes(m.signature); + return w; + }; + + NoiseCertificate.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.NoiseCertificate(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.details = r.bytes(); + break; + } + case 2: { + m.signature = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NoiseCertificate.fromObject = function fromObject(d) { + if (d instanceof $root.proto.NoiseCertificate) + return d; + var m = new $root.proto.NoiseCertificate(); + if (d.details != null) { + if (typeof d.details === "string") + $util.base64.decode(d.details, m.details = $util.newBuffer($util.base64.length(d.details)), 0); + else if (d.details.length >= 0) + m.details = d.details; + } + if (d.signature != null) { + if (typeof d.signature === "string") + $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0); + else if (d.signature.length >= 0) + m.signature = d.signature; + } + return m; + }; + + NoiseCertificate.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.details != null && m.hasOwnProperty("details")) { + d.details = o.bytes === String ? $util.base64.encode(m.details, 0, m.details.length) : o.bytes === Array ? Array.prototype.slice.call(m.details) : m.details; + if (o.oneofs) + d._details = "details"; + } + if (m.signature != null && m.hasOwnProperty("signature")) { + d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature; + if (o.oneofs) + d._signature = "signature"; + } + return d; + }; + + NoiseCertificate.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NoiseCertificate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.NoiseCertificate"; + }; + + NoiseCertificate.Details = (function() { + + function Details(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Details.prototype.serial = null; + Details.prototype.issuer = null; + Details.prototype.expires = null; + Details.prototype.subject = null; + Details.prototype.key = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_serial", { + get: $util.oneOfGetter($oneOfFields = ["serial"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_issuer", { + get: $util.oneOfGetter($oneOfFields = ["issuer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_expires", { + get: $util.oneOfGetter($oneOfFields = ["expires"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_subject", { + get: $util.oneOfGetter($oneOfFields = ["subject"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Details.create = function create(properties) { + return new Details(properties); + }; + + Details.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.serial != null && Object.hasOwnProperty.call(m, "serial")) + w.uint32(8).uint32(m.serial); + if (m.issuer != null && Object.hasOwnProperty.call(m, "issuer")) + w.uint32(18).string(m.issuer); + if (m.expires != null && Object.hasOwnProperty.call(m, "expires")) + w.uint32(24).uint64(m.expires); + if (m.subject != null && Object.hasOwnProperty.call(m, "subject")) + w.uint32(34).string(m.subject); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + w.uint32(42).bytes(m.key); + return w; + }; + + Details.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.NoiseCertificate.Details(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.serial = r.uint32(); + break; + } + case 2: { + m.issuer = r.string(); + break; + } + case 3: { + m.expires = r.uint64(); + break; + } + case 4: { + m.subject = r.string(); + break; + } + case 5: { + m.key = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Details.fromObject = function fromObject(d) { + if (d instanceof $root.proto.NoiseCertificate.Details) + return d; + var m = new $root.proto.NoiseCertificate.Details(); + if (d.serial != null) { + m.serial = d.serial >>> 0; + } + if (d.issuer != null) { + m.issuer = String(d.issuer); + } + if (d.expires != null) { + if ($util.Long) + (m.expires = $util.Long.fromValue(d.expires)).unsigned = true; + else if (typeof d.expires === "string") + m.expires = parseInt(d.expires, 10); + else if (typeof d.expires === "number") + m.expires = d.expires; + else if (typeof d.expires === "object") + m.expires = new $util.LongBits(d.expires.low >>> 0, d.expires.high >>> 0).toNumber(true); + } + if (d.subject != null) { + m.subject = String(d.subject); + } + if (d.key != null) { + if (typeof d.key === "string") + $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0); + else if (d.key.length >= 0) + m.key = d.key; + } + return m; + }; + + Details.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.serial != null && m.hasOwnProperty("serial")) { + d.serial = m.serial; + if (o.oneofs) + d._serial = "serial"; + } + if (m.issuer != null && m.hasOwnProperty("issuer")) { + d.issuer = m.issuer; + if (o.oneofs) + d._issuer = "issuer"; + } + if (m.expires != null && m.hasOwnProperty("expires")) { + if (typeof m.expires === "number") + d.expires = o.longs === String ? String(m.expires) : m.expires; + else + d.expires = o.longs === String ? longToString(m.expires, true) : o.longs === Number ? longToNumber(m.expires, true) : m.expires; + if (o.oneofs) + d._expires = "expires"; + } + if (m.subject != null && m.hasOwnProperty("subject")) { + d.subject = m.subject; + if (o.oneofs) + d._subject = "subject"; + } + if (m.key != null && m.hasOwnProperty("key")) { + d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key; + if (o.oneofs) + d._key = "key"; + } + return d; + }; + + Details.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Details.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.NoiseCertificate.Details"; + }; + + return Details; + })(); + + return NoiseCertificate; + })(); + + proto.NotificationMessageInfo = (function() { + + function NotificationMessageInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NotificationMessageInfo.prototype.key = null; + NotificationMessageInfo.prototype.message = null; + NotificationMessageInfo.prototype.messageTimestamp = null; + NotificationMessageInfo.prototype.participant = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationMessageInfo.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationMessageInfo.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationMessageInfo.prototype, "_messageTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["messageTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationMessageInfo.prototype, "_participant", { + get: $util.oneOfGetter($oneOfFields = ["participant"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NotificationMessageInfo.create = function create(properties) { + return new NotificationMessageInfo(properties); + }; + + NotificationMessageInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.Message.encode(m.message, w.uint32(18).fork()).ldelim(); + if (m.messageTimestamp != null && Object.hasOwnProperty.call(m, "messageTimestamp")) + w.uint32(24).uint64(m.messageTimestamp); + if (m.participant != null && Object.hasOwnProperty.call(m, "participant")) + w.uint32(34).string(m.participant); + return w; + }; + + NotificationMessageInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.NotificationMessageInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.message = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 3: { + m.messageTimestamp = r.uint64(); + break; + } + case 4: { + m.participant = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NotificationMessageInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.NotificationMessageInfo) + return d; + var m = new $root.proto.NotificationMessageInfo(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.NotificationMessageInfo.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.NotificationMessageInfo.message: object expected"); + m.message = $root.proto.Message.fromObject(d.message); + } + if (d.messageTimestamp != null) { + if ($util.Long) + (m.messageTimestamp = $util.Long.fromValue(d.messageTimestamp)).unsigned = true; + else if (typeof d.messageTimestamp === "string") + m.messageTimestamp = parseInt(d.messageTimestamp, 10); + else if (typeof d.messageTimestamp === "number") + m.messageTimestamp = d.messageTimestamp; + else if (typeof d.messageTimestamp === "object") + m.messageTimestamp = new $util.LongBits(d.messageTimestamp.low >>> 0, d.messageTimestamp.high >>> 0).toNumber(true); + } + if (d.participant != null) { + m.participant = String(d.participant); + } + return m; + }; + + NotificationMessageInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.Message.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + if (m.messageTimestamp != null && m.hasOwnProperty("messageTimestamp")) { + if (typeof m.messageTimestamp === "number") + d.messageTimestamp = o.longs === String ? String(m.messageTimestamp) : m.messageTimestamp; + else + d.messageTimestamp = o.longs === String ? longToString(m.messageTimestamp, true) : o.longs === Number ? longToNumber(m.messageTimestamp, true) : m.messageTimestamp; + if (o.oneofs) + d._messageTimestamp = "messageTimestamp"; + } + if (m.participant != null && m.hasOwnProperty("participant")) { + d.participant = m.participant; + if (o.oneofs) + d._participant = "participant"; + } + return d; + }; + + NotificationMessageInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NotificationMessageInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.NotificationMessageInfo"; + }; + + return NotificationMessageInfo; + })(); + + proto.NotificationSettings = (function() { + + function NotificationSettings(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NotificationSettings.prototype.messageVibrate = null; + NotificationSettings.prototype.messagePopup = null; + NotificationSettings.prototype.messageLight = null; + NotificationSettings.prototype.lowPriorityNotifications = null; + NotificationSettings.prototype.reactionsMuted = null; + NotificationSettings.prototype.callVibrate = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationSettings.prototype, "_messageVibrate", { + get: $util.oneOfGetter($oneOfFields = ["messageVibrate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationSettings.prototype, "_messagePopup", { + get: $util.oneOfGetter($oneOfFields = ["messagePopup"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationSettings.prototype, "_messageLight", { + get: $util.oneOfGetter($oneOfFields = ["messageLight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationSettings.prototype, "_lowPriorityNotifications", { + get: $util.oneOfGetter($oneOfFields = ["lowPriorityNotifications"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationSettings.prototype, "_reactionsMuted", { + get: $util.oneOfGetter($oneOfFields = ["reactionsMuted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationSettings.prototype, "_callVibrate", { + get: $util.oneOfGetter($oneOfFields = ["callVibrate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NotificationSettings.create = function create(properties) { + return new NotificationSettings(properties); + }; + + NotificationSettings.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageVibrate != null && Object.hasOwnProperty.call(m, "messageVibrate")) + w.uint32(10).string(m.messageVibrate); + if (m.messagePopup != null && Object.hasOwnProperty.call(m, "messagePopup")) + w.uint32(18).string(m.messagePopup); + if (m.messageLight != null && Object.hasOwnProperty.call(m, "messageLight")) + w.uint32(26).string(m.messageLight); + if (m.lowPriorityNotifications != null && Object.hasOwnProperty.call(m, "lowPriorityNotifications")) + w.uint32(32).bool(m.lowPriorityNotifications); + if (m.reactionsMuted != null && Object.hasOwnProperty.call(m, "reactionsMuted")) + w.uint32(40).bool(m.reactionsMuted); + if (m.callVibrate != null && Object.hasOwnProperty.call(m, "callVibrate")) + w.uint32(50).string(m.callVibrate); + return w; + }; + + NotificationSettings.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.NotificationSettings(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageVibrate = r.string(); + break; + } + case 2: { + m.messagePopup = r.string(); + break; + } + case 3: { + m.messageLight = r.string(); + break; + } + case 4: { + m.lowPriorityNotifications = r.bool(); + break; + } + case 5: { + m.reactionsMuted = r.bool(); + break; + } + case 6: { + m.callVibrate = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NotificationSettings.fromObject = function fromObject(d) { + if (d instanceof $root.proto.NotificationSettings) + return d; + var m = new $root.proto.NotificationSettings(); + if (d.messageVibrate != null) { + m.messageVibrate = String(d.messageVibrate); + } + if (d.messagePopup != null) { + m.messagePopup = String(d.messagePopup); + } + if (d.messageLight != null) { + m.messageLight = String(d.messageLight); + } + if (d.lowPriorityNotifications != null) { + m.lowPriorityNotifications = Boolean(d.lowPriorityNotifications); + } + if (d.reactionsMuted != null) { + m.reactionsMuted = Boolean(d.reactionsMuted); + } + if (d.callVibrate != null) { + m.callVibrate = String(d.callVibrate); + } + return m; + }; + + NotificationSettings.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageVibrate != null && m.hasOwnProperty("messageVibrate")) { + d.messageVibrate = m.messageVibrate; + if (o.oneofs) + d._messageVibrate = "messageVibrate"; + } + if (m.messagePopup != null && m.hasOwnProperty("messagePopup")) { + d.messagePopup = m.messagePopup; + if (o.oneofs) + d._messagePopup = "messagePopup"; + } + if (m.messageLight != null && m.hasOwnProperty("messageLight")) { + d.messageLight = m.messageLight; + if (o.oneofs) + d._messageLight = "messageLight"; + } + if (m.lowPriorityNotifications != null && m.hasOwnProperty("lowPriorityNotifications")) { + d.lowPriorityNotifications = m.lowPriorityNotifications; + if (o.oneofs) + d._lowPriorityNotifications = "lowPriorityNotifications"; + } + if (m.reactionsMuted != null && m.hasOwnProperty("reactionsMuted")) { + d.reactionsMuted = m.reactionsMuted; + if (o.oneofs) + d._reactionsMuted = "reactionsMuted"; + } + if (m.callVibrate != null && m.hasOwnProperty("callVibrate")) { + d.callVibrate = m.callVibrate; + if (o.oneofs) + d._callVibrate = "callVibrate"; + } + return d; + }; + + NotificationSettings.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NotificationSettings.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.NotificationSettings"; + }; + + return NotificationSettings; + })(); + + proto.PairingRequest = (function() { + + function PairingRequest(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PairingRequest.prototype.companionPublicKey = null; + PairingRequest.prototype.companionIdentityKey = null; + PairingRequest.prototype.advSecret = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PairingRequest.prototype, "_companionPublicKey", { + get: $util.oneOfGetter($oneOfFields = ["companionPublicKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PairingRequest.prototype, "_companionIdentityKey", { + get: $util.oneOfGetter($oneOfFields = ["companionIdentityKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PairingRequest.prototype, "_advSecret", { + get: $util.oneOfGetter($oneOfFields = ["advSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PairingRequest.create = function create(properties) { + return new PairingRequest(properties); + }; + + PairingRequest.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.companionPublicKey != null && Object.hasOwnProperty.call(m, "companionPublicKey")) + w.uint32(10).bytes(m.companionPublicKey); + if (m.companionIdentityKey != null && Object.hasOwnProperty.call(m, "companionIdentityKey")) + w.uint32(18).bytes(m.companionIdentityKey); + if (m.advSecret != null && Object.hasOwnProperty.call(m, "advSecret")) + w.uint32(26).bytes(m.advSecret); + return w; + }; + + PairingRequest.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PairingRequest(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.companionPublicKey = r.bytes(); + break; + } + case 2: { + m.companionIdentityKey = r.bytes(); + break; + } + case 3: { + m.advSecret = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PairingRequest.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PairingRequest) + return d; + var m = new $root.proto.PairingRequest(); + if (d.companionPublicKey != null) { + if (typeof d.companionPublicKey === "string") + $util.base64.decode(d.companionPublicKey, m.companionPublicKey = $util.newBuffer($util.base64.length(d.companionPublicKey)), 0); + else if (d.companionPublicKey.length >= 0) + m.companionPublicKey = d.companionPublicKey; + } + if (d.companionIdentityKey != null) { + if (typeof d.companionIdentityKey === "string") + $util.base64.decode(d.companionIdentityKey, m.companionIdentityKey = $util.newBuffer($util.base64.length(d.companionIdentityKey)), 0); + else if (d.companionIdentityKey.length >= 0) + m.companionIdentityKey = d.companionIdentityKey; + } + if (d.advSecret != null) { + if (typeof d.advSecret === "string") + $util.base64.decode(d.advSecret, m.advSecret = $util.newBuffer($util.base64.length(d.advSecret)), 0); + else if (d.advSecret.length >= 0) + m.advSecret = d.advSecret; + } + return m; + }; + + PairingRequest.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.companionPublicKey != null && m.hasOwnProperty("companionPublicKey")) { + d.companionPublicKey = o.bytes === String ? $util.base64.encode(m.companionPublicKey, 0, m.companionPublicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.companionPublicKey) : m.companionPublicKey; + if (o.oneofs) + d._companionPublicKey = "companionPublicKey"; + } + if (m.companionIdentityKey != null && m.hasOwnProperty("companionIdentityKey")) { + d.companionIdentityKey = o.bytes === String ? $util.base64.encode(m.companionIdentityKey, 0, m.companionIdentityKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.companionIdentityKey) : m.companionIdentityKey; + if (o.oneofs) + d._companionIdentityKey = "companionIdentityKey"; + } + if (m.advSecret != null && m.hasOwnProperty("advSecret")) { + d.advSecret = o.bytes === String ? $util.base64.encode(m.advSecret, 0, m.advSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.advSecret) : m.advSecret; + if (o.oneofs) + d._advSecret = "advSecret"; + } + return d; + }; + + PairingRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PairingRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PairingRequest"; + }; + + return PairingRequest; + })(); + + proto.PastParticipant = (function() { + + function PastParticipant(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PastParticipant.prototype.userJid = null; + PastParticipant.prototype.leaveReason = null; + PastParticipant.prototype.leaveTs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PastParticipant.prototype, "_userJid", { + get: $util.oneOfGetter($oneOfFields = ["userJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PastParticipant.prototype, "_leaveReason", { + get: $util.oneOfGetter($oneOfFields = ["leaveReason"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PastParticipant.prototype, "_leaveTs", { + get: $util.oneOfGetter($oneOfFields = ["leaveTs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PastParticipant.create = function create(properties) { + return new PastParticipant(properties); + }; + + PastParticipant.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.userJid != null && Object.hasOwnProperty.call(m, "userJid")) + w.uint32(10).string(m.userJid); + if (m.leaveReason != null && Object.hasOwnProperty.call(m, "leaveReason")) + w.uint32(16).int32(m.leaveReason); + if (m.leaveTs != null && Object.hasOwnProperty.call(m, "leaveTs")) + w.uint32(24).uint64(m.leaveTs); + return w; + }; + + PastParticipant.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PastParticipant(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.userJid = r.string(); + break; + } + case 2: { + m.leaveReason = r.int32(); + break; + } + case 3: { + m.leaveTs = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PastParticipant.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PastParticipant) + return d; + var m = new $root.proto.PastParticipant(); + if (d.userJid != null) { + m.userJid = String(d.userJid); + } + switch (d.leaveReason) { + default: + if (typeof d.leaveReason === "number") { + m.leaveReason = d.leaveReason; + break; + } + break; + case "LEFT": + case 0: + m.leaveReason = 0; + break; + case "REMOVED": + case 1: + m.leaveReason = 1; + break; + } + if (d.leaveTs != null) { + if ($util.Long) + (m.leaveTs = $util.Long.fromValue(d.leaveTs)).unsigned = true; + else if (typeof d.leaveTs === "string") + m.leaveTs = parseInt(d.leaveTs, 10); + else if (typeof d.leaveTs === "number") + m.leaveTs = d.leaveTs; + else if (typeof d.leaveTs === "object") + m.leaveTs = new $util.LongBits(d.leaveTs.low >>> 0, d.leaveTs.high >>> 0).toNumber(true); + } + return m; + }; + + PastParticipant.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.userJid != null && m.hasOwnProperty("userJid")) { + d.userJid = m.userJid; + if (o.oneofs) + d._userJid = "userJid"; + } + if (m.leaveReason != null && m.hasOwnProperty("leaveReason")) { + d.leaveReason = o.enums === String ? $root.proto.PastParticipant.LeaveReason[m.leaveReason] === undefined ? m.leaveReason : $root.proto.PastParticipant.LeaveReason[m.leaveReason] : m.leaveReason; + if (o.oneofs) + d._leaveReason = "leaveReason"; + } + if (m.leaveTs != null && m.hasOwnProperty("leaveTs")) { + if (typeof m.leaveTs === "number") + d.leaveTs = o.longs === String ? String(m.leaveTs) : m.leaveTs; + else + d.leaveTs = o.longs === String ? longToString(m.leaveTs, true) : o.longs === Number ? longToNumber(m.leaveTs, true) : m.leaveTs; + if (o.oneofs) + d._leaveTs = "leaveTs"; + } + return d; + }; + + PastParticipant.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PastParticipant.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PastParticipant"; + }; + + PastParticipant.LeaveReason = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "LEFT"] = 0; + values[valuesById[1] = "REMOVED"] = 1; + return values; + })(); + + return PastParticipant; + })(); + + proto.PastParticipants = (function() { + + function PastParticipants(p) { + this.pastParticipants = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PastParticipants.prototype.groupJid = null; + PastParticipants.prototype.pastParticipants = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PastParticipants.prototype, "_groupJid", { + get: $util.oneOfGetter($oneOfFields = ["groupJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PastParticipants.create = function create(properties) { + return new PastParticipants(properties); + }; + + PastParticipants.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.groupJid != null && Object.hasOwnProperty.call(m, "groupJid")) + w.uint32(10).string(m.groupJid); + if (m.pastParticipants != null && m.pastParticipants.length) { + for (var i = 0; i < m.pastParticipants.length; ++i) + $root.proto.PastParticipant.encode(m.pastParticipants[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + PastParticipants.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PastParticipants(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.groupJid = r.string(); + break; + } + case 2: { + if (!(m.pastParticipants && m.pastParticipants.length)) + m.pastParticipants = []; + m.pastParticipants.push($root.proto.PastParticipant.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PastParticipants.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PastParticipants) + return d; + var m = new $root.proto.PastParticipants(); + if (d.groupJid != null) { + m.groupJid = String(d.groupJid); + } + if (d.pastParticipants) { + if (!Array.isArray(d.pastParticipants)) + throw TypeError(".proto.PastParticipants.pastParticipants: array expected"); + m.pastParticipants = []; + for (var i = 0; i < d.pastParticipants.length; ++i) { + if (typeof d.pastParticipants[i] !== "object") + throw TypeError(".proto.PastParticipants.pastParticipants: object expected"); + m.pastParticipants[i] = $root.proto.PastParticipant.fromObject(d.pastParticipants[i]); + } + } + return m; + }; + + PastParticipants.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.pastParticipants = []; + } + if (m.groupJid != null && m.hasOwnProperty("groupJid")) { + d.groupJid = m.groupJid; + if (o.oneofs) + d._groupJid = "groupJid"; + } + if (m.pastParticipants && m.pastParticipants.length) { + d.pastParticipants = []; + for (var j = 0; j < m.pastParticipants.length; ++j) { + d.pastParticipants[j] = $root.proto.PastParticipant.toObject(m.pastParticipants[j], o); + } + } + return d; + }; + + PastParticipants.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PastParticipants.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PastParticipants"; + }; + + return PastParticipants; + })(); + + proto.PatchDebugData = (function() { + + function PatchDebugData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PatchDebugData.prototype.currentLthash = null; + PatchDebugData.prototype.newLthash = null; + PatchDebugData.prototype.patchVersion = null; + PatchDebugData.prototype.collectionName = null; + PatchDebugData.prototype.firstFourBytesFromAHashOfSnapshotMacKey = null; + PatchDebugData.prototype.newLthashSubtract = null; + PatchDebugData.prototype.numberAdd = null; + PatchDebugData.prototype.numberRemove = null; + PatchDebugData.prototype.numberOverride = null; + PatchDebugData.prototype.senderPlatform = null; + PatchDebugData.prototype.isSenderPrimary = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_currentLthash", { + get: $util.oneOfGetter($oneOfFields = ["currentLthash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_newLthash", { + get: $util.oneOfGetter($oneOfFields = ["newLthash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_patchVersion", { + get: $util.oneOfGetter($oneOfFields = ["patchVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_collectionName", { + get: $util.oneOfGetter($oneOfFields = ["collectionName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_firstFourBytesFromAHashOfSnapshotMacKey", { + get: $util.oneOfGetter($oneOfFields = ["firstFourBytesFromAHashOfSnapshotMacKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_newLthashSubtract", { + get: $util.oneOfGetter($oneOfFields = ["newLthashSubtract"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_numberAdd", { + get: $util.oneOfGetter($oneOfFields = ["numberAdd"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_numberRemove", { + get: $util.oneOfGetter($oneOfFields = ["numberRemove"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_numberOverride", { + get: $util.oneOfGetter($oneOfFields = ["numberOverride"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_senderPlatform", { + get: $util.oneOfGetter($oneOfFields = ["senderPlatform"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PatchDebugData.prototype, "_isSenderPrimary", { + get: $util.oneOfGetter($oneOfFields = ["isSenderPrimary"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PatchDebugData.create = function create(properties) { + return new PatchDebugData(properties); + }; + + PatchDebugData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.currentLthash != null && Object.hasOwnProperty.call(m, "currentLthash")) + w.uint32(10).bytes(m.currentLthash); + if (m.newLthash != null && Object.hasOwnProperty.call(m, "newLthash")) + w.uint32(18).bytes(m.newLthash); + if (m.patchVersion != null && Object.hasOwnProperty.call(m, "patchVersion")) + w.uint32(26).bytes(m.patchVersion); + if (m.collectionName != null && Object.hasOwnProperty.call(m, "collectionName")) + w.uint32(34).bytes(m.collectionName); + if (m.firstFourBytesFromAHashOfSnapshotMacKey != null && Object.hasOwnProperty.call(m, "firstFourBytesFromAHashOfSnapshotMacKey")) + w.uint32(42).bytes(m.firstFourBytesFromAHashOfSnapshotMacKey); + if (m.newLthashSubtract != null && Object.hasOwnProperty.call(m, "newLthashSubtract")) + w.uint32(50).bytes(m.newLthashSubtract); + if (m.numberAdd != null && Object.hasOwnProperty.call(m, "numberAdd")) + w.uint32(56).int32(m.numberAdd); + if (m.numberRemove != null && Object.hasOwnProperty.call(m, "numberRemove")) + w.uint32(64).int32(m.numberRemove); + if (m.numberOverride != null && Object.hasOwnProperty.call(m, "numberOverride")) + w.uint32(72).int32(m.numberOverride); + if (m.senderPlatform != null && Object.hasOwnProperty.call(m, "senderPlatform")) + w.uint32(80).int32(m.senderPlatform); + if (m.isSenderPrimary != null && Object.hasOwnProperty.call(m, "isSenderPrimary")) + w.uint32(88).bool(m.isSenderPrimary); + return w; + }; + + PatchDebugData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PatchDebugData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.currentLthash = r.bytes(); + break; + } + case 2: { + m.newLthash = r.bytes(); + break; + } + case 3: { + m.patchVersion = r.bytes(); + break; + } + case 4: { + m.collectionName = r.bytes(); + break; + } + case 5: { + m.firstFourBytesFromAHashOfSnapshotMacKey = r.bytes(); + break; + } + case 6: { + m.newLthashSubtract = r.bytes(); + break; + } + case 7: { + m.numberAdd = r.int32(); + break; + } + case 8: { + m.numberRemove = r.int32(); + break; + } + case 9: { + m.numberOverride = r.int32(); + break; + } + case 10: { + m.senderPlatform = r.int32(); + break; + } + case 11: { + m.isSenderPrimary = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PatchDebugData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PatchDebugData) + return d; + var m = new $root.proto.PatchDebugData(); + if (d.currentLthash != null) { + if (typeof d.currentLthash === "string") + $util.base64.decode(d.currentLthash, m.currentLthash = $util.newBuffer($util.base64.length(d.currentLthash)), 0); + else if (d.currentLthash.length >= 0) + m.currentLthash = d.currentLthash; + } + if (d.newLthash != null) { + if (typeof d.newLthash === "string") + $util.base64.decode(d.newLthash, m.newLthash = $util.newBuffer($util.base64.length(d.newLthash)), 0); + else if (d.newLthash.length >= 0) + m.newLthash = d.newLthash; + } + if (d.patchVersion != null) { + if (typeof d.patchVersion === "string") + $util.base64.decode(d.patchVersion, m.patchVersion = $util.newBuffer($util.base64.length(d.patchVersion)), 0); + else if (d.patchVersion.length >= 0) + m.patchVersion = d.patchVersion; + } + if (d.collectionName != null) { + if (typeof d.collectionName === "string") + $util.base64.decode(d.collectionName, m.collectionName = $util.newBuffer($util.base64.length(d.collectionName)), 0); + else if (d.collectionName.length >= 0) + m.collectionName = d.collectionName; + } + if (d.firstFourBytesFromAHashOfSnapshotMacKey != null) { + if (typeof d.firstFourBytesFromAHashOfSnapshotMacKey === "string") + $util.base64.decode(d.firstFourBytesFromAHashOfSnapshotMacKey, m.firstFourBytesFromAHashOfSnapshotMacKey = $util.newBuffer($util.base64.length(d.firstFourBytesFromAHashOfSnapshotMacKey)), 0); + else if (d.firstFourBytesFromAHashOfSnapshotMacKey.length >= 0) + m.firstFourBytesFromAHashOfSnapshotMacKey = d.firstFourBytesFromAHashOfSnapshotMacKey; + } + if (d.newLthashSubtract != null) { + if (typeof d.newLthashSubtract === "string") + $util.base64.decode(d.newLthashSubtract, m.newLthashSubtract = $util.newBuffer($util.base64.length(d.newLthashSubtract)), 0); + else if (d.newLthashSubtract.length >= 0) + m.newLthashSubtract = d.newLthashSubtract; + } + if (d.numberAdd != null) { + m.numberAdd = d.numberAdd | 0; + } + if (d.numberRemove != null) { + m.numberRemove = d.numberRemove | 0; + } + if (d.numberOverride != null) { + m.numberOverride = d.numberOverride | 0; + } + switch (d.senderPlatform) { + default: + if (typeof d.senderPlatform === "number") { + m.senderPlatform = d.senderPlatform; + break; + } + break; + case "ANDROID": + case 0: + m.senderPlatform = 0; + break; + case "SMBA": + case 1: + m.senderPlatform = 1; + break; + case "IPHONE": + case 2: + m.senderPlatform = 2; + break; + case "SMBI": + case 3: + m.senderPlatform = 3; + break; + case "WEB": + case 4: + m.senderPlatform = 4; + break; + case "UWP": + case 5: + m.senderPlatform = 5; + break; + case "DARWIN": + case 6: + m.senderPlatform = 6; + break; + case "IPAD": + case 7: + m.senderPlatform = 7; + break; + case "WEAROS": + case 8: + m.senderPlatform = 8; + break; + case "WASG": + case 9: + m.senderPlatform = 9; + break; + case "WEARM": + case 10: + m.senderPlatform = 10; + break; + case "CAPI": + case 11: + m.senderPlatform = 11; + break; + } + if (d.isSenderPrimary != null) { + m.isSenderPrimary = Boolean(d.isSenderPrimary); + } + return m; + }; + + PatchDebugData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.currentLthash != null && m.hasOwnProperty("currentLthash")) { + d.currentLthash = o.bytes === String ? $util.base64.encode(m.currentLthash, 0, m.currentLthash.length) : o.bytes === Array ? Array.prototype.slice.call(m.currentLthash) : m.currentLthash; + if (o.oneofs) + d._currentLthash = "currentLthash"; + } + if (m.newLthash != null && m.hasOwnProperty("newLthash")) { + d.newLthash = o.bytes === String ? $util.base64.encode(m.newLthash, 0, m.newLthash.length) : o.bytes === Array ? Array.prototype.slice.call(m.newLthash) : m.newLthash; + if (o.oneofs) + d._newLthash = "newLthash"; + } + if (m.patchVersion != null && m.hasOwnProperty("patchVersion")) { + d.patchVersion = o.bytes === String ? $util.base64.encode(m.patchVersion, 0, m.patchVersion.length) : o.bytes === Array ? Array.prototype.slice.call(m.patchVersion) : m.patchVersion; + if (o.oneofs) + d._patchVersion = "patchVersion"; + } + if (m.collectionName != null && m.hasOwnProperty("collectionName")) { + d.collectionName = o.bytes === String ? $util.base64.encode(m.collectionName, 0, m.collectionName.length) : o.bytes === Array ? Array.prototype.slice.call(m.collectionName) : m.collectionName; + if (o.oneofs) + d._collectionName = "collectionName"; + } + if (m.firstFourBytesFromAHashOfSnapshotMacKey != null && m.hasOwnProperty("firstFourBytesFromAHashOfSnapshotMacKey")) { + d.firstFourBytesFromAHashOfSnapshotMacKey = o.bytes === String ? $util.base64.encode(m.firstFourBytesFromAHashOfSnapshotMacKey, 0, m.firstFourBytesFromAHashOfSnapshotMacKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.firstFourBytesFromAHashOfSnapshotMacKey) : m.firstFourBytesFromAHashOfSnapshotMacKey; + if (o.oneofs) + d._firstFourBytesFromAHashOfSnapshotMacKey = "firstFourBytesFromAHashOfSnapshotMacKey"; + } + if (m.newLthashSubtract != null && m.hasOwnProperty("newLthashSubtract")) { + d.newLthashSubtract = o.bytes === String ? $util.base64.encode(m.newLthashSubtract, 0, m.newLthashSubtract.length) : o.bytes === Array ? Array.prototype.slice.call(m.newLthashSubtract) : m.newLthashSubtract; + if (o.oneofs) + d._newLthashSubtract = "newLthashSubtract"; + } + if (m.numberAdd != null && m.hasOwnProperty("numberAdd")) { + d.numberAdd = m.numberAdd; + if (o.oneofs) + d._numberAdd = "numberAdd"; + } + if (m.numberRemove != null && m.hasOwnProperty("numberRemove")) { + d.numberRemove = m.numberRemove; + if (o.oneofs) + d._numberRemove = "numberRemove"; + } + if (m.numberOverride != null && m.hasOwnProperty("numberOverride")) { + d.numberOverride = m.numberOverride; + if (o.oneofs) + d._numberOverride = "numberOverride"; + } + if (m.senderPlatform != null && m.hasOwnProperty("senderPlatform")) { + d.senderPlatform = o.enums === String ? $root.proto.PatchDebugData.Platform[m.senderPlatform] === undefined ? m.senderPlatform : $root.proto.PatchDebugData.Platform[m.senderPlatform] : m.senderPlatform; + if (o.oneofs) + d._senderPlatform = "senderPlatform"; + } + if (m.isSenderPrimary != null && m.hasOwnProperty("isSenderPrimary")) { + d.isSenderPrimary = m.isSenderPrimary; + if (o.oneofs) + d._isSenderPrimary = "isSenderPrimary"; + } + return d; + }; + + PatchDebugData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PatchDebugData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PatchDebugData"; + }; + + PatchDebugData.Platform = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ANDROID"] = 0; + values[valuesById[1] = "SMBA"] = 1; + values[valuesById[2] = "IPHONE"] = 2; + values[valuesById[3] = "SMBI"] = 3; + values[valuesById[4] = "WEB"] = 4; + values[valuesById[5] = "UWP"] = 5; + values[valuesById[6] = "DARWIN"] = 6; + values[valuesById[7] = "IPAD"] = 7; + values[valuesById[8] = "WEAROS"] = 8; + values[valuesById[9] = "WASG"] = 9; + values[valuesById[10] = "WEARM"] = 10; + values[valuesById[11] = "CAPI"] = 11; + return values; + })(); + + return PatchDebugData; + })(); + + proto.PaymentBackground = (function() { + + function PaymentBackground(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentBackground.prototype.id = null; + PaymentBackground.prototype.fileLength = null; + PaymentBackground.prototype.width = null; + PaymentBackground.prototype.height = null; + PaymentBackground.prototype.mimetype = null; + PaymentBackground.prototype.placeholderArgb = null; + PaymentBackground.prototype.textArgb = null; + PaymentBackground.prototype.subtextArgb = null; + PaymentBackground.prototype.mediaData = null; + PaymentBackground.prototype.type = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_placeholderArgb", { + get: $util.oneOfGetter($oneOfFields = ["placeholderArgb"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_textArgb", { + get: $util.oneOfGetter($oneOfFields = ["textArgb"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_subtextArgb", { + get: $util.oneOfGetter($oneOfFields = ["subtextArgb"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_mediaData", { + get: $util.oneOfGetter($oneOfFields = ["mediaData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentBackground.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentBackground.create = function create(properties) { + return new PaymentBackground(properties); + }; + + PaymentBackground.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(10).string(m.id); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(16).uint64(m.fileLength); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(24).uint32(m.width); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(32).uint32(m.height); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(42).string(m.mimetype); + if (m.placeholderArgb != null && Object.hasOwnProperty.call(m, "placeholderArgb")) + w.uint32(53).fixed32(m.placeholderArgb); + if (m.textArgb != null && Object.hasOwnProperty.call(m, "textArgb")) + w.uint32(61).fixed32(m.textArgb); + if (m.subtextArgb != null && Object.hasOwnProperty.call(m, "subtextArgb")) + w.uint32(69).fixed32(m.subtextArgb); + if (m.mediaData != null && Object.hasOwnProperty.call(m, "mediaData")) + $root.proto.PaymentBackground.MediaData.encode(m.mediaData, w.uint32(74).fork()).ldelim(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(80).int32(m.type); + return w; + }; + + PaymentBackground.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PaymentBackground(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.string(); + break; + } + case 2: { + m.fileLength = r.uint64(); + break; + } + case 3: { + m.width = r.uint32(); + break; + } + case 4: { + m.height = r.uint32(); + break; + } + case 5: { + m.mimetype = r.string(); + break; + } + case 6: { + m.placeholderArgb = r.fixed32(); + break; + } + case 7: { + m.textArgb = r.fixed32(); + break; + } + case 8: { + m.subtextArgb = r.fixed32(); + break; + } + case 9: { + m.mediaData = $root.proto.PaymentBackground.MediaData.decode(r, r.uint32()); + break; + } + case 10: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentBackground.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PaymentBackground) + return d; + var m = new $root.proto.PaymentBackground(); + if (d.id != null) { + m.id = String(d.id); + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.width != null) { + m.width = d.width >>> 0; + } + if (d.height != null) { + m.height = d.height >>> 0; + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.placeholderArgb != null) { + m.placeholderArgb = d.placeholderArgb >>> 0; + } + if (d.textArgb != null) { + m.textArgb = d.textArgb >>> 0; + } + if (d.subtextArgb != null) { + m.subtextArgb = d.subtextArgb >>> 0; + } + if (d.mediaData != null) { + if (typeof d.mediaData !== "object") + throw TypeError(".proto.PaymentBackground.mediaData: object expected"); + m.mediaData = $root.proto.PaymentBackground.MediaData.fromObject(d.mediaData); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN": + case 0: + m.type = 0; + break; + case "DEFAULT": + case 1: + m.type = 1; + break; + } + return m; + }; + + PaymentBackground.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.placeholderArgb != null && m.hasOwnProperty("placeholderArgb")) { + d.placeholderArgb = m.placeholderArgb; + if (o.oneofs) + d._placeholderArgb = "placeholderArgb"; + } + if (m.textArgb != null && m.hasOwnProperty("textArgb")) { + d.textArgb = m.textArgb; + if (o.oneofs) + d._textArgb = "textArgb"; + } + if (m.subtextArgb != null && m.hasOwnProperty("subtextArgb")) { + d.subtextArgb = m.subtextArgb; + if (o.oneofs) + d._subtextArgb = "subtextArgb"; + } + if (m.mediaData != null && m.hasOwnProperty("mediaData")) { + d.mediaData = $root.proto.PaymentBackground.MediaData.toObject(m.mediaData, o); + if (o.oneofs) + d._mediaData = "mediaData"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.PaymentBackground.Type[m.type] === undefined ? m.type : $root.proto.PaymentBackground.Type[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + return d; + }; + + PaymentBackground.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentBackground.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PaymentBackground"; + }; + + PaymentBackground.MediaData = (function() { + + function MediaData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MediaData.prototype.mediaKey = null; + MediaData.prototype.mediaKeyTimestamp = null; + MediaData.prototype.fileSha256 = null; + MediaData.prototype.fileEncSha256 = null; + MediaData.prototype.directPath = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaData.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaData.prototype, "_mediaKeyTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["mediaKeyTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaData.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaData.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MediaData.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MediaData.create = function create(properties) { + return new MediaData(properties); + }; + + MediaData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(10).bytes(m.mediaKey); + if (m.mediaKeyTimestamp != null && Object.hasOwnProperty.call(m, "mediaKeyTimestamp")) + w.uint32(16).int64(m.mediaKeyTimestamp); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(26).bytes(m.fileSha256); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(34).bytes(m.fileEncSha256); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(42).string(m.directPath); + return w; + }; + + MediaData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PaymentBackground.MediaData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.mediaKey = r.bytes(); + break; + } + case 2: { + m.mediaKeyTimestamp = r.int64(); + break; + } + case 3: { + m.fileSha256 = r.bytes(); + break; + } + case 4: { + m.fileEncSha256 = r.bytes(); + break; + } + case 5: { + m.directPath = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MediaData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PaymentBackground.MediaData) + return d; + var m = new $root.proto.PaymentBackground.MediaData(); + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.mediaKeyTimestamp != null) { + if ($util.Long) + (m.mediaKeyTimestamp = $util.Long.fromValue(d.mediaKeyTimestamp)).unsigned = false; + else if (typeof d.mediaKeyTimestamp === "string") + m.mediaKeyTimestamp = parseInt(d.mediaKeyTimestamp, 10); + else if (typeof d.mediaKeyTimestamp === "number") + m.mediaKeyTimestamp = d.mediaKeyTimestamp; + else if (typeof d.mediaKeyTimestamp === "object") + m.mediaKeyTimestamp = new $util.LongBits(d.mediaKeyTimestamp.low >>> 0, d.mediaKeyTimestamp.high >>> 0).toNumber(); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + return m; + }; + + MediaData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.mediaKeyTimestamp != null && m.hasOwnProperty("mediaKeyTimestamp")) { + if (typeof m.mediaKeyTimestamp === "number") + d.mediaKeyTimestamp = o.longs === String ? String(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + else + d.mediaKeyTimestamp = o.longs === String ? longToString(m.mediaKeyTimestamp) : o.longs === Number ? longToNumber(m.mediaKeyTimestamp) : m.mediaKeyTimestamp; + if (o.oneofs) + d._mediaKeyTimestamp = "mediaKeyTimestamp"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + return d; + }; + + MediaData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MediaData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PaymentBackground.MediaData"; + }; + + return MediaData; + })(); + + PaymentBackground.Type = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "DEFAULT"] = 1; + return values; + })(); + + return PaymentBackground; + })(); + + proto.PaymentInfo = (function() { + + function PaymentInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentInfo.prototype.currencyDeprecated = null; + PaymentInfo.prototype.amount1000 = null; + PaymentInfo.prototype.receiverJid = null; + PaymentInfo.prototype.status = null; + PaymentInfo.prototype.transactionTimestamp = null; + PaymentInfo.prototype.requestMessageKey = null; + PaymentInfo.prototype.expiryTimestamp = null; + PaymentInfo.prototype.futureproofed = null; + PaymentInfo.prototype.currency = null; + PaymentInfo.prototype.txnStatus = null; + PaymentInfo.prototype.useNoviFiatFormat = null; + PaymentInfo.prototype.primaryAmount = null; + PaymentInfo.prototype.exchangeAmount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_currencyDeprecated", { + get: $util.oneOfGetter($oneOfFields = ["currencyDeprecated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_amount1000", { + get: $util.oneOfGetter($oneOfFields = ["amount1000"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_receiverJid", { + get: $util.oneOfGetter($oneOfFields = ["receiverJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_status", { + get: $util.oneOfGetter($oneOfFields = ["status"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_transactionTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["transactionTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_requestMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["requestMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_expiryTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["expiryTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_futureproofed", { + get: $util.oneOfGetter($oneOfFields = ["futureproofed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_currency", { + get: $util.oneOfGetter($oneOfFields = ["currency"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_txnStatus", { + get: $util.oneOfGetter($oneOfFields = ["txnStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_useNoviFiatFormat", { + get: $util.oneOfGetter($oneOfFields = ["useNoviFiatFormat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_primaryAmount", { + get: $util.oneOfGetter($oneOfFields = ["primaryAmount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfo.prototype, "_exchangeAmount", { + get: $util.oneOfGetter($oneOfFields = ["exchangeAmount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentInfo.create = function create(properties) { + return new PaymentInfo(properties); + }; + + PaymentInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.currencyDeprecated != null && Object.hasOwnProperty.call(m, "currencyDeprecated")) + w.uint32(8).int32(m.currencyDeprecated); + if (m.amount1000 != null && Object.hasOwnProperty.call(m, "amount1000")) + w.uint32(16).uint64(m.amount1000); + if (m.receiverJid != null && Object.hasOwnProperty.call(m, "receiverJid")) + w.uint32(26).string(m.receiverJid); + if (m.status != null && Object.hasOwnProperty.call(m, "status")) + w.uint32(32).int32(m.status); + if (m.transactionTimestamp != null && Object.hasOwnProperty.call(m, "transactionTimestamp")) + w.uint32(40).uint64(m.transactionTimestamp); + if (m.requestMessageKey != null && Object.hasOwnProperty.call(m, "requestMessageKey")) + $root.proto.MessageKey.encode(m.requestMessageKey, w.uint32(50).fork()).ldelim(); + if (m.expiryTimestamp != null && Object.hasOwnProperty.call(m, "expiryTimestamp")) + w.uint32(56).uint64(m.expiryTimestamp); + if (m.futureproofed != null && Object.hasOwnProperty.call(m, "futureproofed")) + w.uint32(64).bool(m.futureproofed); + if (m.currency != null && Object.hasOwnProperty.call(m, "currency")) + w.uint32(74).string(m.currency); + if (m.txnStatus != null && Object.hasOwnProperty.call(m, "txnStatus")) + w.uint32(80).int32(m.txnStatus); + if (m.useNoviFiatFormat != null && Object.hasOwnProperty.call(m, "useNoviFiatFormat")) + w.uint32(88).bool(m.useNoviFiatFormat); + if (m.primaryAmount != null && Object.hasOwnProperty.call(m, "primaryAmount")) + $root.proto.Money.encode(m.primaryAmount, w.uint32(98).fork()).ldelim(); + if (m.exchangeAmount != null && Object.hasOwnProperty.call(m, "exchangeAmount")) + $root.proto.Money.encode(m.exchangeAmount, w.uint32(106).fork()).ldelim(); + return w; + }; + + PaymentInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PaymentInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.currencyDeprecated = r.int32(); + break; + } + case 2: { + m.amount1000 = r.uint64(); + break; + } + case 3: { + m.receiverJid = r.string(); + break; + } + case 4: { + m.status = r.int32(); + break; + } + case 5: { + m.transactionTimestamp = r.uint64(); + break; + } + case 6: { + m.requestMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 7: { + m.expiryTimestamp = r.uint64(); + break; + } + case 8: { + m.futureproofed = r.bool(); + break; + } + case 9: { + m.currency = r.string(); + break; + } + case 10: { + m.txnStatus = r.int32(); + break; + } + case 11: { + m.useNoviFiatFormat = r.bool(); + break; + } + case 12: { + m.primaryAmount = $root.proto.Money.decode(r, r.uint32()); + break; + } + case 13: { + m.exchangeAmount = $root.proto.Money.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PaymentInfo) + return d; + var m = new $root.proto.PaymentInfo(); + switch (d.currencyDeprecated) { + default: + if (typeof d.currencyDeprecated === "number") { + m.currencyDeprecated = d.currencyDeprecated; + break; + } + break; + case "UNKNOWN_CURRENCY": + case 0: + m.currencyDeprecated = 0; + break; + case "INR": + case 1: + m.currencyDeprecated = 1; + break; + } + if (d.amount1000 != null) { + if ($util.Long) + (m.amount1000 = $util.Long.fromValue(d.amount1000)).unsigned = true; + else if (typeof d.amount1000 === "string") + m.amount1000 = parseInt(d.amount1000, 10); + else if (typeof d.amount1000 === "number") + m.amount1000 = d.amount1000; + else if (typeof d.amount1000 === "object") + m.amount1000 = new $util.LongBits(d.amount1000.low >>> 0, d.amount1000.high >>> 0).toNumber(true); + } + if (d.receiverJid != null) { + m.receiverJid = String(d.receiverJid); + } + switch (d.status) { + default: + if (typeof d.status === "number") { + m.status = d.status; + break; + } + break; + case "UNKNOWN_STATUS": + case 0: + m.status = 0; + break; + case "PROCESSING": + case 1: + m.status = 1; + break; + case "SENT": + case 2: + m.status = 2; + break; + case "NEED_TO_ACCEPT": + case 3: + m.status = 3; + break; + case "COMPLETE": + case 4: + m.status = 4; + break; + case "COULD_NOT_COMPLETE": + case 5: + m.status = 5; + break; + case "REFUNDED": + case 6: + m.status = 6; + break; + case "EXPIRED": + case 7: + m.status = 7; + break; + case "REJECTED": + case 8: + m.status = 8; + break; + case "CANCELLED": + case 9: + m.status = 9; + break; + case "WAITING_FOR_PAYER": + case 10: + m.status = 10; + break; + case "WAITING": + case 11: + m.status = 11; + break; + } + if (d.transactionTimestamp != null) { + if ($util.Long) + (m.transactionTimestamp = $util.Long.fromValue(d.transactionTimestamp)).unsigned = true; + else if (typeof d.transactionTimestamp === "string") + m.transactionTimestamp = parseInt(d.transactionTimestamp, 10); + else if (typeof d.transactionTimestamp === "number") + m.transactionTimestamp = d.transactionTimestamp; + else if (typeof d.transactionTimestamp === "object") + m.transactionTimestamp = new $util.LongBits(d.transactionTimestamp.low >>> 0, d.transactionTimestamp.high >>> 0).toNumber(true); + } + if (d.requestMessageKey != null) { + if (typeof d.requestMessageKey !== "object") + throw TypeError(".proto.PaymentInfo.requestMessageKey: object expected"); + m.requestMessageKey = $root.proto.MessageKey.fromObject(d.requestMessageKey); + } + if (d.expiryTimestamp != null) { + if ($util.Long) + (m.expiryTimestamp = $util.Long.fromValue(d.expiryTimestamp)).unsigned = true; + else if (typeof d.expiryTimestamp === "string") + m.expiryTimestamp = parseInt(d.expiryTimestamp, 10); + else if (typeof d.expiryTimestamp === "number") + m.expiryTimestamp = d.expiryTimestamp; + else if (typeof d.expiryTimestamp === "object") + m.expiryTimestamp = new $util.LongBits(d.expiryTimestamp.low >>> 0, d.expiryTimestamp.high >>> 0).toNumber(true); + } + if (d.futureproofed != null) { + m.futureproofed = Boolean(d.futureproofed); + } + if (d.currency != null) { + m.currency = String(d.currency); + } + switch (d.txnStatus) { + default: + if (typeof d.txnStatus === "number") { + m.txnStatus = d.txnStatus; + break; + } + break; + case "UNKNOWN": + case 0: + m.txnStatus = 0; + break; + case "PENDING_SETUP": + case 1: + m.txnStatus = 1; + break; + case "PENDING_RECEIVER_SETUP": + case 2: + m.txnStatus = 2; + break; + case "INIT": + case 3: + m.txnStatus = 3; + break; + case "SUCCESS": + case 4: + m.txnStatus = 4; + break; + case "COMPLETED": + case 5: + m.txnStatus = 5; + break; + case "FAILED": + case 6: + m.txnStatus = 6; + break; + case "FAILED_RISK": + case 7: + m.txnStatus = 7; + break; + case "FAILED_PROCESSING": + case 8: + m.txnStatus = 8; + break; + case "FAILED_RECEIVER_PROCESSING": + case 9: + m.txnStatus = 9; + break; + case "FAILED_DA": + case 10: + m.txnStatus = 10; + break; + case "FAILED_DA_FINAL": + case 11: + m.txnStatus = 11; + break; + case "REFUNDED_TXN": + case 12: + m.txnStatus = 12; + break; + case "REFUND_FAILED": + case 13: + m.txnStatus = 13; + break; + case "REFUND_FAILED_PROCESSING": + case 14: + m.txnStatus = 14; + break; + case "REFUND_FAILED_DA": + case 15: + m.txnStatus = 15; + break; + case "EXPIRED_TXN": + case 16: + m.txnStatus = 16; + break; + case "AUTH_CANCELED": + case 17: + m.txnStatus = 17; + break; + case "AUTH_CANCEL_FAILED_PROCESSING": + case 18: + m.txnStatus = 18; + break; + case "AUTH_CANCEL_FAILED": + case 19: + m.txnStatus = 19; + break; + case "COLLECT_INIT": + case 20: + m.txnStatus = 20; + break; + case "COLLECT_SUCCESS": + case 21: + m.txnStatus = 21; + break; + case "COLLECT_FAILED": + case 22: + m.txnStatus = 22; + break; + case "COLLECT_FAILED_RISK": + case 23: + m.txnStatus = 23; + break; + case "COLLECT_REJECTED": + case 24: + m.txnStatus = 24; + break; + case "COLLECT_EXPIRED": + case 25: + m.txnStatus = 25; + break; + case "COLLECT_CANCELED": + case 26: + m.txnStatus = 26; + break; + case "COLLECT_CANCELLING": + case 27: + m.txnStatus = 27; + break; + case "IN_REVIEW": + case 28: + m.txnStatus = 28; + break; + case "REVERSAL_SUCCESS": + case 29: + m.txnStatus = 29; + break; + case "REVERSAL_PENDING": + case 30: + m.txnStatus = 30; + break; + case "REFUND_PENDING": + case 31: + m.txnStatus = 31; + break; + } + if (d.useNoviFiatFormat != null) { + m.useNoviFiatFormat = Boolean(d.useNoviFiatFormat); + } + if (d.primaryAmount != null) { + if (typeof d.primaryAmount !== "object") + throw TypeError(".proto.PaymentInfo.primaryAmount: object expected"); + m.primaryAmount = $root.proto.Money.fromObject(d.primaryAmount); + } + if (d.exchangeAmount != null) { + if (typeof d.exchangeAmount !== "object") + throw TypeError(".proto.PaymentInfo.exchangeAmount: object expected"); + m.exchangeAmount = $root.proto.Money.fromObject(d.exchangeAmount); + } + return m; + }; + + PaymentInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.currencyDeprecated != null && m.hasOwnProperty("currencyDeprecated")) { + d.currencyDeprecated = o.enums === String ? $root.proto.PaymentInfo.Currency[m.currencyDeprecated] === undefined ? m.currencyDeprecated : $root.proto.PaymentInfo.Currency[m.currencyDeprecated] : m.currencyDeprecated; + if (o.oneofs) + d._currencyDeprecated = "currencyDeprecated"; + } + if (m.amount1000 != null && m.hasOwnProperty("amount1000")) { + if (typeof m.amount1000 === "number") + d.amount1000 = o.longs === String ? String(m.amount1000) : m.amount1000; + else + d.amount1000 = o.longs === String ? longToString(m.amount1000, true) : o.longs === Number ? longToNumber(m.amount1000, true) : m.amount1000; + if (o.oneofs) + d._amount1000 = "amount1000"; + } + if (m.receiverJid != null && m.hasOwnProperty("receiverJid")) { + d.receiverJid = m.receiverJid; + if (o.oneofs) + d._receiverJid = "receiverJid"; + } + if (m.status != null && m.hasOwnProperty("status")) { + d.status = o.enums === String ? $root.proto.PaymentInfo.Status[m.status] === undefined ? m.status : $root.proto.PaymentInfo.Status[m.status] : m.status; + if (o.oneofs) + d._status = "status"; + } + if (m.transactionTimestamp != null && m.hasOwnProperty("transactionTimestamp")) { + if (typeof m.transactionTimestamp === "number") + d.transactionTimestamp = o.longs === String ? String(m.transactionTimestamp) : m.transactionTimestamp; + else + d.transactionTimestamp = o.longs === String ? longToString(m.transactionTimestamp, true) : o.longs === Number ? longToNumber(m.transactionTimestamp, true) : m.transactionTimestamp; + if (o.oneofs) + d._transactionTimestamp = "transactionTimestamp"; + } + if (m.requestMessageKey != null && m.hasOwnProperty("requestMessageKey")) { + d.requestMessageKey = $root.proto.MessageKey.toObject(m.requestMessageKey, o); + if (o.oneofs) + d._requestMessageKey = "requestMessageKey"; + } + if (m.expiryTimestamp != null && m.hasOwnProperty("expiryTimestamp")) { + if (typeof m.expiryTimestamp === "number") + d.expiryTimestamp = o.longs === String ? String(m.expiryTimestamp) : m.expiryTimestamp; + else + d.expiryTimestamp = o.longs === String ? longToString(m.expiryTimestamp, true) : o.longs === Number ? longToNumber(m.expiryTimestamp, true) : m.expiryTimestamp; + if (o.oneofs) + d._expiryTimestamp = "expiryTimestamp"; + } + if (m.futureproofed != null && m.hasOwnProperty("futureproofed")) { + d.futureproofed = m.futureproofed; + if (o.oneofs) + d._futureproofed = "futureproofed"; + } + if (m.currency != null && m.hasOwnProperty("currency")) { + d.currency = m.currency; + if (o.oneofs) + d._currency = "currency"; + } + if (m.txnStatus != null && m.hasOwnProperty("txnStatus")) { + d.txnStatus = o.enums === String ? $root.proto.PaymentInfo.TxnStatus[m.txnStatus] === undefined ? m.txnStatus : $root.proto.PaymentInfo.TxnStatus[m.txnStatus] : m.txnStatus; + if (o.oneofs) + d._txnStatus = "txnStatus"; + } + if (m.useNoviFiatFormat != null && m.hasOwnProperty("useNoviFiatFormat")) { + d.useNoviFiatFormat = m.useNoviFiatFormat; + if (o.oneofs) + d._useNoviFiatFormat = "useNoviFiatFormat"; + } + if (m.primaryAmount != null && m.hasOwnProperty("primaryAmount")) { + d.primaryAmount = $root.proto.Money.toObject(m.primaryAmount, o); + if (o.oneofs) + d._primaryAmount = "primaryAmount"; + } + if (m.exchangeAmount != null && m.hasOwnProperty("exchangeAmount")) { + d.exchangeAmount = $root.proto.Money.toObject(m.exchangeAmount, o); + if (o.oneofs) + d._exchangeAmount = "exchangeAmount"; + } + return d; + }; + + PaymentInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PaymentInfo"; + }; + + PaymentInfo.Currency = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_CURRENCY"] = 0; + values[valuesById[1] = "INR"] = 1; + return values; + })(); + + PaymentInfo.Status = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_STATUS"] = 0; + values[valuesById[1] = "PROCESSING"] = 1; + values[valuesById[2] = "SENT"] = 2; + values[valuesById[3] = "NEED_TO_ACCEPT"] = 3; + values[valuesById[4] = "COMPLETE"] = 4; + values[valuesById[5] = "COULD_NOT_COMPLETE"] = 5; + values[valuesById[6] = "REFUNDED"] = 6; + values[valuesById[7] = "EXPIRED"] = 7; + values[valuesById[8] = "REJECTED"] = 8; + values[valuesById[9] = "CANCELLED"] = 9; + values[valuesById[10] = "WAITING_FOR_PAYER"] = 10; + values[valuesById[11] = "WAITING"] = 11; + return values; + })(); + + PaymentInfo.TxnStatus = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "PENDING_SETUP"] = 1; + values[valuesById[2] = "PENDING_RECEIVER_SETUP"] = 2; + values[valuesById[3] = "INIT"] = 3; + values[valuesById[4] = "SUCCESS"] = 4; + values[valuesById[5] = "COMPLETED"] = 5; + values[valuesById[6] = "FAILED"] = 6; + values[valuesById[7] = "FAILED_RISK"] = 7; + values[valuesById[8] = "FAILED_PROCESSING"] = 8; + values[valuesById[9] = "FAILED_RECEIVER_PROCESSING"] = 9; + values[valuesById[10] = "FAILED_DA"] = 10; + values[valuesById[11] = "FAILED_DA_FINAL"] = 11; + values[valuesById[12] = "REFUNDED_TXN"] = 12; + values[valuesById[13] = "REFUND_FAILED"] = 13; + values[valuesById[14] = "REFUND_FAILED_PROCESSING"] = 14; + values[valuesById[15] = "REFUND_FAILED_DA"] = 15; + values[valuesById[16] = "EXPIRED_TXN"] = 16; + values[valuesById[17] = "AUTH_CANCELED"] = 17; + values[valuesById[18] = "AUTH_CANCEL_FAILED_PROCESSING"] = 18; + values[valuesById[19] = "AUTH_CANCEL_FAILED"] = 19; + values[valuesById[20] = "COLLECT_INIT"] = 20; + values[valuesById[21] = "COLLECT_SUCCESS"] = 21; + values[valuesById[22] = "COLLECT_FAILED"] = 22; + values[valuesById[23] = "COLLECT_FAILED_RISK"] = 23; + values[valuesById[24] = "COLLECT_REJECTED"] = 24; + values[valuesById[25] = "COLLECT_EXPIRED"] = 25; + values[valuesById[26] = "COLLECT_CANCELED"] = 26; + values[valuesById[27] = "COLLECT_CANCELLING"] = 27; + values[valuesById[28] = "IN_REVIEW"] = 28; + values[valuesById[29] = "REVERSAL_SUCCESS"] = 29; + values[valuesById[30] = "REVERSAL_PENDING"] = 30; + values[valuesById[31] = "REFUND_PENDING"] = 31; + return values; + })(); + + return PaymentInfo; + })(); + + proto.PhoneNumberToLIDMapping = (function() { + + function PhoneNumberToLIDMapping(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PhoneNumberToLIDMapping.prototype.pnJid = null; + PhoneNumberToLIDMapping.prototype.lidJid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PhoneNumberToLIDMapping.prototype, "_pnJid", { + get: $util.oneOfGetter($oneOfFields = ["pnJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PhoneNumberToLIDMapping.prototype, "_lidJid", { + get: $util.oneOfGetter($oneOfFields = ["lidJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PhoneNumberToLIDMapping.create = function create(properties) { + return new PhoneNumberToLIDMapping(properties); + }; + + PhoneNumberToLIDMapping.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pnJid != null && Object.hasOwnProperty.call(m, "pnJid")) + w.uint32(10).string(m.pnJid); + if (m.lidJid != null && Object.hasOwnProperty.call(m, "lidJid")) + w.uint32(18).string(m.lidJid); + return w; + }; + + PhoneNumberToLIDMapping.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PhoneNumberToLIDMapping(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.pnJid = r.string(); + break; + } + case 2: { + m.lidJid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PhoneNumberToLIDMapping.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PhoneNumberToLIDMapping) + return d; + var m = new $root.proto.PhoneNumberToLIDMapping(); + if (d.pnJid != null) { + m.pnJid = String(d.pnJid); + } + if (d.lidJid != null) { + m.lidJid = String(d.lidJid); + } + return m; + }; + + PhoneNumberToLIDMapping.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.pnJid != null && m.hasOwnProperty("pnJid")) { + d.pnJid = m.pnJid; + if (o.oneofs) + d._pnJid = "pnJid"; + } + if (m.lidJid != null && m.hasOwnProperty("lidJid")) { + d.lidJid = m.lidJid; + if (o.oneofs) + d._lidJid = "lidJid"; + } + return d; + }; + + PhoneNumberToLIDMapping.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PhoneNumberToLIDMapping.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PhoneNumberToLIDMapping"; + }; + + return PhoneNumberToLIDMapping; + })(); + + proto.PhotoChange = (function() { + + function PhotoChange(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PhotoChange.prototype.oldPhoto = null; + PhotoChange.prototype.newPhoto = null; + PhotoChange.prototype.newPhotoId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PhotoChange.prototype, "_oldPhoto", { + get: $util.oneOfGetter($oneOfFields = ["oldPhoto"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PhotoChange.prototype, "_newPhoto", { + get: $util.oneOfGetter($oneOfFields = ["newPhoto"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PhotoChange.prototype, "_newPhotoId", { + get: $util.oneOfGetter($oneOfFields = ["newPhotoId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PhotoChange.create = function create(properties) { + return new PhotoChange(properties); + }; + + PhotoChange.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.oldPhoto != null && Object.hasOwnProperty.call(m, "oldPhoto")) + w.uint32(10).bytes(m.oldPhoto); + if (m.newPhoto != null && Object.hasOwnProperty.call(m, "newPhoto")) + w.uint32(18).bytes(m.newPhoto); + if (m.newPhotoId != null && Object.hasOwnProperty.call(m, "newPhotoId")) + w.uint32(24).uint32(m.newPhotoId); + return w; + }; + + PhotoChange.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PhotoChange(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.oldPhoto = r.bytes(); + break; + } + case 2: { + m.newPhoto = r.bytes(); + break; + } + case 3: { + m.newPhotoId = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PhotoChange.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PhotoChange) + return d; + var m = new $root.proto.PhotoChange(); + if (d.oldPhoto != null) { + if (typeof d.oldPhoto === "string") + $util.base64.decode(d.oldPhoto, m.oldPhoto = $util.newBuffer($util.base64.length(d.oldPhoto)), 0); + else if (d.oldPhoto.length >= 0) + m.oldPhoto = d.oldPhoto; + } + if (d.newPhoto != null) { + if (typeof d.newPhoto === "string") + $util.base64.decode(d.newPhoto, m.newPhoto = $util.newBuffer($util.base64.length(d.newPhoto)), 0); + else if (d.newPhoto.length >= 0) + m.newPhoto = d.newPhoto; + } + if (d.newPhotoId != null) { + m.newPhotoId = d.newPhotoId >>> 0; + } + return m; + }; + + PhotoChange.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.oldPhoto != null && m.hasOwnProperty("oldPhoto")) { + d.oldPhoto = o.bytes === String ? $util.base64.encode(m.oldPhoto, 0, m.oldPhoto.length) : o.bytes === Array ? Array.prototype.slice.call(m.oldPhoto) : m.oldPhoto; + if (o.oneofs) + d._oldPhoto = "oldPhoto"; + } + if (m.newPhoto != null && m.hasOwnProperty("newPhoto")) { + d.newPhoto = o.bytes === String ? $util.base64.encode(m.newPhoto, 0, m.newPhoto.length) : o.bytes === Array ? Array.prototype.slice.call(m.newPhoto) : m.newPhoto; + if (o.oneofs) + d._newPhoto = "newPhoto"; + } + if (m.newPhotoId != null && m.hasOwnProperty("newPhotoId")) { + d.newPhotoId = m.newPhotoId; + if (o.oneofs) + d._newPhotoId = "newPhotoId"; + } + return d; + }; + + PhotoChange.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PhotoChange.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PhotoChange"; + }; + + return PhotoChange; + })(); + + proto.PinInChat = (function() { + + function PinInChat(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PinInChat.prototype.type = null; + PinInChat.prototype.key = null; + PinInChat.prototype.senderTimestampMs = null; + PinInChat.prototype.serverTimestampMs = null; + PinInChat.prototype.messageAddOnContextInfo = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChat.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChat.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChat.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChat.prototype, "_serverTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["serverTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinInChat.prototype, "_messageAddOnContextInfo", { + get: $util.oneOfGetter($oneOfFields = ["messageAddOnContextInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PinInChat.create = function create(properties) { + return new PinInChat(properties); + }; + + PinInChat.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(18).fork()).ldelim(); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(24).int64(m.senderTimestampMs); + if (m.serverTimestampMs != null && Object.hasOwnProperty.call(m, "serverTimestampMs")) + w.uint32(32).int64(m.serverTimestampMs); + if (m.messageAddOnContextInfo != null && Object.hasOwnProperty.call(m, "messageAddOnContextInfo")) + $root.proto.MessageAddOnContextInfo.encode(m.messageAddOnContextInfo, w.uint32(42).fork()).ldelim(); + return w; + }; + + PinInChat.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PinInChat(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + case 2: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 3: { + m.senderTimestampMs = r.int64(); + break; + } + case 4: { + m.serverTimestampMs = r.int64(); + break; + } + case 5: { + m.messageAddOnContextInfo = $root.proto.MessageAddOnContextInfo.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PinInChat.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PinInChat) + return d; + var m = new $root.proto.PinInChat(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN_TYPE": + case 0: + m.type = 0; + break; + case "PIN_FOR_ALL": + case 1: + m.type = 1; + break; + case "UNPIN_FOR_ALL": + case 2: + m.type = 2; + break; + } + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.PinInChat.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + if (d.serverTimestampMs != null) { + if ($util.Long) + (m.serverTimestampMs = $util.Long.fromValue(d.serverTimestampMs)).unsigned = false; + else if (typeof d.serverTimestampMs === "string") + m.serverTimestampMs = parseInt(d.serverTimestampMs, 10); + else if (typeof d.serverTimestampMs === "number") + m.serverTimestampMs = d.serverTimestampMs; + else if (typeof d.serverTimestampMs === "object") + m.serverTimestampMs = new $util.LongBits(d.serverTimestampMs.low >>> 0, d.serverTimestampMs.high >>> 0).toNumber(); + } + if (d.messageAddOnContextInfo != null) { + if (typeof d.messageAddOnContextInfo !== "object") + throw TypeError(".proto.PinInChat.messageAddOnContextInfo: object expected"); + m.messageAddOnContextInfo = $root.proto.MessageAddOnContextInfo.fromObject(d.messageAddOnContextInfo); + } + return m; + }; + + PinInChat.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.PinInChat.Type[m.type] === undefined ? m.type : $root.proto.PinInChat.Type[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + if (m.serverTimestampMs != null && m.hasOwnProperty("serverTimestampMs")) { + if (typeof m.serverTimestampMs === "number") + d.serverTimestampMs = o.longs === String ? String(m.serverTimestampMs) : m.serverTimestampMs; + else + d.serverTimestampMs = o.longs === String ? longToString(m.serverTimestampMs) : o.longs === Number ? longToNumber(m.serverTimestampMs) : m.serverTimestampMs; + if (o.oneofs) + d._serverTimestampMs = "serverTimestampMs"; + } + if (m.messageAddOnContextInfo != null && m.hasOwnProperty("messageAddOnContextInfo")) { + d.messageAddOnContextInfo = $root.proto.MessageAddOnContextInfo.toObject(m.messageAddOnContextInfo, o); + if (o.oneofs) + d._messageAddOnContextInfo = "messageAddOnContextInfo"; + } + return d; + }; + + PinInChat.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PinInChat.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PinInChat"; + }; + + PinInChat.Type = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_TYPE"] = 0; + values[valuesById[1] = "PIN_FOR_ALL"] = 1; + values[valuesById[2] = "UNPIN_FOR_ALL"] = 2; + return values; + })(); + + return PinInChat; + })(); + + proto.Point = (function() { + + function Point(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Point.prototype.xDeprecated = null; + Point.prototype.yDeprecated = null; + Point.prototype.x = null; + Point.prototype.y = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Point.prototype, "_xDeprecated", { + get: $util.oneOfGetter($oneOfFields = ["xDeprecated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Point.prototype, "_yDeprecated", { + get: $util.oneOfGetter($oneOfFields = ["yDeprecated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Point.prototype, "_x", { + get: $util.oneOfGetter($oneOfFields = ["x"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Point.prototype, "_y", { + get: $util.oneOfGetter($oneOfFields = ["y"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Point.create = function create(properties) { + return new Point(properties); + }; + + Point.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.xDeprecated != null && Object.hasOwnProperty.call(m, "xDeprecated")) + w.uint32(8).int32(m.xDeprecated); + if (m.yDeprecated != null && Object.hasOwnProperty.call(m, "yDeprecated")) + w.uint32(16).int32(m.yDeprecated); + if (m.x != null && Object.hasOwnProperty.call(m, "x")) + w.uint32(25).double(m.x); + if (m.y != null && Object.hasOwnProperty.call(m, "y")) + w.uint32(33).double(m.y); + return w; + }; + + Point.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Point(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.xDeprecated = r.int32(); + break; + } + case 2: { + m.yDeprecated = r.int32(); + break; + } + case 3: { + m.x = r.double(); + break; + } + case 4: { + m.y = r.double(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Point.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Point) + return d; + var m = new $root.proto.Point(); + if (d.xDeprecated != null) { + m.xDeprecated = d.xDeprecated | 0; + } + if (d.yDeprecated != null) { + m.yDeprecated = d.yDeprecated | 0; + } + if (d.x != null) { + m.x = Number(d.x); + } + if (d.y != null) { + m.y = Number(d.y); + } + return m; + }; + + Point.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.xDeprecated != null && m.hasOwnProperty("xDeprecated")) { + d.xDeprecated = m.xDeprecated; + if (o.oneofs) + d._xDeprecated = "xDeprecated"; + } + if (m.yDeprecated != null && m.hasOwnProperty("yDeprecated")) { + d.yDeprecated = m.yDeprecated; + if (o.oneofs) + d._yDeprecated = "yDeprecated"; + } + if (m.x != null && m.hasOwnProperty("x")) { + d.x = o.json && !isFinite(m.x) ? String(m.x) : m.x; + if (o.oneofs) + d._x = "x"; + } + if (m.y != null && m.hasOwnProperty("y")) { + d.y = o.json && !isFinite(m.y) ? String(m.y) : m.y; + if (o.oneofs) + d._y = "y"; + } + return d; + }; + + Point.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Point.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Point"; + }; + + return Point; + })(); + + proto.PollAdditionalMetadata = (function() { + + function PollAdditionalMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollAdditionalMetadata.prototype.pollInvalidated = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollAdditionalMetadata.prototype, "_pollInvalidated", { + get: $util.oneOfGetter($oneOfFields = ["pollInvalidated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollAdditionalMetadata.create = function create(properties) { + return new PollAdditionalMetadata(properties); + }; + + PollAdditionalMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pollInvalidated != null && Object.hasOwnProperty.call(m, "pollInvalidated")) + w.uint32(8).bool(m.pollInvalidated); + return w; + }; + + PollAdditionalMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PollAdditionalMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.pollInvalidated = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollAdditionalMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PollAdditionalMetadata) + return d; + var m = new $root.proto.PollAdditionalMetadata(); + if (d.pollInvalidated != null) { + m.pollInvalidated = Boolean(d.pollInvalidated); + } + return m; + }; + + PollAdditionalMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.pollInvalidated != null && m.hasOwnProperty("pollInvalidated")) { + d.pollInvalidated = m.pollInvalidated; + if (o.oneofs) + d._pollInvalidated = "pollInvalidated"; + } + return d; + }; + + PollAdditionalMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollAdditionalMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PollAdditionalMetadata"; + }; + + return PollAdditionalMetadata; + })(); + + proto.PollEncValue = (function() { + + function PollEncValue(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollEncValue.prototype.encPayload = null; + PollEncValue.prototype.encIv = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollEncValue.prototype, "_encPayload", { + get: $util.oneOfGetter($oneOfFields = ["encPayload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollEncValue.prototype, "_encIv", { + get: $util.oneOfGetter($oneOfFields = ["encIv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollEncValue.create = function create(properties) { + return new PollEncValue(properties); + }; + + PollEncValue.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.encPayload != null && Object.hasOwnProperty.call(m, "encPayload")) + w.uint32(10).bytes(m.encPayload); + if (m.encIv != null && Object.hasOwnProperty.call(m, "encIv")) + w.uint32(18).bytes(m.encIv); + return w; + }; + + PollEncValue.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PollEncValue(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.encPayload = r.bytes(); + break; + } + case 2: { + m.encIv = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollEncValue.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PollEncValue) + return d; + var m = new $root.proto.PollEncValue(); + if (d.encPayload != null) { + if (typeof d.encPayload === "string") + $util.base64.decode(d.encPayload, m.encPayload = $util.newBuffer($util.base64.length(d.encPayload)), 0); + else if (d.encPayload.length >= 0) + m.encPayload = d.encPayload; + } + if (d.encIv != null) { + if (typeof d.encIv === "string") + $util.base64.decode(d.encIv, m.encIv = $util.newBuffer($util.base64.length(d.encIv)), 0); + else if (d.encIv.length >= 0) + m.encIv = d.encIv; + } + return m; + }; + + PollEncValue.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.encPayload != null && m.hasOwnProperty("encPayload")) { + d.encPayload = o.bytes === String ? $util.base64.encode(m.encPayload, 0, m.encPayload.length) : o.bytes === Array ? Array.prototype.slice.call(m.encPayload) : m.encPayload; + if (o.oneofs) + d._encPayload = "encPayload"; + } + if (m.encIv != null && m.hasOwnProperty("encIv")) { + d.encIv = o.bytes === String ? $util.base64.encode(m.encIv, 0, m.encIv.length) : o.bytes === Array ? Array.prototype.slice.call(m.encIv) : m.encIv; + if (o.oneofs) + d._encIv = "encIv"; + } + return d; + }; + + PollEncValue.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollEncValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PollEncValue"; + }; + + return PollEncValue; + })(); + + proto.PollUpdate = (function() { + + function PollUpdate(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PollUpdate.prototype.pollUpdateMessageKey = null; + PollUpdate.prototype.vote = null; + PollUpdate.prototype.senderTimestampMs = null; + PollUpdate.prototype.serverTimestampMs = null; + PollUpdate.prototype.unread = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdate.prototype, "_pollUpdateMessageKey", { + get: $util.oneOfGetter($oneOfFields = ["pollUpdateMessageKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdate.prototype, "_vote", { + get: $util.oneOfGetter($oneOfFields = ["vote"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdate.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdate.prototype, "_serverTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["serverTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PollUpdate.prototype, "_unread", { + get: $util.oneOfGetter($oneOfFields = ["unread"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PollUpdate.create = function create(properties) { + return new PollUpdate(properties); + }; + + PollUpdate.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pollUpdateMessageKey != null && Object.hasOwnProperty.call(m, "pollUpdateMessageKey")) + $root.proto.MessageKey.encode(m.pollUpdateMessageKey, w.uint32(10).fork()).ldelim(); + if (m.vote != null && Object.hasOwnProperty.call(m, "vote")) + $root.proto.Message.PollVoteMessage.encode(m.vote, w.uint32(18).fork()).ldelim(); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(24).int64(m.senderTimestampMs); + if (m.serverTimestampMs != null && Object.hasOwnProperty.call(m, "serverTimestampMs")) + w.uint32(32).int64(m.serverTimestampMs); + if (m.unread != null && Object.hasOwnProperty.call(m, "unread")) + w.uint32(40).bool(m.unread); + return w; + }; + + PollUpdate.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PollUpdate(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.pollUpdateMessageKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.vote = $root.proto.Message.PollVoteMessage.decode(r, r.uint32()); + break; + } + case 3: { + m.senderTimestampMs = r.int64(); + break; + } + case 4: { + m.serverTimestampMs = r.int64(); + break; + } + case 5: { + m.unread = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PollUpdate.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PollUpdate) + return d; + var m = new $root.proto.PollUpdate(); + if (d.pollUpdateMessageKey != null) { + if (typeof d.pollUpdateMessageKey !== "object") + throw TypeError(".proto.PollUpdate.pollUpdateMessageKey: object expected"); + m.pollUpdateMessageKey = $root.proto.MessageKey.fromObject(d.pollUpdateMessageKey); + } + if (d.vote != null) { + if (typeof d.vote !== "object") + throw TypeError(".proto.PollUpdate.vote: object expected"); + m.vote = $root.proto.Message.PollVoteMessage.fromObject(d.vote); + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + if (d.serverTimestampMs != null) { + if ($util.Long) + (m.serverTimestampMs = $util.Long.fromValue(d.serverTimestampMs)).unsigned = false; + else if (typeof d.serverTimestampMs === "string") + m.serverTimestampMs = parseInt(d.serverTimestampMs, 10); + else if (typeof d.serverTimestampMs === "number") + m.serverTimestampMs = d.serverTimestampMs; + else if (typeof d.serverTimestampMs === "object") + m.serverTimestampMs = new $util.LongBits(d.serverTimestampMs.low >>> 0, d.serverTimestampMs.high >>> 0).toNumber(); + } + if (d.unread != null) { + m.unread = Boolean(d.unread); + } + return m; + }; + + PollUpdate.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.pollUpdateMessageKey != null && m.hasOwnProperty("pollUpdateMessageKey")) { + d.pollUpdateMessageKey = $root.proto.MessageKey.toObject(m.pollUpdateMessageKey, o); + if (o.oneofs) + d._pollUpdateMessageKey = "pollUpdateMessageKey"; + } + if (m.vote != null && m.hasOwnProperty("vote")) { + d.vote = $root.proto.Message.PollVoteMessage.toObject(m.vote, o); + if (o.oneofs) + d._vote = "vote"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + if (m.serverTimestampMs != null && m.hasOwnProperty("serverTimestampMs")) { + if (typeof m.serverTimestampMs === "number") + d.serverTimestampMs = o.longs === String ? String(m.serverTimestampMs) : m.serverTimestampMs; + else + d.serverTimestampMs = o.longs === String ? longToString(m.serverTimestampMs) : o.longs === Number ? longToNumber(m.serverTimestampMs) : m.serverTimestampMs; + if (o.oneofs) + d._serverTimestampMs = "serverTimestampMs"; + } + if (m.unread != null && m.hasOwnProperty("unread")) { + d.unread = m.unread; + if (o.oneofs) + d._unread = "unread"; + } + return d; + }; + + PollUpdate.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PollUpdate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PollUpdate"; + }; + + return PollUpdate; + })(); + + proto.PreKeyRecordStructure = (function() { + + function PreKeyRecordStructure(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PreKeyRecordStructure.prototype.id = null; + PreKeyRecordStructure.prototype.publicKey = null; + PreKeyRecordStructure.prototype.privateKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeyRecordStructure.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeyRecordStructure.prototype, "_publicKey", { + get: $util.oneOfGetter($oneOfFields = ["publicKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeyRecordStructure.prototype, "_privateKey", { + get: $util.oneOfGetter($oneOfFields = ["privateKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PreKeyRecordStructure.create = function create(properties) { + return new PreKeyRecordStructure(properties); + }; + + PreKeyRecordStructure.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(8).uint32(m.id); + if (m.publicKey != null && Object.hasOwnProperty.call(m, "publicKey")) + w.uint32(18).bytes(m.publicKey); + if (m.privateKey != null && Object.hasOwnProperty.call(m, "privateKey")) + w.uint32(26).bytes(m.privateKey); + return w; + }; + + PreKeyRecordStructure.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PreKeyRecordStructure(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.uint32(); + break; + } + case 2: { + m.publicKey = r.bytes(); + break; + } + case 3: { + m.privateKey = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PreKeyRecordStructure.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PreKeyRecordStructure) + return d; + var m = new $root.proto.PreKeyRecordStructure(); + if (d.id != null) { + m.id = d.id >>> 0; + } + if (d.publicKey != null) { + if (typeof d.publicKey === "string") + $util.base64.decode(d.publicKey, m.publicKey = $util.newBuffer($util.base64.length(d.publicKey)), 0); + else if (d.publicKey.length >= 0) + m.publicKey = d.publicKey; + } + if (d.privateKey != null) { + if (typeof d.privateKey === "string") + $util.base64.decode(d.privateKey, m.privateKey = $util.newBuffer($util.base64.length(d.privateKey)), 0); + else if (d.privateKey.length >= 0) + m.privateKey = d.privateKey; + } + return m; + }; + + PreKeyRecordStructure.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.publicKey != null && m.hasOwnProperty("publicKey")) { + d.publicKey = o.bytes === String ? $util.base64.encode(m.publicKey, 0, m.publicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.publicKey) : m.publicKey; + if (o.oneofs) + d._publicKey = "publicKey"; + } + if (m.privateKey != null && m.hasOwnProperty("privateKey")) { + d.privateKey = o.bytes === String ? $util.base64.encode(m.privateKey, 0, m.privateKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.privateKey) : m.privateKey; + if (o.oneofs) + d._privateKey = "privateKey"; + } + return d; + }; + + PreKeyRecordStructure.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PreKeyRecordStructure.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PreKeyRecordStructure"; + }; + + return PreKeyRecordStructure; + })(); + + proto.PreKeySignalMessage = (function() { + + function PreKeySignalMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PreKeySignalMessage.prototype.registrationId = null; + PreKeySignalMessage.prototype.preKeyId = null; + PreKeySignalMessage.prototype.signedPreKeyId = null; + PreKeySignalMessage.prototype.baseKey = null; + PreKeySignalMessage.prototype.identityKey = null; + PreKeySignalMessage.prototype.message = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeySignalMessage.prototype, "_registrationId", { + get: $util.oneOfGetter($oneOfFields = ["registrationId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeySignalMessage.prototype, "_preKeyId", { + get: $util.oneOfGetter($oneOfFields = ["preKeyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeySignalMessage.prototype, "_signedPreKeyId", { + get: $util.oneOfGetter($oneOfFields = ["signedPreKeyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeySignalMessage.prototype, "_baseKey", { + get: $util.oneOfGetter($oneOfFields = ["baseKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeySignalMessage.prototype, "_identityKey", { + get: $util.oneOfGetter($oneOfFields = ["identityKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PreKeySignalMessage.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PreKeySignalMessage.create = function create(properties) { + return new PreKeySignalMessage(properties); + }; + + PreKeySignalMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.preKeyId != null && Object.hasOwnProperty.call(m, "preKeyId")) + w.uint32(8).uint32(m.preKeyId); + if (m.baseKey != null && Object.hasOwnProperty.call(m, "baseKey")) + w.uint32(18).bytes(m.baseKey); + if (m.identityKey != null && Object.hasOwnProperty.call(m, "identityKey")) + w.uint32(26).bytes(m.identityKey); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + w.uint32(34).bytes(m.message); + if (m.registrationId != null && Object.hasOwnProperty.call(m, "registrationId")) + w.uint32(40).uint32(m.registrationId); + if (m.signedPreKeyId != null && Object.hasOwnProperty.call(m, "signedPreKeyId")) + w.uint32(48).uint32(m.signedPreKeyId); + return w; + }; + + PreKeySignalMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PreKeySignalMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 5: { + m.registrationId = r.uint32(); + break; + } + case 1: { + m.preKeyId = r.uint32(); + break; + } + case 6: { + m.signedPreKeyId = r.uint32(); + break; + } + case 2: { + m.baseKey = r.bytes(); + break; + } + case 3: { + m.identityKey = r.bytes(); + break; + } + case 4: { + m.message = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PreKeySignalMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PreKeySignalMessage) + return d; + var m = new $root.proto.PreKeySignalMessage(); + if (d.registrationId != null) { + m.registrationId = d.registrationId >>> 0; + } + if (d.preKeyId != null) { + m.preKeyId = d.preKeyId >>> 0; + } + if (d.signedPreKeyId != null) { + m.signedPreKeyId = d.signedPreKeyId >>> 0; + } + if (d.baseKey != null) { + if (typeof d.baseKey === "string") + $util.base64.decode(d.baseKey, m.baseKey = $util.newBuffer($util.base64.length(d.baseKey)), 0); + else if (d.baseKey.length >= 0) + m.baseKey = d.baseKey; + } + if (d.identityKey != null) { + if (typeof d.identityKey === "string") + $util.base64.decode(d.identityKey, m.identityKey = $util.newBuffer($util.base64.length(d.identityKey)), 0); + else if (d.identityKey.length >= 0) + m.identityKey = d.identityKey; + } + if (d.message != null) { + if (typeof d.message === "string") + $util.base64.decode(d.message, m.message = $util.newBuffer($util.base64.length(d.message)), 0); + else if (d.message.length >= 0) + m.message = d.message; + } + return m; + }; + + PreKeySignalMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.preKeyId != null && m.hasOwnProperty("preKeyId")) { + d.preKeyId = m.preKeyId; + if (o.oneofs) + d._preKeyId = "preKeyId"; + } + if (m.baseKey != null && m.hasOwnProperty("baseKey")) { + d.baseKey = o.bytes === String ? $util.base64.encode(m.baseKey, 0, m.baseKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.baseKey) : m.baseKey; + if (o.oneofs) + d._baseKey = "baseKey"; + } + if (m.identityKey != null && m.hasOwnProperty("identityKey")) { + d.identityKey = o.bytes === String ? $util.base64.encode(m.identityKey, 0, m.identityKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.identityKey) : m.identityKey; + if (o.oneofs) + d._identityKey = "identityKey"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = o.bytes === String ? $util.base64.encode(m.message, 0, m.message.length) : o.bytes === Array ? Array.prototype.slice.call(m.message) : m.message; + if (o.oneofs) + d._message = "message"; + } + if (m.registrationId != null && m.hasOwnProperty("registrationId")) { + d.registrationId = m.registrationId; + if (o.oneofs) + d._registrationId = "registrationId"; + } + if (m.signedPreKeyId != null && m.hasOwnProperty("signedPreKeyId")) { + d.signedPreKeyId = m.signedPreKeyId; + if (o.oneofs) + d._signedPreKeyId = "signedPreKeyId"; + } + return d; + }; + + PreKeySignalMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PreKeySignalMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PreKeySignalMessage"; + }; + + return PreKeySignalMessage; + })(); + + proto.PremiumMessageInfo = (function() { + + function PremiumMessageInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PremiumMessageInfo.prototype.serverCampaignId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PremiumMessageInfo.prototype, "_serverCampaignId", { + get: $util.oneOfGetter($oneOfFields = ["serverCampaignId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PremiumMessageInfo.create = function create(properties) { + return new PremiumMessageInfo(properties); + }; + + PremiumMessageInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.serverCampaignId != null && Object.hasOwnProperty.call(m, "serverCampaignId")) + w.uint32(10).string(m.serverCampaignId); + return w; + }; + + PremiumMessageInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PremiumMessageInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.serverCampaignId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PremiumMessageInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PremiumMessageInfo) + return d; + var m = new $root.proto.PremiumMessageInfo(); + if (d.serverCampaignId != null) { + m.serverCampaignId = String(d.serverCampaignId); + } + return m; + }; + + PremiumMessageInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.serverCampaignId != null && m.hasOwnProperty("serverCampaignId")) { + d.serverCampaignId = m.serverCampaignId; + if (o.oneofs) + d._serverCampaignId = "serverCampaignId"; + } + return d; + }; + + PremiumMessageInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PremiumMessageInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PremiumMessageInfo"; + }; + + return PremiumMessageInfo; + })(); + + proto.PrimaryEphemeralIdentity = (function() { + + function PrimaryEphemeralIdentity(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PrimaryEphemeralIdentity.prototype.publicKey = null; + PrimaryEphemeralIdentity.prototype.nonce = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PrimaryEphemeralIdentity.prototype, "_publicKey", { + get: $util.oneOfGetter($oneOfFields = ["publicKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PrimaryEphemeralIdentity.prototype, "_nonce", { + get: $util.oneOfGetter($oneOfFields = ["nonce"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PrimaryEphemeralIdentity.create = function create(properties) { + return new PrimaryEphemeralIdentity(properties); + }; + + PrimaryEphemeralIdentity.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.publicKey != null && Object.hasOwnProperty.call(m, "publicKey")) + w.uint32(10).bytes(m.publicKey); + if (m.nonce != null && Object.hasOwnProperty.call(m, "nonce")) + w.uint32(18).bytes(m.nonce); + return w; + }; + + PrimaryEphemeralIdentity.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.PrimaryEphemeralIdentity(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.publicKey = r.bytes(); + break; + } + case 2: { + m.nonce = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PrimaryEphemeralIdentity.fromObject = function fromObject(d) { + if (d instanceof $root.proto.PrimaryEphemeralIdentity) + return d; + var m = new $root.proto.PrimaryEphemeralIdentity(); + if (d.publicKey != null) { + if (typeof d.publicKey === "string") + $util.base64.decode(d.publicKey, m.publicKey = $util.newBuffer($util.base64.length(d.publicKey)), 0); + else if (d.publicKey.length >= 0) + m.publicKey = d.publicKey; + } + if (d.nonce != null) { + if (typeof d.nonce === "string") + $util.base64.decode(d.nonce, m.nonce = $util.newBuffer($util.base64.length(d.nonce)), 0); + else if (d.nonce.length >= 0) + m.nonce = d.nonce; + } + return m; + }; + + PrimaryEphemeralIdentity.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.publicKey != null && m.hasOwnProperty("publicKey")) { + d.publicKey = o.bytes === String ? $util.base64.encode(m.publicKey, 0, m.publicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.publicKey) : m.publicKey; + if (o.oneofs) + d._publicKey = "publicKey"; + } + if (m.nonce != null && m.hasOwnProperty("nonce")) { + d.nonce = o.bytes === String ? $util.base64.encode(m.nonce, 0, m.nonce.length) : o.bytes === Array ? Array.prototype.slice.call(m.nonce) : m.nonce; + if (o.oneofs) + d._nonce = "nonce"; + } + return d; + }; + + PrimaryEphemeralIdentity.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PrimaryEphemeralIdentity.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.PrimaryEphemeralIdentity"; + }; + + return PrimaryEphemeralIdentity; + })(); + + proto.PrivacySystemMessage = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "E2EE_MSG"] = 1; + values[valuesById[2] = "NE2EE_SELF"] = 2; + values[valuesById[3] = "NE2EE_OTHER"] = 3; + return values; + })(); + + proto.ProcessedVideo = (function() { + + function ProcessedVideo(p) { + this.capabilities = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProcessedVideo.prototype.directPath = null; + ProcessedVideo.prototype.fileSha256 = null; + ProcessedVideo.prototype.height = null; + ProcessedVideo.prototype.width = null; + ProcessedVideo.prototype.fileLength = null; + ProcessedVideo.prototype.bitrate = null; + ProcessedVideo.prototype.quality = null; + ProcessedVideo.prototype.capabilities = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProcessedVideo.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProcessedVideo.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProcessedVideo.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProcessedVideo.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProcessedVideo.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProcessedVideo.prototype, "_bitrate", { + get: $util.oneOfGetter($oneOfFields = ["bitrate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProcessedVideo.prototype, "_quality", { + get: $util.oneOfGetter($oneOfFields = ["quality"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProcessedVideo.create = function create(properties) { + return new ProcessedVideo(properties); + }; + + ProcessedVideo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(10).string(m.directPath); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(18).bytes(m.fileSha256); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(24).uint32(m.height); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(32).uint32(m.width); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(40).uint64(m.fileLength); + if (m.bitrate != null && Object.hasOwnProperty.call(m, "bitrate")) + w.uint32(48).uint32(m.bitrate); + if (m.quality != null && Object.hasOwnProperty.call(m, "quality")) + w.uint32(56).int32(m.quality); + if (m.capabilities != null && m.capabilities.length) { + for (var i = 0; i < m.capabilities.length; ++i) + w.uint32(66).string(m.capabilities[i]); + } + return w; + }; + + ProcessedVideo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ProcessedVideo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.directPath = r.string(); + break; + } + case 2: { + m.fileSha256 = r.bytes(); + break; + } + case 3: { + m.height = r.uint32(); + break; + } + case 4: { + m.width = r.uint32(); + break; + } + case 5: { + m.fileLength = r.uint64(); + break; + } + case 6: { + m.bitrate = r.uint32(); + break; + } + case 7: { + m.quality = r.int32(); + break; + } + case 8: { + if (!(m.capabilities && m.capabilities.length)) + m.capabilities = []; + m.capabilities.push(r.string()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProcessedVideo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ProcessedVideo) + return d; + var m = new $root.proto.ProcessedVideo(); + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.height != null) { + m.height = d.height >>> 0; + } + if (d.width != null) { + m.width = d.width >>> 0; + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.bitrate != null) { + m.bitrate = d.bitrate >>> 0; + } + switch (d.quality) { + default: + if (typeof d.quality === "number") { + m.quality = d.quality; + break; + } + break; + case "UNDEFINED": + case 0: + m.quality = 0; + break; + case "LOW": + case 1: + m.quality = 1; + break; + case "MID": + case 2: + m.quality = 2; + break; + case "HIGH": + case 3: + m.quality = 3; + break; + } + if (d.capabilities) { + if (!Array.isArray(d.capabilities)) + throw TypeError(".proto.ProcessedVideo.capabilities: array expected"); + m.capabilities = []; + for (var i = 0; i < d.capabilities.length; ++i) { + m.capabilities[i] = String(d.capabilities[i]); + } + } + return m; + }; + + ProcessedVideo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.capabilities = []; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.bitrate != null && m.hasOwnProperty("bitrate")) { + d.bitrate = m.bitrate; + if (o.oneofs) + d._bitrate = "bitrate"; + } + if (m.quality != null && m.hasOwnProperty("quality")) { + d.quality = o.enums === String ? $root.proto.ProcessedVideo.VideoQuality[m.quality] === undefined ? m.quality : $root.proto.ProcessedVideo.VideoQuality[m.quality] : m.quality; + if (o.oneofs) + d._quality = "quality"; + } + if (m.capabilities && m.capabilities.length) { + d.capabilities = []; + for (var j = 0; j < m.capabilities.length; ++j) { + d.capabilities[j] = m.capabilities[j]; + } + } + return d; + }; + + ProcessedVideo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProcessedVideo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ProcessedVideo"; + }; + + ProcessedVideo.VideoQuality = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNDEFINED"] = 0; + values[valuesById[1] = "LOW"] = 1; + values[valuesById[2] = "MID"] = 2; + values[valuesById[3] = "HIGH"] = 3; + return values; + })(); + + return ProcessedVideo; + })(); + + proto.ProloguePayload = (function() { + + function ProloguePayload(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ProloguePayload.prototype.companionEphemeralIdentity = null; + ProloguePayload.prototype.commitment = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProloguePayload.prototype, "_companionEphemeralIdentity", { + get: $util.oneOfGetter($oneOfFields = ["companionEphemeralIdentity"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ProloguePayload.prototype, "_commitment", { + get: $util.oneOfGetter($oneOfFields = ["commitment"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ProloguePayload.create = function create(properties) { + return new ProloguePayload(properties); + }; + + ProloguePayload.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.companionEphemeralIdentity != null && Object.hasOwnProperty.call(m, "companionEphemeralIdentity")) + w.uint32(10).bytes(m.companionEphemeralIdentity); + if (m.commitment != null && Object.hasOwnProperty.call(m, "commitment")) + $root.proto.CompanionCommitment.encode(m.commitment, w.uint32(18).fork()).ldelim(); + return w; + }; + + ProloguePayload.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ProloguePayload(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.companionEphemeralIdentity = r.bytes(); + break; + } + case 2: { + m.commitment = $root.proto.CompanionCommitment.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ProloguePayload.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ProloguePayload) + return d; + var m = new $root.proto.ProloguePayload(); + if (d.companionEphemeralIdentity != null) { + if (typeof d.companionEphemeralIdentity === "string") + $util.base64.decode(d.companionEphemeralIdentity, m.companionEphemeralIdentity = $util.newBuffer($util.base64.length(d.companionEphemeralIdentity)), 0); + else if (d.companionEphemeralIdentity.length >= 0) + m.companionEphemeralIdentity = d.companionEphemeralIdentity; + } + if (d.commitment != null) { + if (typeof d.commitment !== "object") + throw TypeError(".proto.ProloguePayload.commitment: object expected"); + m.commitment = $root.proto.CompanionCommitment.fromObject(d.commitment); + } + return m; + }; + + ProloguePayload.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.companionEphemeralIdentity != null && m.hasOwnProperty("companionEphemeralIdentity")) { + d.companionEphemeralIdentity = o.bytes === String ? $util.base64.encode(m.companionEphemeralIdentity, 0, m.companionEphemeralIdentity.length) : o.bytes === Array ? Array.prototype.slice.call(m.companionEphemeralIdentity) : m.companionEphemeralIdentity; + if (o.oneofs) + d._companionEphemeralIdentity = "companionEphemeralIdentity"; + } + if (m.commitment != null && m.hasOwnProperty("commitment")) { + d.commitment = $root.proto.CompanionCommitment.toObject(m.commitment, o); + if (o.oneofs) + d._commitment = "commitment"; + } + return d; + }; + + ProloguePayload.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ProloguePayload.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ProloguePayload"; + }; + + return ProloguePayload; + })(); + + proto.Pushname = (function() { + + function Pushname(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Pushname.prototype.id = null; + Pushname.prototype.pushname = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Pushname.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Pushname.prototype, "_pushname", { + get: $util.oneOfGetter($oneOfFields = ["pushname"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Pushname.create = function create(properties) { + return new Pushname(properties); + }; + + Pushname.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(10).string(m.id); + if (m.pushname != null && Object.hasOwnProperty.call(m, "pushname")) + w.uint32(18).string(m.pushname); + return w; + }; + + Pushname.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Pushname(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.string(); + break; + } + case 2: { + m.pushname = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Pushname.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Pushname) + return d; + var m = new $root.proto.Pushname(); + if (d.id != null) { + m.id = String(d.id); + } + if (d.pushname != null) { + m.pushname = String(d.pushname); + } + return m; + }; + + Pushname.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.pushname != null && m.hasOwnProperty("pushname")) { + d.pushname = m.pushname; + if (o.oneofs) + d._pushname = "pushname"; + } + return d; + }; + + Pushname.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Pushname.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Pushname"; + }; + + return Pushname; + })(); + + proto.QuarantinedMessage = (function() { + + function QuarantinedMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + QuarantinedMessage.prototype.originalData = null; + QuarantinedMessage.prototype.extractedText = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuarantinedMessage.prototype, "_originalData", { + get: $util.oneOfGetter($oneOfFields = ["originalData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuarantinedMessage.prototype, "_extractedText", { + get: $util.oneOfGetter($oneOfFields = ["extractedText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + QuarantinedMessage.create = function create(properties) { + return new QuarantinedMessage(properties); + }; + + QuarantinedMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.originalData != null && Object.hasOwnProperty.call(m, "originalData")) + w.uint32(10).bytes(m.originalData); + if (m.extractedText != null && Object.hasOwnProperty.call(m, "extractedText")) + w.uint32(18).string(m.extractedText); + return w; + }; + + QuarantinedMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.QuarantinedMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.originalData = r.bytes(); + break; + } + case 2: { + m.extractedText = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + QuarantinedMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.QuarantinedMessage) + return d; + var m = new $root.proto.QuarantinedMessage(); + if (d.originalData != null) { + if (typeof d.originalData === "string") + $util.base64.decode(d.originalData, m.originalData = $util.newBuffer($util.base64.length(d.originalData)), 0); + else if (d.originalData.length >= 0) + m.originalData = d.originalData; + } + if (d.extractedText != null) { + m.extractedText = String(d.extractedText); + } + return m; + }; + + QuarantinedMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.originalData != null && m.hasOwnProperty("originalData")) { + d.originalData = o.bytes === String ? $util.base64.encode(m.originalData, 0, m.originalData.length) : o.bytes === Array ? Array.prototype.slice.call(m.originalData) : m.originalData; + if (o.oneofs) + d._originalData = "originalData"; + } + if (m.extractedText != null && m.hasOwnProperty("extractedText")) { + d.extractedText = m.extractedText; + if (o.oneofs) + d._extractedText = "extractedText"; + } + return d; + }; + + QuarantinedMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + QuarantinedMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.QuarantinedMessage"; + }; + + return QuarantinedMessage; + })(); + + proto.Reaction = (function() { + + function Reaction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Reaction.prototype.key = null; + Reaction.prototype.text = null; + Reaction.prototype.groupingKey = null; + Reaction.prototype.senderTimestampMs = null; + Reaction.prototype.unread = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reaction.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reaction.prototype, "_text", { + get: $util.oneOfGetter($oneOfFields = ["text"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reaction.prototype, "_groupingKey", { + get: $util.oneOfGetter($oneOfFields = ["groupingKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reaction.prototype, "_senderTimestampMs", { + get: $util.oneOfGetter($oneOfFields = ["senderTimestampMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reaction.prototype, "_unread", { + get: $util.oneOfGetter($oneOfFields = ["unread"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Reaction.create = function create(properties) { + return new Reaction(properties); + }; + + Reaction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.text != null && Object.hasOwnProperty.call(m, "text")) + w.uint32(18).string(m.text); + if (m.groupingKey != null && Object.hasOwnProperty.call(m, "groupingKey")) + w.uint32(26).string(m.groupingKey); + if (m.senderTimestampMs != null && Object.hasOwnProperty.call(m, "senderTimestampMs")) + w.uint32(32).int64(m.senderTimestampMs); + if (m.unread != null && Object.hasOwnProperty.call(m, "unread")) + w.uint32(40).bool(m.unread); + return w; + }; + + Reaction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Reaction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.text = r.string(); + break; + } + case 3: { + m.groupingKey = r.string(); + break; + } + case 4: { + m.senderTimestampMs = r.int64(); + break; + } + case 5: { + m.unread = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Reaction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Reaction) + return d; + var m = new $root.proto.Reaction(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.Reaction.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.text != null) { + m.text = String(d.text); + } + if (d.groupingKey != null) { + m.groupingKey = String(d.groupingKey); + } + if (d.senderTimestampMs != null) { + if ($util.Long) + (m.senderTimestampMs = $util.Long.fromValue(d.senderTimestampMs)).unsigned = false; + else if (typeof d.senderTimestampMs === "string") + m.senderTimestampMs = parseInt(d.senderTimestampMs, 10); + else if (typeof d.senderTimestampMs === "number") + m.senderTimestampMs = d.senderTimestampMs; + else if (typeof d.senderTimestampMs === "object") + m.senderTimestampMs = new $util.LongBits(d.senderTimestampMs.low >>> 0, d.senderTimestampMs.high >>> 0).toNumber(); + } + if (d.unread != null) { + m.unread = Boolean(d.unread); + } + return m; + }; + + Reaction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.text != null && m.hasOwnProperty("text")) { + d.text = m.text; + if (o.oneofs) + d._text = "text"; + } + if (m.groupingKey != null && m.hasOwnProperty("groupingKey")) { + d.groupingKey = m.groupingKey; + if (o.oneofs) + d._groupingKey = "groupingKey"; + } + if (m.senderTimestampMs != null && m.hasOwnProperty("senderTimestampMs")) { + if (typeof m.senderTimestampMs === "number") + d.senderTimestampMs = o.longs === String ? String(m.senderTimestampMs) : m.senderTimestampMs; + else + d.senderTimestampMs = o.longs === String ? longToString(m.senderTimestampMs) : o.longs === Number ? longToNumber(m.senderTimestampMs) : m.senderTimestampMs; + if (o.oneofs) + d._senderTimestampMs = "senderTimestampMs"; + } + if (m.unread != null && m.hasOwnProperty("unread")) { + d.unread = m.unread; + if (o.oneofs) + d._unread = "unread"; + } + return d; + }; + + Reaction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Reaction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Reaction"; + }; + + return Reaction; + })(); + + proto.RecentEmojiWeight = (function() { + + function RecentEmojiWeight(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RecentEmojiWeight.prototype.emoji = null; + RecentEmojiWeight.prototype.weight = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RecentEmojiWeight.prototype, "_emoji", { + get: $util.oneOfGetter($oneOfFields = ["emoji"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RecentEmojiWeight.prototype, "_weight", { + get: $util.oneOfGetter($oneOfFields = ["weight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RecentEmojiWeight.create = function create(properties) { + return new RecentEmojiWeight(properties); + }; + + RecentEmojiWeight.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.emoji != null && Object.hasOwnProperty.call(m, "emoji")) + w.uint32(10).string(m.emoji); + if (m.weight != null && Object.hasOwnProperty.call(m, "weight")) + w.uint32(21).float(m.weight); + return w; + }; + + RecentEmojiWeight.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.RecentEmojiWeight(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.emoji = r.string(); + break; + } + case 2: { + m.weight = r.float(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RecentEmojiWeight.fromObject = function fromObject(d) { + if (d instanceof $root.proto.RecentEmojiWeight) + return d; + var m = new $root.proto.RecentEmojiWeight(); + if (d.emoji != null) { + m.emoji = String(d.emoji); + } + if (d.weight != null) { + m.weight = Number(d.weight); + } + return m; + }; + + RecentEmojiWeight.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.emoji != null && m.hasOwnProperty("emoji")) { + d.emoji = m.emoji; + if (o.oneofs) + d._emoji = "emoji"; + } + if (m.weight != null && m.hasOwnProperty("weight")) { + d.weight = o.json && !isFinite(m.weight) ? String(m.weight) : m.weight; + if (o.oneofs) + d._weight = "weight"; + } + return d; + }; + + RecentEmojiWeight.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RecentEmojiWeight.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.RecentEmojiWeight"; + }; + + return RecentEmojiWeight; + })(); + + proto.RecordStructure = (function() { + + function RecordStructure(p) { + this.previousSessions = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RecordStructure.prototype.currentSession = null; + RecordStructure.prototype.previousSessions = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RecordStructure.prototype, "_currentSession", { + get: $util.oneOfGetter($oneOfFields = ["currentSession"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RecordStructure.create = function create(properties) { + return new RecordStructure(properties); + }; + + RecordStructure.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.currentSession != null && Object.hasOwnProperty.call(m, "currentSession")) + $root.proto.SessionStructure.encode(m.currentSession, w.uint32(10).fork()).ldelim(); + if (m.previousSessions != null && m.previousSessions.length) { + for (var i = 0; i < m.previousSessions.length; ++i) + $root.proto.SessionStructure.encode(m.previousSessions[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + RecordStructure.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.RecordStructure(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.currentSession = $root.proto.SessionStructure.decode(r, r.uint32()); + break; + } + case 2: { + if (!(m.previousSessions && m.previousSessions.length)) + m.previousSessions = []; + m.previousSessions.push($root.proto.SessionStructure.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RecordStructure.fromObject = function fromObject(d) { + if (d instanceof $root.proto.RecordStructure) + return d; + var m = new $root.proto.RecordStructure(); + if (d.currentSession != null) { + if (typeof d.currentSession !== "object") + throw TypeError(".proto.RecordStructure.currentSession: object expected"); + m.currentSession = $root.proto.SessionStructure.fromObject(d.currentSession); + } + if (d.previousSessions) { + if (!Array.isArray(d.previousSessions)) + throw TypeError(".proto.RecordStructure.previousSessions: array expected"); + m.previousSessions = []; + for (var i = 0; i < d.previousSessions.length; ++i) { + if (typeof d.previousSessions[i] !== "object") + throw TypeError(".proto.RecordStructure.previousSessions: object expected"); + m.previousSessions[i] = $root.proto.SessionStructure.fromObject(d.previousSessions[i]); + } + } + return m; + }; + + RecordStructure.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.previousSessions = []; + } + if (m.currentSession != null && m.hasOwnProperty("currentSession")) { + d.currentSession = $root.proto.SessionStructure.toObject(m.currentSession, o); + if (o.oneofs) + d._currentSession = "currentSession"; + } + if (m.previousSessions && m.previousSessions.length) { + d.previousSessions = []; + for (var j = 0; j < m.previousSessions.length; ++j) { + d.previousSessions[j] = $root.proto.SessionStructure.toObject(m.previousSessions[j], o); + } + } + return d; + }; + + RecordStructure.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RecordStructure.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.RecordStructure"; + }; + + return RecordStructure; + })(); + + proto.Reportable = (function() { + + function Reportable(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Reportable.prototype.minVersion = null; + Reportable.prototype.maxVersion = null; + Reportable.prototype.notReportableMinVersion = null; + Reportable.prototype.never = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reportable.prototype, "_minVersion", { + get: $util.oneOfGetter($oneOfFields = ["minVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reportable.prototype, "_maxVersion", { + get: $util.oneOfGetter($oneOfFields = ["maxVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reportable.prototype, "_notReportableMinVersion", { + get: $util.oneOfGetter($oneOfFields = ["notReportableMinVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Reportable.prototype, "_never", { + get: $util.oneOfGetter($oneOfFields = ["never"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Reportable.create = function create(properties) { + return new Reportable(properties); + }; + + Reportable.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.minVersion != null && Object.hasOwnProperty.call(m, "minVersion")) + w.uint32(8).uint32(m.minVersion); + if (m.maxVersion != null && Object.hasOwnProperty.call(m, "maxVersion")) + w.uint32(16).uint32(m.maxVersion); + if (m.notReportableMinVersion != null && Object.hasOwnProperty.call(m, "notReportableMinVersion")) + w.uint32(24).uint32(m.notReportableMinVersion); + if (m.never != null && Object.hasOwnProperty.call(m, "never")) + w.uint32(32).bool(m.never); + return w; + }; + + Reportable.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.Reportable(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.minVersion = r.uint32(); + break; + } + case 2: { + m.maxVersion = r.uint32(); + break; + } + case 3: { + m.notReportableMinVersion = r.uint32(); + break; + } + case 4: { + m.never = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Reportable.fromObject = function fromObject(d) { + if (d instanceof $root.proto.Reportable) + return d; + var m = new $root.proto.Reportable(); + if (d.minVersion != null) { + m.minVersion = d.minVersion >>> 0; + } + if (d.maxVersion != null) { + m.maxVersion = d.maxVersion >>> 0; + } + if (d.notReportableMinVersion != null) { + m.notReportableMinVersion = d.notReportableMinVersion >>> 0; + } + if (d.never != null) { + m.never = Boolean(d.never); + } + return m; + }; + + Reportable.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.minVersion != null && m.hasOwnProperty("minVersion")) { + d.minVersion = m.minVersion; + if (o.oneofs) + d._minVersion = "minVersion"; + } + if (m.maxVersion != null && m.hasOwnProperty("maxVersion")) { + d.maxVersion = m.maxVersion; + if (o.oneofs) + d._maxVersion = "maxVersion"; + } + if (m.notReportableMinVersion != null && m.hasOwnProperty("notReportableMinVersion")) { + d.notReportableMinVersion = m.notReportableMinVersion; + if (o.oneofs) + d._notReportableMinVersion = "notReportableMinVersion"; + } + if (m.never != null && m.hasOwnProperty("never")) { + d.never = m.never; + if (o.oneofs) + d._never = "never"; + } + return d; + }; + + Reportable.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Reportable.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.Reportable"; + }; + + return Reportable; + })(); + + proto.ReportingTokenInfo = (function() { + + function ReportingTokenInfo(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ReportingTokenInfo.prototype.reportingTag = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ReportingTokenInfo.prototype, "_reportingTag", { + get: $util.oneOfGetter($oneOfFields = ["reportingTag"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ReportingTokenInfo.create = function create(properties) { + return new ReportingTokenInfo(properties); + }; + + ReportingTokenInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.reportingTag != null && Object.hasOwnProperty.call(m, "reportingTag")) + w.uint32(10).bytes(m.reportingTag); + return w; + }; + + ReportingTokenInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ReportingTokenInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.reportingTag = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ReportingTokenInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ReportingTokenInfo) + return d; + var m = new $root.proto.ReportingTokenInfo(); + if (d.reportingTag != null) { + if (typeof d.reportingTag === "string") + $util.base64.decode(d.reportingTag, m.reportingTag = $util.newBuffer($util.base64.length(d.reportingTag)), 0); + else if (d.reportingTag.length >= 0) + m.reportingTag = d.reportingTag; + } + return m; + }; + + ReportingTokenInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.reportingTag != null && m.hasOwnProperty("reportingTag")) { + d.reportingTag = o.bytes === String ? $util.base64.encode(m.reportingTag, 0, m.reportingTag.length) : o.bytes === Array ? Array.prototype.slice.call(m.reportingTag) : m.reportingTag; + if (o.oneofs) + d._reportingTag = "reportingTag"; + } + return d; + }; + + ReportingTokenInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ReportingTokenInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ReportingTokenInfo"; + }; + + return ReportingTokenInfo; + })(); + + proto.SenderKeyDistributionMessage = (function() { + + function SenderKeyDistributionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderKeyDistributionMessage.prototype.id = null; + SenderKeyDistributionMessage.prototype.iteration = null; + SenderKeyDistributionMessage.prototype.chainKey = null; + SenderKeyDistributionMessage.prototype.signingKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyDistributionMessage.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyDistributionMessage.prototype, "_iteration", { + get: $util.oneOfGetter($oneOfFields = ["iteration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyDistributionMessage.prototype, "_chainKey", { + get: $util.oneOfGetter($oneOfFields = ["chainKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyDistributionMessage.prototype, "_signingKey", { + get: $util.oneOfGetter($oneOfFields = ["signingKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SenderKeyDistributionMessage.create = function create(properties) { + return new SenderKeyDistributionMessage(properties); + }; + + SenderKeyDistributionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(8).uint32(m.id); + if (m.iteration != null && Object.hasOwnProperty.call(m, "iteration")) + w.uint32(16).uint32(m.iteration); + if (m.chainKey != null && Object.hasOwnProperty.call(m, "chainKey")) + w.uint32(26).bytes(m.chainKey); + if (m.signingKey != null && Object.hasOwnProperty.call(m, "signingKey")) + w.uint32(34).bytes(m.signingKey); + return w; + }; + + SenderKeyDistributionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SenderKeyDistributionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.uint32(); + break; + } + case 2: { + m.iteration = r.uint32(); + break; + } + case 3: { + m.chainKey = r.bytes(); + break; + } + case 4: { + m.signingKey = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderKeyDistributionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SenderKeyDistributionMessage) + return d; + var m = new $root.proto.SenderKeyDistributionMessage(); + if (d.id != null) { + m.id = d.id >>> 0; + } + if (d.iteration != null) { + m.iteration = d.iteration >>> 0; + } + if (d.chainKey != null) { + if (typeof d.chainKey === "string") + $util.base64.decode(d.chainKey, m.chainKey = $util.newBuffer($util.base64.length(d.chainKey)), 0); + else if (d.chainKey.length >= 0) + m.chainKey = d.chainKey; + } + if (d.signingKey != null) { + if (typeof d.signingKey === "string") + $util.base64.decode(d.signingKey, m.signingKey = $util.newBuffer($util.base64.length(d.signingKey)), 0); + else if (d.signingKey.length >= 0) + m.signingKey = d.signingKey; + } + return m; + }; + + SenderKeyDistributionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.iteration != null && m.hasOwnProperty("iteration")) { + d.iteration = m.iteration; + if (o.oneofs) + d._iteration = "iteration"; + } + if (m.chainKey != null && m.hasOwnProperty("chainKey")) { + d.chainKey = o.bytes === String ? $util.base64.encode(m.chainKey, 0, m.chainKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.chainKey) : m.chainKey; + if (o.oneofs) + d._chainKey = "chainKey"; + } + if (m.signingKey != null && m.hasOwnProperty("signingKey")) { + d.signingKey = o.bytes === String ? $util.base64.encode(m.signingKey, 0, m.signingKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.signingKey) : m.signingKey; + if (o.oneofs) + d._signingKey = "signingKey"; + } + return d; + }; + + SenderKeyDistributionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderKeyDistributionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SenderKeyDistributionMessage"; + }; + + return SenderKeyDistributionMessage; + })(); + + proto.SenderKeyMessage = (function() { + + function SenderKeyMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderKeyMessage.prototype.id = null; + SenderKeyMessage.prototype.iteration = null; + SenderKeyMessage.prototype.ciphertext = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyMessage.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyMessage.prototype, "_iteration", { + get: $util.oneOfGetter($oneOfFields = ["iteration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyMessage.prototype, "_ciphertext", { + get: $util.oneOfGetter($oneOfFields = ["ciphertext"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SenderKeyMessage.create = function create(properties) { + return new SenderKeyMessage(properties); + }; + + SenderKeyMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(8).uint32(m.id); + if (m.iteration != null && Object.hasOwnProperty.call(m, "iteration")) + w.uint32(16).uint32(m.iteration); + if (m.ciphertext != null && Object.hasOwnProperty.call(m, "ciphertext")) + w.uint32(26).bytes(m.ciphertext); + return w; + }; + + SenderKeyMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SenderKeyMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.uint32(); + break; + } + case 2: { + m.iteration = r.uint32(); + break; + } + case 3: { + m.ciphertext = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderKeyMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SenderKeyMessage) + return d; + var m = new $root.proto.SenderKeyMessage(); + if (d.id != null) { + m.id = d.id >>> 0; + } + if (d.iteration != null) { + m.iteration = d.iteration >>> 0; + } + if (d.ciphertext != null) { + if (typeof d.ciphertext === "string") + $util.base64.decode(d.ciphertext, m.ciphertext = $util.newBuffer($util.base64.length(d.ciphertext)), 0); + else if (d.ciphertext.length >= 0) + m.ciphertext = d.ciphertext; + } + return m; + }; + + SenderKeyMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.iteration != null && m.hasOwnProperty("iteration")) { + d.iteration = m.iteration; + if (o.oneofs) + d._iteration = "iteration"; + } + if (m.ciphertext != null && m.hasOwnProperty("ciphertext")) { + d.ciphertext = o.bytes === String ? $util.base64.encode(m.ciphertext, 0, m.ciphertext.length) : o.bytes === Array ? Array.prototype.slice.call(m.ciphertext) : m.ciphertext; + if (o.oneofs) + d._ciphertext = "ciphertext"; + } + return d; + }; + + SenderKeyMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderKeyMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SenderKeyMessage"; + }; + + return SenderKeyMessage; + })(); + + proto.SenderKeyRecordStructure = (function() { + + function SenderKeyRecordStructure(p) { + this.senderKeyStates = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderKeyRecordStructure.prototype.senderKeyStates = $util.emptyArray; + + SenderKeyRecordStructure.create = function create(properties) { + return new SenderKeyRecordStructure(properties); + }; + + SenderKeyRecordStructure.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.senderKeyStates != null && m.senderKeyStates.length) { + for (var i = 0; i < m.senderKeyStates.length; ++i) + $root.proto.SenderKeyStateStructure.encode(m.senderKeyStates[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + SenderKeyRecordStructure.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SenderKeyRecordStructure(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.senderKeyStates && m.senderKeyStates.length)) + m.senderKeyStates = []; + m.senderKeyStates.push($root.proto.SenderKeyStateStructure.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderKeyRecordStructure.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SenderKeyRecordStructure) + return d; + var m = new $root.proto.SenderKeyRecordStructure(); + if (d.senderKeyStates) { + if (!Array.isArray(d.senderKeyStates)) + throw TypeError(".proto.SenderKeyRecordStructure.senderKeyStates: array expected"); + m.senderKeyStates = []; + for (var i = 0; i < d.senderKeyStates.length; ++i) { + if (typeof d.senderKeyStates[i] !== "object") + throw TypeError(".proto.SenderKeyRecordStructure.senderKeyStates: object expected"); + m.senderKeyStates[i] = $root.proto.SenderKeyStateStructure.fromObject(d.senderKeyStates[i]); + } + } + return m; + }; + + SenderKeyRecordStructure.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.senderKeyStates = []; + } + if (m.senderKeyStates && m.senderKeyStates.length) { + d.senderKeyStates = []; + for (var j = 0; j < m.senderKeyStates.length; ++j) { + d.senderKeyStates[j] = $root.proto.SenderKeyStateStructure.toObject(m.senderKeyStates[j], o); + } + } + return d; + }; + + SenderKeyRecordStructure.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderKeyRecordStructure.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SenderKeyRecordStructure"; + }; + + return SenderKeyRecordStructure; + })(); + + proto.SenderKeyStateStructure = (function() { + + function SenderKeyStateStructure(p) { + this.senderMessageKeys = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderKeyStateStructure.prototype.senderKeyId = null; + SenderKeyStateStructure.prototype.senderChainKey = null; + SenderKeyStateStructure.prototype.senderSigningKey = null; + SenderKeyStateStructure.prototype.senderMessageKeys = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyStateStructure.prototype, "_senderKeyId", { + get: $util.oneOfGetter($oneOfFields = ["senderKeyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyStateStructure.prototype, "_senderChainKey", { + get: $util.oneOfGetter($oneOfFields = ["senderChainKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderKeyStateStructure.prototype, "_senderSigningKey", { + get: $util.oneOfGetter($oneOfFields = ["senderSigningKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SenderKeyStateStructure.create = function create(properties) { + return new SenderKeyStateStructure(properties); + }; + + SenderKeyStateStructure.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.senderKeyId != null && Object.hasOwnProperty.call(m, "senderKeyId")) + w.uint32(8).uint32(m.senderKeyId); + if (m.senderChainKey != null && Object.hasOwnProperty.call(m, "senderChainKey")) + $root.proto.SenderKeyStateStructure.SenderChainKey.encode(m.senderChainKey, w.uint32(18).fork()).ldelim(); + if (m.senderSigningKey != null && Object.hasOwnProperty.call(m, "senderSigningKey")) + $root.proto.SenderKeyStateStructure.SenderSigningKey.encode(m.senderSigningKey, w.uint32(26).fork()).ldelim(); + if (m.senderMessageKeys != null && m.senderMessageKeys.length) { + for (var i = 0; i < m.senderMessageKeys.length; ++i) + $root.proto.SenderKeyStateStructure.SenderMessageKey.encode(m.senderMessageKeys[i], w.uint32(34).fork()).ldelim(); + } + return w; + }; + + SenderKeyStateStructure.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SenderKeyStateStructure(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.senderKeyId = r.uint32(); + break; + } + case 2: { + m.senderChainKey = $root.proto.SenderKeyStateStructure.SenderChainKey.decode(r, r.uint32()); + break; + } + case 3: { + m.senderSigningKey = $root.proto.SenderKeyStateStructure.SenderSigningKey.decode(r, r.uint32()); + break; + } + case 4: { + if (!(m.senderMessageKeys && m.senderMessageKeys.length)) + m.senderMessageKeys = []; + m.senderMessageKeys.push($root.proto.SenderKeyStateStructure.SenderMessageKey.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderKeyStateStructure.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SenderKeyStateStructure) + return d; + var m = new $root.proto.SenderKeyStateStructure(); + if (d.senderKeyId != null) { + m.senderKeyId = d.senderKeyId >>> 0; + } + if (d.senderChainKey != null) { + if (typeof d.senderChainKey !== "object") + throw TypeError(".proto.SenderKeyStateStructure.senderChainKey: object expected"); + m.senderChainKey = $root.proto.SenderKeyStateStructure.SenderChainKey.fromObject(d.senderChainKey); + } + if (d.senderSigningKey != null) { + if (typeof d.senderSigningKey !== "object") + throw TypeError(".proto.SenderKeyStateStructure.senderSigningKey: object expected"); + m.senderSigningKey = $root.proto.SenderKeyStateStructure.SenderSigningKey.fromObject(d.senderSigningKey); + } + if (d.senderMessageKeys) { + if (!Array.isArray(d.senderMessageKeys)) + throw TypeError(".proto.SenderKeyStateStructure.senderMessageKeys: array expected"); + m.senderMessageKeys = []; + for (var i = 0; i < d.senderMessageKeys.length; ++i) { + if (typeof d.senderMessageKeys[i] !== "object") + throw TypeError(".proto.SenderKeyStateStructure.senderMessageKeys: object expected"); + m.senderMessageKeys[i] = $root.proto.SenderKeyStateStructure.SenderMessageKey.fromObject(d.senderMessageKeys[i]); + } + } + return m; + }; + + SenderKeyStateStructure.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.senderMessageKeys = []; + } + if (m.senderKeyId != null && m.hasOwnProperty("senderKeyId")) { + d.senderKeyId = m.senderKeyId; + if (o.oneofs) + d._senderKeyId = "senderKeyId"; + } + if (m.senderChainKey != null && m.hasOwnProperty("senderChainKey")) { + d.senderChainKey = $root.proto.SenderKeyStateStructure.SenderChainKey.toObject(m.senderChainKey, o); + if (o.oneofs) + d._senderChainKey = "senderChainKey"; + } + if (m.senderSigningKey != null && m.hasOwnProperty("senderSigningKey")) { + d.senderSigningKey = $root.proto.SenderKeyStateStructure.SenderSigningKey.toObject(m.senderSigningKey, o); + if (o.oneofs) + d._senderSigningKey = "senderSigningKey"; + } + if (m.senderMessageKeys && m.senderMessageKeys.length) { + d.senderMessageKeys = []; + for (var j = 0; j < m.senderMessageKeys.length; ++j) { + d.senderMessageKeys[j] = $root.proto.SenderKeyStateStructure.SenderMessageKey.toObject(m.senderMessageKeys[j], o); + } + } + return d; + }; + + SenderKeyStateStructure.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderKeyStateStructure.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SenderKeyStateStructure"; + }; + + SenderKeyStateStructure.SenderChainKey = (function() { + + function SenderChainKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderChainKey.prototype.iteration = null; + SenderChainKey.prototype.seed = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderChainKey.prototype, "_iteration", { + get: $util.oneOfGetter($oneOfFields = ["iteration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderChainKey.prototype, "_seed", { + get: $util.oneOfGetter($oneOfFields = ["seed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SenderChainKey.create = function create(properties) { + return new SenderChainKey(properties); + }; + + SenderChainKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.iteration != null && Object.hasOwnProperty.call(m, "iteration")) + w.uint32(8).uint32(m.iteration); + if (m.seed != null && Object.hasOwnProperty.call(m, "seed")) + w.uint32(18).bytes(m.seed); + return w; + }; + + SenderChainKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SenderKeyStateStructure.SenderChainKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.iteration = r.uint32(); + break; + } + case 2: { + m.seed = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderChainKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SenderKeyStateStructure.SenderChainKey) + return d; + var m = new $root.proto.SenderKeyStateStructure.SenderChainKey(); + if (d.iteration != null) { + m.iteration = d.iteration >>> 0; + } + if (d.seed != null) { + if (typeof d.seed === "string") + $util.base64.decode(d.seed, m.seed = $util.newBuffer($util.base64.length(d.seed)), 0); + else if (d.seed.length >= 0) + m.seed = d.seed; + } + return m; + }; + + SenderChainKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.iteration != null && m.hasOwnProperty("iteration")) { + d.iteration = m.iteration; + if (o.oneofs) + d._iteration = "iteration"; + } + if (m.seed != null && m.hasOwnProperty("seed")) { + d.seed = o.bytes === String ? $util.base64.encode(m.seed, 0, m.seed.length) : o.bytes === Array ? Array.prototype.slice.call(m.seed) : m.seed; + if (o.oneofs) + d._seed = "seed"; + } + return d; + }; + + SenderChainKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderChainKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SenderKeyStateStructure.SenderChainKey"; + }; + + return SenderChainKey; + })(); + + SenderKeyStateStructure.SenderMessageKey = (function() { + + function SenderMessageKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderMessageKey.prototype.iteration = null; + SenderMessageKey.prototype.seed = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderMessageKey.prototype, "_iteration", { + get: $util.oneOfGetter($oneOfFields = ["iteration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderMessageKey.prototype, "_seed", { + get: $util.oneOfGetter($oneOfFields = ["seed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SenderMessageKey.create = function create(properties) { + return new SenderMessageKey(properties); + }; + + SenderMessageKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.iteration != null && Object.hasOwnProperty.call(m, "iteration")) + w.uint32(8).uint32(m.iteration); + if (m.seed != null && Object.hasOwnProperty.call(m, "seed")) + w.uint32(18).bytes(m.seed); + return w; + }; + + SenderMessageKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SenderKeyStateStructure.SenderMessageKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.iteration = r.uint32(); + break; + } + case 2: { + m.seed = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderMessageKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SenderKeyStateStructure.SenderMessageKey) + return d; + var m = new $root.proto.SenderKeyStateStructure.SenderMessageKey(); + if (d.iteration != null) { + m.iteration = d.iteration >>> 0; + } + if (d.seed != null) { + if (typeof d.seed === "string") + $util.base64.decode(d.seed, m.seed = $util.newBuffer($util.base64.length(d.seed)), 0); + else if (d.seed.length >= 0) + m.seed = d.seed; + } + return m; + }; + + SenderMessageKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.iteration != null && m.hasOwnProperty("iteration")) { + d.iteration = m.iteration; + if (o.oneofs) + d._iteration = "iteration"; + } + if (m.seed != null && m.hasOwnProperty("seed")) { + d.seed = o.bytes === String ? $util.base64.encode(m.seed, 0, m.seed.length) : o.bytes === Array ? Array.prototype.slice.call(m.seed) : m.seed; + if (o.oneofs) + d._seed = "seed"; + } + return d; + }; + + SenderMessageKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderMessageKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SenderKeyStateStructure.SenderMessageKey"; + }; + + return SenderMessageKey; + })(); + + SenderKeyStateStructure.SenderSigningKey = (function() { + + function SenderSigningKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SenderSigningKey.prototype["public"] = null; + SenderSigningKey.prototype["private"] = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderSigningKey.prototype, "_public", { + get: $util.oneOfGetter($oneOfFields = ["public"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SenderSigningKey.prototype, "_private", { + get: $util.oneOfGetter($oneOfFields = ["private"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SenderSigningKey.create = function create(properties) { + return new SenderSigningKey(properties); + }; + + SenderSigningKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m["public"] != null && Object.hasOwnProperty.call(m, "public")) + w.uint32(10).bytes(m["public"]); + if (m["private"] != null && Object.hasOwnProperty.call(m, "private")) + w.uint32(18).bytes(m["private"]); + return w; + }; + + SenderSigningKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SenderKeyStateStructure.SenderSigningKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m["public"] = r.bytes(); + break; + } + case 2: { + m["private"] = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SenderSigningKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SenderKeyStateStructure.SenderSigningKey) + return d; + var m = new $root.proto.SenderKeyStateStructure.SenderSigningKey(); + if (d["public"] != null) { + if (typeof d["public"] === "string") + $util.base64.decode(d["public"], m["public"] = $util.newBuffer($util.base64.length(d["public"])), 0); + else if (d["public"].length >= 0) + m["public"] = d["public"]; + } + if (d["private"] != null) { + if (typeof d["private"] === "string") + $util.base64.decode(d["private"], m["private"] = $util.newBuffer($util.base64.length(d["private"])), 0); + else if (d["private"].length >= 0) + m["private"] = d["private"]; + } + return m; + }; + + SenderSigningKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m["public"] != null && m.hasOwnProperty("public")) { + d["public"] = o.bytes === String ? $util.base64.encode(m["public"], 0, m["public"].length) : o.bytes === Array ? Array.prototype.slice.call(m["public"]) : m["public"]; + if (o.oneofs) + d._public = "public"; + } + if (m["private"] != null && m.hasOwnProperty("private")) { + d["private"] = o.bytes === String ? $util.base64.encode(m["private"], 0, m["private"].length) : o.bytes === Array ? Array.prototype.slice.call(m["private"]) : m["private"]; + if (o.oneofs) + d._private = "private"; + } + return d; + }; + + SenderSigningKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SenderSigningKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SenderKeyStateStructure.SenderSigningKey"; + }; + + return SenderSigningKey; + })(); + + return SenderKeyStateStructure; + })(); + + proto.ServerErrorReceipt = (function() { + + function ServerErrorReceipt(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ServerErrorReceipt.prototype.stanzaId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ServerErrorReceipt.prototype, "_stanzaId", { + get: $util.oneOfGetter($oneOfFields = ["stanzaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ServerErrorReceipt.create = function create(properties) { + return new ServerErrorReceipt(properties); + }; + + ServerErrorReceipt.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.stanzaId != null && Object.hasOwnProperty.call(m, "stanzaId")) + w.uint32(10).string(m.stanzaId); + return w; + }; + + ServerErrorReceipt.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ServerErrorReceipt(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.stanzaId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ServerErrorReceipt.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ServerErrorReceipt) + return d; + var m = new $root.proto.ServerErrorReceipt(); + if (d.stanzaId != null) { + m.stanzaId = String(d.stanzaId); + } + return m; + }; + + ServerErrorReceipt.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.stanzaId != null && m.hasOwnProperty("stanzaId")) { + d.stanzaId = m.stanzaId; + if (o.oneofs) + d._stanzaId = "stanzaId"; + } + return d; + }; + + ServerErrorReceipt.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ServerErrorReceipt.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ServerErrorReceipt"; + }; + + return ServerErrorReceipt; + })(); + + proto.SessionStructure = (function() { + + function SessionStructure(p) { + this.receiverChains = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SessionStructure.prototype.sessionVersion = null; + SessionStructure.prototype.localIdentityPublic = null; + SessionStructure.prototype.remoteIdentityPublic = null; + SessionStructure.prototype.rootKey = null; + SessionStructure.prototype.previousCounter = null; + SessionStructure.prototype.senderChain = null; + SessionStructure.prototype.receiverChains = $util.emptyArray; + SessionStructure.prototype.pendingKeyExchange = null; + SessionStructure.prototype.pendingPreKey = null; + SessionStructure.prototype.remoteRegistrationId = null; + SessionStructure.prototype.localRegistrationId = null; + SessionStructure.prototype.needsRefresh = null; + SessionStructure.prototype.aliceBaseKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_sessionVersion", { + get: $util.oneOfGetter($oneOfFields = ["sessionVersion"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_localIdentityPublic", { + get: $util.oneOfGetter($oneOfFields = ["localIdentityPublic"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_remoteIdentityPublic", { + get: $util.oneOfGetter($oneOfFields = ["remoteIdentityPublic"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_rootKey", { + get: $util.oneOfGetter($oneOfFields = ["rootKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_previousCounter", { + get: $util.oneOfGetter($oneOfFields = ["previousCounter"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_senderChain", { + get: $util.oneOfGetter($oneOfFields = ["senderChain"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_pendingKeyExchange", { + get: $util.oneOfGetter($oneOfFields = ["pendingKeyExchange"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_pendingPreKey", { + get: $util.oneOfGetter($oneOfFields = ["pendingPreKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_remoteRegistrationId", { + get: $util.oneOfGetter($oneOfFields = ["remoteRegistrationId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_localRegistrationId", { + get: $util.oneOfGetter($oneOfFields = ["localRegistrationId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_needsRefresh", { + get: $util.oneOfGetter($oneOfFields = ["needsRefresh"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionStructure.prototype, "_aliceBaseKey", { + get: $util.oneOfGetter($oneOfFields = ["aliceBaseKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SessionStructure.create = function create(properties) { + return new SessionStructure(properties); + }; + + SessionStructure.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sessionVersion != null && Object.hasOwnProperty.call(m, "sessionVersion")) + w.uint32(8).uint32(m.sessionVersion); + if (m.localIdentityPublic != null && Object.hasOwnProperty.call(m, "localIdentityPublic")) + w.uint32(18).bytes(m.localIdentityPublic); + if (m.remoteIdentityPublic != null && Object.hasOwnProperty.call(m, "remoteIdentityPublic")) + w.uint32(26).bytes(m.remoteIdentityPublic); + if (m.rootKey != null && Object.hasOwnProperty.call(m, "rootKey")) + w.uint32(34).bytes(m.rootKey); + if (m.previousCounter != null && Object.hasOwnProperty.call(m, "previousCounter")) + w.uint32(40).uint32(m.previousCounter); + if (m.senderChain != null && Object.hasOwnProperty.call(m, "senderChain")) + $root.proto.SessionStructure.Chain.encode(m.senderChain, w.uint32(50).fork()).ldelim(); + if (m.receiverChains != null && m.receiverChains.length) { + for (var i = 0; i < m.receiverChains.length; ++i) + $root.proto.SessionStructure.Chain.encode(m.receiverChains[i], w.uint32(58).fork()).ldelim(); + } + if (m.pendingKeyExchange != null && Object.hasOwnProperty.call(m, "pendingKeyExchange")) + $root.proto.SessionStructure.PendingKeyExchange.encode(m.pendingKeyExchange, w.uint32(66).fork()).ldelim(); + if (m.pendingPreKey != null && Object.hasOwnProperty.call(m, "pendingPreKey")) + $root.proto.SessionStructure.PendingPreKey.encode(m.pendingPreKey, w.uint32(74).fork()).ldelim(); + if (m.remoteRegistrationId != null && Object.hasOwnProperty.call(m, "remoteRegistrationId")) + w.uint32(80).uint32(m.remoteRegistrationId); + if (m.localRegistrationId != null && Object.hasOwnProperty.call(m, "localRegistrationId")) + w.uint32(88).uint32(m.localRegistrationId); + if (m.needsRefresh != null && Object.hasOwnProperty.call(m, "needsRefresh")) + w.uint32(96).bool(m.needsRefresh); + if (m.aliceBaseKey != null && Object.hasOwnProperty.call(m, "aliceBaseKey")) + w.uint32(106).bytes(m.aliceBaseKey); + return w; + }; + + SessionStructure.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SessionStructure(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sessionVersion = r.uint32(); + break; + } + case 2: { + m.localIdentityPublic = r.bytes(); + break; + } + case 3: { + m.remoteIdentityPublic = r.bytes(); + break; + } + case 4: { + m.rootKey = r.bytes(); + break; + } + case 5: { + m.previousCounter = r.uint32(); + break; + } + case 6: { + m.senderChain = $root.proto.SessionStructure.Chain.decode(r, r.uint32()); + break; + } + case 7: { + if (!(m.receiverChains && m.receiverChains.length)) + m.receiverChains = []; + m.receiverChains.push($root.proto.SessionStructure.Chain.decode(r, r.uint32())); + break; + } + case 8: { + m.pendingKeyExchange = $root.proto.SessionStructure.PendingKeyExchange.decode(r, r.uint32()); + break; + } + case 9: { + m.pendingPreKey = $root.proto.SessionStructure.PendingPreKey.decode(r, r.uint32()); + break; + } + case 10: { + m.remoteRegistrationId = r.uint32(); + break; + } + case 11: { + m.localRegistrationId = r.uint32(); + break; + } + case 12: { + m.needsRefresh = r.bool(); + break; + } + case 13: { + m.aliceBaseKey = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SessionStructure.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SessionStructure) + return d; + var m = new $root.proto.SessionStructure(); + if (d.sessionVersion != null) { + m.sessionVersion = d.sessionVersion >>> 0; + } + if (d.localIdentityPublic != null) { + if (typeof d.localIdentityPublic === "string") + $util.base64.decode(d.localIdentityPublic, m.localIdentityPublic = $util.newBuffer($util.base64.length(d.localIdentityPublic)), 0); + else if (d.localIdentityPublic.length >= 0) + m.localIdentityPublic = d.localIdentityPublic; + } + if (d.remoteIdentityPublic != null) { + if (typeof d.remoteIdentityPublic === "string") + $util.base64.decode(d.remoteIdentityPublic, m.remoteIdentityPublic = $util.newBuffer($util.base64.length(d.remoteIdentityPublic)), 0); + else if (d.remoteIdentityPublic.length >= 0) + m.remoteIdentityPublic = d.remoteIdentityPublic; + } + if (d.rootKey != null) { + if (typeof d.rootKey === "string") + $util.base64.decode(d.rootKey, m.rootKey = $util.newBuffer($util.base64.length(d.rootKey)), 0); + else if (d.rootKey.length >= 0) + m.rootKey = d.rootKey; + } + if (d.previousCounter != null) { + m.previousCounter = d.previousCounter >>> 0; + } + if (d.senderChain != null) { + if (typeof d.senderChain !== "object") + throw TypeError(".proto.SessionStructure.senderChain: object expected"); + m.senderChain = $root.proto.SessionStructure.Chain.fromObject(d.senderChain); + } + if (d.receiverChains) { + if (!Array.isArray(d.receiverChains)) + throw TypeError(".proto.SessionStructure.receiverChains: array expected"); + m.receiverChains = []; + for (var i = 0; i < d.receiverChains.length; ++i) { + if (typeof d.receiverChains[i] !== "object") + throw TypeError(".proto.SessionStructure.receiverChains: object expected"); + m.receiverChains[i] = $root.proto.SessionStructure.Chain.fromObject(d.receiverChains[i]); + } + } + if (d.pendingKeyExchange != null) { + if (typeof d.pendingKeyExchange !== "object") + throw TypeError(".proto.SessionStructure.pendingKeyExchange: object expected"); + m.pendingKeyExchange = $root.proto.SessionStructure.PendingKeyExchange.fromObject(d.pendingKeyExchange); + } + if (d.pendingPreKey != null) { + if (typeof d.pendingPreKey !== "object") + throw TypeError(".proto.SessionStructure.pendingPreKey: object expected"); + m.pendingPreKey = $root.proto.SessionStructure.PendingPreKey.fromObject(d.pendingPreKey); + } + if (d.remoteRegistrationId != null) { + m.remoteRegistrationId = d.remoteRegistrationId >>> 0; + } + if (d.localRegistrationId != null) { + m.localRegistrationId = d.localRegistrationId >>> 0; + } + if (d.needsRefresh != null) { + m.needsRefresh = Boolean(d.needsRefresh); + } + if (d.aliceBaseKey != null) { + if (typeof d.aliceBaseKey === "string") + $util.base64.decode(d.aliceBaseKey, m.aliceBaseKey = $util.newBuffer($util.base64.length(d.aliceBaseKey)), 0); + else if (d.aliceBaseKey.length >= 0) + m.aliceBaseKey = d.aliceBaseKey; + } + return m; + }; + + SessionStructure.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.receiverChains = []; + } + if (m.sessionVersion != null && m.hasOwnProperty("sessionVersion")) { + d.sessionVersion = m.sessionVersion; + if (o.oneofs) + d._sessionVersion = "sessionVersion"; + } + if (m.localIdentityPublic != null && m.hasOwnProperty("localIdentityPublic")) { + d.localIdentityPublic = o.bytes === String ? $util.base64.encode(m.localIdentityPublic, 0, m.localIdentityPublic.length) : o.bytes === Array ? Array.prototype.slice.call(m.localIdentityPublic) : m.localIdentityPublic; + if (o.oneofs) + d._localIdentityPublic = "localIdentityPublic"; + } + if (m.remoteIdentityPublic != null && m.hasOwnProperty("remoteIdentityPublic")) { + d.remoteIdentityPublic = o.bytes === String ? $util.base64.encode(m.remoteIdentityPublic, 0, m.remoteIdentityPublic.length) : o.bytes === Array ? Array.prototype.slice.call(m.remoteIdentityPublic) : m.remoteIdentityPublic; + if (o.oneofs) + d._remoteIdentityPublic = "remoteIdentityPublic"; + } + if (m.rootKey != null && m.hasOwnProperty("rootKey")) { + d.rootKey = o.bytes === String ? $util.base64.encode(m.rootKey, 0, m.rootKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.rootKey) : m.rootKey; + if (o.oneofs) + d._rootKey = "rootKey"; + } + if (m.previousCounter != null && m.hasOwnProperty("previousCounter")) { + d.previousCounter = m.previousCounter; + if (o.oneofs) + d._previousCounter = "previousCounter"; + } + if (m.senderChain != null && m.hasOwnProperty("senderChain")) { + d.senderChain = $root.proto.SessionStructure.Chain.toObject(m.senderChain, o); + if (o.oneofs) + d._senderChain = "senderChain"; + } + if (m.receiverChains && m.receiverChains.length) { + d.receiverChains = []; + for (var j = 0; j < m.receiverChains.length; ++j) { + d.receiverChains[j] = $root.proto.SessionStructure.Chain.toObject(m.receiverChains[j], o); + } + } + if (m.pendingKeyExchange != null && m.hasOwnProperty("pendingKeyExchange")) { + d.pendingKeyExchange = $root.proto.SessionStructure.PendingKeyExchange.toObject(m.pendingKeyExchange, o); + if (o.oneofs) + d._pendingKeyExchange = "pendingKeyExchange"; + } + if (m.pendingPreKey != null && m.hasOwnProperty("pendingPreKey")) { + d.pendingPreKey = $root.proto.SessionStructure.PendingPreKey.toObject(m.pendingPreKey, o); + if (o.oneofs) + d._pendingPreKey = "pendingPreKey"; + } + if (m.remoteRegistrationId != null && m.hasOwnProperty("remoteRegistrationId")) { + d.remoteRegistrationId = m.remoteRegistrationId; + if (o.oneofs) + d._remoteRegistrationId = "remoteRegistrationId"; + } + if (m.localRegistrationId != null && m.hasOwnProperty("localRegistrationId")) { + d.localRegistrationId = m.localRegistrationId; + if (o.oneofs) + d._localRegistrationId = "localRegistrationId"; + } + if (m.needsRefresh != null && m.hasOwnProperty("needsRefresh")) { + d.needsRefresh = m.needsRefresh; + if (o.oneofs) + d._needsRefresh = "needsRefresh"; + } + if (m.aliceBaseKey != null && m.hasOwnProperty("aliceBaseKey")) { + d.aliceBaseKey = o.bytes === String ? $util.base64.encode(m.aliceBaseKey, 0, m.aliceBaseKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.aliceBaseKey) : m.aliceBaseKey; + if (o.oneofs) + d._aliceBaseKey = "aliceBaseKey"; + } + return d; + }; + + SessionStructure.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SessionStructure.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SessionStructure"; + }; + + SessionStructure.Chain = (function() { + + function Chain(p) { + this.messageKeys = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Chain.prototype.senderRatchetKey = null; + Chain.prototype.senderRatchetKeyPrivate = null; + Chain.prototype.chainKey = null; + Chain.prototype.messageKeys = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Chain.prototype, "_senderRatchetKey", { + get: $util.oneOfGetter($oneOfFields = ["senderRatchetKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Chain.prototype, "_senderRatchetKeyPrivate", { + get: $util.oneOfGetter($oneOfFields = ["senderRatchetKeyPrivate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Chain.prototype, "_chainKey", { + get: $util.oneOfGetter($oneOfFields = ["chainKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Chain.create = function create(properties) { + return new Chain(properties); + }; + + Chain.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.senderRatchetKey != null && Object.hasOwnProperty.call(m, "senderRatchetKey")) + w.uint32(10).bytes(m.senderRatchetKey); + if (m.senderRatchetKeyPrivate != null && Object.hasOwnProperty.call(m, "senderRatchetKeyPrivate")) + w.uint32(18).bytes(m.senderRatchetKeyPrivate); + if (m.chainKey != null && Object.hasOwnProperty.call(m, "chainKey")) + $root.proto.SessionStructure.Chain.ChainKey.encode(m.chainKey, w.uint32(26).fork()).ldelim(); + if (m.messageKeys != null && m.messageKeys.length) { + for (var i = 0; i < m.messageKeys.length; ++i) + $root.proto.SessionStructure.Chain.MessageKey.encode(m.messageKeys[i], w.uint32(34).fork()).ldelim(); + } + return w; + }; + + Chain.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SessionStructure.Chain(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.senderRatchetKey = r.bytes(); + break; + } + case 2: { + m.senderRatchetKeyPrivate = r.bytes(); + break; + } + case 3: { + m.chainKey = $root.proto.SessionStructure.Chain.ChainKey.decode(r, r.uint32()); + break; + } + case 4: { + if (!(m.messageKeys && m.messageKeys.length)) + m.messageKeys = []; + m.messageKeys.push($root.proto.SessionStructure.Chain.MessageKey.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Chain.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SessionStructure.Chain) + return d; + var m = new $root.proto.SessionStructure.Chain(); + if (d.senderRatchetKey != null) { + if (typeof d.senderRatchetKey === "string") + $util.base64.decode(d.senderRatchetKey, m.senderRatchetKey = $util.newBuffer($util.base64.length(d.senderRatchetKey)), 0); + else if (d.senderRatchetKey.length >= 0) + m.senderRatchetKey = d.senderRatchetKey; + } + if (d.senderRatchetKeyPrivate != null) { + if (typeof d.senderRatchetKeyPrivate === "string") + $util.base64.decode(d.senderRatchetKeyPrivate, m.senderRatchetKeyPrivate = $util.newBuffer($util.base64.length(d.senderRatchetKeyPrivate)), 0); + else if (d.senderRatchetKeyPrivate.length >= 0) + m.senderRatchetKeyPrivate = d.senderRatchetKeyPrivate; + } + if (d.chainKey != null) { + if (typeof d.chainKey !== "object") + throw TypeError(".proto.SessionStructure.Chain.chainKey: object expected"); + m.chainKey = $root.proto.SessionStructure.Chain.ChainKey.fromObject(d.chainKey); + } + if (d.messageKeys) { + if (!Array.isArray(d.messageKeys)) + throw TypeError(".proto.SessionStructure.Chain.messageKeys: array expected"); + m.messageKeys = []; + for (var i = 0; i < d.messageKeys.length; ++i) { + if (typeof d.messageKeys[i] !== "object") + throw TypeError(".proto.SessionStructure.Chain.messageKeys: object expected"); + m.messageKeys[i] = $root.proto.SessionStructure.Chain.MessageKey.fromObject(d.messageKeys[i]); + } + } + return m; + }; + + Chain.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.messageKeys = []; + } + if (m.senderRatchetKey != null && m.hasOwnProperty("senderRatchetKey")) { + d.senderRatchetKey = o.bytes === String ? $util.base64.encode(m.senderRatchetKey, 0, m.senderRatchetKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.senderRatchetKey) : m.senderRatchetKey; + if (o.oneofs) + d._senderRatchetKey = "senderRatchetKey"; + } + if (m.senderRatchetKeyPrivate != null && m.hasOwnProperty("senderRatchetKeyPrivate")) { + d.senderRatchetKeyPrivate = o.bytes === String ? $util.base64.encode(m.senderRatchetKeyPrivate, 0, m.senderRatchetKeyPrivate.length) : o.bytes === Array ? Array.prototype.slice.call(m.senderRatchetKeyPrivate) : m.senderRatchetKeyPrivate; + if (o.oneofs) + d._senderRatchetKeyPrivate = "senderRatchetKeyPrivate"; + } + if (m.chainKey != null && m.hasOwnProperty("chainKey")) { + d.chainKey = $root.proto.SessionStructure.Chain.ChainKey.toObject(m.chainKey, o); + if (o.oneofs) + d._chainKey = "chainKey"; + } + if (m.messageKeys && m.messageKeys.length) { + d.messageKeys = []; + for (var j = 0; j < m.messageKeys.length; ++j) { + d.messageKeys[j] = $root.proto.SessionStructure.Chain.MessageKey.toObject(m.messageKeys[j], o); + } + } + return d; + }; + + Chain.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Chain.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SessionStructure.Chain"; + }; + + Chain.ChainKey = (function() { + + function ChainKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ChainKey.prototype.index = null; + ChainKey.prototype.key = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ChainKey.prototype, "_index", { + get: $util.oneOfGetter($oneOfFields = ["index"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ChainKey.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ChainKey.create = function create(properties) { + return new ChainKey(properties); + }; + + ChainKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.index != null && Object.hasOwnProperty.call(m, "index")) + w.uint32(8).uint32(m.index); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + w.uint32(18).bytes(m.key); + return w; + }; + + ChainKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SessionStructure.Chain.ChainKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.index = r.uint32(); + break; + } + case 2: { + m.key = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ChainKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SessionStructure.Chain.ChainKey) + return d; + var m = new $root.proto.SessionStructure.Chain.ChainKey(); + if (d.index != null) { + m.index = d.index >>> 0; + } + if (d.key != null) { + if (typeof d.key === "string") + $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0); + else if (d.key.length >= 0) + m.key = d.key; + } + return m; + }; + + ChainKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.index != null && m.hasOwnProperty("index")) { + d.index = m.index; + if (o.oneofs) + d._index = "index"; + } + if (m.key != null && m.hasOwnProperty("key")) { + d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key; + if (o.oneofs) + d._key = "key"; + } + return d; + }; + + ChainKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ChainKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SessionStructure.Chain.ChainKey"; + }; + + return ChainKey; + })(); + + Chain.MessageKey = (function() { + + function MessageKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MessageKey.prototype.index = null; + MessageKey.prototype.cipherKey = null; + MessageKey.prototype.macKey = null; + MessageKey.prototype.iv = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_index", { + get: $util.oneOfGetter($oneOfFields = ["index"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_cipherKey", { + get: $util.oneOfGetter($oneOfFields = ["cipherKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_macKey", { + get: $util.oneOfGetter($oneOfFields = ["macKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MessageKey.prototype, "_iv", { + get: $util.oneOfGetter($oneOfFields = ["iv"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MessageKey.create = function create(properties) { + return new MessageKey(properties); + }; + + MessageKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.index != null && Object.hasOwnProperty.call(m, "index")) + w.uint32(8).uint32(m.index); + if (m.cipherKey != null && Object.hasOwnProperty.call(m, "cipherKey")) + w.uint32(18).bytes(m.cipherKey); + if (m.macKey != null && Object.hasOwnProperty.call(m, "macKey")) + w.uint32(26).bytes(m.macKey); + if (m.iv != null && Object.hasOwnProperty.call(m, "iv")) + w.uint32(34).bytes(m.iv); + return w; + }; + + MessageKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SessionStructure.Chain.MessageKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.index = r.uint32(); + break; + } + case 2: { + m.cipherKey = r.bytes(); + break; + } + case 3: { + m.macKey = r.bytes(); + break; + } + case 4: { + m.iv = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MessageKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SessionStructure.Chain.MessageKey) + return d; + var m = new $root.proto.SessionStructure.Chain.MessageKey(); + if (d.index != null) { + m.index = d.index >>> 0; + } + if (d.cipherKey != null) { + if (typeof d.cipherKey === "string") + $util.base64.decode(d.cipherKey, m.cipherKey = $util.newBuffer($util.base64.length(d.cipherKey)), 0); + else if (d.cipherKey.length >= 0) + m.cipherKey = d.cipherKey; + } + if (d.macKey != null) { + if (typeof d.macKey === "string") + $util.base64.decode(d.macKey, m.macKey = $util.newBuffer($util.base64.length(d.macKey)), 0); + else if (d.macKey.length >= 0) + m.macKey = d.macKey; + } + if (d.iv != null) { + if (typeof d.iv === "string") + $util.base64.decode(d.iv, m.iv = $util.newBuffer($util.base64.length(d.iv)), 0); + else if (d.iv.length >= 0) + m.iv = d.iv; + } + return m; + }; + + MessageKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.index != null && m.hasOwnProperty("index")) { + d.index = m.index; + if (o.oneofs) + d._index = "index"; + } + if (m.cipherKey != null && m.hasOwnProperty("cipherKey")) { + d.cipherKey = o.bytes === String ? $util.base64.encode(m.cipherKey, 0, m.cipherKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.cipherKey) : m.cipherKey; + if (o.oneofs) + d._cipherKey = "cipherKey"; + } + if (m.macKey != null && m.hasOwnProperty("macKey")) { + d.macKey = o.bytes === String ? $util.base64.encode(m.macKey, 0, m.macKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.macKey) : m.macKey; + if (o.oneofs) + d._macKey = "macKey"; + } + if (m.iv != null && m.hasOwnProperty("iv")) { + d.iv = o.bytes === String ? $util.base64.encode(m.iv, 0, m.iv.length) : o.bytes === Array ? Array.prototype.slice.call(m.iv) : m.iv; + if (o.oneofs) + d._iv = "iv"; + } + return d; + }; + + MessageKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MessageKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SessionStructure.Chain.MessageKey"; + }; + + return MessageKey; + })(); + + return Chain; + })(); + + SessionStructure.PendingKeyExchange = (function() { + + function PendingKeyExchange(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PendingKeyExchange.prototype.sequence = null; + PendingKeyExchange.prototype.localBaseKey = null; + PendingKeyExchange.prototype.localBaseKeyPrivate = null; + PendingKeyExchange.prototype.localRatchetKey = null; + PendingKeyExchange.prototype.localRatchetKeyPrivate = null; + PendingKeyExchange.prototype.localIdentityKey = null; + PendingKeyExchange.prototype.localIdentityKeyPrivate = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingKeyExchange.prototype, "_sequence", { + get: $util.oneOfGetter($oneOfFields = ["sequence"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingKeyExchange.prototype, "_localBaseKey", { + get: $util.oneOfGetter($oneOfFields = ["localBaseKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingKeyExchange.prototype, "_localBaseKeyPrivate", { + get: $util.oneOfGetter($oneOfFields = ["localBaseKeyPrivate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingKeyExchange.prototype, "_localRatchetKey", { + get: $util.oneOfGetter($oneOfFields = ["localRatchetKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingKeyExchange.prototype, "_localRatchetKeyPrivate", { + get: $util.oneOfGetter($oneOfFields = ["localRatchetKeyPrivate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingKeyExchange.prototype, "_localIdentityKey", { + get: $util.oneOfGetter($oneOfFields = ["localIdentityKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingKeyExchange.prototype, "_localIdentityKeyPrivate", { + get: $util.oneOfGetter($oneOfFields = ["localIdentityKeyPrivate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PendingKeyExchange.create = function create(properties) { + return new PendingKeyExchange(properties); + }; + + PendingKeyExchange.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sequence != null && Object.hasOwnProperty.call(m, "sequence")) + w.uint32(8).uint32(m.sequence); + if (m.localBaseKey != null && Object.hasOwnProperty.call(m, "localBaseKey")) + w.uint32(18).bytes(m.localBaseKey); + if (m.localBaseKeyPrivate != null && Object.hasOwnProperty.call(m, "localBaseKeyPrivate")) + w.uint32(26).bytes(m.localBaseKeyPrivate); + if (m.localRatchetKey != null && Object.hasOwnProperty.call(m, "localRatchetKey")) + w.uint32(34).bytes(m.localRatchetKey); + if (m.localRatchetKeyPrivate != null && Object.hasOwnProperty.call(m, "localRatchetKeyPrivate")) + w.uint32(42).bytes(m.localRatchetKeyPrivate); + if (m.localIdentityKey != null && Object.hasOwnProperty.call(m, "localIdentityKey")) + w.uint32(58).bytes(m.localIdentityKey); + if (m.localIdentityKeyPrivate != null && Object.hasOwnProperty.call(m, "localIdentityKeyPrivate")) + w.uint32(66).bytes(m.localIdentityKeyPrivate); + return w; + }; + + PendingKeyExchange.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SessionStructure.PendingKeyExchange(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.sequence = r.uint32(); + break; + } + case 2: { + m.localBaseKey = r.bytes(); + break; + } + case 3: { + m.localBaseKeyPrivate = r.bytes(); + break; + } + case 4: { + m.localRatchetKey = r.bytes(); + break; + } + case 5: { + m.localRatchetKeyPrivate = r.bytes(); + break; + } + case 7: { + m.localIdentityKey = r.bytes(); + break; + } + case 8: { + m.localIdentityKeyPrivate = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PendingKeyExchange.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SessionStructure.PendingKeyExchange) + return d; + var m = new $root.proto.SessionStructure.PendingKeyExchange(); + if (d.sequence != null) { + m.sequence = d.sequence >>> 0; + } + if (d.localBaseKey != null) { + if (typeof d.localBaseKey === "string") + $util.base64.decode(d.localBaseKey, m.localBaseKey = $util.newBuffer($util.base64.length(d.localBaseKey)), 0); + else if (d.localBaseKey.length >= 0) + m.localBaseKey = d.localBaseKey; + } + if (d.localBaseKeyPrivate != null) { + if (typeof d.localBaseKeyPrivate === "string") + $util.base64.decode(d.localBaseKeyPrivate, m.localBaseKeyPrivate = $util.newBuffer($util.base64.length(d.localBaseKeyPrivate)), 0); + else if (d.localBaseKeyPrivate.length >= 0) + m.localBaseKeyPrivate = d.localBaseKeyPrivate; + } + if (d.localRatchetKey != null) { + if (typeof d.localRatchetKey === "string") + $util.base64.decode(d.localRatchetKey, m.localRatchetKey = $util.newBuffer($util.base64.length(d.localRatchetKey)), 0); + else if (d.localRatchetKey.length >= 0) + m.localRatchetKey = d.localRatchetKey; + } + if (d.localRatchetKeyPrivate != null) { + if (typeof d.localRatchetKeyPrivate === "string") + $util.base64.decode(d.localRatchetKeyPrivate, m.localRatchetKeyPrivate = $util.newBuffer($util.base64.length(d.localRatchetKeyPrivate)), 0); + else if (d.localRatchetKeyPrivate.length >= 0) + m.localRatchetKeyPrivate = d.localRatchetKeyPrivate; + } + if (d.localIdentityKey != null) { + if (typeof d.localIdentityKey === "string") + $util.base64.decode(d.localIdentityKey, m.localIdentityKey = $util.newBuffer($util.base64.length(d.localIdentityKey)), 0); + else if (d.localIdentityKey.length >= 0) + m.localIdentityKey = d.localIdentityKey; + } + if (d.localIdentityKeyPrivate != null) { + if (typeof d.localIdentityKeyPrivate === "string") + $util.base64.decode(d.localIdentityKeyPrivate, m.localIdentityKeyPrivate = $util.newBuffer($util.base64.length(d.localIdentityKeyPrivate)), 0); + else if (d.localIdentityKeyPrivate.length >= 0) + m.localIdentityKeyPrivate = d.localIdentityKeyPrivate; + } + return m; + }; + + PendingKeyExchange.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.sequence != null && m.hasOwnProperty("sequence")) { + d.sequence = m.sequence; + if (o.oneofs) + d._sequence = "sequence"; + } + if (m.localBaseKey != null && m.hasOwnProperty("localBaseKey")) { + d.localBaseKey = o.bytes === String ? $util.base64.encode(m.localBaseKey, 0, m.localBaseKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.localBaseKey) : m.localBaseKey; + if (o.oneofs) + d._localBaseKey = "localBaseKey"; + } + if (m.localBaseKeyPrivate != null && m.hasOwnProperty("localBaseKeyPrivate")) { + d.localBaseKeyPrivate = o.bytes === String ? $util.base64.encode(m.localBaseKeyPrivate, 0, m.localBaseKeyPrivate.length) : o.bytes === Array ? Array.prototype.slice.call(m.localBaseKeyPrivate) : m.localBaseKeyPrivate; + if (o.oneofs) + d._localBaseKeyPrivate = "localBaseKeyPrivate"; + } + if (m.localRatchetKey != null && m.hasOwnProperty("localRatchetKey")) { + d.localRatchetKey = o.bytes === String ? $util.base64.encode(m.localRatchetKey, 0, m.localRatchetKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.localRatchetKey) : m.localRatchetKey; + if (o.oneofs) + d._localRatchetKey = "localRatchetKey"; + } + if (m.localRatchetKeyPrivate != null && m.hasOwnProperty("localRatchetKeyPrivate")) { + d.localRatchetKeyPrivate = o.bytes === String ? $util.base64.encode(m.localRatchetKeyPrivate, 0, m.localRatchetKeyPrivate.length) : o.bytes === Array ? Array.prototype.slice.call(m.localRatchetKeyPrivate) : m.localRatchetKeyPrivate; + if (o.oneofs) + d._localRatchetKeyPrivate = "localRatchetKeyPrivate"; + } + if (m.localIdentityKey != null && m.hasOwnProperty("localIdentityKey")) { + d.localIdentityKey = o.bytes === String ? $util.base64.encode(m.localIdentityKey, 0, m.localIdentityKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.localIdentityKey) : m.localIdentityKey; + if (o.oneofs) + d._localIdentityKey = "localIdentityKey"; + } + if (m.localIdentityKeyPrivate != null && m.hasOwnProperty("localIdentityKeyPrivate")) { + d.localIdentityKeyPrivate = o.bytes === String ? $util.base64.encode(m.localIdentityKeyPrivate, 0, m.localIdentityKeyPrivate.length) : o.bytes === Array ? Array.prototype.slice.call(m.localIdentityKeyPrivate) : m.localIdentityKeyPrivate; + if (o.oneofs) + d._localIdentityKeyPrivate = "localIdentityKeyPrivate"; + } + return d; + }; + + PendingKeyExchange.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PendingKeyExchange.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SessionStructure.PendingKeyExchange"; + }; + + return PendingKeyExchange; + })(); + + SessionStructure.PendingPreKey = (function() { + + function PendingPreKey(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PendingPreKey.prototype.preKeyId = null; + PendingPreKey.prototype.signedPreKeyId = null; + PendingPreKey.prototype.baseKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingPreKey.prototype, "_preKeyId", { + get: $util.oneOfGetter($oneOfFields = ["preKeyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingPreKey.prototype, "_signedPreKeyId", { + get: $util.oneOfGetter($oneOfFields = ["signedPreKeyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PendingPreKey.prototype, "_baseKey", { + get: $util.oneOfGetter($oneOfFields = ["baseKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PendingPreKey.create = function create(properties) { + return new PendingPreKey(properties); + }; + + PendingPreKey.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.preKeyId != null && Object.hasOwnProperty.call(m, "preKeyId")) + w.uint32(8).uint32(m.preKeyId); + if (m.baseKey != null && Object.hasOwnProperty.call(m, "baseKey")) + w.uint32(18).bytes(m.baseKey); + if (m.signedPreKeyId != null && Object.hasOwnProperty.call(m, "signedPreKeyId")) + w.uint32(24).int32(m.signedPreKeyId); + return w; + }; + + PendingPreKey.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SessionStructure.PendingPreKey(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.preKeyId = r.uint32(); + break; + } + case 3: { + m.signedPreKeyId = r.int32(); + break; + } + case 2: { + m.baseKey = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PendingPreKey.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SessionStructure.PendingPreKey) + return d; + var m = new $root.proto.SessionStructure.PendingPreKey(); + if (d.preKeyId != null) { + m.preKeyId = d.preKeyId >>> 0; + } + if (d.signedPreKeyId != null) { + m.signedPreKeyId = d.signedPreKeyId | 0; + } + if (d.baseKey != null) { + if (typeof d.baseKey === "string") + $util.base64.decode(d.baseKey, m.baseKey = $util.newBuffer($util.base64.length(d.baseKey)), 0); + else if (d.baseKey.length >= 0) + m.baseKey = d.baseKey; + } + return m; + }; + + PendingPreKey.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.preKeyId != null && m.hasOwnProperty("preKeyId")) { + d.preKeyId = m.preKeyId; + if (o.oneofs) + d._preKeyId = "preKeyId"; + } + if (m.baseKey != null && m.hasOwnProperty("baseKey")) { + d.baseKey = o.bytes === String ? $util.base64.encode(m.baseKey, 0, m.baseKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.baseKey) : m.baseKey; + if (o.oneofs) + d._baseKey = "baseKey"; + } + if (m.signedPreKeyId != null && m.hasOwnProperty("signedPreKeyId")) { + d.signedPreKeyId = m.signedPreKeyId; + if (o.oneofs) + d._signedPreKeyId = "signedPreKeyId"; + } + return d; + }; + + PendingPreKey.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PendingPreKey.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SessionStructure.PendingPreKey"; + }; + + return PendingPreKey; + })(); + + return SessionStructure; + })(); + + proto.SessionTransparencyMetadata = (function() { + + function SessionTransparencyMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SessionTransparencyMetadata.prototype.disclaimerText = null; + SessionTransparencyMetadata.prototype.hcaId = null; + SessionTransparencyMetadata.prototype.sessionTransparencyType = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionTransparencyMetadata.prototype, "_disclaimerText", { + get: $util.oneOfGetter($oneOfFields = ["disclaimerText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionTransparencyMetadata.prototype, "_hcaId", { + get: $util.oneOfGetter($oneOfFields = ["hcaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SessionTransparencyMetadata.prototype, "_sessionTransparencyType", { + get: $util.oneOfGetter($oneOfFields = ["sessionTransparencyType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SessionTransparencyMetadata.create = function create(properties) { + return new SessionTransparencyMetadata(properties); + }; + + SessionTransparencyMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.disclaimerText != null && Object.hasOwnProperty.call(m, "disclaimerText")) + w.uint32(10).string(m.disclaimerText); + if (m.hcaId != null && Object.hasOwnProperty.call(m, "hcaId")) + w.uint32(18).string(m.hcaId); + if (m.sessionTransparencyType != null && Object.hasOwnProperty.call(m, "sessionTransparencyType")) + w.uint32(24).int32(m.sessionTransparencyType); + return w; + }; + + SessionTransparencyMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SessionTransparencyMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.disclaimerText = r.string(); + break; + } + case 2: { + m.hcaId = r.string(); + break; + } + case 3: { + m.sessionTransparencyType = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SessionTransparencyMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SessionTransparencyMetadata) + return d; + var m = new $root.proto.SessionTransparencyMetadata(); + if (d.disclaimerText != null) { + m.disclaimerText = String(d.disclaimerText); + } + if (d.hcaId != null) { + m.hcaId = String(d.hcaId); + } + switch (d.sessionTransparencyType) { + default: + if (typeof d.sessionTransparencyType === "number") { + m.sessionTransparencyType = d.sessionTransparencyType; + break; + } + break; + case "UNKNOWN_TYPE": + case 0: + m.sessionTransparencyType = 0; + break; + case "NY_AI_SAFETY_DISCLAIMER": + case 1: + m.sessionTransparencyType = 1; + break; + } + return m; + }; + + SessionTransparencyMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.disclaimerText != null && m.hasOwnProperty("disclaimerText")) { + d.disclaimerText = m.disclaimerText; + if (o.oneofs) + d._disclaimerText = "disclaimerText"; + } + if (m.hcaId != null && m.hasOwnProperty("hcaId")) { + d.hcaId = m.hcaId; + if (o.oneofs) + d._hcaId = "hcaId"; + } + if (m.sessionTransparencyType != null && m.hasOwnProperty("sessionTransparencyType")) { + d.sessionTransparencyType = o.enums === String ? $root.proto.SessionTransparencyType[m.sessionTransparencyType] === undefined ? m.sessionTransparencyType : $root.proto.SessionTransparencyType[m.sessionTransparencyType] : m.sessionTransparencyType; + if (o.oneofs) + d._sessionTransparencyType = "sessionTransparencyType"; + } + return d; + }; + + SessionTransparencyMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SessionTransparencyMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SessionTransparencyMetadata"; + }; + + return SessionTransparencyMetadata; + })(); + + proto.SessionTransparencyType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN_TYPE"] = 0; + values[valuesById[1] = "NY_AI_SAFETY_DISCLAIMER"] = 1; + return values; + })(); + + proto.SignalMessage = (function() { + + function SignalMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SignalMessage.prototype.ratchetKey = null; + SignalMessage.prototype.counter = null; + SignalMessage.prototype.previousCounter = null; + SignalMessage.prototype.ciphertext = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignalMessage.prototype, "_ratchetKey", { + get: $util.oneOfGetter($oneOfFields = ["ratchetKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignalMessage.prototype, "_counter", { + get: $util.oneOfGetter($oneOfFields = ["counter"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignalMessage.prototype, "_previousCounter", { + get: $util.oneOfGetter($oneOfFields = ["previousCounter"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignalMessage.prototype, "_ciphertext", { + get: $util.oneOfGetter($oneOfFields = ["ciphertext"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SignalMessage.create = function create(properties) { + return new SignalMessage(properties); + }; + + SignalMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.ratchetKey != null && Object.hasOwnProperty.call(m, "ratchetKey")) + w.uint32(10).bytes(m.ratchetKey); + if (m.counter != null && Object.hasOwnProperty.call(m, "counter")) + w.uint32(16).uint32(m.counter); + if (m.previousCounter != null && Object.hasOwnProperty.call(m, "previousCounter")) + w.uint32(24).uint32(m.previousCounter); + if (m.ciphertext != null && Object.hasOwnProperty.call(m, "ciphertext")) + w.uint32(34).bytes(m.ciphertext); + return w; + }; + + SignalMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SignalMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.ratchetKey = r.bytes(); + break; + } + case 2: { + m.counter = r.uint32(); + break; + } + case 3: { + m.previousCounter = r.uint32(); + break; + } + case 4: { + m.ciphertext = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SignalMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SignalMessage) + return d; + var m = new $root.proto.SignalMessage(); + if (d.ratchetKey != null) { + if (typeof d.ratchetKey === "string") + $util.base64.decode(d.ratchetKey, m.ratchetKey = $util.newBuffer($util.base64.length(d.ratchetKey)), 0); + else if (d.ratchetKey.length >= 0) + m.ratchetKey = d.ratchetKey; + } + if (d.counter != null) { + m.counter = d.counter >>> 0; + } + if (d.previousCounter != null) { + m.previousCounter = d.previousCounter >>> 0; + } + if (d.ciphertext != null) { + if (typeof d.ciphertext === "string") + $util.base64.decode(d.ciphertext, m.ciphertext = $util.newBuffer($util.base64.length(d.ciphertext)), 0); + else if (d.ciphertext.length >= 0) + m.ciphertext = d.ciphertext; + } + return m; + }; + + SignalMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.ratchetKey != null && m.hasOwnProperty("ratchetKey")) { + d.ratchetKey = o.bytes === String ? $util.base64.encode(m.ratchetKey, 0, m.ratchetKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.ratchetKey) : m.ratchetKey; + if (o.oneofs) + d._ratchetKey = "ratchetKey"; + } + if (m.counter != null && m.hasOwnProperty("counter")) { + d.counter = m.counter; + if (o.oneofs) + d._counter = "counter"; + } + if (m.previousCounter != null && m.hasOwnProperty("previousCounter")) { + d.previousCounter = m.previousCounter; + if (o.oneofs) + d._previousCounter = "previousCounter"; + } + if (m.ciphertext != null && m.hasOwnProperty("ciphertext")) { + d.ciphertext = o.bytes === String ? $util.base64.encode(m.ciphertext, 0, m.ciphertext.length) : o.bytes === Array ? Array.prototype.slice.call(m.ciphertext) : m.ciphertext; + if (o.oneofs) + d._ciphertext = "ciphertext"; + } + return d; + }; + + SignalMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SignalMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SignalMessage"; + }; + + return SignalMessage; + })(); + + proto.SignedPreKeyRecordStructure = (function() { + + function SignedPreKeyRecordStructure(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SignedPreKeyRecordStructure.prototype.id = null; + SignedPreKeyRecordStructure.prototype.publicKey = null; + SignedPreKeyRecordStructure.prototype.privateKey = null; + SignedPreKeyRecordStructure.prototype.signature = null; + SignedPreKeyRecordStructure.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignedPreKeyRecordStructure.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignedPreKeyRecordStructure.prototype, "_publicKey", { + get: $util.oneOfGetter($oneOfFields = ["publicKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignedPreKeyRecordStructure.prototype, "_privateKey", { + get: $util.oneOfGetter($oneOfFields = ["privateKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignedPreKeyRecordStructure.prototype, "_signature", { + get: $util.oneOfGetter($oneOfFields = ["signature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SignedPreKeyRecordStructure.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SignedPreKeyRecordStructure.create = function create(properties) { + return new SignedPreKeyRecordStructure(properties); + }; + + SignedPreKeyRecordStructure.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(8).uint32(m.id); + if (m.publicKey != null && Object.hasOwnProperty.call(m, "publicKey")) + w.uint32(18).bytes(m.publicKey); + if (m.privateKey != null && Object.hasOwnProperty.call(m, "privateKey")) + w.uint32(26).bytes(m.privateKey); + if (m.signature != null && Object.hasOwnProperty.call(m, "signature")) + w.uint32(34).bytes(m.signature); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(41).fixed64(m.timestamp); + return w; + }; + + SignedPreKeyRecordStructure.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SignedPreKeyRecordStructure(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.uint32(); + break; + } + case 2: { + m.publicKey = r.bytes(); + break; + } + case 3: { + m.privateKey = r.bytes(); + break; + } + case 4: { + m.signature = r.bytes(); + break; + } + case 5: { + m.timestamp = r.fixed64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SignedPreKeyRecordStructure.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SignedPreKeyRecordStructure) + return d; + var m = new $root.proto.SignedPreKeyRecordStructure(); + if (d.id != null) { + m.id = d.id >>> 0; + } + if (d.publicKey != null) { + if (typeof d.publicKey === "string") + $util.base64.decode(d.publicKey, m.publicKey = $util.newBuffer($util.base64.length(d.publicKey)), 0); + else if (d.publicKey.length >= 0) + m.publicKey = d.publicKey; + } + if (d.privateKey != null) { + if (typeof d.privateKey === "string") + $util.base64.decode(d.privateKey, m.privateKey = $util.newBuffer($util.base64.length(d.privateKey)), 0); + else if (d.privateKey.length >= 0) + m.privateKey = d.privateKey; + } + if (d.signature != null) { + if (typeof d.signature === "string") + $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0); + else if (d.signature.length >= 0) + m.signature = d.signature; + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + SignedPreKeyRecordStructure.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + if (m.publicKey != null && m.hasOwnProperty("publicKey")) { + d.publicKey = o.bytes === String ? $util.base64.encode(m.publicKey, 0, m.publicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.publicKey) : m.publicKey; + if (o.oneofs) + d._publicKey = "publicKey"; + } + if (m.privateKey != null && m.hasOwnProperty("privateKey")) { + d.privateKey = o.bytes === String ? $util.base64.encode(m.privateKey, 0, m.privateKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.privateKey) : m.privateKey; + if (o.oneofs) + d._privateKey = "privateKey"; + } + if (m.signature != null && m.hasOwnProperty("signature")) { + d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature; + if (o.oneofs) + d._signature = "signature"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + SignedPreKeyRecordStructure.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SignedPreKeyRecordStructure.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SignedPreKeyRecordStructure"; + }; + + return SignedPreKeyRecordStructure; + })(); + + proto.StatusAttribution = (function() { + + function StatusAttribution(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusAttribution.prototype.type = null; + StatusAttribution.prototype.actionUrl = null; + StatusAttribution.prototype.statusReshare = null; + StatusAttribution.prototype.externalShare = null; + StatusAttribution.prototype.music = null; + StatusAttribution.prototype.groupStatus = null; + StatusAttribution.prototype.rlAttribution = null; + StatusAttribution.prototype.aiCreatedAttribution = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusAttribution.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusAttribution.prototype, "_actionUrl", { + get: $util.oneOfGetter($oneOfFields = ["actionUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(StatusAttribution.prototype, "attributionData", { + get: $util.oneOfGetter($oneOfFields = ["statusReshare", "externalShare", "music", "groupStatus", "rlAttribution", "aiCreatedAttribution"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusAttribution.create = function create(properties) { + return new StatusAttribution(properties); + }; + + StatusAttribution.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + if (m.actionUrl != null && Object.hasOwnProperty.call(m, "actionUrl")) + w.uint32(18).string(m.actionUrl); + if (m.statusReshare != null && Object.hasOwnProperty.call(m, "statusReshare")) + $root.proto.StatusAttribution.StatusReshare.encode(m.statusReshare, w.uint32(26).fork()).ldelim(); + if (m.externalShare != null && Object.hasOwnProperty.call(m, "externalShare")) + $root.proto.StatusAttribution.ExternalShare.encode(m.externalShare, w.uint32(34).fork()).ldelim(); + if (m.music != null && Object.hasOwnProperty.call(m, "music")) + $root.proto.StatusAttribution.Music.encode(m.music, w.uint32(42).fork()).ldelim(); + if (m.groupStatus != null && Object.hasOwnProperty.call(m, "groupStatus")) + $root.proto.StatusAttribution.GroupStatus.encode(m.groupStatus, w.uint32(50).fork()).ldelim(); + if (m.rlAttribution != null && Object.hasOwnProperty.call(m, "rlAttribution")) + $root.proto.StatusAttribution.RLAttribution.encode(m.rlAttribution, w.uint32(58).fork()).ldelim(); + if (m.aiCreatedAttribution != null && Object.hasOwnProperty.call(m, "aiCreatedAttribution")) + $root.proto.StatusAttribution.AiCreatedAttribution.encode(m.aiCreatedAttribution, w.uint32(66).fork()).ldelim(); + return w; + }; + + StatusAttribution.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + case 2: { + m.actionUrl = r.string(); + break; + } + case 3: { + m.statusReshare = $root.proto.StatusAttribution.StatusReshare.decode(r, r.uint32()); + break; + } + case 4: { + m.externalShare = $root.proto.StatusAttribution.ExternalShare.decode(r, r.uint32()); + break; + } + case 5: { + m.music = $root.proto.StatusAttribution.Music.decode(r, r.uint32()); + break; + } + case 6: { + m.groupStatus = $root.proto.StatusAttribution.GroupStatus.decode(r, r.uint32()); + break; + } + case 7: { + m.rlAttribution = $root.proto.StatusAttribution.RLAttribution.decode(r, r.uint32()); + break; + } + case 8: { + m.aiCreatedAttribution = $root.proto.StatusAttribution.AiCreatedAttribution.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusAttribution.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution) + return d; + var m = new $root.proto.StatusAttribution(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNKNOWN": + case 0: + m.type = 0; + break; + case "RESHARE": + case 1: + m.type = 1; + break; + case "EXTERNAL_SHARE": + case 2: + m.type = 2; + break; + case "MUSIC": + case 3: + m.type = 3; + break; + case "STATUS_MENTION": + case 4: + m.type = 4; + break; + case "GROUP_STATUS": + case 5: + m.type = 5; + break; + case "RL_ATTRIBUTION": + case 6: + m.type = 6; + break; + case "AI_CREATED": + case 7: + m.type = 7; + break; + case "LAYOUTS": + case 8: + m.type = 8; + break; + } + if (d.actionUrl != null) { + m.actionUrl = String(d.actionUrl); + } + if (d.statusReshare != null) { + if (typeof d.statusReshare !== "object") + throw TypeError(".proto.StatusAttribution.statusReshare: object expected"); + m.statusReshare = $root.proto.StatusAttribution.StatusReshare.fromObject(d.statusReshare); + } + if (d.externalShare != null) { + if (typeof d.externalShare !== "object") + throw TypeError(".proto.StatusAttribution.externalShare: object expected"); + m.externalShare = $root.proto.StatusAttribution.ExternalShare.fromObject(d.externalShare); + } + if (d.music != null) { + if (typeof d.music !== "object") + throw TypeError(".proto.StatusAttribution.music: object expected"); + m.music = $root.proto.StatusAttribution.Music.fromObject(d.music); + } + if (d.groupStatus != null) { + if (typeof d.groupStatus !== "object") + throw TypeError(".proto.StatusAttribution.groupStatus: object expected"); + m.groupStatus = $root.proto.StatusAttribution.GroupStatus.fromObject(d.groupStatus); + } + if (d.rlAttribution != null) { + if (typeof d.rlAttribution !== "object") + throw TypeError(".proto.StatusAttribution.rlAttribution: object expected"); + m.rlAttribution = $root.proto.StatusAttribution.RLAttribution.fromObject(d.rlAttribution); + } + if (d.aiCreatedAttribution != null) { + if (typeof d.aiCreatedAttribution !== "object") + throw TypeError(".proto.StatusAttribution.aiCreatedAttribution: object expected"); + m.aiCreatedAttribution = $root.proto.StatusAttribution.AiCreatedAttribution.fromObject(d.aiCreatedAttribution); + } + return m; + }; + + StatusAttribution.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.StatusAttribution.Type[m.type] === undefined ? m.type : $root.proto.StatusAttribution.Type[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.actionUrl != null && m.hasOwnProperty("actionUrl")) { + d.actionUrl = m.actionUrl; + if (o.oneofs) + d._actionUrl = "actionUrl"; + } + if (m.statusReshare != null && m.hasOwnProperty("statusReshare")) { + d.statusReshare = $root.proto.StatusAttribution.StatusReshare.toObject(m.statusReshare, o); + if (o.oneofs) + d.attributionData = "statusReshare"; + } + if (m.externalShare != null && m.hasOwnProperty("externalShare")) { + d.externalShare = $root.proto.StatusAttribution.ExternalShare.toObject(m.externalShare, o); + if (o.oneofs) + d.attributionData = "externalShare"; + } + if (m.music != null && m.hasOwnProperty("music")) { + d.music = $root.proto.StatusAttribution.Music.toObject(m.music, o); + if (o.oneofs) + d.attributionData = "music"; + } + if (m.groupStatus != null && m.hasOwnProperty("groupStatus")) { + d.groupStatus = $root.proto.StatusAttribution.GroupStatus.toObject(m.groupStatus, o); + if (o.oneofs) + d.attributionData = "groupStatus"; + } + if (m.rlAttribution != null && m.hasOwnProperty("rlAttribution")) { + d.rlAttribution = $root.proto.StatusAttribution.RLAttribution.toObject(m.rlAttribution, o); + if (o.oneofs) + d.attributionData = "rlAttribution"; + } + if (m.aiCreatedAttribution != null && m.hasOwnProperty("aiCreatedAttribution")) { + d.aiCreatedAttribution = $root.proto.StatusAttribution.AiCreatedAttribution.toObject(m.aiCreatedAttribution, o); + if (o.oneofs) + d.attributionData = "aiCreatedAttribution"; + } + return d; + }; + + StatusAttribution.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusAttribution.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution"; + }; + + StatusAttribution.AiCreatedAttribution = (function() { + + function AiCreatedAttribution(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AiCreatedAttribution.prototype.source = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AiCreatedAttribution.prototype, "_source", { + get: $util.oneOfGetter($oneOfFields = ["source"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AiCreatedAttribution.create = function create(properties) { + return new AiCreatedAttribution(properties); + }; + + AiCreatedAttribution.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.source != null && Object.hasOwnProperty.call(m, "source")) + w.uint32(8).int32(m.source); + return w; + }; + + AiCreatedAttribution.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution.AiCreatedAttribution(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.source = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AiCreatedAttribution.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution.AiCreatedAttribution) + return d; + var m = new $root.proto.StatusAttribution.AiCreatedAttribution(); + switch (d.source) { + default: + if (typeof d.source === "number") { + m.source = d.source; + break; + } + break; + case "UNKNOWN": + case 0: + m.source = 0; + break; + case "STATUS_MIMICRY": + case 1: + m.source = 1; + break; + } + return m; + }; + + AiCreatedAttribution.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.source != null && m.hasOwnProperty("source")) { + d.source = o.enums === String ? $root.proto.StatusAttribution.AiCreatedAttribution.Source[m.source] === undefined ? m.source : $root.proto.StatusAttribution.AiCreatedAttribution.Source[m.source] : m.source; + if (o.oneofs) + d._source = "source"; + } + return d; + }; + + AiCreatedAttribution.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AiCreatedAttribution.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution.AiCreatedAttribution"; + }; + + AiCreatedAttribution.Source = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "STATUS_MIMICRY"] = 1; + return values; + })(); + + return AiCreatedAttribution; + })(); + + StatusAttribution.ExternalShare = (function() { + + function ExternalShare(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ExternalShare.prototype.actionUrl = null; + ExternalShare.prototype.source = null; + ExternalShare.prototype.duration = null; + ExternalShare.prototype.actionFallbackUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalShare.prototype, "_actionUrl", { + get: $util.oneOfGetter($oneOfFields = ["actionUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalShare.prototype, "_source", { + get: $util.oneOfGetter($oneOfFields = ["source"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalShare.prototype, "_duration", { + get: $util.oneOfGetter($oneOfFields = ["duration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalShare.prototype, "_actionFallbackUrl", { + get: $util.oneOfGetter($oneOfFields = ["actionFallbackUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ExternalShare.create = function create(properties) { + return new ExternalShare(properties); + }; + + ExternalShare.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.actionUrl != null && Object.hasOwnProperty.call(m, "actionUrl")) + w.uint32(10).string(m.actionUrl); + if (m.source != null && Object.hasOwnProperty.call(m, "source")) + w.uint32(16).int32(m.source); + if (m.duration != null && Object.hasOwnProperty.call(m, "duration")) + w.uint32(24).int32(m.duration); + if (m.actionFallbackUrl != null && Object.hasOwnProperty.call(m, "actionFallbackUrl")) + w.uint32(34).string(m.actionFallbackUrl); + return w; + }; + + ExternalShare.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution.ExternalShare(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.actionUrl = r.string(); + break; + } + case 2: { + m.source = r.int32(); + break; + } + case 3: { + m.duration = r.int32(); + break; + } + case 4: { + m.actionFallbackUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ExternalShare.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution.ExternalShare) + return d; + var m = new $root.proto.StatusAttribution.ExternalShare(); + if (d.actionUrl != null) { + m.actionUrl = String(d.actionUrl); + } + switch (d.source) { + default: + if (typeof d.source === "number") { + m.source = d.source; + break; + } + break; + case "UNKNOWN": + case 0: + m.source = 0; + break; + case "INSTAGRAM": + case 1: + m.source = 1; + break; + case "FACEBOOK": + case 2: + m.source = 2; + break; + case "MESSENGER": + case 3: + m.source = 3; + break; + case "SPOTIFY": + case 4: + m.source = 4; + break; + case "YOUTUBE": + case 5: + m.source = 5; + break; + case "PINTEREST": + case 6: + m.source = 6; + break; + case "THREADS": + case 7: + m.source = 7; + break; + case "APPLE_MUSIC": + case 8: + m.source = 8; + break; + case "SHARECHAT": + case 9: + m.source = 9; + break; + case "GOOGLE_PHOTOS": + case 10: + m.source = 10; + break; + } + if (d.duration != null) { + m.duration = d.duration | 0; + } + if (d.actionFallbackUrl != null) { + m.actionFallbackUrl = String(d.actionFallbackUrl); + } + return m; + }; + + ExternalShare.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.actionUrl != null && m.hasOwnProperty("actionUrl")) { + d.actionUrl = m.actionUrl; + if (o.oneofs) + d._actionUrl = "actionUrl"; + } + if (m.source != null && m.hasOwnProperty("source")) { + d.source = o.enums === String ? $root.proto.StatusAttribution.ExternalShare.Source[m.source] === undefined ? m.source : $root.proto.StatusAttribution.ExternalShare.Source[m.source] : m.source; + if (o.oneofs) + d._source = "source"; + } + if (m.duration != null && m.hasOwnProperty("duration")) { + d.duration = m.duration; + if (o.oneofs) + d._duration = "duration"; + } + if (m.actionFallbackUrl != null && m.hasOwnProperty("actionFallbackUrl")) { + d.actionFallbackUrl = m.actionFallbackUrl; + if (o.oneofs) + d._actionFallbackUrl = "actionFallbackUrl"; + } + return d; + }; + + ExternalShare.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ExternalShare.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution.ExternalShare"; + }; + + ExternalShare.Source = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "INSTAGRAM"] = 1; + values[valuesById[2] = "FACEBOOK"] = 2; + values[valuesById[3] = "MESSENGER"] = 3; + values[valuesById[4] = "SPOTIFY"] = 4; + values[valuesById[5] = "YOUTUBE"] = 5; + values[valuesById[6] = "PINTEREST"] = 6; + values[valuesById[7] = "THREADS"] = 7; + values[valuesById[8] = "APPLE_MUSIC"] = 8; + values[valuesById[9] = "SHARECHAT"] = 9; + values[valuesById[10] = "GOOGLE_PHOTOS"] = 10; + return values; + })(); + + return ExternalShare; + })(); + + StatusAttribution.GroupStatus = (function() { + + function GroupStatus(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + GroupStatus.prototype.authorJid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(GroupStatus.prototype, "_authorJid", { + get: $util.oneOfGetter($oneOfFields = ["authorJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + GroupStatus.create = function create(properties) { + return new GroupStatus(properties); + }; + + GroupStatus.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.authorJid != null && Object.hasOwnProperty.call(m, "authorJid")) + w.uint32(10).string(m.authorJid); + return w; + }; + + GroupStatus.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution.GroupStatus(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.authorJid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + GroupStatus.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution.GroupStatus) + return d; + var m = new $root.proto.StatusAttribution.GroupStatus(); + if (d.authorJid != null) { + m.authorJid = String(d.authorJid); + } + return m; + }; + + GroupStatus.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.authorJid != null && m.hasOwnProperty("authorJid")) { + d.authorJid = m.authorJid; + if (o.oneofs) + d._authorJid = "authorJid"; + } + return d; + }; + + GroupStatus.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + GroupStatus.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution.GroupStatus"; + }; + + return GroupStatus; + })(); + + StatusAttribution.Music = (function() { + + function Music(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Music.prototype.authorName = null; + Music.prototype.songId = null; + Music.prototype.title = null; + Music.prototype.author = null; + Music.prototype.artistAttribution = null; + Music.prototype.isExplicit = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Music.prototype, "_authorName", { + get: $util.oneOfGetter($oneOfFields = ["authorName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Music.prototype, "_songId", { + get: $util.oneOfGetter($oneOfFields = ["songId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Music.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Music.prototype, "_author", { + get: $util.oneOfGetter($oneOfFields = ["author"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Music.prototype, "_artistAttribution", { + get: $util.oneOfGetter($oneOfFields = ["artistAttribution"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Music.prototype, "_isExplicit", { + get: $util.oneOfGetter($oneOfFields = ["isExplicit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Music.create = function create(properties) { + return new Music(properties); + }; + + Music.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.authorName != null && Object.hasOwnProperty.call(m, "authorName")) + w.uint32(10).string(m.authorName); + if (m.songId != null && Object.hasOwnProperty.call(m, "songId")) + w.uint32(18).string(m.songId); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(26).string(m.title); + if (m.author != null && Object.hasOwnProperty.call(m, "author")) + w.uint32(34).string(m.author); + if (m.artistAttribution != null && Object.hasOwnProperty.call(m, "artistAttribution")) + w.uint32(42).string(m.artistAttribution); + if (m.isExplicit != null && Object.hasOwnProperty.call(m, "isExplicit")) + w.uint32(48).bool(m.isExplicit); + return w; + }; + + Music.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution.Music(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.authorName = r.string(); + break; + } + case 2: { + m.songId = r.string(); + break; + } + case 3: { + m.title = r.string(); + break; + } + case 4: { + m.author = r.string(); + break; + } + case 5: { + m.artistAttribution = r.string(); + break; + } + case 6: { + m.isExplicit = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Music.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution.Music) + return d; + var m = new $root.proto.StatusAttribution.Music(); + if (d.authorName != null) { + m.authorName = String(d.authorName); + } + if (d.songId != null) { + m.songId = String(d.songId); + } + if (d.title != null) { + m.title = String(d.title); + } + if (d.author != null) { + m.author = String(d.author); + } + if (d.artistAttribution != null) { + m.artistAttribution = String(d.artistAttribution); + } + if (d.isExplicit != null) { + m.isExplicit = Boolean(d.isExplicit); + } + return m; + }; + + Music.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.authorName != null && m.hasOwnProperty("authorName")) { + d.authorName = m.authorName; + if (o.oneofs) + d._authorName = "authorName"; + } + if (m.songId != null && m.hasOwnProperty("songId")) { + d.songId = m.songId; + if (o.oneofs) + d._songId = "songId"; + } + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.author != null && m.hasOwnProperty("author")) { + d.author = m.author; + if (o.oneofs) + d._author = "author"; + } + if (m.artistAttribution != null && m.hasOwnProperty("artistAttribution")) { + d.artistAttribution = m.artistAttribution; + if (o.oneofs) + d._artistAttribution = "artistAttribution"; + } + if (m.isExplicit != null && m.hasOwnProperty("isExplicit")) { + d.isExplicit = m.isExplicit; + if (o.oneofs) + d._isExplicit = "isExplicit"; + } + return d; + }; + + Music.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Music.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution.Music"; + }; + + return Music; + })(); + + StatusAttribution.RLAttribution = (function() { + + function RLAttribution(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RLAttribution.prototype.source = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RLAttribution.prototype, "_source", { + get: $util.oneOfGetter($oneOfFields = ["source"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RLAttribution.create = function create(properties) { + return new RLAttribution(properties); + }; + + RLAttribution.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.source != null && Object.hasOwnProperty.call(m, "source")) + w.uint32(8).int32(m.source); + return w; + }; + + RLAttribution.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution.RLAttribution(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.source = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RLAttribution.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution.RLAttribution) + return d; + var m = new $root.proto.StatusAttribution.RLAttribution(); + switch (d.source) { + default: + if (typeof d.source === "number") { + m.source = d.source; + break; + } + break; + case "UNKNOWN": + case 0: + m.source = 0; + break; + case "RAY_BAN_META_GLASSES": + case 1: + m.source = 1; + break; + case "OAKLEY_META_GLASSES": + case 2: + m.source = 2; + break; + case "HYPERNOVA_GLASSES": + case 3: + m.source = 3; + break; + } + return m; + }; + + RLAttribution.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.source != null && m.hasOwnProperty("source")) { + d.source = o.enums === String ? $root.proto.StatusAttribution.RLAttribution.Source[m.source] === undefined ? m.source : $root.proto.StatusAttribution.RLAttribution.Source[m.source] : m.source; + if (o.oneofs) + d._source = "source"; + } + return d; + }; + + RLAttribution.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RLAttribution.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution.RLAttribution"; + }; + + RLAttribution.Source = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "RAY_BAN_META_GLASSES"] = 1; + values[valuesById[2] = "OAKLEY_META_GLASSES"] = 2; + values[valuesById[3] = "HYPERNOVA_GLASSES"] = 3; + return values; + })(); + + return RLAttribution; + })(); + + StatusAttribution.StatusReshare = (function() { + + function StatusReshare(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusReshare.prototype.source = null; + StatusReshare.prototype.metadata = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusReshare.prototype, "_source", { + get: $util.oneOfGetter($oneOfFields = ["source"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusReshare.prototype, "_metadata", { + get: $util.oneOfGetter($oneOfFields = ["metadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusReshare.create = function create(properties) { + return new StatusReshare(properties); + }; + + StatusReshare.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.source != null && Object.hasOwnProperty.call(m, "source")) + w.uint32(8).int32(m.source); + if (m.metadata != null && Object.hasOwnProperty.call(m, "metadata")) + $root.proto.StatusAttribution.StatusReshare.Metadata.encode(m.metadata, w.uint32(18).fork()).ldelim(); + return w; + }; + + StatusReshare.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution.StatusReshare(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.source = r.int32(); + break; + } + case 2: { + m.metadata = $root.proto.StatusAttribution.StatusReshare.Metadata.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusReshare.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution.StatusReshare) + return d; + var m = new $root.proto.StatusAttribution.StatusReshare(); + switch (d.source) { + default: + if (typeof d.source === "number") { + m.source = d.source; + break; + } + break; + case "UNKNOWN": + case 0: + m.source = 0; + break; + case "INTERNAL_RESHARE": + case 1: + m.source = 1; + break; + case "MENTION_RESHARE": + case 2: + m.source = 2; + break; + case "CHANNEL_RESHARE": + case 3: + m.source = 3; + break; + case "FORWARD": + case 4: + m.source = 4; + break; + } + if (d.metadata != null) { + if (typeof d.metadata !== "object") + throw TypeError(".proto.StatusAttribution.StatusReshare.metadata: object expected"); + m.metadata = $root.proto.StatusAttribution.StatusReshare.Metadata.fromObject(d.metadata); + } + return m; + }; + + StatusReshare.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.source != null && m.hasOwnProperty("source")) { + d.source = o.enums === String ? $root.proto.StatusAttribution.StatusReshare.Source[m.source] === undefined ? m.source : $root.proto.StatusAttribution.StatusReshare.Source[m.source] : m.source; + if (o.oneofs) + d._source = "source"; + } + if (m.metadata != null && m.hasOwnProperty("metadata")) { + d.metadata = $root.proto.StatusAttribution.StatusReshare.Metadata.toObject(m.metadata, o); + if (o.oneofs) + d._metadata = "metadata"; + } + return d; + }; + + StatusReshare.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusReshare.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution.StatusReshare"; + }; + + StatusReshare.Metadata = (function() { + + function Metadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Metadata.prototype.duration = null; + Metadata.prototype.channelJid = null; + Metadata.prototype.channelMessageId = null; + Metadata.prototype.hasMultipleReshares = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Metadata.prototype, "_duration", { + get: $util.oneOfGetter($oneOfFields = ["duration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Metadata.prototype, "_channelJid", { + get: $util.oneOfGetter($oneOfFields = ["channelJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Metadata.prototype, "_channelMessageId", { + get: $util.oneOfGetter($oneOfFields = ["channelMessageId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Metadata.prototype, "_hasMultipleReshares", { + get: $util.oneOfGetter($oneOfFields = ["hasMultipleReshares"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Metadata.create = function create(properties) { + return new Metadata(properties); + }; + + Metadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.duration != null && Object.hasOwnProperty.call(m, "duration")) + w.uint32(8).int32(m.duration); + if (m.channelJid != null && Object.hasOwnProperty.call(m, "channelJid")) + w.uint32(18).string(m.channelJid); + if (m.channelMessageId != null && Object.hasOwnProperty.call(m, "channelMessageId")) + w.uint32(24).int32(m.channelMessageId); + if (m.hasMultipleReshares != null && Object.hasOwnProperty.call(m, "hasMultipleReshares")) + w.uint32(32).bool(m.hasMultipleReshares); + return w; + }; + + Metadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusAttribution.StatusReshare.Metadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.duration = r.int32(); + break; + } + case 2: { + m.channelJid = r.string(); + break; + } + case 3: { + m.channelMessageId = r.int32(); + break; + } + case 4: { + m.hasMultipleReshares = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Metadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusAttribution.StatusReshare.Metadata) + return d; + var m = new $root.proto.StatusAttribution.StatusReshare.Metadata(); + if (d.duration != null) { + m.duration = d.duration | 0; + } + if (d.channelJid != null) { + m.channelJid = String(d.channelJid); + } + if (d.channelMessageId != null) { + m.channelMessageId = d.channelMessageId | 0; + } + if (d.hasMultipleReshares != null) { + m.hasMultipleReshares = Boolean(d.hasMultipleReshares); + } + return m; + }; + + Metadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.duration != null && m.hasOwnProperty("duration")) { + d.duration = m.duration; + if (o.oneofs) + d._duration = "duration"; + } + if (m.channelJid != null && m.hasOwnProperty("channelJid")) { + d.channelJid = m.channelJid; + if (o.oneofs) + d._channelJid = "channelJid"; + } + if (m.channelMessageId != null && m.hasOwnProperty("channelMessageId")) { + d.channelMessageId = m.channelMessageId; + if (o.oneofs) + d._channelMessageId = "channelMessageId"; + } + if (m.hasMultipleReshares != null && m.hasOwnProperty("hasMultipleReshares")) { + d.hasMultipleReshares = m.hasMultipleReshares; + if (o.oneofs) + d._hasMultipleReshares = "hasMultipleReshares"; + } + return d; + }; + + Metadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Metadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusAttribution.StatusReshare.Metadata"; + }; + + return Metadata; + })(); + + StatusReshare.Source = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "INTERNAL_RESHARE"] = 1; + values[valuesById[2] = "MENTION_RESHARE"] = 2; + values[valuesById[3] = "CHANNEL_RESHARE"] = 3; + values[valuesById[4] = "FORWARD"] = 4; + return values; + })(); + + return StatusReshare; + })(); + + StatusAttribution.Type = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "RESHARE"] = 1; + values[valuesById[2] = "EXTERNAL_SHARE"] = 2; + values[valuesById[3] = "MUSIC"] = 3; + values[valuesById[4] = "STATUS_MENTION"] = 4; + values[valuesById[5] = "GROUP_STATUS"] = 5; + values[valuesById[6] = "RL_ATTRIBUTION"] = 6; + values[valuesById[7] = "AI_CREATED"] = 7; + values[valuesById[8] = "LAYOUTS"] = 8; + return values; + })(); + + return StatusAttribution; + })(); + + proto.StatusMentionMessage = (function() { + + function StatusMentionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusMentionMessage.prototype.quotedStatus = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusMentionMessage.prototype, "_quotedStatus", { + get: $util.oneOfGetter($oneOfFields = ["quotedStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusMentionMessage.create = function create(properties) { + return new StatusMentionMessage(properties); + }; + + StatusMentionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.quotedStatus != null && Object.hasOwnProperty.call(m, "quotedStatus")) + $root.proto.Message.encode(m.quotedStatus, w.uint32(10).fork()).ldelim(); + return w; + }; + + StatusMentionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusMentionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.quotedStatus = $root.proto.Message.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusMentionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusMentionMessage) + return d; + var m = new $root.proto.StatusMentionMessage(); + if (d.quotedStatus != null) { + if (typeof d.quotedStatus !== "object") + throw TypeError(".proto.StatusMentionMessage.quotedStatus: object expected"); + m.quotedStatus = $root.proto.Message.fromObject(d.quotedStatus); + } + return m; + }; + + StatusMentionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.quotedStatus != null && m.hasOwnProperty("quotedStatus")) { + d.quotedStatus = $root.proto.Message.toObject(m.quotedStatus, o); + if (o.oneofs) + d._quotedStatus = "quotedStatus"; + } + return d; + }; + + StatusMentionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusMentionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusMentionMessage"; + }; + + return StatusMentionMessage; + })(); + + proto.StatusPSA = (function() { + + function StatusPSA(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusPSA.prototype.campaignId = $util.Long ? $util.Long.fromBits(0,0,true) : 0; + StatusPSA.prototype.campaignExpirationTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusPSA.prototype, "_campaignExpirationTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["campaignExpirationTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusPSA.create = function create(properties) { + return new StatusPSA(properties); + }; + + StatusPSA.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.campaignId != null && Object.hasOwnProperty.call(m, "campaignId")) + w.uint32(352).uint64(m.campaignId); + if (m.campaignExpirationTimestamp != null && Object.hasOwnProperty.call(m, "campaignExpirationTimestamp")) + w.uint32(360).uint64(m.campaignExpirationTimestamp); + return w; + }; + + StatusPSA.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StatusPSA(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 44: { + m.campaignId = r.uint64(); + break; + } + case 45: { + m.campaignExpirationTimestamp = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusPSA.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StatusPSA) + return d; + var m = new $root.proto.StatusPSA(); + if (d.campaignId != null) { + if ($util.Long) + (m.campaignId = $util.Long.fromValue(d.campaignId)).unsigned = true; + else if (typeof d.campaignId === "string") + m.campaignId = parseInt(d.campaignId, 10); + else if (typeof d.campaignId === "number") + m.campaignId = d.campaignId; + else if (typeof d.campaignId === "object") + m.campaignId = new $util.LongBits(d.campaignId.low >>> 0, d.campaignId.high >>> 0).toNumber(true); + } + if (d.campaignExpirationTimestamp != null) { + if ($util.Long) + (m.campaignExpirationTimestamp = $util.Long.fromValue(d.campaignExpirationTimestamp)).unsigned = true; + else if (typeof d.campaignExpirationTimestamp === "string") + m.campaignExpirationTimestamp = parseInt(d.campaignExpirationTimestamp, 10); + else if (typeof d.campaignExpirationTimestamp === "number") + m.campaignExpirationTimestamp = d.campaignExpirationTimestamp; + else if (typeof d.campaignExpirationTimestamp === "object") + m.campaignExpirationTimestamp = new $util.LongBits(d.campaignExpirationTimestamp.low >>> 0, d.campaignExpirationTimestamp.high >>> 0).toNumber(true); + } + return m; + }; + + StatusPSA.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + if ($util.Long) { + var n = new $util.Long(0, 0, true); + d.campaignId = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n; + } else + d.campaignId = o.longs === String ? "0" : 0; + } + if (m.campaignId != null && m.hasOwnProperty("campaignId")) { + if (typeof m.campaignId === "number") + d.campaignId = o.longs === String ? String(m.campaignId) : m.campaignId; + else + d.campaignId = o.longs === String ? longToString(m.campaignId, true) : o.longs === Number ? longToNumber(m.campaignId, true) : m.campaignId; + } + if (m.campaignExpirationTimestamp != null && m.hasOwnProperty("campaignExpirationTimestamp")) { + if (typeof m.campaignExpirationTimestamp === "number") + d.campaignExpirationTimestamp = o.longs === String ? String(m.campaignExpirationTimestamp) : m.campaignExpirationTimestamp; + else + d.campaignExpirationTimestamp = o.longs === String ? longToString(m.campaignExpirationTimestamp, true) : o.longs === Number ? longToNumber(m.campaignExpirationTimestamp, true) : m.campaignExpirationTimestamp; + if (o.oneofs) + d._campaignExpirationTimestamp = "campaignExpirationTimestamp"; + } + return d; + }; + + StatusPSA.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusPSA.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StatusPSA"; + }; + + return StatusPSA; + })(); + + proto.StickerMetadata = (function() { + + function StickerMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StickerMetadata.prototype.url = null; + StickerMetadata.prototype.fileSha256 = null; + StickerMetadata.prototype.fileEncSha256 = null; + StickerMetadata.prototype.mediaKey = null; + StickerMetadata.prototype.mimetype = null; + StickerMetadata.prototype.height = null; + StickerMetadata.prototype.width = null; + StickerMetadata.prototype.directPath = null; + StickerMetadata.prototype.fileLength = null; + StickerMetadata.prototype.weight = null; + StickerMetadata.prototype.lastStickerSentTs = null; + StickerMetadata.prototype.isLottie = null; + StickerMetadata.prototype.imageHash = null; + StickerMetadata.prototype.isAvatarSticker = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_fileSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_weight", { + get: $util.oneOfGetter($oneOfFields = ["weight"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_lastStickerSentTs", { + get: $util.oneOfGetter($oneOfFields = ["lastStickerSentTs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_isLottie", { + get: $util.oneOfGetter($oneOfFields = ["isLottie"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_imageHash", { + get: $util.oneOfGetter($oneOfFields = ["imageHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerMetadata.prototype, "_isAvatarSticker", { + get: $util.oneOfGetter($oneOfFields = ["isAvatarSticker"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StickerMetadata.create = function create(properties) { + return new StickerMetadata(properties); + }; + + StickerMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.fileSha256 != null && Object.hasOwnProperty.call(m, "fileSha256")) + w.uint32(18).bytes(m.fileSha256); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(26).bytes(m.fileEncSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(34).bytes(m.mediaKey); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(42).string(m.mimetype); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(48).uint32(m.height); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(56).uint32(m.width); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(66).string(m.directPath); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(72).uint64(m.fileLength); + if (m.weight != null && Object.hasOwnProperty.call(m, "weight")) + w.uint32(85).float(m.weight); + if (m.lastStickerSentTs != null && Object.hasOwnProperty.call(m, "lastStickerSentTs")) + w.uint32(88).int64(m.lastStickerSentTs); + if (m.isLottie != null && Object.hasOwnProperty.call(m, "isLottie")) + w.uint32(96).bool(m.isLottie); + if (m.imageHash != null && Object.hasOwnProperty.call(m, "imageHash")) + w.uint32(106).string(m.imageHash); + if (m.isAvatarSticker != null && Object.hasOwnProperty.call(m, "isAvatarSticker")) + w.uint32(112).bool(m.isAvatarSticker); + return w; + }; + + StickerMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.StickerMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.fileSha256 = r.bytes(); + break; + } + case 3: { + m.fileEncSha256 = r.bytes(); + break; + } + case 4: { + m.mediaKey = r.bytes(); + break; + } + case 5: { + m.mimetype = r.string(); + break; + } + case 6: { + m.height = r.uint32(); + break; + } + case 7: { + m.width = r.uint32(); + break; + } + case 8: { + m.directPath = r.string(); + break; + } + case 9: { + m.fileLength = r.uint64(); + break; + } + case 10: { + m.weight = r.float(); + break; + } + case 11: { + m.lastStickerSentTs = r.int64(); + break; + } + case 12: { + m.isLottie = r.bool(); + break; + } + case 13: { + m.imageHash = r.string(); + break; + } + case 14: { + m.isAvatarSticker = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StickerMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.StickerMetadata) + return d; + var m = new $root.proto.StickerMetadata(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.fileSha256 != null) { + if (typeof d.fileSha256 === "string") + $util.base64.decode(d.fileSha256, m.fileSha256 = $util.newBuffer($util.base64.length(d.fileSha256)), 0); + else if (d.fileSha256.length >= 0) + m.fileSha256 = d.fileSha256; + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.height != null) { + m.height = d.height >>> 0; + } + if (d.width != null) { + m.width = d.width >>> 0; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.weight != null) { + m.weight = Number(d.weight); + } + if (d.lastStickerSentTs != null) { + if ($util.Long) + (m.lastStickerSentTs = $util.Long.fromValue(d.lastStickerSentTs)).unsigned = false; + else if (typeof d.lastStickerSentTs === "string") + m.lastStickerSentTs = parseInt(d.lastStickerSentTs, 10); + else if (typeof d.lastStickerSentTs === "number") + m.lastStickerSentTs = d.lastStickerSentTs; + else if (typeof d.lastStickerSentTs === "object") + m.lastStickerSentTs = new $util.LongBits(d.lastStickerSentTs.low >>> 0, d.lastStickerSentTs.high >>> 0).toNumber(); + } + if (d.isLottie != null) { + m.isLottie = Boolean(d.isLottie); + } + if (d.imageHash != null) { + m.imageHash = String(d.imageHash); + } + if (d.isAvatarSticker != null) { + m.isAvatarSticker = Boolean(d.isAvatarSticker); + } + return m; + }; + + StickerMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.fileSha256 != null && m.hasOwnProperty("fileSha256")) { + d.fileSha256 = o.bytes === String ? $util.base64.encode(m.fileSha256, 0, m.fileSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileSha256) : m.fileSha256; + if (o.oneofs) + d._fileSha256 = "fileSha256"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.weight != null && m.hasOwnProperty("weight")) { + d.weight = o.json && !isFinite(m.weight) ? String(m.weight) : m.weight; + if (o.oneofs) + d._weight = "weight"; + } + if (m.lastStickerSentTs != null && m.hasOwnProperty("lastStickerSentTs")) { + if (typeof m.lastStickerSentTs === "number") + d.lastStickerSentTs = o.longs === String ? String(m.lastStickerSentTs) : m.lastStickerSentTs; + else + d.lastStickerSentTs = o.longs === String ? longToString(m.lastStickerSentTs) : o.longs === Number ? longToNumber(m.lastStickerSentTs) : m.lastStickerSentTs; + if (o.oneofs) + d._lastStickerSentTs = "lastStickerSentTs"; + } + if (m.isLottie != null && m.hasOwnProperty("isLottie")) { + d.isLottie = m.isLottie; + if (o.oneofs) + d._isLottie = "isLottie"; + } + if (m.imageHash != null && m.hasOwnProperty("imageHash")) { + d.imageHash = m.imageHash; + if (o.oneofs) + d._imageHash = "imageHash"; + } + if (m.isAvatarSticker != null && m.hasOwnProperty("isAvatarSticker")) { + d.isAvatarSticker = m.isAvatarSticker; + if (o.oneofs) + d._isAvatarSticker = "isAvatarSticker"; + } + return d; + }; + + StickerMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StickerMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.StickerMetadata"; + }; + + return StickerMetadata; + })(); + + proto.SyncActionData = (function() { + + function SyncActionData(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncActionData.prototype.index = null; + SyncActionData.prototype.value = null; + SyncActionData.prototype.padding = null; + SyncActionData.prototype.version = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionData.prototype, "_index", { + get: $util.oneOfGetter($oneOfFields = ["index"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionData.prototype, "_value", { + get: $util.oneOfGetter($oneOfFields = ["value"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionData.prototype, "_padding", { + get: $util.oneOfGetter($oneOfFields = ["padding"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionData.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncActionData.create = function create(properties) { + return new SyncActionData(properties); + }; + + SyncActionData.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.index != null && Object.hasOwnProperty.call(m, "index")) + w.uint32(10).bytes(m.index); + if (m.value != null && Object.hasOwnProperty.call(m, "value")) + $root.proto.SyncActionValue.encode(m.value, w.uint32(18).fork()).ldelim(); + if (m.padding != null && Object.hasOwnProperty.call(m, "padding")) + w.uint32(26).bytes(m.padding); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(32).int32(m.version); + return w; + }; + + SyncActionData.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionData(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.index = r.bytes(); + break; + } + case 2: { + m.value = $root.proto.SyncActionValue.decode(r, r.uint32()); + break; + } + case 3: { + m.padding = r.bytes(); + break; + } + case 4: { + m.version = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncActionData.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionData) + return d; + var m = new $root.proto.SyncActionData(); + if (d.index != null) { + if (typeof d.index === "string") + $util.base64.decode(d.index, m.index = $util.newBuffer($util.base64.length(d.index)), 0); + else if (d.index.length >= 0) + m.index = d.index; + } + if (d.value != null) { + if (typeof d.value !== "object") + throw TypeError(".proto.SyncActionData.value: object expected"); + m.value = $root.proto.SyncActionValue.fromObject(d.value); + } + if (d.padding != null) { + if (typeof d.padding === "string") + $util.base64.decode(d.padding, m.padding = $util.newBuffer($util.base64.length(d.padding)), 0); + else if (d.padding.length >= 0) + m.padding = d.padding; + } + if (d.version != null) { + m.version = d.version | 0; + } + return m; + }; + + SyncActionData.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.index != null && m.hasOwnProperty("index")) { + d.index = o.bytes === String ? $util.base64.encode(m.index, 0, m.index.length) : o.bytes === Array ? Array.prototype.slice.call(m.index) : m.index; + if (o.oneofs) + d._index = "index"; + } + if (m.value != null && m.hasOwnProperty("value")) { + d.value = $root.proto.SyncActionValue.toObject(m.value, o); + if (o.oneofs) + d._value = "value"; + } + if (m.padding != null && m.hasOwnProperty("padding")) { + d.padding = o.bytes === String ? $util.base64.encode(m.padding, 0, m.padding.length) : o.bytes === Array ? Array.prototype.slice.call(m.padding) : m.padding; + if (o.oneofs) + d._padding = "padding"; + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = m.version; + if (o.oneofs) + d._version = "version"; + } + return d; + }; + + SyncActionData.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncActionData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionData"; + }; + + return SyncActionData; + })(); + + proto.SyncActionValue = (function() { + + function SyncActionValue(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncActionValue.prototype.timestamp = null; + SyncActionValue.prototype.starAction = null; + SyncActionValue.prototype.contactAction = null; + SyncActionValue.prototype.muteAction = null; + SyncActionValue.prototype.pinAction = null; + SyncActionValue.prototype.pushNameSetting = null; + SyncActionValue.prototype.quickReplyAction = null; + SyncActionValue.prototype.recentEmojiWeightsAction = null; + SyncActionValue.prototype.labelEditAction = null; + SyncActionValue.prototype.labelAssociationAction = null; + SyncActionValue.prototype.localeSetting = null; + SyncActionValue.prototype.archiveChatAction = null; + SyncActionValue.prototype.deleteMessageForMeAction = null; + SyncActionValue.prototype.keyExpiration = null; + SyncActionValue.prototype.markChatAsReadAction = null; + SyncActionValue.prototype.clearChatAction = null; + SyncActionValue.prototype.deleteChatAction = null; + SyncActionValue.prototype.unarchiveChatsSetting = null; + SyncActionValue.prototype.primaryFeature = null; + SyncActionValue.prototype.androidUnsupportedActions = null; + SyncActionValue.prototype.agentAction = null; + SyncActionValue.prototype.subscriptionAction = null; + SyncActionValue.prototype.userStatusMuteAction = null; + SyncActionValue.prototype.timeFormatAction = null; + SyncActionValue.prototype.nuxAction = null; + SyncActionValue.prototype.primaryVersionAction = null; + SyncActionValue.prototype.stickerAction = null; + SyncActionValue.prototype.removeRecentStickerAction = null; + SyncActionValue.prototype.chatAssignment = null; + SyncActionValue.prototype.chatAssignmentOpenedStatus = null; + SyncActionValue.prototype.pnForLidChatAction = null; + SyncActionValue.prototype.marketingMessageAction = null; + SyncActionValue.prototype.marketingMessageBroadcastAction = null; + SyncActionValue.prototype.externalWebBetaAction = null; + SyncActionValue.prototype.privacySettingRelayAllCalls = null; + SyncActionValue.prototype.callLogAction = null; + SyncActionValue.prototype.ugcBot = null; + SyncActionValue.prototype.statusPrivacy = null; + SyncActionValue.prototype.botWelcomeRequestAction = null; + SyncActionValue.prototype.deleteIndividualCallLog = null; + SyncActionValue.prototype.labelReorderingAction = null; + SyncActionValue.prototype.paymentInfoAction = null; + SyncActionValue.prototype.customPaymentMethodsAction = null; + SyncActionValue.prototype.lockChatAction = null; + SyncActionValue.prototype.chatLockSettings = null; + SyncActionValue.prototype.wamoUserIdentifierAction = null; + SyncActionValue.prototype.privacySettingDisableLinkPreviewsAction = null; + SyncActionValue.prototype.deviceCapabilities = null; + SyncActionValue.prototype.noteEditAction = null; + SyncActionValue.prototype.favoritesAction = null; + SyncActionValue.prototype.merchantPaymentPartnerAction = null; + SyncActionValue.prototype.waffleAccountLinkStateAction = null; + SyncActionValue.prototype.usernameChatStartMode = null; + SyncActionValue.prototype.notificationActivitySettingAction = null; + SyncActionValue.prototype.lidContactAction = null; + SyncActionValue.prototype.ctwaPerCustomerDataSharingAction = null; + SyncActionValue.prototype.paymentTosAction = null; + SyncActionValue.prototype.privacySettingChannelsPersonalisedRecommendationAction = null; + SyncActionValue.prototype.businessBroadcastAssociationAction = null; + SyncActionValue.prototype.detectedOutcomesStatusAction = null; + SyncActionValue.prototype.maibaAiFeaturesControlAction = null; + SyncActionValue.prototype.businessBroadcastListAction = null; + SyncActionValue.prototype.musicUserIdAction = null; + SyncActionValue.prototype.statusPostOptInNotificationPreferencesAction = null; + SyncActionValue.prototype.avatarUpdatedAction = null; + SyncActionValue.prototype.privateProcessingSettingAction = null; + SyncActionValue.prototype.newsletterSavedInterestsAction = null; + SyncActionValue.prototype.aiThreadRenameAction = null; + SyncActionValue.prototype.interactiveMessageAction = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_starAction", { + get: $util.oneOfGetter($oneOfFields = ["starAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_contactAction", { + get: $util.oneOfGetter($oneOfFields = ["contactAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_muteAction", { + get: $util.oneOfGetter($oneOfFields = ["muteAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_pinAction", { + get: $util.oneOfGetter($oneOfFields = ["pinAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_pushNameSetting", { + get: $util.oneOfGetter($oneOfFields = ["pushNameSetting"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_quickReplyAction", { + get: $util.oneOfGetter($oneOfFields = ["quickReplyAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_recentEmojiWeightsAction", { + get: $util.oneOfGetter($oneOfFields = ["recentEmojiWeightsAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_labelEditAction", { + get: $util.oneOfGetter($oneOfFields = ["labelEditAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_labelAssociationAction", { + get: $util.oneOfGetter($oneOfFields = ["labelAssociationAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_localeSetting", { + get: $util.oneOfGetter($oneOfFields = ["localeSetting"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_archiveChatAction", { + get: $util.oneOfGetter($oneOfFields = ["archiveChatAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_deleteMessageForMeAction", { + get: $util.oneOfGetter($oneOfFields = ["deleteMessageForMeAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_keyExpiration", { + get: $util.oneOfGetter($oneOfFields = ["keyExpiration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_markChatAsReadAction", { + get: $util.oneOfGetter($oneOfFields = ["markChatAsReadAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_clearChatAction", { + get: $util.oneOfGetter($oneOfFields = ["clearChatAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_deleteChatAction", { + get: $util.oneOfGetter($oneOfFields = ["deleteChatAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_unarchiveChatsSetting", { + get: $util.oneOfGetter($oneOfFields = ["unarchiveChatsSetting"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_primaryFeature", { + get: $util.oneOfGetter($oneOfFields = ["primaryFeature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_androidUnsupportedActions", { + get: $util.oneOfGetter($oneOfFields = ["androidUnsupportedActions"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_agentAction", { + get: $util.oneOfGetter($oneOfFields = ["agentAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_subscriptionAction", { + get: $util.oneOfGetter($oneOfFields = ["subscriptionAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_userStatusMuteAction", { + get: $util.oneOfGetter($oneOfFields = ["userStatusMuteAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_timeFormatAction", { + get: $util.oneOfGetter($oneOfFields = ["timeFormatAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_nuxAction", { + get: $util.oneOfGetter($oneOfFields = ["nuxAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_primaryVersionAction", { + get: $util.oneOfGetter($oneOfFields = ["primaryVersionAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_stickerAction", { + get: $util.oneOfGetter($oneOfFields = ["stickerAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_removeRecentStickerAction", { + get: $util.oneOfGetter($oneOfFields = ["removeRecentStickerAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_chatAssignment", { + get: $util.oneOfGetter($oneOfFields = ["chatAssignment"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_chatAssignmentOpenedStatus", { + get: $util.oneOfGetter($oneOfFields = ["chatAssignmentOpenedStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_pnForLidChatAction", { + get: $util.oneOfGetter($oneOfFields = ["pnForLidChatAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_marketingMessageAction", { + get: $util.oneOfGetter($oneOfFields = ["marketingMessageAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_marketingMessageBroadcastAction", { + get: $util.oneOfGetter($oneOfFields = ["marketingMessageBroadcastAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_externalWebBetaAction", { + get: $util.oneOfGetter($oneOfFields = ["externalWebBetaAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_privacySettingRelayAllCalls", { + get: $util.oneOfGetter($oneOfFields = ["privacySettingRelayAllCalls"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_callLogAction", { + get: $util.oneOfGetter($oneOfFields = ["callLogAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_ugcBot", { + get: $util.oneOfGetter($oneOfFields = ["ugcBot"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_statusPrivacy", { + get: $util.oneOfGetter($oneOfFields = ["statusPrivacy"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_botWelcomeRequestAction", { + get: $util.oneOfGetter($oneOfFields = ["botWelcomeRequestAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_deleteIndividualCallLog", { + get: $util.oneOfGetter($oneOfFields = ["deleteIndividualCallLog"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_labelReorderingAction", { + get: $util.oneOfGetter($oneOfFields = ["labelReorderingAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_paymentInfoAction", { + get: $util.oneOfGetter($oneOfFields = ["paymentInfoAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_customPaymentMethodsAction", { + get: $util.oneOfGetter($oneOfFields = ["customPaymentMethodsAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_lockChatAction", { + get: $util.oneOfGetter($oneOfFields = ["lockChatAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_chatLockSettings", { + get: $util.oneOfGetter($oneOfFields = ["chatLockSettings"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_wamoUserIdentifierAction", { + get: $util.oneOfGetter($oneOfFields = ["wamoUserIdentifierAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_privacySettingDisableLinkPreviewsAction", { + get: $util.oneOfGetter($oneOfFields = ["privacySettingDisableLinkPreviewsAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_deviceCapabilities", { + get: $util.oneOfGetter($oneOfFields = ["deviceCapabilities"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_noteEditAction", { + get: $util.oneOfGetter($oneOfFields = ["noteEditAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_favoritesAction", { + get: $util.oneOfGetter($oneOfFields = ["favoritesAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_merchantPaymentPartnerAction", { + get: $util.oneOfGetter($oneOfFields = ["merchantPaymentPartnerAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_waffleAccountLinkStateAction", { + get: $util.oneOfGetter($oneOfFields = ["waffleAccountLinkStateAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_usernameChatStartMode", { + get: $util.oneOfGetter($oneOfFields = ["usernameChatStartMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_notificationActivitySettingAction", { + get: $util.oneOfGetter($oneOfFields = ["notificationActivitySettingAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_lidContactAction", { + get: $util.oneOfGetter($oneOfFields = ["lidContactAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_ctwaPerCustomerDataSharingAction", { + get: $util.oneOfGetter($oneOfFields = ["ctwaPerCustomerDataSharingAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_paymentTosAction", { + get: $util.oneOfGetter($oneOfFields = ["paymentTosAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_privacySettingChannelsPersonalisedRecommendationAction", { + get: $util.oneOfGetter($oneOfFields = ["privacySettingChannelsPersonalisedRecommendationAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_businessBroadcastAssociationAction", { + get: $util.oneOfGetter($oneOfFields = ["businessBroadcastAssociationAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_detectedOutcomesStatusAction", { + get: $util.oneOfGetter($oneOfFields = ["detectedOutcomesStatusAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_maibaAiFeaturesControlAction", { + get: $util.oneOfGetter($oneOfFields = ["maibaAiFeaturesControlAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_businessBroadcastListAction", { + get: $util.oneOfGetter($oneOfFields = ["businessBroadcastListAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_musicUserIdAction", { + get: $util.oneOfGetter($oneOfFields = ["musicUserIdAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_statusPostOptInNotificationPreferencesAction", { + get: $util.oneOfGetter($oneOfFields = ["statusPostOptInNotificationPreferencesAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_avatarUpdatedAction", { + get: $util.oneOfGetter($oneOfFields = ["avatarUpdatedAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_privateProcessingSettingAction", { + get: $util.oneOfGetter($oneOfFields = ["privateProcessingSettingAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_newsletterSavedInterestsAction", { + get: $util.oneOfGetter($oneOfFields = ["newsletterSavedInterestsAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_aiThreadRenameAction", { + get: $util.oneOfGetter($oneOfFields = ["aiThreadRenameAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionValue.prototype, "_interactiveMessageAction", { + get: $util.oneOfGetter($oneOfFields = ["interactiveMessageAction"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncActionValue.create = function create(properties) { + return new SyncActionValue(properties); + }; + + SyncActionValue.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(8).int64(m.timestamp); + if (m.starAction != null && Object.hasOwnProperty.call(m, "starAction")) + $root.proto.SyncActionValue.StarAction.encode(m.starAction, w.uint32(18).fork()).ldelim(); + if (m.contactAction != null && Object.hasOwnProperty.call(m, "contactAction")) + $root.proto.SyncActionValue.ContactAction.encode(m.contactAction, w.uint32(26).fork()).ldelim(); + if (m.muteAction != null && Object.hasOwnProperty.call(m, "muteAction")) + $root.proto.SyncActionValue.MuteAction.encode(m.muteAction, w.uint32(34).fork()).ldelim(); + if (m.pinAction != null && Object.hasOwnProperty.call(m, "pinAction")) + $root.proto.SyncActionValue.PinAction.encode(m.pinAction, w.uint32(42).fork()).ldelim(); + if (m.pushNameSetting != null && Object.hasOwnProperty.call(m, "pushNameSetting")) + $root.proto.SyncActionValue.PushNameSetting.encode(m.pushNameSetting, w.uint32(58).fork()).ldelim(); + if (m.quickReplyAction != null && Object.hasOwnProperty.call(m, "quickReplyAction")) + $root.proto.SyncActionValue.QuickReplyAction.encode(m.quickReplyAction, w.uint32(66).fork()).ldelim(); + if (m.recentEmojiWeightsAction != null && Object.hasOwnProperty.call(m, "recentEmojiWeightsAction")) + $root.proto.SyncActionValue.RecentEmojiWeightsAction.encode(m.recentEmojiWeightsAction, w.uint32(90).fork()).ldelim(); + if (m.labelEditAction != null && Object.hasOwnProperty.call(m, "labelEditAction")) + $root.proto.SyncActionValue.LabelEditAction.encode(m.labelEditAction, w.uint32(114).fork()).ldelim(); + if (m.labelAssociationAction != null && Object.hasOwnProperty.call(m, "labelAssociationAction")) + $root.proto.SyncActionValue.LabelAssociationAction.encode(m.labelAssociationAction, w.uint32(122).fork()).ldelim(); + if (m.localeSetting != null && Object.hasOwnProperty.call(m, "localeSetting")) + $root.proto.SyncActionValue.LocaleSetting.encode(m.localeSetting, w.uint32(130).fork()).ldelim(); + if (m.archiveChatAction != null && Object.hasOwnProperty.call(m, "archiveChatAction")) + $root.proto.SyncActionValue.ArchiveChatAction.encode(m.archiveChatAction, w.uint32(138).fork()).ldelim(); + if (m.deleteMessageForMeAction != null && Object.hasOwnProperty.call(m, "deleteMessageForMeAction")) + $root.proto.SyncActionValue.DeleteMessageForMeAction.encode(m.deleteMessageForMeAction, w.uint32(146).fork()).ldelim(); + if (m.keyExpiration != null && Object.hasOwnProperty.call(m, "keyExpiration")) + $root.proto.SyncActionValue.KeyExpiration.encode(m.keyExpiration, w.uint32(154).fork()).ldelim(); + if (m.markChatAsReadAction != null && Object.hasOwnProperty.call(m, "markChatAsReadAction")) + $root.proto.SyncActionValue.MarkChatAsReadAction.encode(m.markChatAsReadAction, w.uint32(162).fork()).ldelim(); + if (m.clearChatAction != null && Object.hasOwnProperty.call(m, "clearChatAction")) + $root.proto.SyncActionValue.ClearChatAction.encode(m.clearChatAction, w.uint32(170).fork()).ldelim(); + if (m.deleteChatAction != null && Object.hasOwnProperty.call(m, "deleteChatAction")) + $root.proto.SyncActionValue.DeleteChatAction.encode(m.deleteChatAction, w.uint32(178).fork()).ldelim(); + if (m.unarchiveChatsSetting != null && Object.hasOwnProperty.call(m, "unarchiveChatsSetting")) + $root.proto.SyncActionValue.UnarchiveChatsSetting.encode(m.unarchiveChatsSetting, w.uint32(186).fork()).ldelim(); + if (m.primaryFeature != null && Object.hasOwnProperty.call(m, "primaryFeature")) + $root.proto.SyncActionValue.PrimaryFeature.encode(m.primaryFeature, w.uint32(194).fork()).ldelim(); + if (m.androidUnsupportedActions != null && Object.hasOwnProperty.call(m, "androidUnsupportedActions")) + $root.proto.SyncActionValue.AndroidUnsupportedActions.encode(m.androidUnsupportedActions, w.uint32(210).fork()).ldelim(); + if (m.agentAction != null && Object.hasOwnProperty.call(m, "agentAction")) + $root.proto.SyncActionValue.AgentAction.encode(m.agentAction, w.uint32(218).fork()).ldelim(); + if (m.subscriptionAction != null && Object.hasOwnProperty.call(m, "subscriptionAction")) + $root.proto.SyncActionValue.SubscriptionAction.encode(m.subscriptionAction, w.uint32(226).fork()).ldelim(); + if (m.userStatusMuteAction != null && Object.hasOwnProperty.call(m, "userStatusMuteAction")) + $root.proto.SyncActionValue.UserStatusMuteAction.encode(m.userStatusMuteAction, w.uint32(234).fork()).ldelim(); + if (m.timeFormatAction != null && Object.hasOwnProperty.call(m, "timeFormatAction")) + $root.proto.SyncActionValue.TimeFormatAction.encode(m.timeFormatAction, w.uint32(242).fork()).ldelim(); + if (m.nuxAction != null && Object.hasOwnProperty.call(m, "nuxAction")) + $root.proto.SyncActionValue.NuxAction.encode(m.nuxAction, w.uint32(250).fork()).ldelim(); + if (m.primaryVersionAction != null && Object.hasOwnProperty.call(m, "primaryVersionAction")) + $root.proto.SyncActionValue.PrimaryVersionAction.encode(m.primaryVersionAction, w.uint32(258).fork()).ldelim(); + if (m.stickerAction != null && Object.hasOwnProperty.call(m, "stickerAction")) + $root.proto.SyncActionValue.StickerAction.encode(m.stickerAction, w.uint32(266).fork()).ldelim(); + if (m.removeRecentStickerAction != null && Object.hasOwnProperty.call(m, "removeRecentStickerAction")) + $root.proto.SyncActionValue.RemoveRecentStickerAction.encode(m.removeRecentStickerAction, w.uint32(274).fork()).ldelim(); + if (m.chatAssignment != null && Object.hasOwnProperty.call(m, "chatAssignment")) + $root.proto.SyncActionValue.ChatAssignmentAction.encode(m.chatAssignment, w.uint32(282).fork()).ldelim(); + if (m.chatAssignmentOpenedStatus != null && Object.hasOwnProperty.call(m, "chatAssignmentOpenedStatus")) + $root.proto.SyncActionValue.ChatAssignmentOpenedStatusAction.encode(m.chatAssignmentOpenedStatus, w.uint32(290).fork()).ldelim(); + if (m.pnForLidChatAction != null && Object.hasOwnProperty.call(m, "pnForLidChatAction")) + $root.proto.SyncActionValue.PnForLidChatAction.encode(m.pnForLidChatAction, w.uint32(298).fork()).ldelim(); + if (m.marketingMessageAction != null && Object.hasOwnProperty.call(m, "marketingMessageAction")) + $root.proto.SyncActionValue.MarketingMessageAction.encode(m.marketingMessageAction, w.uint32(306).fork()).ldelim(); + if (m.marketingMessageBroadcastAction != null && Object.hasOwnProperty.call(m, "marketingMessageBroadcastAction")) + $root.proto.SyncActionValue.MarketingMessageBroadcastAction.encode(m.marketingMessageBroadcastAction, w.uint32(314).fork()).ldelim(); + if (m.externalWebBetaAction != null && Object.hasOwnProperty.call(m, "externalWebBetaAction")) + $root.proto.SyncActionValue.ExternalWebBetaAction.encode(m.externalWebBetaAction, w.uint32(322).fork()).ldelim(); + if (m.privacySettingRelayAllCalls != null && Object.hasOwnProperty.call(m, "privacySettingRelayAllCalls")) + $root.proto.SyncActionValue.PrivacySettingRelayAllCalls.encode(m.privacySettingRelayAllCalls, w.uint32(330).fork()).ldelim(); + if (m.callLogAction != null && Object.hasOwnProperty.call(m, "callLogAction")) + $root.proto.SyncActionValue.CallLogAction.encode(m.callLogAction, w.uint32(338).fork()).ldelim(); + if (m.ugcBot != null && Object.hasOwnProperty.call(m, "ugcBot")) + $root.proto.SyncActionValue.UGCBot.encode(m.ugcBot, w.uint32(346).fork()).ldelim(); + if (m.statusPrivacy != null && Object.hasOwnProperty.call(m, "statusPrivacy")) + $root.proto.SyncActionValue.StatusPrivacyAction.encode(m.statusPrivacy, w.uint32(354).fork()).ldelim(); + if (m.botWelcomeRequestAction != null && Object.hasOwnProperty.call(m, "botWelcomeRequestAction")) + $root.proto.SyncActionValue.BotWelcomeRequestAction.encode(m.botWelcomeRequestAction, w.uint32(362).fork()).ldelim(); + if (m.deleteIndividualCallLog != null && Object.hasOwnProperty.call(m, "deleteIndividualCallLog")) + $root.proto.SyncActionValue.DeleteIndividualCallLogAction.encode(m.deleteIndividualCallLog, w.uint32(370).fork()).ldelim(); + if (m.labelReorderingAction != null && Object.hasOwnProperty.call(m, "labelReorderingAction")) + $root.proto.SyncActionValue.LabelReorderingAction.encode(m.labelReorderingAction, w.uint32(378).fork()).ldelim(); + if (m.paymentInfoAction != null && Object.hasOwnProperty.call(m, "paymentInfoAction")) + $root.proto.SyncActionValue.PaymentInfoAction.encode(m.paymentInfoAction, w.uint32(386).fork()).ldelim(); + if (m.customPaymentMethodsAction != null && Object.hasOwnProperty.call(m, "customPaymentMethodsAction")) + $root.proto.SyncActionValue.CustomPaymentMethodsAction.encode(m.customPaymentMethodsAction, w.uint32(394).fork()).ldelim(); + if (m.lockChatAction != null && Object.hasOwnProperty.call(m, "lockChatAction")) + $root.proto.SyncActionValue.LockChatAction.encode(m.lockChatAction, w.uint32(402).fork()).ldelim(); + if (m.chatLockSettings != null && Object.hasOwnProperty.call(m, "chatLockSettings")) + $root.proto.ChatLockSettings.encode(m.chatLockSettings, w.uint32(410).fork()).ldelim(); + if (m.wamoUserIdentifierAction != null && Object.hasOwnProperty.call(m, "wamoUserIdentifierAction")) + $root.proto.SyncActionValue.WamoUserIdentifierAction.encode(m.wamoUserIdentifierAction, w.uint32(418).fork()).ldelim(); + if (m.privacySettingDisableLinkPreviewsAction != null && Object.hasOwnProperty.call(m, "privacySettingDisableLinkPreviewsAction")) + $root.proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction.encode(m.privacySettingDisableLinkPreviewsAction, w.uint32(426).fork()).ldelim(); + if (m.deviceCapabilities != null && Object.hasOwnProperty.call(m, "deviceCapabilities")) + $root.proto.DeviceCapabilities.encode(m.deviceCapabilities, w.uint32(434).fork()).ldelim(); + if (m.noteEditAction != null && Object.hasOwnProperty.call(m, "noteEditAction")) + $root.proto.SyncActionValue.NoteEditAction.encode(m.noteEditAction, w.uint32(442).fork()).ldelim(); + if (m.favoritesAction != null && Object.hasOwnProperty.call(m, "favoritesAction")) + $root.proto.SyncActionValue.FavoritesAction.encode(m.favoritesAction, w.uint32(450).fork()).ldelim(); + if (m.merchantPaymentPartnerAction != null && Object.hasOwnProperty.call(m, "merchantPaymentPartnerAction")) + $root.proto.SyncActionValue.MerchantPaymentPartnerAction.encode(m.merchantPaymentPartnerAction, w.uint32(458).fork()).ldelim(); + if (m.waffleAccountLinkStateAction != null && Object.hasOwnProperty.call(m, "waffleAccountLinkStateAction")) + $root.proto.SyncActionValue.WaffleAccountLinkStateAction.encode(m.waffleAccountLinkStateAction, w.uint32(466).fork()).ldelim(); + if (m.usernameChatStartMode != null && Object.hasOwnProperty.call(m, "usernameChatStartMode")) + $root.proto.SyncActionValue.UsernameChatStartModeAction.encode(m.usernameChatStartMode, w.uint32(474).fork()).ldelim(); + if (m.notificationActivitySettingAction != null && Object.hasOwnProperty.call(m, "notificationActivitySettingAction")) + $root.proto.SyncActionValue.NotificationActivitySettingAction.encode(m.notificationActivitySettingAction, w.uint32(482).fork()).ldelim(); + if (m.lidContactAction != null && Object.hasOwnProperty.call(m, "lidContactAction")) + $root.proto.SyncActionValue.LidContactAction.encode(m.lidContactAction, w.uint32(490).fork()).ldelim(); + if (m.ctwaPerCustomerDataSharingAction != null && Object.hasOwnProperty.call(m, "ctwaPerCustomerDataSharingAction")) + $root.proto.SyncActionValue.CtwaPerCustomerDataSharingAction.encode(m.ctwaPerCustomerDataSharingAction, w.uint32(498).fork()).ldelim(); + if (m.paymentTosAction != null && Object.hasOwnProperty.call(m, "paymentTosAction")) + $root.proto.SyncActionValue.PaymentTosAction.encode(m.paymentTosAction, w.uint32(506).fork()).ldelim(); + if (m.privacySettingChannelsPersonalisedRecommendationAction != null && Object.hasOwnProperty.call(m, "privacySettingChannelsPersonalisedRecommendationAction")) + $root.proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction.encode(m.privacySettingChannelsPersonalisedRecommendationAction, w.uint32(514).fork()).ldelim(); + if (m.businessBroadcastAssociationAction != null && Object.hasOwnProperty.call(m, "businessBroadcastAssociationAction")) + $root.proto.SyncActionValue.BusinessBroadcastAssociationAction.encode(m.businessBroadcastAssociationAction, w.uint32(522).fork()).ldelim(); + if (m.detectedOutcomesStatusAction != null && Object.hasOwnProperty.call(m, "detectedOutcomesStatusAction")) + $root.proto.SyncActionValue.DetectedOutcomesStatusAction.encode(m.detectedOutcomesStatusAction, w.uint32(530).fork()).ldelim(); + if (m.maibaAiFeaturesControlAction != null && Object.hasOwnProperty.call(m, "maibaAiFeaturesControlAction")) + $root.proto.SyncActionValue.MaibaAIFeaturesControlAction.encode(m.maibaAiFeaturesControlAction, w.uint32(546).fork()).ldelim(); + if (m.businessBroadcastListAction != null && Object.hasOwnProperty.call(m, "businessBroadcastListAction")) + $root.proto.SyncActionValue.BusinessBroadcastListAction.encode(m.businessBroadcastListAction, w.uint32(554).fork()).ldelim(); + if (m.musicUserIdAction != null && Object.hasOwnProperty.call(m, "musicUserIdAction")) + $root.proto.SyncActionValue.MusicUserIdAction.encode(m.musicUserIdAction, w.uint32(562).fork()).ldelim(); + if (m.statusPostOptInNotificationPreferencesAction != null && Object.hasOwnProperty.call(m, "statusPostOptInNotificationPreferencesAction")) + $root.proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction.encode(m.statusPostOptInNotificationPreferencesAction, w.uint32(570).fork()).ldelim(); + if (m.avatarUpdatedAction != null && Object.hasOwnProperty.call(m, "avatarUpdatedAction")) + $root.proto.SyncActionValue.AvatarUpdatedAction.encode(m.avatarUpdatedAction, w.uint32(578).fork()).ldelim(); + if (m.privateProcessingSettingAction != null && Object.hasOwnProperty.call(m, "privateProcessingSettingAction")) + $root.proto.SyncActionValue.PrivateProcessingSettingAction.encode(m.privateProcessingSettingAction, w.uint32(594).fork()).ldelim(); + if (m.newsletterSavedInterestsAction != null && Object.hasOwnProperty.call(m, "newsletterSavedInterestsAction")) + $root.proto.SyncActionValue.NewsletterSavedInterestsAction.encode(m.newsletterSavedInterestsAction, w.uint32(602).fork()).ldelim(); + if (m.aiThreadRenameAction != null && Object.hasOwnProperty.call(m, "aiThreadRenameAction")) + $root.proto.SyncActionValue.AiThreadRenameAction.encode(m.aiThreadRenameAction, w.uint32(610).fork()).ldelim(); + if (m.interactiveMessageAction != null && Object.hasOwnProperty.call(m, "interactiveMessageAction")) + $root.proto.SyncActionValue.InteractiveMessageAction.encode(m.interactiveMessageAction, w.uint32(618).fork()).ldelim(); + return w; + }; + + SyncActionValue.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.timestamp = r.int64(); + break; + } + case 2: { + m.starAction = $root.proto.SyncActionValue.StarAction.decode(r, r.uint32()); + break; + } + case 3: { + m.contactAction = $root.proto.SyncActionValue.ContactAction.decode(r, r.uint32()); + break; + } + case 4: { + m.muteAction = $root.proto.SyncActionValue.MuteAction.decode(r, r.uint32()); + break; + } + case 5: { + m.pinAction = $root.proto.SyncActionValue.PinAction.decode(r, r.uint32()); + break; + } + case 7: { + m.pushNameSetting = $root.proto.SyncActionValue.PushNameSetting.decode(r, r.uint32()); + break; + } + case 8: { + m.quickReplyAction = $root.proto.SyncActionValue.QuickReplyAction.decode(r, r.uint32()); + break; + } + case 11: { + m.recentEmojiWeightsAction = $root.proto.SyncActionValue.RecentEmojiWeightsAction.decode(r, r.uint32()); + break; + } + case 14: { + m.labelEditAction = $root.proto.SyncActionValue.LabelEditAction.decode(r, r.uint32()); + break; + } + case 15: { + m.labelAssociationAction = $root.proto.SyncActionValue.LabelAssociationAction.decode(r, r.uint32()); + break; + } + case 16: { + m.localeSetting = $root.proto.SyncActionValue.LocaleSetting.decode(r, r.uint32()); + break; + } + case 17: { + m.archiveChatAction = $root.proto.SyncActionValue.ArchiveChatAction.decode(r, r.uint32()); + break; + } + case 18: { + m.deleteMessageForMeAction = $root.proto.SyncActionValue.DeleteMessageForMeAction.decode(r, r.uint32()); + break; + } + case 19: { + m.keyExpiration = $root.proto.SyncActionValue.KeyExpiration.decode(r, r.uint32()); + break; + } + case 20: { + m.markChatAsReadAction = $root.proto.SyncActionValue.MarkChatAsReadAction.decode(r, r.uint32()); + break; + } + case 21: { + m.clearChatAction = $root.proto.SyncActionValue.ClearChatAction.decode(r, r.uint32()); + break; + } + case 22: { + m.deleteChatAction = $root.proto.SyncActionValue.DeleteChatAction.decode(r, r.uint32()); + break; + } + case 23: { + m.unarchiveChatsSetting = $root.proto.SyncActionValue.UnarchiveChatsSetting.decode(r, r.uint32()); + break; + } + case 24: { + m.primaryFeature = $root.proto.SyncActionValue.PrimaryFeature.decode(r, r.uint32()); + break; + } + case 26: { + m.androidUnsupportedActions = $root.proto.SyncActionValue.AndroidUnsupportedActions.decode(r, r.uint32()); + break; + } + case 27: { + m.agentAction = $root.proto.SyncActionValue.AgentAction.decode(r, r.uint32()); + break; + } + case 28: { + m.subscriptionAction = $root.proto.SyncActionValue.SubscriptionAction.decode(r, r.uint32()); + break; + } + case 29: { + m.userStatusMuteAction = $root.proto.SyncActionValue.UserStatusMuteAction.decode(r, r.uint32()); + break; + } + case 30: { + m.timeFormatAction = $root.proto.SyncActionValue.TimeFormatAction.decode(r, r.uint32()); + break; + } + case 31: { + m.nuxAction = $root.proto.SyncActionValue.NuxAction.decode(r, r.uint32()); + break; + } + case 32: { + m.primaryVersionAction = $root.proto.SyncActionValue.PrimaryVersionAction.decode(r, r.uint32()); + break; + } + case 33: { + m.stickerAction = $root.proto.SyncActionValue.StickerAction.decode(r, r.uint32()); + break; + } + case 34: { + m.removeRecentStickerAction = $root.proto.SyncActionValue.RemoveRecentStickerAction.decode(r, r.uint32()); + break; + } + case 35: { + m.chatAssignment = $root.proto.SyncActionValue.ChatAssignmentAction.decode(r, r.uint32()); + break; + } + case 36: { + m.chatAssignmentOpenedStatus = $root.proto.SyncActionValue.ChatAssignmentOpenedStatusAction.decode(r, r.uint32()); + break; + } + case 37: { + m.pnForLidChatAction = $root.proto.SyncActionValue.PnForLidChatAction.decode(r, r.uint32()); + break; + } + case 38: { + m.marketingMessageAction = $root.proto.SyncActionValue.MarketingMessageAction.decode(r, r.uint32()); + break; + } + case 39: { + m.marketingMessageBroadcastAction = $root.proto.SyncActionValue.MarketingMessageBroadcastAction.decode(r, r.uint32()); + break; + } + case 40: { + m.externalWebBetaAction = $root.proto.SyncActionValue.ExternalWebBetaAction.decode(r, r.uint32()); + break; + } + case 41: { + m.privacySettingRelayAllCalls = $root.proto.SyncActionValue.PrivacySettingRelayAllCalls.decode(r, r.uint32()); + break; + } + case 42: { + m.callLogAction = $root.proto.SyncActionValue.CallLogAction.decode(r, r.uint32()); + break; + } + case 43: { + m.ugcBot = $root.proto.SyncActionValue.UGCBot.decode(r, r.uint32()); + break; + } + case 44: { + m.statusPrivacy = $root.proto.SyncActionValue.StatusPrivacyAction.decode(r, r.uint32()); + break; + } + case 45: { + m.botWelcomeRequestAction = $root.proto.SyncActionValue.BotWelcomeRequestAction.decode(r, r.uint32()); + break; + } + case 46: { + m.deleteIndividualCallLog = $root.proto.SyncActionValue.DeleteIndividualCallLogAction.decode(r, r.uint32()); + break; + } + case 47: { + m.labelReorderingAction = $root.proto.SyncActionValue.LabelReorderingAction.decode(r, r.uint32()); + break; + } + case 48: { + m.paymentInfoAction = $root.proto.SyncActionValue.PaymentInfoAction.decode(r, r.uint32()); + break; + } + case 49: { + m.customPaymentMethodsAction = $root.proto.SyncActionValue.CustomPaymentMethodsAction.decode(r, r.uint32()); + break; + } + case 50: { + m.lockChatAction = $root.proto.SyncActionValue.LockChatAction.decode(r, r.uint32()); + break; + } + case 51: { + m.chatLockSettings = $root.proto.ChatLockSettings.decode(r, r.uint32()); + break; + } + case 52: { + m.wamoUserIdentifierAction = $root.proto.SyncActionValue.WamoUserIdentifierAction.decode(r, r.uint32()); + break; + } + case 53: { + m.privacySettingDisableLinkPreviewsAction = $root.proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction.decode(r, r.uint32()); + break; + } + case 54: { + m.deviceCapabilities = $root.proto.DeviceCapabilities.decode(r, r.uint32()); + break; + } + case 55: { + m.noteEditAction = $root.proto.SyncActionValue.NoteEditAction.decode(r, r.uint32()); + break; + } + case 56: { + m.favoritesAction = $root.proto.SyncActionValue.FavoritesAction.decode(r, r.uint32()); + break; + } + case 57: { + m.merchantPaymentPartnerAction = $root.proto.SyncActionValue.MerchantPaymentPartnerAction.decode(r, r.uint32()); + break; + } + case 58: { + m.waffleAccountLinkStateAction = $root.proto.SyncActionValue.WaffleAccountLinkStateAction.decode(r, r.uint32()); + break; + } + case 59: { + m.usernameChatStartMode = $root.proto.SyncActionValue.UsernameChatStartModeAction.decode(r, r.uint32()); + break; + } + case 60: { + m.notificationActivitySettingAction = $root.proto.SyncActionValue.NotificationActivitySettingAction.decode(r, r.uint32()); + break; + } + case 61: { + m.lidContactAction = $root.proto.SyncActionValue.LidContactAction.decode(r, r.uint32()); + break; + } + case 62: { + m.ctwaPerCustomerDataSharingAction = $root.proto.SyncActionValue.CtwaPerCustomerDataSharingAction.decode(r, r.uint32()); + break; + } + case 63: { + m.paymentTosAction = $root.proto.SyncActionValue.PaymentTosAction.decode(r, r.uint32()); + break; + } + case 64: { + m.privacySettingChannelsPersonalisedRecommendationAction = $root.proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction.decode(r, r.uint32()); + break; + } + case 65: { + m.businessBroadcastAssociationAction = $root.proto.SyncActionValue.BusinessBroadcastAssociationAction.decode(r, r.uint32()); + break; + } + case 66: { + m.detectedOutcomesStatusAction = $root.proto.SyncActionValue.DetectedOutcomesStatusAction.decode(r, r.uint32()); + break; + } + case 68: { + m.maibaAiFeaturesControlAction = $root.proto.SyncActionValue.MaibaAIFeaturesControlAction.decode(r, r.uint32()); + break; + } + case 69: { + m.businessBroadcastListAction = $root.proto.SyncActionValue.BusinessBroadcastListAction.decode(r, r.uint32()); + break; + } + case 70: { + m.musicUserIdAction = $root.proto.SyncActionValue.MusicUserIdAction.decode(r, r.uint32()); + break; + } + case 71: { + m.statusPostOptInNotificationPreferencesAction = $root.proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction.decode(r, r.uint32()); + break; + } + case 72: { + m.avatarUpdatedAction = $root.proto.SyncActionValue.AvatarUpdatedAction.decode(r, r.uint32()); + break; + } + case 74: { + m.privateProcessingSettingAction = $root.proto.SyncActionValue.PrivateProcessingSettingAction.decode(r, r.uint32()); + break; + } + case 75: { + m.newsletterSavedInterestsAction = $root.proto.SyncActionValue.NewsletterSavedInterestsAction.decode(r, r.uint32()); + break; + } + case 76: { + m.aiThreadRenameAction = $root.proto.SyncActionValue.AiThreadRenameAction.decode(r, r.uint32()); + break; + } + case 77: { + m.interactiveMessageAction = $root.proto.SyncActionValue.InteractiveMessageAction.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncActionValue.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue) + return d; + var m = new $root.proto.SyncActionValue(); + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + if (d.starAction != null) { + if (typeof d.starAction !== "object") + throw TypeError(".proto.SyncActionValue.starAction: object expected"); + m.starAction = $root.proto.SyncActionValue.StarAction.fromObject(d.starAction); + } + if (d.contactAction != null) { + if (typeof d.contactAction !== "object") + throw TypeError(".proto.SyncActionValue.contactAction: object expected"); + m.contactAction = $root.proto.SyncActionValue.ContactAction.fromObject(d.contactAction); + } + if (d.muteAction != null) { + if (typeof d.muteAction !== "object") + throw TypeError(".proto.SyncActionValue.muteAction: object expected"); + m.muteAction = $root.proto.SyncActionValue.MuteAction.fromObject(d.muteAction); + } + if (d.pinAction != null) { + if (typeof d.pinAction !== "object") + throw TypeError(".proto.SyncActionValue.pinAction: object expected"); + m.pinAction = $root.proto.SyncActionValue.PinAction.fromObject(d.pinAction); + } + if (d.pushNameSetting != null) { + if (typeof d.pushNameSetting !== "object") + throw TypeError(".proto.SyncActionValue.pushNameSetting: object expected"); + m.pushNameSetting = $root.proto.SyncActionValue.PushNameSetting.fromObject(d.pushNameSetting); + } + if (d.quickReplyAction != null) { + if (typeof d.quickReplyAction !== "object") + throw TypeError(".proto.SyncActionValue.quickReplyAction: object expected"); + m.quickReplyAction = $root.proto.SyncActionValue.QuickReplyAction.fromObject(d.quickReplyAction); + } + if (d.recentEmojiWeightsAction != null) { + if (typeof d.recentEmojiWeightsAction !== "object") + throw TypeError(".proto.SyncActionValue.recentEmojiWeightsAction: object expected"); + m.recentEmojiWeightsAction = $root.proto.SyncActionValue.RecentEmojiWeightsAction.fromObject(d.recentEmojiWeightsAction); + } + if (d.labelEditAction != null) { + if (typeof d.labelEditAction !== "object") + throw TypeError(".proto.SyncActionValue.labelEditAction: object expected"); + m.labelEditAction = $root.proto.SyncActionValue.LabelEditAction.fromObject(d.labelEditAction); + } + if (d.labelAssociationAction != null) { + if (typeof d.labelAssociationAction !== "object") + throw TypeError(".proto.SyncActionValue.labelAssociationAction: object expected"); + m.labelAssociationAction = $root.proto.SyncActionValue.LabelAssociationAction.fromObject(d.labelAssociationAction); + } + if (d.localeSetting != null) { + if (typeof d.localeSetting !== "object") + throw TypeError(".proto.SyncActionValue.localeSetting: object expected"); + m.localeSetting = $root.proto.SyncActionValue.LocaleSetting.fromObject(d.localeSetting); + } + if (d.archiveChatAction != null) { + if (typeof d.archiveChatAction !== "object") + throw TypeError(".proto.SyncActionValue.archiveChatAction: object expected"); + m.archiveChatAction = $root.proto.SyncActionValue.ArchiveChatAction.fromObject(d.archiveChatAction); + } + if (d.deleteMessageForMeAction != null) { + if (typeof d.deleteMessageForMeAction !== "object") + throw TypeError(".proto.SyncActionValue.deleteMessageForMeAction: object expected"); + m.deleteMessageForMeAction = $root.proto.SyncActionValue.DeleteMessageForMeAction.fromObject(d.deleteMessageForMeAction); + } + if (d.keyExpiration != null) { + if (typeof d.keyExpiration !== "object") + throw TypeError(".proto.SyncActionValue.keyExpiration: object expected"); + m.keyExpiration = $root.proto.SyncActionValue.KeyExpiration.fromObject(d.keyExpiration); + } + if (d.markChatAsReadAction != null) { + if (typeof d.markChatAsReadAction !== "object") + throw TypeError(".proto.SyncActionValue.markChatAsReadAction: object expected"); + m.markChatAsReadAction = $root.proto.SyncActionValue.MarkChatAsReadAction.fromObject(d.markChatAsReadAction); + } + if (d.clearChatAction != null) { + if (typeof d.clearChatAction !== "object") + throw TypeError(".proto.SyncActionValue.clearChatAction: object expected"); + m.clearChatAction = $root.proto.SyncActionValue.ClearChatAction.fromObject(d.clearChatAction); + } + if (d.deleteChatAction != null) { + if (typeof d.deleteChatAction !== "object") + throw TypeError(".proto.SyncActionValue.deleteChatAction: object expected"); + m.deleteChatAction = $root.proto.SyncActionValue.DeleteChatAction.fromObject(d.deleteChatAction); + } + if (d.unarchiveChatsSetting != null) { + if (typeof d.unarchiveChatsSetting !== "object") + throw TypeError(".proto.SyncActionValue.unarchiveChatsSetting: object expected"); + m.unarchiveChatsSetting = $root.proto.SyncActionValue.UnarchiveChatsSetting.fromObject(d.unarchiveChatsSetting); + } + if (d.primaryFeature != null) { + if (typeof d.primaryFeature !== "object") + throw TypeError(".proto.SyncActionValue.primaryFeature: object expected"); + m.primaryFeature = $root.proto.SyncActionValue.PrimaryFeature.fromObject(d.primaryFeature); + } + if (d.androidUnsupportedActions != null) { + if (typeof d.androidUnsupportedActions !== "object") + throw TypeError(".proto.SyncActionValue.androidUnsupportedActions: object expected"); + m.androidUnsupportedActions = $root.proto.SyncActionValue.AndroidUnsupportedActions.fromObject(d.androidUnsupportedActions); + } + if (d.agentAction != null) { + if (typeof d.agentAction !== "object") + throw TypeError(".proto.SyncActionValue.agentAction: object expected"); + m.agentAction = $root.proto.SyncActionValue.AgentAction.fromObject(d.agentAction); + } + if (d.subscriptionAction != null) { + if (typeof d.subscriptionAction !== "object") + throw TypeError(".proto.SyncActionValue.subscriptionAction: object expected"); + m.subscriptionAction = $root.proto.SyncActionValue.SubscriptionAction.fromObject(d.subscriptionAction); + } + if (d.userStatusMuteAction != null) { + if (typeof d.userStatusMuteAction !== "object") + throw TypeError(".proto.SyncActionValue.userStatusMuteAction: object expected"); + m.userStatusMuteAction = $root.proto.SyncActionValue.UserStatusMuteAction.fromObject(d.userStatusMuteAction); + } + if (d.timeFormatAction != null) { + if (typeof d.timeFormatAction !== "object") + throw TypeError(".proto.SyncActionValue.timeFormatAction: object expected"); + m.timeFormatAction = $root.proto.SyncActionValue.TimeFormatAction.fromObject(d.timeFormatAction); + } + if (d.nuxAction != null) { + if (typeof d.nuxAction !== "object") + throw TypeError(".proto.SyncActionValue.nuxAction: object expected"); + m.nuxAction = $root.proto.SyncActionValue.NuxAction.fromObject(d.nuxAction); + } + if (d.primaryVersionAction != null) { + if (typeof d.primaryVersionAction !== "object") + throw TypeError(".proto.SyncActionValue.primaryVersionAction: object expected"); + m.primaryVersionAction = $root.proto.SyncActionValue.PrimaryVersionAction.fromObject(d.primaryVersionAction); + } + if (d.stickerAction != null) { + if (typeof d.stickerAction !== "object") + throw TypeError(".proto.SyncActionValue.stickerAction: object expected"); + m.stickerAction = $root.proto.SyncActionValue.StickerAction.fromObject(d.stickerAction); + } + if (d.removeRecentStickerAction != null) { + if (typeof d.removeRecentStickerAction !== "object") + throw TypeError(".proto.SyncActionValue.removeRecentStickerAction: object expected"); + m.removeRecentStickerAction = $root.proto.SyncActionValue.RemoveRecentStickerAction.fromObject(d.removeRecentStickerAction); + } + if (d.chatAssignment != null) { + if (typeof d.chatAssignment !== "object") + throw TypeError(".proto.SyncActionValue.chatAssignment: object expected"); + m.chatAssignment = $root.proto.SyncActionValue.ChatAssignmentAction.fromObject(d.chatAssignment); + } + if (d.chatAssignmentOpenedStatus != null) { + if (typeof d.chatAssignmentOpenedStatus !== "object") + throw TypeError(".proto.SyncActionValue.chatAssignmentOpenedStatus: object expected"); + m.chatAssignmentOpenedStatus = $root.proto.SyncActionValue.ChatAssignmentOpenedStatusAction.fromObject(d.chatAssignmentOpenedStatus); + } + if (d.pnForLidChatAction != null) { + if (typeof d.pnForLidChatAction !== "object") + throw TypeError(".proto.SyncActionValue.pnForLidChatAction: object expected"); + m.pnForLidChatAction = $root.proto.SyncActionValue.PnForLidChatAction.fromObject(d.pnForLidChatAction); + } + if (d.marketingMessageAction != null) { + if (typeof d.marketingMessageAction !== "object") + throw TypeError(".proto.SyncActionValue.marketingMessageAction: object expected"); + m.marketingMessageAction = $root.proto.SyncActionValue.MarketingMessageAction.fromObject(d.marketingMessageAction); + } + if (d.marketingMessageBroadcastAction != null) { + if (typeof d.marketingMessageBroadcastAction !== "object") + throw TypeError(".proto.SyncActionValue.marketingMessageBroadcastAction: object expected"); + m.marketingMessageBroadcastAction = $root.proto.SyncActionValue.MarketingMessageBroadcastAction.fromObject(d.marketingMessageBroadcastAction); + } + if (d.externalWebBetaAction != null) { + if (typeof d.externalWebBetaAction !== "object") + throw TypeError(".proto.SyncActionValue.externalWebBetaAction: object expected"); + m.externalWebBetaAction = $root.proto.SyncActionValue.ExternalWebBetaAction.fromObject(d.externalWebBetaAction); + } + if (d.privacySettingRelayAllCalls != null) { + if (typeof d.privacySettingRelayAllCalls !== "object") + throw TypeError(".proto.SyncActionValue.privacySettingRelayAllCalls: object expected"); + m.privacySettingRelayAllCalls = $root.proto.SyncActionValue.PrivacySettingRelayAllCalls.fromObject(d.privacySettingRelayAllCalls); + } + if (d.callLogAction != null) { + if (typeof d.callLogAction !== "object") + throw TypeError(".proto.SyncActionValue.callLogAction: object expected"); + m.callLogAction = $root.proto.SyncActionValue.CallLogAction.fromObject(d.callLogAction); + } + if (d.ugcBot != null) { + if (typeof d.ugcBot !== "object") + throw TypeError(".proto.SyncActionValue.ugcBot: object expected"); + m.ugcBot = $root.proto.SyncActionValue.UGCBot.fromObject(d.ugcBot); + } + if (d.statusPrivacy != null) { + if (typeof d.statusPrivacy !== "object") + throw TypeError(".proto.SyncActionValue.statusPrivacy: object expected"); + m.statusPrivacy = $root.proto.SyncActionValue.StatusPrivacyAction.fromObject(d.statusPrivacy); + } + if (d.botWelcomeRequestAction != null) { + if (typeof d.botWelcomeRequestAction !== "object") + throw TypeError(".proto.SyncActionValue.botWelcomeRequestAction: object expected"); + m.botWelcomeRequestAction = $root.proto.SyncActionValue.BotWelcomeRequestAction.fromObject(d.botWelcomeRequestAction); + } + if (d.deleteIndividualCallLog != null) { + if (typeof d.deleteIndividualCallLog !== "object") + throw TypeError(".proto.SyncActionValue.deleteIndividualCallLog: object expected"); + m.deleteIndividualCallLog = $root.proto.SyncActionValue.DeleteIndividualCallLogAction.fromObject(d.deleteIndividualCallLog); + } + if (d.labelReorderingAction != null) { + if (typeof d.labelReorderingAction !== "object") + throw TypeError(".proto.SyncActionValue.labelReorderingAction: object expected"); + m.labelReorderingAction = $root.proto.SyncActionValue.LabelReorderingAction.fromObject(d.labelReorderingAction); + } + if (d.paymentInfoAction != null) { + if (typeof d.paymentInfoAction !== "object") + throw TypeError(".proto.SyncActionValue.paymentInfoAction: object expected"); + m.paymentInfoAction = $root.proto.SyncActionValue.PaymentInfoAction.fromObject(d.paymentInfoAction); + } + if (d.customPaymentMethodsAction != null) { + if (typeof d.customPaymentMethodsAction !== "object") + throw TypeError(".proto.SyncActionValue.customPaymentMethodsAction: object expected"); + m.customPaymentMethodsAction = $root.proto.SyncActionValue.CustomPaymentMethodsAction.fromObject(d.customPaymentMethodsAction); + } + if (d.lockChatAction != null) { + if (typeof d.lockChatAction !== "object") + throw TypeError(".proto.SyncActionValue.lockChatAction: object expected"); + m.lockChatAction = $root.proto.SyncActionValue.LockChatAction.fromObject(d.lockChatAction); + } + if (d.chatLockSettings != null) { + if (typeof d.chatLockSettings !== "object") + throw TypeError(".proto.SyncActionValue.chatLockSettings: object expected"); + m.chatLockSettings = $root.proto.ChatLockSettings.fromObject(d.chatLockSettings); + } + if (d.wamoUserIdentifierAction != null) { + if (typeof d.wamoUserIdentifierAction !== "object") + throw TypeError(".proto.SyncActionValue.wamoUserIdentifierAction: object expected"); + m.wamoUserIdentifierAction = $root.proto.SyncActionValue.WamoUserIdentifierAction.fromObject(d.wamoUserIdentifierAction); + } + if (d.privacySettingDisableLinkPreviewsAction != null) { + if (typeof d.privacySettingDisableLinkPreviewsAction !== "object") + throw TypeError(".proto.SyncActionValue.privacySettingDisableLinkPreviewsAction: object expected"); + m.privacySettingDisableLinkPreviewsAction = $root.proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction.fromObject(d.privacySettingDisableLinkPreviewsAction); + } + if (d.deviceCapabilities != null) { + if (typeof d.deviceCapabilities !== "object") + throw TypeError(".proto.SyncActionValue.deviceCapabilities: object expected"); + m.deviceCapabilities = $root.proto.DeviceCapabilities.fromObject(d.deviceCapabilities); + } + if (d.noteEditAction != null) { + if (typeof d.noteEditAction !== "object") + throw TypeError(".proto.SyncActionValue.noteEditAction: object expected"); + m.noteEditAction = $root.proto.SyncActionValue.NoteEditAction.fromObject(d.noteEditAction); + } + if (d.favoritesAction != null) { + if (typeof d.favoritesAction !== "object") + throw TypeError(".proto.SyncActionValue.favoritesAction: object expected"); + m.favoritesAction = $root.proto.SyncActionValue.FavoritesAction.fromObject(d.favoritesAction); + } + if (d.merchantPaymentPartnerAction != null) { + if (typeof d.merchantPaymentPartnerAction !== "object") + throw TypeError(".proto.SyncActionValue.merchantPaymentPartnerAction: object expected"); + m.merchantPaymentPartnerAction = $root.proto.SyncActionValue.MerchantPaymentPartnerAction.fromObject(d.merchantPaymentPartnerAction); + } + if (d.waffleAccountLinkStateAction != null) { + if (typeof d.waffleAccountLinkStateAction !== "object") + throw TypeError(".proto.SyncActionValue.waffleAccountLinkStateAction: object expected"); + m.waffleAccountLinkStateAction = $root.proto.SyncActionValue.WaffleAccountLinkStateAction.fromObject(d.waffleAccountLinkStateAction); + } + if (d.usernameChatStartMode != null) { + if (typeof d.usernameChatStartMode !== "object") + throw TypeError(".proto.SyncActionValue.usernameChatStartMode: object expected"); + m.usernameChatStartMode = $root.proto.SyncActionValue.UsernameChatStartModeAction.fromObject(d.usernameChatStartMode); + } + if (d.notificationActivitySettingAction != null) { + if (typeof d.notificationActivitySettingAction !== "object") + throw TypeError(".proto.SyncActionValue.notificationActivitySettingAction: object expected"); + m.notificationActivitySettingAction = $root.proto.SyncActionValue.NotificationActivitySettingAction.fromObject(d.notificationActivitySettingAction); + } + if (d.lidContactAction != null) { + if (typeof d.lidContactAction !== "object") + throw TypeError(".proto.SyncActionValue.lidContactAction: object expected"); + m.lidContactAction = $root.proto.SyncActionValue.LidContactAction.fromObject(d.lidContactAction); + } + if (d.ctwaPerCustomerDataSharingAction != null) { + if (typeof d.ctwaPerCustomerDataSharingAction !== "object") + throw TypeError(".proto.SyncActionValue.ctwaPerCustomerDataSharingAction: object expected"); + m.ctwaPerCustomerDataSharingAction = $root.proto.SyncActionValue.CtwaPerCustomerDataSharingAction.fromObject(d.ctwaPerCustomerDataSharingAction); + } + if (d.paymentTosAction != null) { + if (typeof d.paymentTosAction !== "object") + throw TypeError(".proto.SyncActionValue.paymentTosAction: object expected"); + m.paymentTosAction = $root.proto.SyncActionValue.PaymentTosAction.fromObject(d.paymentTosAction); + } + if (d.privacySettingChannelsPersonalisedRecommendationAction != null) { + if (typeof d.privacySettingChannelsPersonalisedRecommendationAction !== "object") + throw TypeError(".proto.SyncActionValue.privacySettingChannelsPersonalisedRecommendationAction: object expected"); + m.privacySettingChannelsPersonalisedRecommendationAction = $root.proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction.fromObject(d.privacySettingChannelsPersonalisedRecommendationAction); + } + if (d.businessBroadcastAssociationAction != null) { + if (typeof d.businessBroadcastAssociationAction !== "object") + throw TypeError(".proto.SyncActionValue.businessBroadcastAssociationAction: object expected"); + m.businessBroadcastAssociationAction = $root.proto.SyncActionValue.BusinessBroadcastAssociationAction.fromObject(d.businessBroadcastAssociationAction); + } + if (d.detectedOutcomesStatusAction != null) { + if (typeof d.detectedOutcomesStatusAction !== "object") + throw TypeError(".proto.SyncActionValue.detectedOutcomesStatusAction: object expected"); + m.detectedOutcomesStatusAction = $root.proto.SyncActionValue.DetectedOutcomesStatusAction.fromObject(d.detectedOutcomesStatusAction); + } + if (d.maibaAiFeaturesControlAction != null) { + if (typeof d.maibaAiFeaturesControlAction !== "object") + throw TypeError(".proto.SyncActionValue.maibaAiFeaturesControlAction: object expected"); + m.maibaAiFeaturesControlAction = $root.proto.SyncActionValue.MaibaAIFeaturesControlAction.fromObject(d.maibaAiFeaturesControlAction); + } + if (d.businessBroadcastListAction != null) { + if (typeof d.businessBroadcastListAction !== "object") + throw TypeError(".proto.SyncActionValue.businessBroadcastListAction: object expected"); + m.businessBroadcastListAction = $root.proto.SyncActionValue.BusinessBroadcastListAction.fromObject(d.businessBroadcastListAction); + } + if (d.musicUserIdAction != null) { + if (typeof d.musicUserIdAction !== "object") + throw TypeError(".proto.SyncActionValue.musicUserIdAction: object expected"); + m.musicUserIdAction = $root.proto.SyncActionValue.MusicUserIdAction.fromObject(d.musicUserIdAction); + } + if (d.statusPostOptInNotificationPreferencesAction != null) { + if (typeof d.statusPostOptInNotificationPreferencesAction !== "object") + throw TypeError(".proto.SyncActionValue.statusPostOptInNotificationPreferencesAction: object expected"); + m.statusPostOptInNotificationPreferencesAction = $root.proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction.fromObject(d.statusPostOptInNotificationPreferencesAction); + } + if (d.avatarUpdatedAction != null) { + if (typeof d.avatarUpdatedAction !== "object") + throw TypeError(".proto.SyncActionValue.avatarUpdatedAction: object expected"); + m.avatarUpdatedAction = $root.proto.SyncActionValue.AvatarUpdatedAction.fromObject(d.avatarUpdatedAction); + } + if (d.privateProcessingSettingAction != null) { + if (typeof d.privateProcessingSettingAction !== "object") + throw TypeError(".proto.SyncActionValue.privateProcessingSettingAction: object expected"); + m.privateProcessingSettingAction = $root.proto.SyncActionValue.PrivateProcessingSettingAction.fromObject(d.privateProcessingSettingAction); + } + if (d.newsletterSavedInterestsAction != null) { + if (typeof d.newsletterSavedInterestsAction !== "object") + throw TypeError(".proto.SyncActionValue.newsletterSavedInterestsAction: object expected"); + m.newsletterSavedInterestsAction = $root.proto.SyncActionValue.NewsletterSavedInterestsAction.fromObject(d.newsletterSavedInterestsAction); + } + if (d.aiThreadRenameAction != null) { + if (typeof d.aiThreadRenameAction !== "object") + throw TypeError(".proto.SyncActionValue.aiThreadRenameAction: object expected"); + m.aiThreadRenameAction = $root.proto.SyncActionValue.AiThreadRenameAction.fromObject(d.aiThreadRenameAction); + } + if (d.interactiveMessageAction != null) { + if (typeof d.interactiveMessageAction !== "object") + throw TypeError(".proto.SyncActionValue.interactiveMessageAction: object expected"); + m.interactiveMessageAction = $root.proto.SyncActionValue.InteractiveMessageAction.fromObject(d.interactiveMessageAction); + } + return m; + }; + + SyncActionValue.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + if (m.starAction != null && m.hasOwnProperty("starAction")) { + d.starAction = $root.proto.SyncActionValue.StarAction.toObject(m.starAction, o); + if (o.oneofs) + d._starAction = "starAction"; + } + if (m.contactAction != null && m.hasOwnProperty("contactAction")) { + d.contactAction = $root.proto.SyncActionValue.ContactAction.toObject(m.contactAction, o); + if (o.oneofs) + d._contactAction = "contactAction"; + } + if (m.muteAction != null && m.hasOwnProperty("muteAction")) { + d.muteAction = $root.proto.SyncActionValue.MuteAction.toObject(m.muteAction, o); + if (o.oneofs) + d._muteAction = "muteAction"; + } + if (m.pinAction != null && m.hasOwnProperty("pinAction")) { + d.pinAction = $root.proto.SyncActionValue.PinAction.toObject(m.pinAction, o); + if (o.oneofs) + d._pinAction = "pinAction"; + } + if (m.pushNameSetting != null && m.hasOwnProperty("pushNameSetting")) { + d.pushNameSetting = $root.proto.SyncActionValue.PushNameSetting.toObject(m.pushNameSetting, o); + if (o.oneofs) + d._pushNameSetting = "pushNameSetting"; + } + if (m.quickReplyAction != null && m.hasOwnProperty("quickReplyAction")) { + d.quickReplyAction = $root.proto.SyncActionValue.QuickReplyAction.toObject(m.quickReplyAction, o); + if (o.oneofs) + d._quickReplyAction = "quickReplyAction"; + } + if (m.recentEmojiWeightsAction != null && m.hasOwnProperty("recentEmojiWeightsAction")) { + d.recentEmojiWeightsAction = $root.proto.SyncActionValue.RecentEmojiWeightsAction.toObject(m.recentEmojiWeightsAction, o); + if (o.oneofs) + d._recentEmojiWeightsAction = "recentEmojiWeightsAction"; + } + if (m.labelEditAction != null && m.hasOwnProperty("labelEditAction")) { + d.labelEditAction = $root.proto.SyncActionValue.LabelEditAction.toObject(m.labelEditAction, o); + if (o.oneofs) + d._labelEditAction = "labelEditAction"; + } + if (m.labelAssociationAction != null && m.hasOwnProperty("labelAssociationAction")) { + d.labelAssociationAction = $root.proto.SyncActionValue.LabelAssociationAction.toObject(m.labelAssociationAction, o); + if (o.oneofs) + d._labelAssociationAction = "labelAssociationAction"; + } + if (m.localeSetting != null && m.hasOwnProperty("localeSetting")) { + d.localeSetting = $root.proto.SyncActionValue.LocaleSetting.toObject(m.localeSetting, o); + if (o.oneofs) + d._localeSetting = "localeSetting"; + } + if (m.archiveChatAction != null && m.hasOwnProperty("archiveChatAction")) { + d.archiveChatAction = $root.proto.SyncActionValue.ArchiveChatAction.toObject(m.archiveChatAction, o); + if (o.oneofs) + d._archiveChatAction = "archiveChatAction"; + } + if (m.deleteMessageForMeAction != null && m.hasOwnProperty("deleteMessageForMeAction")) { + d.deleteMessageForMeAction = $root.proto.SyncActionValue.DeleteMessageForMeAction.toObject(m.deleteMessageForMeAction, o); + if (o.oneofs) + d._deleteMessageForMeAction = "deleteMessageForMeAction"; + } + if (m.keyExpiration != null && m.hasOwnProperty("keyExpiration")) { + d.keyExpiration = $root.proto.SyncActionValue.KeyExpiration.toObject(m.keyExpiration, o); + if (o.oneofs) + d._keyExpiration = "keyExpiration"; + } + if (m.markChatAsReadAction != null && m.hasOwnProperty("markChatAsReadAction")) { + d.markChatAsReadAction = $root.proto.SyncActionValue.MarkChatAsReadAction.toObject(m.markChatAsReadAction, o); + if (o.oneofs) + d._markChatAsReadAction = "markChatAsReadAction"; + } + if (m.clearChatAction != null && m.hasOwnProperty("clearChatAction")) { + d.clearChatAction = $root.proto.SyncActionValue.ClearChatAction.toObject(m.clearChatAction, o); + if (o.oneofs) + d._clearChatAction = "clearChatAction"; + } + if (m.deleteChatAction != null && m.hasOwnProperty("deleteChatAction")) { + d.deleteChatAction = $root.proto.SyncActionValue.DeleteChatAction.toObject(m.deleteChatAction, o); + if (o.oneofs) + d._deleteChatAction = "deleteChatAction"; + } + if (m.unarchiveChatsSetting != null && m.hasOwnProperty("unarchiveChatsSetting")) { + d.unarchiveChatsSetting = $root.proto.SyncActionValue.UnarchiveChatsSetting.toObject(m.unarchiveChatsSetting, o); + if (o.oneofs) + d._unarchiveChatsSetting = "unarchiveChatsSetting"; + } + if (m.primaryFeature != null && m.hasOwnProperty("primaryFeature")) { + d.primaryFeature = $root.proto.SyncActionValue.PrimaryFeature.toObject(m.primaryFeature, o); + if (o.oneofs) + d._primaryFeature = "primaryFeature"; + } + if (m.androidUnsupportedActions != null && m.hasOwnProperty("androidUnsupportedActions")) { + d.androidUnsupportedActions = $root.proto.SyncActionValue.AndroidUnsupportedActions.toObject(m.androidUnsupportedActions, o); + if (o.oneofs) + d._androidUnsupportedActions = "androidUnsupportedActions"; + } + if (m.agentAction != null && m.hasOwnProperty("agentAction")) { + d.agentAction = $root.proto.SyncActionValue.AgentAction.toObject(m.agentAction, o); + if (o.oneofs) + d._agentAction = "agentAction"; + } + if (m.subscriptionAction != null && m.hasOwnProperty("subscriptionAction")) { + d.subscriptionAction = $root.proto.SyncActionValue.SubscriptionAction.toObject(m.subscriptionAction, o); + if (o.oneofs) + d._subscriptionAction = "subscriptionAction"; + } + if (m.userStatusMuteAction != null && m.hasOwnProperty("userStatusMuteAction")) { + d.userStatusMuteAction = $root.proto.SyncActionValue.UserStatusMuteAction.toObject(m.userStatusMuteAction, o); + if (o.oneofs) + d._userStatusMuteAction = "userStatusMuteAction"; + } + if (m.timeFormatAction != null && m.hasOwnProperty("timeFormatAction")) { + d.timeFormatAction = $root.proto.SyncActionValue.TimeFormatAction.toObject(m.timeFormatAction, o); + if (o.oneofs) + d._timeFormatAction = "timeFormatAction"; + } + if (m.nuxAction != null && m.hasOwnProperty("nuxAction")) { + d.nuxAction = $root.proto.SyncActionValue.NuxAction.toObject(m.nuxAction, o); + if (o.oneofs) + d._nuxAction = "nuxAction"; + } + if (m.primaryVersionAction != null && m.hasOwnProperty("primaryVersionAction")) { + d.primaryVersionAction = $root.proto.SyncActionValue.PrimaryVersionAction.toObject(m.primaryVersionAction, o); + if (o.oneofs) + d._primaryVersionAction = "primaryVersionAction"; + } + if (m.stickerAction != null && m.hasOwnProperty("stickerAction")) { + d.stickerAction = $root.proto.SyncActionValue.StickerAction.toObject(m.stickerAction, o); + if (o.oneofs) + d._stickerAction = "stickerAction"; + } + if (m.removeRecentStickerAction != null && m.hasOwnProperty("removeRecentStickerAction")) { + d.removeRecentStickerAction = $root.proto.SyncActionValue.RemoveRecentStickerAction.toObject(m.removeRecentStickerAction, o); + if (o.oneofs) + d._removeRecentStickerAction = "removeRecentStickerAction"; + } + if (m.chatAssignment != null && m.hasOwnProperty("chatAssignment")) { + d.chatAssignment = $root.proto.SyncActionValue.ChatAssignmentAction.toObject(m.chatAssignment, o); + if (o.oneofs) + d._chatAssignment = "chatAssignment"; + } + if (m.chatAssignmentOpenedStatus != null && m.hasOwnProperty("chatAssignmentOpenedStatus")) { + d.chatAssignmentOpenedStatus = $root.proto.SyncActionValue.ChatAssignmentOpenedStatusAction.toObject(m.chatAssignmentOpenedStatus, o); + if (o.oneofs) + d._chatAssignmentOpenedStatus = "chatAssignmentOpenedStatus"; + } + if (m.pnForLidChatAction != null && m.hasOwnProperty("pnForLidChatAction")) { + d.pnForLidChatAction = $root.proto.SyncActionValue.PnForLidChatAction.toObject(m.pnForLidChatAction, o); + if (o.oneofs) + d._pnForLidChatAction = "pnForLidChatAction"; + } + if (m.marketingMessageAction != null && m.hasOwnProperty("marketingMessageAction")) { + d.marketingMessageAction = $root.proto.SyncActionValue.MarketingMessageAction.toObject(m.marketingMessageAction, o); + if (o.oneofs) + d._marketingMessageAction = "marketingMessageAction"; + } + if (m.marketingMessageBroadcastAction != null && m.hasOwnProperty("marketingMessageBroadcastAction")) { + d.marketingMessageBroadcastAction = $root.proto.SyncActionValue.MarketingMessageBroadcastAction.toObject(m.marketingMessageBroadcastAction, o); + if (o.oneofs) + d._marketingMessageBroadcastAction = "marketingMessageBroadcastAction"; + } + if (m.externalWebBetaAction != null && m.hasOwnProperty("externalWebBetaAction")) { + d.externalWebBetaAction = $root.proto.SyncActionValue.ExternalWebBetaAction.toObject(m.externalWebBetaAction, o); + if (o.oneofs) + d._externalWebBetaAction = "externalWebBetaAction"; + } + if (m.privacySettingRelayAllCalls != null && m.hasOwnProperty("privacySettingRelayAllCalls")) { + d.privacySettingRelayAllCalls = $root.proto.SyncActionValue.PrivacySettingRelayAllCalls.toObject(m.privacySettingRelayAllCalls, o); + if (o.oneofs) + d._privacySettingRelayAllCalls = "privacySettingRelayAllCalls"; + } + if (m.callLogAction != null && m.hasOwnProperty("callLogAction")) { + d.callLogAction = $root.proto.SyncActionValue.CallLogAction.toObject(m.callLogAction, o); + if (o.oneofs) + d._callLogAction = "callLogAction"; + } + if (m.ugcBot != null && m.hasOwnProperty("ugcBot")) { + d.ugcBot = $root.proto.SyncActionValue.UGCBot.toObject(m.ugcBot, o); + if (o.oneofs) + d._ugcBot = "ugcBot"; + } + if (m.statusPrivacy != null && m.hasOwnProperty("statusPrivacy")) { + d.statusPrivacy = $root.proto.SyncActionValue.StatusPrivacyAction.toObject(m.statusPrivacy, o); + if (o.oneofs) + d._statusPrivacy = "statusPrivacy"; + } + if (m.botWelcomeRequestAction != null && m.hasOwnProperty("botWelcomeRequestAction")) { + d.botWelcomeRequestAction = $root.proto.SyncActionValue.BotWelcomeRequestAction.toObject(m.botWelcomeRequestAction, o); + if (o.oneofs) + d._botWelcomeRequestAction = "botWelcomeRequestAction"; + } + if (m.deleteIndividualCallLog != null && m.hasOwnProperty("deleteIndividualCallLog")) { + d.deleteIndividualCallLog = $root.proto.SyncActionValue.DeleteIndividualCallLogAction.toObject(m.deleteIndividualCallLog, o); + if (o.oneofs) + d._deleteIndividualCallLog = "deleteIndividualCallLog"; + } + if (m.labelReorderingAction != null && m.hasOwnProperty("labelReorderingAction")) { + d.labelReorderingAction = $root.proto.SyncActionValue.LabelReorderingAction.toObject(m.labelReorderingAction, o); + if (o.oneofs) + d._labelReorderingAction = "labelReorderingAction"; + } + if (m.paymentInfoAction != null && m.hasOwnProperty("paymentInfoAction")) { + d.paymentInfoAction = $root.proto.SyncActionValue.PaymentInfoAction.toObject(m.paymentInfoAction, o); + if (o.oneofs) + d._paymentInfoAction = "paymentInfoAction"; + } + if (m.customPaymentMethodsAction != null && m.hasOwnProperty("customPaymentMethodsAction")) { + d.customPaymentMethodsAction = $root.proto.SyncActionValue.CustomPaymentMethodsAction.toObject(m.customPaymentMethodsAction, o); + if (o.oneofs) + d._customPaymentMethodsAction = "customPaymentMethodsAction"; + } + if (m.lockChatAction != null && m.hasOwnProperty("lockChatAction")) { + d.lockChatAction = $root.proto.SyncActionValue.LockChatAction.toObject(m.lockChatAction, o); + if (o.oneofs) + d._lockChatAction = "lockChatAction"; + } + if (m.chatLockSettings != null && m.hasOwnProperty("chatLockSettings")) { + d.chatLockSettings = $root.proto.ChatLockSettings.toObject(m.chatLockSettings, o); + if (o.oneofs) + d._chatLockSettings = "chatLockSettings"; + } + if (m.wamoUserIdentifierAction != null && m.hasOwnProperty("wamoUserIdentifierAction")) { + d.wamoUserIdentifierAction = $root.proto.SyncActionValue.WamoUserIdentifierAction.toObject(m.wamoUserIdentifierAction, o); + if (o.oneofs) + d._wamoUserIdentifierAction = "wamoUserIdentifierAction"; + } + if (m.privacySettingDisableLinkPreviewsAction != null && m.hasOwnProperty("privacySettingDisableLinkPreviewsAction")) { + d.privacySettingDisableLinkPreviewsAction = $root.proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction.toObject(m.privacySettingDisableLinkPreviewsAction, o); + if (o.oneofs) + d._privacySettingDisableLinkPreviewsAction = "privacySettingDisableLinkPreviewsAction"; + } + if (m.deviceCapabilities != null && m.hasOwnProperty("deviceCapabilities")) { + d.deviceCapabilities = $root.proto.DeviceCapabilities.toObject(m.deviceCapabilities, o); + if (o.oneofs) + d._deviceCapabilities = "deviceCapabilities"; + } + if (m.noteEditAction != null && m.hasOwnProperty("noteEditAction")) { + d.noteEditAction = $root.proto.SyncActionValue.NoteEditAction.toObject(m.noteEditAction, o); + if (o.oneofs) + d._noteEditAction = "noteEditAction"; + } + if (m.favoritesAction != null && m.hasOwnProperty("favoritesAction")) { + d.favoritesAction = $root.proto.SyncActionValue.FavoritesAction.toObject(m.favoritesAction, o); + if (o.oneofs) + d._favoritesAction = "favoritesAction"; + } + if (m.merchantPaymentPartnerAction != null && m.hasOwnProperty("merchantPaymentPartnerAction")) { + d.merchantPaymentPartnerAction = $root.proto.SyncActionValue.MerchantPaymentPartnerAction.toObject(m.merchantPaymentPartnerAction, o); + if (o.oneofs) + d._merchantPaymentPartnerAction = "merchantPaymentPartnerAction"; + } + if (m.waffleAccountLinkStateAction != null && m.hasOwnProperty("waffleAccountLinkStateAction")) { + d.waffleAccountLinkStateAction = $root.proto.SyncActionValue.WaffleAccountLinkStateAction.toObject(m.waffleAccountLinkStateAction, o); + if (o.oneofs) + d._waffleAccountLinkStateAction = "waffleAccountLinkStateAction"; + } + if (m.usernameChatStartMode != null && m.hasOwnProperty("usernameChatStartMode")) { + d.usernameChatStartMode = $root.proto.SyncActionValue.UsernameChatStartModeAction.toObject(m.usernameChatStartMode, o); + if (o.oneofs) + d._usernameChatStartMode = "usernameChatStartMode"; + } + if (m.notificationActivitySettingAction != null && m.hasOwnProperty("notificationActivitySettingAction")) { + d.notificationActivitySettingAction = $root.proto.SyncActionValue.NotificationActivitySettingAction.toObject(m.notificationActivitySettingAction, o); + if (o.oneofs) + d._notificationActivitySettingAction = "notificationActivitySettingAction"; + } + if (m.lidContactAction != null && m.hasOwnProperty("lidContactAction")) { + d.lidContactAction = $root.proto.SyncActionValue.LidContactAction.toObject(m.lidContactAction, o); + if (o.oneofs) + d._lidContactAction = "lidContactAction"; + } + if (m.ctwaPerCustomerDataSharingAction != null && m.hasOwnProperty("ctwaPerCustomerDataSharingAction")) { + d.ctwaPerCustomerDataSharingAction = $root.proto.SyncActionValue.CtwaPerCustomerDataSharingAction.toObject(m.ctwaPerCustomerDataSharingAction, o); + if (o.oneofs) + d._ctwaPerCustomerDataSharingAction = "ctwaPerCustomerDataSharingAction"; + } + if (m.paymentTosAction != null && m.hasOwnProperty("paymentTosAction")) { + d.paymentTosAction = $root.proto.SyncActionValue.PaymentTosAction.toObject(m.paymentTosAction, o); + if (o.oneofs) + d._paymentTosAction = "paymentTosAction"; + } + if (m.privacySettingChannelsPersonalisedRecommendationAction != null && m.hasOwnProperty("privacySettingChannelsPersonalisedRecommendationAction")) { + d.privacySettingChannelsPersonalisedRecommendationAction = $root.proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction.toObject(m.privacySettingChannelsPersonalisedRecommendationAction, o); + if (o.oneofs) + d._privacySettingChannelsPersonalisedRecommendationAction = "privacySettingChannelsPersonalisedRecommendationAction"; + } + if (m.businessBroadcastAssociationAction != null && m.hasOwnProperty("businessBroadcastAssociationAction")) { + d.businessBroadcastAssociationAction = $root.proto.SyncActionValue.BusinessBroadcastAssociationAction.toObject(m.businessBroadcastAssociationAction, o); + if (o.oneofs) + d._businessBroadcastAssociationAction = "businessBroadcastAssociationAction"; + } + if (m.detectedOutcomesStatusAction != null && m.hasOwnProperty("detectedOutcomesStatusAction")) { + d.detectedOutcomesStatusAction = $root.proto.SyncActionValue.DetectedOutcomesStatusAction.toObject(m.detectedOutcomesStatusAction, o); + if (o.oneofs) + d._detectedOutcomesStatusAction = "detectedOutcomesStatusAction"; + } + if (m.maibaAiFeaturesControlAction != null && m.hasOwnProperty("maibaAiFeaturesControlAction")) { + d.maibaAiFeaturesControlAction = $root.proto.SyncActionValue.MaibaAIFeaturesControlAction.toObject(m.maibaAiFeaturesControlAction, o); + if (o.oneofs) + d._maibaAiFeaturesControlAction = "maibaAiFeaturesControlAction"; + } + if (m.businessBroadcastListAction != null && m.hasOwnProperty("businessBroadcastListAction")) { + d.businessBroadcastListAction = $root.proto.SyncActionValue.BusinessBroadcastListAction.toObject(m.businessBroadcastListAction, o); + if (o.oneofs) + d._businessBroadcastListAction = "businessBroadcastListAction"; + } + if (m.musicUserIdAction != null && m.hasOwnProperty("musicUserIdAction")) { + d.musicUserIdAction = $root.proto.SyncActionValue.MusicUserIdAction.toObject(m.musicUserIdAction, o); + if (o.oneofs) + d._musicUserIdAction = "musicUserIdAction"; + } + if (m.statusPostOptInNotificationPreferencesAction != null && m.hasOwnProperty("statusPostOptInNotificationPreferencesAction")) { + d.statusPostOptInNotificationPreferencesAction = $root.proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction.toObject(m.statusPostOptInNotificationPreferencesAction, o); + if (o.oneofs) + d._statusPostOptInNotificationPreferencesAction = "statusPostOptInNotificationPreferencesAction"; + } + if (m.avatarUpdatedAction != null && m.hasOwnProperty("avatarUpdatedAction")) { + d.avatarUpdatedAction = $root.proto.SyncActionValue.AvatarUpdatedAction.toObject(m.avatarUpdatedAction, o); + if (o.oneofs) + d._avatarUpdatedAction = "avatarUpdatedAction"; + } + if (m.privateProcessingSettingAction != null && m.hasOwnProperty("privateProcessingSettingAction")) { + d.privateProcessingSettingAction = $root.proto.SyncActionValue.PrivateProcessingSettingAction.toObject(m.privateProcessingSettingAction, o); + if (o.oneofs) + d._privateProcessingSettingAction = "privateProcessingSettingAction"; + } + if (m.newsletterSavedInterestsAction != null && m.hasOwnProperty("newsletterSavedInterestsAction")) { + d.newsletterSavedInterestsAction = $root.proto.SyncActionValue.NewsletterSavedInterestsAction.toObject(m.newsletterSavedInterestsAction, o); + if (o.oneofs) + d._newsletterSavedInterestsAction = "newsletterSavedInterestsAction"; + } + if (m.aiThreadRenameAction != null && m.hasOwnProperty("aiThreadRenameAction")) { + d.aiThreadRenameAction = $root.proto.SyncActionValue.AiThreadRenameAction.toObject(m.aiThreadRenameAction, o); + if (o.oneofs) + d._aiThreadRenameAction = "aiThreadRenameAction"; + } + if (m.interactiveMessageAction != null && m.hasOwnProperty("interactiveMessageAction")) { + d.interactiveMessageAction = $root.proto.SyncActionValue.InteractiveMessageAction.toObject(m.interactiveMessageAction, o); + if (o.oneofs) + d._interactiveMessageAction = "interactiveMessageAction"; + } + return d; + }; + + SyncActionValue.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncActionValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue"; + }; + + SyncActionValue.AgentAction = (function() { + + function AgentAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AgentAction.prototype.name = null; + AgentAction.prototype.deviceID = null; + AgentAction.prototype.isDeleted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AgentAction.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AgentAction.prototype, "_deviceID", { + get: $util.oneOfGetter($oneOfFields = ["deviceID"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AgentAction.prototype, "_isDeleted", { + get: $util.oneOfGetter($oneOfFields = ["isDeleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AgentAction.create = function create(properties) { + return new AgentAction(properties); + }; + + AgentAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.deviceID != null && Object.hasOwnProperty.call(m, "deviceID")) + w.uint32(16).int32(m.deviceID); + if (m.isDeleted != null && Object.hasOwnProperty.call(m, "isDeleted")) + w.uint32(24).bool(m.isDeleted); + return w; + }; + + AgentAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.AgentAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + m.deviceID = r.int32(); + break; + } + case 3: { + m.isDeleted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AgentAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.AgentAction) + return d; + var m = new $root.proto.SyncActionValue.AgentAction(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.deviceID != null) { + m.deviceID = d.deviceID | 0; + } + if (d.isDeleted != null) { + m.isDeleted = Boolean(d.isDeleted); + } + return m; + }; + + AgentAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.deviceID != null && m.hasOwnProperty("deviceID")) { + d.deviceID = m.deviceID; + if (o.oneofs) + d._deviceID = "deviceID"; + } + if (m.isDeleted != null && m.hasOwnProperty("isDeleted")) { + d.isDeleted = m.isDeleted; + if (o.oneofs) + d._isDeleted = "isDeleted"; + } + return d; + }; + + AgentAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AgentAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.AgentAction"; + }; + + return AgentAction; + })(); + + SyncActionValue.AiThreadRenameAction = (function() { + + function AiThreadRenameAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AiThreadRenameAction.prototype.newTitle = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AiThreadRenameAction.prototype, "_newTitle", { + get: $util.oneOfGetter($oneOfFields = ["newTitle"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AiThreadRenameAction.create = function create(properties) { + return new AiThreadRenameAction(properties); + }; + + AiThreadRenameAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.newTitle != null && Object.hasOwnProperty.call(m, "newTitle")) + w.uint32(10).string(m.newTitle); + return w; + }; + + AiThreadRenameAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.AiThreadRenameAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.newTitle = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AiThreadRenameAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.AiThreadRenameAction) + return d; + var m = new $root.proto.SyncActionValue.AiThreadRenameAction(); + if (d.newTitle != null) { + m.newTitle = String(d.newTitle); + } + return m; + }; + + AiThreadRenameAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.newTitle != null && m.hasOwnProperty("newTitle")) { + d.newTitle = m.newTitle; + if (o.oneofs) + d._newTitle = "newTitle"; + } + return d; + }; + + AiThreadRenameAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AiThreadRenameAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.AiThreadRenameAction"; + }; + + return AiThreadRenameAction; + })(); + + SyncActionValue.AndroidUnsupportedActions = (function() { + + function AndroidUnsupportedActions(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AndroidUnsupportedActions.prototype.allowed = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AndroidUnsupportedActions.prototype, "_allowed", { + get: $util.oneOfGetter($oneOfFields = ["allowed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AndroidUnsupportedActions.create = function create(properties) { + return new AndroidUnsupportedActions(properties); + }; + + AndroidUnsupportedActions.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.allowed != null && Object.hasOwnProperty.call(m, "allowed")) + w.uint32(8).bool(m.allowed); + return w; + }; + + AndroidUnsupportedActions.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.AndroidUnsupportedActions(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.allowed = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AndroidUnsupportedActions.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.AndroidUnsupportedActions) + return d; + var m = new $root.proto.SyncActionValue.AndroidUnsupportedActions(); + if (d.allowed != null) { + m.allowed = Boolean(d.allowed); + } + return m; + }; + + AndroidUnsupportedActions.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.allowed != null && m.hasOwnProperty("allowed")) { + d.allowed = m.allowed; + if (o.oneofs) + d._allowed = "allowed"; + } + return d; + }; + + AndroidUnsupportedActions.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AndroidUnsupportedActions.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.AndroidUnsupportedActions"; + }; + + return AndroidUnsupportedActions; + })(); + + SyncActionValue.ArchiveChatAction = (function() { + + function ArchiveChatAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ArchiveChatAction.prototype.archived = null; + ArchiveChatAction.prototype.messageRange = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ArchiveChatAction.prototype, "_archived", { + get: $util.oneOfGetter($oneOfFields = ["archived"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ArchiveChatAction.prototype, "_messageRange", { + get: $util.oneOfGetter($oneOfFields = ["messageRange"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ArchiveChatAction.create = function create(properties) { + return new ArchiveChatAction(properties); + }; + + ArchiveChatAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.archived != null && Object.hasOwnProperty.call(m, "archived")) + w.uint32(8).bool(m.archived); + if (m.messageRange != null && Object.hasOwnProperty.call(m, "messageRange")) + $root.proto.SyncActionValue.SyncActionMessageRange.encode(m.messageRange, w.uint32(18).fork()).ldelim(); + return w; + }; + + ArchiveChatAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.ArchiveChatAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.archived = r.bool(); + break; + } + case 2: { + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ArchiveChatAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.ArchiveChatAction) + return d; + var m = new $root.proto.SyncActionValue.ArchiveChatAction(); + if (d.archived != null) { + m.archived = Boolean(d.archived); + } + if (d.messageRange != null) { + if (typeof d.messageRange !== "object") + throw TypeError(".proto.SyncActionValue.ArchiveChatAction.messageRange: object expected"); + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.fromObject(d.messageRange); + } + return m; + }; + + ArchiveChatAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.archived != null && m.hasOwnProperty("archived")) { + d.archived = m.archived; + if (o.oneofs) + d._archived = "archived"; + } + if (m.messageRange != null && m.hasOwnProperty("messageRange")) { + d.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.toObject(m.messageRange, o); + if (o.oneofs) + d._messageRange = "messageRange"; + } + return d; + }; + + ArchiveChatAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ArchiveChatAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.ArchiveChatAction"; + }; + + return ArchiveChatAction; + })(); + + SyncActionValue.AvatarUpdatedAction = (function() { + + function AvatarUpdatedAction(p) { + this.recentAvatarStickers = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + AvatarUpdatedAction.prototype.eventType = null; + AvatarUpdatedAction.prototype.recentAvatarStickers = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(AvatarUpdatedAction.prototype, "_eventType", { + get: $util.oneOfGetter($oneOfFields = ["eventType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + AvatarUpdatedAction.create = function create(properties) { + return new AvatarUpdatedAction(properties); + }; + + AvatarUpdatedAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.eventType != null && Object.hasOwnProperty.call(m, "eventType")) + w.uint32(8).int32(m.eventType); + if (m.recentAvatarStickers != null && m.recentAvatarStickers.length) { + for (var i = 0; i < m.recentAvatarStickers.length; ++i) + $root.proto.SyncActionValue.StickerAction.encode(m.recentAvatarStickers[i], w.uint32(18).fork()).ldelim(); + } + return w; + }; + + AvatarUpdatedAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.AvatarUpdatedAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.eventType = r.int32(); + break; + } + case 2: { + if (!(m.recentAvatarStickers && m.recentAvatarStickers.length)) + m.recentAvatarStickers = []; + m.recentAvatarStickers.push($root.proto.SyncActionValue.StickerAction.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + AvatarUpdatedAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.AvatarUpdatedAction) + return d; + var m = new $root.proto.SyncActionValue.AvatarUpdatedAction(); + switch (d.eventType) { + default: + if (typeof d.eventType === "number") { + m.eventType = d.eventType; + break; + } + break; + case "UPDATED": + case 0: + m.eventType = 0; + break; + case "CREATED": + case 1: + m.eventType = 1; + break; + case "DELETED": + case 2: + m.eventType = 2; + break; + } + if (d.recentAvatarStickers) { + if (!Array.isArray(d.recentAvatarStickers)) + throw TypeError(".proto.SyncActionValue.AvatarUpdatedAction.recentAvatarStickers: array expected"); + m.recentAvatarStickers = []; + for (var i = 0; i < d.recentAvatarStickers.length; ++i) { + if (typeof d.recentAvatarStickers[i] !== "object") + throw TypeError(".proto.SyncActionValue.AvatarUpdatedAction.recentAvatarStickers: object expected"); + m.recentAvatarStickers[i] = $root.proto.SyncActionValue.StickerAction.fromObject(d.recentAvatarStickers[i]); + } + } + return m; + }; + + AvatarUpdatedAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.recentAvatarStickers = []; + } + if (m.eventType != null && m.hasOwnProperty("eventType")) { + d.eventType = o.enums === String ? $root.proto.SyncActionValue.AvatarUpdatedAction.AvatarEventType[m.eventType] === undefined ? m.eventType : $root.proto.SyncActionValue.AvatarUpdatedAction.AvatarEventType[m.eventType] : m.eventType; + if (o.oneofs) + d._eventType = "eventType"; + } + if (m.recentAvatarStickers && m.recentAvatarStickers.length) { + d.recentAvatarStickers = []; + for (var j = 0; j < m.recentAvatarStickers.length; ++j) { + d.recentAvatarStickers[j] = $root.proto.SyncActionValue.StickerAction.toObject(m.recentAvatarStickers[j], o); + } + } + return d; + }; + + AvatarUpdatedAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + AvatarUpdatedAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.AvatarUpdatedAction"; + }; + + AvatarUpdatedAction.AvatarEventType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UPDATED"] = 0; + values[valuesById[1] = "CREATED"] = 1; + values[valuesById[2] = "DELETED"] = 2; + return values; + })(); + + return AvatarUpdatedAction; + })(); + + SyncActionValue.BotWelcomeRequestAction = (function() { + + function BotWelcomeRequestAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BotWelcomeRequestAction.prototype.isSent = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BotWelcomeRequestAction.prototype, "_isSent", { + get: $util.oneOfGetter($oneOfFields = ["isSent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BotWelcomeRequestAction.create = function create(properties) { + return new BotWelcomeRequestAction(properties); + }; + + BotWelcomeRequestAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isSent != null && Object.hasOwnProperty.call(m, "isSent")) + w.uint32(8).bool(m.isSent); + return w; + }; + + BotWelcomeRequestAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.BotWelcomeRequestAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isSent = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BotWelcomeRequestAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.BotWelcomeRequestAction) + return d; + var m = new $root.proto.SyncActionValue.BotWelcomeRequestAction(); + if (d.isSent != null) { + m.isSent = Boolean(d.isSent); + } + return m; + }; + + BotWelcomeRequestAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isSent != null && m.hasOwnProperty("isSent")) { + d.isSent = m.isSent; + if (o.oneofs) + d._isSent = "isSent"; + } + return d; + }; + + BotWelcomeRequestAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BotWelcomeRequestAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.BotWelcomeRequestAction"; + }; + + return BotWelcomeRequestAction; + })(); + + SyncActionValue.BroadcastListParticipant = (function() { + + function BroadcastListParticipant(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BroadcastListParticipant.prototype.lidJid = ""; + BroadcastListParticipant.prototype.pnJid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BroadcastListParticipant.prototype, "_pnJid", { + get: $util.oneOfGetter($oneOfFields = ["pnJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BroadcastListParticipant.create = function create(properties) { + return new BroadcastListParticipant(properties); + }; + + BroadcastListParticipant.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.lidJid != null && Object.hasOwnProperty.call(m, "lidJid")) + w.uint32(10).string(m.lidJid); + if (m.pnJid != null && Object.hasOwnProperty.call(m, "pnJid")) + w.uint32(18).string(m.pnJid); + return w; + }; + + BroadcastListParticipant.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.BroadcastListParticipant(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.lidJid = r.string(); + break; + } + case 2: { + m.pnJid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BroadcastListParticipant.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.BroadcastListParticipant) + return d; + var m = new $root.proto.SyncActionValue.BroadcastListParticipant(); + if (d.lidJid != null) { + m.lidJid = String(d.lidJid); + } + if (d.pnJid != null) { + m.pnJid = String(d.pnJid); + } + return m; + }; + + BroadcastListParticipant.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.lidJid = ""; + } + if (m.lidJid != null && m.hasOwnProperty("lidJid")) { + d.lidJid = m.lidJid; + } + if (m.pnJid != null && m.hasOwnProperty("pnJid")) { + d.pnJid = m.pnJid; + if (o.oneofs) + d._pnJid = "pnJid"; + } + return d; + }; + + BroadcastListParticipant.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BroadcastListParticipant.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.BroadcastListParticipant"; + }; + + return BroadcastListParticipant; + })(); + + SyncActionValue.BusinessBroadcastAssociationAction = (function() { + + function BusinessBroadcastAssociationAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BusinessBroadcastAssociationAction.prototype.deleted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BusinessBroadcastAssociationAction.prototype, "_deleted", { + get: $util.oneOfGetter($oneOfFields = ["deleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BusinessBroadcastAssociationAction.create = function create(properties) { + return new BusinessBroadcastAssociationAction(properties); + }; + + BusinessBroadcastAssociationAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.deleted != null && Object.hasOwnProperty.call(m, "deleted")) + w.uint32(8).bool(m.deleted); + return w; + }; + + BusinessBroadcastAssociationAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.BusinessBroadcastAssociationAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.deleted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BusinessBroadcastAssociationAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.BusinessBroadcastAssociationAction) + return d; + var m = new $root.proto.SyncActionValue.BusinessBroadcastAssociationAction(); + if (d.deleted != null) { + m.deleted = Boolean(d.deleted); + } + return m; + }; + + BusinessBroadcastAssociationAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.deleted != null && m.hasOwnProperty("deleted")) { + d.deleted = m.deleted; + if (o.oneofs) + d._deleted = "deleted"; + } + return d; + }; + + BusinessBroadcastAssociationAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BusinessBroadcastAssociationAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.BusinessBroadcastAssociationAction"; + }; + + return BusinessBroadcastAssociationAction; + })(); + + SyncActionValue.BusinessBroadcastListAction = (function() { + + function BusinessBroadcastListAction(p) { + this.participants = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + BusinessBroadcastListAction.prototype.deleted = null; + BusinessBroadcastListAction.prototype.participants = $util.emptyArray; + BusinessBroadcastListAction.prototype.listName = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BusinessBroadcastListAction.prototype, "_deleted", { + get: $util.oneOfGetter($oneOfFields = ["deleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(BusinessBroadcastListAction.prototype, "_listName", { + get: $util.oneOfGetter($oneOfFields = ["listName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + BusinessBroadcastListAction.create = function create(properties) { + return new BusinessBroadcastListAction(properties); + }; + + BusinessBroadcastListAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.deleted != null && Object.hasOwnProperty.call(m, "deleted")) + w.uint32(8).bool(m.deleted); + if (m.participants != null && m.participants.length) { + for (var i = 0; i < m.participants.length; ++i) + $root.proto.SyncActionValue.BroadcastListParticipant.encode(m.participants[i], w.uint32(18).fork()).ldelim(); + } + if (m.listName != null && Object.hasOwnProperty.call(m, "listName")) + w.uint32(26).string(m.listName); + return w; + }; + + BusinessBroadcastListAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.BusinessBroadcastListAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.deleted = r.bool(); + break; + } + case 2: { + if (!(m.participants && m.participants.length)) + m.participants = []; + m.participants.push($root.proto.SyncActionValue.BroadcastListParticipant.decode(r, r.uint32())); + break; + } + case 3: { + m.listName = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + BusinessBroadcastListAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.BusinessBroadcastListAction) + return d; + var m = new $root.proto.SyncActionValue.BusinessBroadcastListAction(); + if (d.deleted != null) { + m.deleted = Boolean(d.deleted); + } + if (d.participants) { + if (!Array.isArray(d.participants)) + throw TypeError(".proto.SyncActionValue.BusinessBroadcastListAction.participants: array expected"); + m.participants = []; + for (var i = 0; i < d.participants.length; ++i) { + if (typeof d.participants[i] !== "object") + throw TypeError(".proto.SyncActionValue.BusinessBroadcastListAction.participants: object expected"); + m.participants[i] = $root.proto.SyncActionValue.BroadcastListParticipant.fromObject(d.participants[i]); + } + } + if (d.listName != null) { + m.listName = String(d.listName); + } + return m; + }; + + BusinessBroadcastListAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.participants = []; + } + if (m.deleted != null && m.hasOwnProperty("deleted")) { + d.deleted = m.deleted; + if (o.oneofs) + d._deleted = "deleted"; + } + if (m.participants && m.participants.length) { + d.participants = []; + for (var j = 0; j < m.participants.length; ++j) { + d.participants[j] = $root.proto.SyncActionValue.BroadcastListParticipant.toObject(m.participants[j], o); + } + } + if (m.listName != null && m.hasOwnProperty("listName")) { + d.listName = m.listName; + if (o.oneofs) + d._listName = "listName"; + } + return d; + }; + + BusinessBroadcastListAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + BusinessBroadcastListAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.BusinessBroadcastListAction"; + }; + + return BusinessBroadcastListAction; + })(); + + SyncActionValue.CallLogAction = (function() { + + function CallLogAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CallLogAction.prototype.callLogRecord = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallLogAction.prototype, "_callLogRecord", { + get: $util.oneOfGetter($oneOfFields = ["callLogRecord"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CallLogAction.create = function create(properties) { + return new CallLogAction(properties); + }; + + CallLogAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.callLogRecord != null && Object.hasOwnProperty.call(m, "callLogRecord")) + $root.proto.CallLogRecord.encode(m.callLogRecord, w.uint32(10).fork()).ldelim(); + return w; + }; + + CallLogAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.CallLogAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.callLogRecord = $root.proto.CallLogRecord.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CallLogAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.CallLogAction) + return d; + var m = new $root.proto.SyncActionValue.CallLogAction(); + if (d.callLogRecord != null) { + if (typeof d.callLogRecord !== "object") + throw TypeError(".proto.SyncActionValue.CallLogAction.callLogRecord: object expected"); + m.callLogRecord = $root.proto.CallLogRecord.fromObject(d.callLogRecord); + } + return m; + }; + + CallLogAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.callLogRecord != null && m.hasOwnProperty("callLogRecord")) { + d.callLogRecord = $root.proto.CallLogRecord.toObject(m.callLogRecord, o); + if (o.oneofs) + d._callLogRecord = "callLogRecord"; + } + return d; + }; + + CallLogAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CallLogAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.CallLogAction"; + }; + + return CallLogAction; + })(); + + SyncActionValue.ChatAssignmentAction = (function() { + + function ChatAssignmentAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ChatAssignmentAction.prototype.deviceAgentID = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ChatAssignmentAction.prototype, "_deviceAgentID", { + get: $util.oneOfGetter($oneOfFields = ["deviceAgentID"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ChatAssignmentAction.create = function create(properties) { + return new ChatAssignmentAction(properties); + }; + + ChatAssignmentAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.deviceAgentID != null && Object.hasOwnProperty.call(m, "deviceAgentID")) + w.uint32(10).string(m.deviceAgentID); + return w; + }; + + ChatAssignmentAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.ChatAssignmentAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.deviceAgentID = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ChatAssignmentAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.ChatAssignmentAction) + return d; + var m = new $root.proto.SyncActionValue.ChatAssignmentAction(); + if (d.deviceAgentID != null) { + m.deviceAgentID = String(d.deviceAgentID); + } + return m; + }; + + ChatAssignmentAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.deviceAgentID != null && m.hasOwnProperty("deviceAgentID")) { + d.deviceAgentID = m.deviceAgentID; + if (o.oneofs) + d._deviceAgentID = "deviceAgentID"; + } + return d; + }; + + ChatAssignmentAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ChatAssignmentAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.ChatAssignmentAction"; + }; + + return ChatAssignmentAction; + })(); + + SyncActionValue.ChatAssignmentOpenedStatusAction = (function() { + + function ChatAssignmentOpenedStatusAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ChatAssignmentOpenedStatusAction.prototype.chatOpened = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ChatAssignmentOpenedStatusAction.prototype, "_chatOpened", { + get: $util.oneOfGetter($oneOfFields = ["chatOpened"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ChatAssignmentOpenedStatusAction.create = function create(properties) { + return new ChatAssignmentOpenedStatusAction(properties); + }; + + ChatAssignmentOpenedStatusAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.chatOpened != null && Object.hasOwnProperty.call(m, "chatOpened")) + w.uint32(8).bool(m.chatOpened); + return w; + }; + + ChatAssignmentOpenedStatusAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.ChatAssignmentOpenedStatusAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.chatOpened = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ChatAssignmentOpenedStatusAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.ChatAssignmentOpenedStatusAction) + return d; + var m = new $root.proto.SyncActionValue.ChatAssignmentOpenedStatusAction(); + if (d.chatOpened != null) { + m.chatOpened = Boolean(d.chatOpened); + } + return m; + }; + + ChatAssignmentOpenedStatusAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.chatOpened != null && m.hasOwnProperty("chatOpened")) { + d.chatOpened = m.chatOpened; + if (o.oneofs) + d._chatOpened = "chatOpened"; + } + return d; + }; + + ChatAssignmentOpenedStatusAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ChatAssignmentOpenedStatusAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.ChatAssignmentOpenedStatusAction"; + }; + + return ChatAssignmentOpenedStatusAction; + })(); + + SyncActionValue.ClearChatAction = (function() { + + function ClearChatAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ClearChatAction.prototype.messageRange = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ClearChatAction.prototype, "_messageRange", { + get: $util.oneOfGetter($oneOfFields = ["messageRange"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ClearChatAction.create = function create(properties) { + return new ClearChatAction(properties); + }; + + ClearChatAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageRange != null && Object.hasOwnProperty.call(m, "messageRange")) + $root.proto.SyncActionValue.SyncActionMessageRange.encode(m.messageRange, w.uint32(10).fork()).ldelim(); + return w; + }; + + ClearChatAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.ClearChatAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ClearChatAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.ClearChatAction) + return d; + var m = new $root.proto.SyncActionValue.ClearChatAction(); + if (d.messageRange != null) { + if (typeof d.messageRange !== "object") + throw TypeError(".proto.SyncActionValue.ClearChatAction.messageRange: object expected"); + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.fromObject(d.messageRange); + } + return m; + }; + + ClearChatAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageRange != null && m.hasOwnProperty("messageRange")) { + d.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.toObject(m.messageRange, o); + if (o.oneofs) + d._messageRange = "messageRange"; + } + return d; + }; + + ClearChatAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ClearChatAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.ClearChatAction"; + }; + + return ClearChatAction; + })(); + + SyncActionValue.ContactAction = (function() { + + function ContactAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ContactAction.prototype.fullName = null; + ContactAction.prototype.firstName = null; + ContactAction.prototype.lidJid = null; + ContactAction.prototype.saveOnPrimaryAddressbook = null; + ContactAction.prototype.pnJid = null; + ContactAction.prototype.username = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactAction.prototype, "_fullName", { + get: $util.oneOfGetter($oneOfFields = ["fullName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactAction.prototype, "_firstName", { + get: $util.oneOfGetter($oneOfFields = ["firstName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactAction.prototype, "_lidJid", { + get: $util.oneOfGetter($oneOfFields = ["lidJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactAction.prototype, "_saveOnPrimaryAddressbook", { + get: $util.oneOfGetter($oneOfFields = ["saveOnPrimaryAddressbook"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactAction.prototype, "_pnJid", { + get: $util.oneOfGetter($oneOfFields = ["pnJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ContactAction.prototype, "_username", { + get: $util.oneOfGetter($oneOfFields = ["username"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ContactAction.create = function create(properties) { + return new ContactAction(properties); + }; + + ContactAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fullName != null && Object.hasOwnProperty.call(m, "fullName")) + w.uint32(10).string(m.fullName); + if (m.firstName != null && Object.hasOwnProperty.call(m, "firstName")) + w.uint32(18).string(m.firstName); + if (m.lidJid != null && Object.hasOwnProperty.call(m, "lidJid")) + w.uint32(26).string(m.lidJid); + if (m.saveOnPrimaryAddressbook != null && Object.hasOwnProperty.call(m, "saveOnPrimaryAddressbook")) + w.uint32(32).bool(m.saveOnPrimaryAddressbook); + if (m.pnJid != null && Object.hasOwnProperty.call(m, "pnJid")) + w.uint32(42).string(m.pnJid); + if (m.username != null && Object.hasOwnProperty.call(m, "username")) + w.uint32(50).string(m.username); + return w; + }; + + ContactAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.ContactAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fullName = r.string(); + break; + } + case 2: { + m.firstName = r.string(); + break; + } + case 3: { + m.lidJid = r.string(); + break; + } + case 4: { + m.saveOnPrimaryAddressbook = r.bool(); + break; + } + case 5: { + m.pnJid = r.string(); + break; + } + case 6: { + m.username = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ContactAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.ContactAction) + return d; + var m = new $root.proto.SyncActionValue.ContactAction(); + if (d.fullName != null) { + m.fullName = String(d.fullName); + } + if (d.firstName != null) { + m.firstName = String(d.firstName); + } + if (d.lidJid != null) { + m.lidJid = String(d.lidJid); + } + if (d.saveOnPrimaryAddressbook != null) { + m.saveOnPrimaryAddressbook = Boolean(d.saveOnPrimaryAddressbook); + } + if (d.pnJid != null) { + m.pnJid = String(d.pnJid); + } + if (d.username != null) { + m.username = String(d.username); + } + return m; + }; + + ContactAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fullName != null && m.hasOwnProperty("fullName")) { + d.fullName = m.fullName; + if (o.oneofs) + d._fullName = "fullName"; + } + if (m.firstName != null && m.hasOwnProperty("firstName")) { + d.firstName = m.firstName; + if (o.oneofs) + d._firstName = "firstName"; + } + if (m.lidJid != null && m.hasOwnProperty("lidJid")) { + d.lidJid = m.lidJid; + if (o.oneofs) + d._lidJid = "lidJid"; + } + if (m.saveOnPrimaryAddressbook != null && m.hasOwnProperty("saveOnPrimaryAddressbook")) { + d.saveOnPrimaryAddressbook = m.saveOnPrimaryAddressbook; + if (o.oneofs) + d._saveOnPrimaryAddressbook = "saveOnPrimaryAddressbook"; + } + if (m.pnJid != null && m.hasOwnProperty("pnJid")) { + d.pnJid = m.pnJid; + if (o.oneofs) + d._pnJid = "pnJid"; + } + if (m.username != null && m.hasOwnProperty("username")) { + d.username = m.username; + if (o.oneofs) + d._username = "username"; + } + return d; + }; + + ContactAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ContactAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.ContactAction"; + }; + + return ContactAction; + })(); + + SyncActionValue.CtwaPerCustomerDataSharingAction = (function() { + + function CtwaPerCustomerDataSharingAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CtwaPerCustomerDataSharingAction.prototype.isCtwaPerCustomerDataSharingEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CtwaPerCustomerDataSharingAction.prototype, "_isCtwaPerCustomerDataSharingEnabled", { + get: $util.oneOfGetter($oneOfFields = ["isCtwaPerCustomerDataSharingEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CtwaPerCustomerDataSharingAction.create = function create(properties) { + return new CtwaPerCustomerDataSharingAction(properties); + }; + + CtwaPerCustomerDataSharingAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isCtwaPerCustomerDataSharingEnabled != null && Object.hasOwnProperty.call(m, "isCtwaPerCustomerDataSharingEnabled")) + w.uint32(8).bool(m.isCtwaPerCustomerDataSharingEnabled); + return w; + }; + + CtwaPerCustomerDataSharingAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.CtwaPerCustomerDataSharingAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isCtwaPerCustomerDataSharingEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CtwaPerCustomerDataSharingAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.CtwaPerCustomerDataSharingAction) + return d; + var m = new $root.proto.SyncActionValue.CtwaPerCustomerDataSharingAction(); + if (d.isCtwaPerCustomerDataSharingEnabled != null) { + m.isCtwaPerCustomerDataSharingEnabled = Boolean(d.isCtwaPerCustomerDataSharingEnabled); + } + return m; + }; + + CtwaPerCustomerDataSharingAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isCtwaPerCustomerDataSharingEnabled != null && m.hasOwnProperty("isCtwaPerCustomerDataSharingEnabled")) { + d.isCtwaPerCustomerDataSharingEnabled = m.isCtwaPerCustomerDataSharingEnabled; + if (o.oneofs) + d._isCtwaPerCustomerDataSharingEnabled = "isCtwaPerCustomerDataSharingEnabled"; + } + return d; + }; + + CtwaPerCustomerDataSharingAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CtwaPerCustomerDataSharingAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.CtwaPerCustomerDataSharingAction"; + }; + + return CtwaPerCustomerDataSharingAction; + })(); + + SyncActionValue.CustomPaymentMethod = (function() { + + function CustomPaymentMethod(p) { + this.metadata = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CustomPaymentMethod.prototype.credentialId = ""; + CustomPaymentMethod.prototype.country = ""; + CustomPaymentMethod.prototype.type = ""; + CustomPaymentMethod.prototype.metadata = $util.emptyArray; + + CustomPaymentMethod.create = function create(properties) { + return new CustomPaymentMethod(properties); + }; + + CustomPaymentMethod.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.credentialId != null && Object.hasOwnProperty.call(m, "credentialId")) + w.uint32(10).string(m.credentialId); + if (m.country != null && Object.hasOwnProperty.call(m, "country")) + w.uint32(18).string(m.country); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(26).string(m.type); + if (m.metadata != null && m.metadata.length) { + for (var i = 0; i < m.metadata.length; ++i) + $root.proto.SyncActionValue.CustomPaymentMethodMetadata.encode(m.metadata[i], w.uint32(34).fork()).ldelim(); + } + return w; + }; + + CustomPaymentMethod.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.CustomPaymentMethod(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.credentialId = r.string(); + break; + } + case 2: { + m.country = r.string(); + break; + } + case 3: { + m.type = r.string(); + break; + } + case 4: { + if (!(m.metadata && m.metadata.length)) + m.metadata = []; + m.metadata.push($root.proto.SyncActionValue.CustomPaymentMethodMetadata.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CustomPaymentMethod.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.CustomPaymentMethod) + return d; + var m = new $root.proto.SyncActionValue.CustomPaymentMethod(); + if (d.credentialId != null) { + m.credentialId = String(d.credentialId); + } + if (d.country != null) { + m.country = String(d.country); + } + if (d.type != null) { + m.type = String(d.type); + } + if (d.metadata) { + if (!Array.isArray(d.metadata)) + throw TypeError(".proto.SyncActionValue.CustomPaymentMethod.metadata: array expected"); + m.metadata = []; + for (var i = 0; i < d.metadata.length; ++i) { + if (typeof d.metadata[i] !== "object") + throw TypeError(".proto.SyncActionValue.CustomPaymentMethod.metadata: object expected"); + m.metadata[i] = $root.proto.SyncActionValue.CustomPaymentMethodMetadata.fromObject(d.metadata[i]); + } + } + return m; + }; + + CustomPaymentMethod.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.metadata = []; + } + if (o.defaults) { + d.credentialId = ""; + d.country = ""; + d.type = ""; + } + if (m.credentialId != null && m.hasOwnProperty("credentialId")) { + d.credentialId = m.credentialId; + } + if (m.country != null && m.hasOwnProperty("country")) { + d.country = m.country; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = m.type; + } + if (m.metadata && m.metadata.length) { + d.metadata = []; + for (var j = 0; j < m.metadata.length; ++j) { + d.metadata[j] = $root.proto.SyncActionValue.CustomPaymentMethodMetadata.toObject(m.metadata[j], o); + } + } + return d; + }; + + CustomPaymentMethod.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CustomPaymentMethod.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.CustomPaymentMethod"; + }; + + return CustomPaymentMethod; + })(); + + SyncActionValue.CustomPaymentMethodMetadata = (function() { + + function CustomPaymentMethodMetadata(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CustomPaymentMethodMetadata.prototype.key = ""; + CustomPaymentMethodMetadata.prototype.value = ""; + + CustomPaymentMethodMetadata.create = function create(properties) { + return new CustomPaymentMethodMetadata(properties); + }; + + CustomPaymentMethodMetadata.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + w.uint32(10).string(m.key); + if (m.value != null && Object.hasOwnProperty.call(m, "value")) + w.uint32(18).string(m.value); + return w; + }; + + CustomPaymentMethodMetadata.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.CustomPaymentMethodMetadata(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = r.string(); + break; + } + case 2: { + m.value = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CustomPaymentMethodMetadata.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.CustomPaymentMethodMetadata) + return d; + var m = new $root.proto.SyncActionValue.CustomPaymentMethodMetadata(); + if (d.key != null) { + m.key = String(d.key); + } + if (d.value != null) { + m.value = String(d.value); + } + return m; + }; + + CustomPaymentMethodMetadata.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.key = ""; + d.value = ""; + } + if (m.key != null && m.hasOwnProperty("key")) { + d.key = m.key; + } + if (m.value != null && m.hasOwnProperty("value")) { + d.value = m.value; + } + return d; + }; + + CustomPaymentMethodMetadata.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CustomPaymentMethodMetadata.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.CustomPaymentMethodMetadata"; + }; + + return CustomPaymentMethodMetadata; + })(); + + SyncActionValue.CustomPaymentMethodsAction = (function() { + + function CustomPaymentMethodsAction(p) { + this.customPaymentMethods = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CustomPaymentMethodsAction.prototype.customPaymentMethods = $util.emptyArray; + + CustomPaymentMethodsAction.create = function create(properties) { + return new CustomPaymentMethodsAction(properties); + }; + + CustomPaymentMethodsAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.customPaymentMethods != null && m.customPaymentMethods.length) { + for (var i = 0; i < m.customPaymentMethods.length; ++i) + $root.proto.SyncActionValue.CustomPaymentMethod.encode(m.customPaymentMethods[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + CustomPaymentMethodsAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.CustomPaymentMethodsAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.customPaymentMethods && m.customPaymentMethods.length)) + m.customPaymentMethods = []; + m.customPaymentMethods.push($root.proto.SyncActionValue.CustomPaymentMethod.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CustomPaymentMethodsAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.CustomPaymentMethodsAction) + return d; + var m = new $root.proto.SyncActionValue.CustomPaymentMethodsAction(); + if (d.customPaymentMethods) { + if (!Array.isArray(d.customPaymentMethods)) + throw TypeError(".proto.SyncActionValue.CustomPaymentMethodsAction.customPaymentMethods: array expected"); + m.customPaymentMethods = []; + for (var i = 0; i < d.customPaymentMethods.length; ++i) { + if (typeof d.customPaymentMethods[i] !== "object") + throw TypeError(".proto.SyncActionValue.CustomPaymentMethodsAction.customPaymentMethods: object expected"); + m.customPaymentMethods[i] = $root.proto.SyncActionValue.CustomPaymentMethod.fromObject(d.customPaymentMethods[i]); + } + } + return m; + }; + + CustomPaymentMethodsAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.customPaymentMethods = []; + } + if (m.customPaymentMethods && m.customPaymentMethods.length) { + d.customPaymentMethods = []; + for (var j = 0; j < m.customPaymentMethods.length; ++j) { + d.customPaymentMethods[j] = $root.proto.SyncActionValue.CustomPaymentMethod.toObject(m.customPaymentMethods[j], o); + } + } + return d; + }; + + CustomPaymentMethodsAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CustomPaymentMethodsAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.CustomPaymentMethodsAction"; + }; + + return CustomPaymentMethodsAction; + })(); + + SyncActionValue.DeleteChatAction = (function() { + + function DeleteChatAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeleteChatAction.prototype.messageRange = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeleteChatAction.prototype, "_messageRange", { + get: $util.oneOfGetter($oneOfFields = ["messageRange"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeleteChatAction.create = function create(properties) { + return new DeleteChatAction(properties); + }; + + DeleteChatAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.messageRange != null && Object.hasOwnProperty.call(m, "messageRange")) + $root.proto.SyncActionValue.SyncActionMessageRange.encode(m.messageRange, w.uint32(10).fork()).ldelim(); + return w; + }; + + DeleteChatAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.DeleteChatAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeleteChatAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.DeleteChatAction) + return d; + var m = new $root.proto.SyncActionValue.DeleteChatAction(); + if (d.messageRange != null) { + if (typeof d.messageRange !== "object") + throw TypeError(".proto.SyncActionValue.DeleteChatAction.messageRange: object expected"); + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.fromObject(d.messageRange); + } + return m; + }; + + DeleteChatAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.messageRange != null && m.hasOwnProperty("messageRange")) { + d.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.toObject(m.messageRange, o); + if (o.oneofs) + d._messageRange = "messageRange"; + } + return d; + }; + + DeleteChatAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeleteChatAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.DeleteChatAction"; + }; + + return DeleteChatAction; + })(); + + SyncActionValue.DeleteIndividualCallLogAction = (function() { + + function DeleteIndividualCallLogAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeleteIndividualCallLogAction.prototype.peerJid = null; + DeleteIndividualCallLogAction.prototype.isIncoming = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeleteIndividualCallLogAction.prototype, "_peerJid", { + get: $util.oneOfGetter($oneOfFields = ["peerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeleteIndividualCallLogAction.prototype, "_isIncoming", { + get: $util.oneOfGetter($oneOfFields = ["isIncoming"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeleteIndividualCallLogAction.create = function create(properties) { + return new DeleteIndividualCallLogAction(properties); + }; + + DeleteIndividualCallLogAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.peerJid != null && Object.hasOwnProperty.call(m, "peerJid")) + w.uint32(10).string(m.peerJid); + if (m.isIncoming != null && Object.hasOwnProperty.call(m, "isIncoming")) + w.uint32(16).bool(m.isIncoming); + return w; + }; + + DeleteIndividualCallLogAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.DeleteIndividualCallLogAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.peerJid = r.string(); + break; + } + case 2: { + m.isIncoming = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeleteIndividualCallLogAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.DeleteIndividualCallLogAction) + return d; + var m = new $root.proto.SyncActionValue.DeleteIndividualCallLogAction(); + if (d.peerJid != null) { + m.peerJid = String(d.peerJid); + } + if (d.isIncoming != null) { + m.isIncoming = Boolean(d.isIncoming); + } + return m; + }; + + DeleteIndividualCallLogAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.peerJid != null && m.hasOwnProperty("peerJid")) { + d.peerJid = m.peerJid; + if (o.oneofs) + d._peerJid = "peerJid"; + } + if (m.isIncoming != null && m.hasOwnProperty("isIncoming")) { + d.isIncoming = m.isIncoming; + if (o.oneofs) + d._isIncoming = "isIncoming"; + } + return d; + }; + + DeleteIndividualCallLogAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeleteIndividualCallLogAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.DeleteIndividualCallLogAction"; + }; + + return DeleteIndividualCallLogAction; + })(); + + SyncActionValue.DeleteMessageForMeAction = (function() { + + function DeleteMessageForMeAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DeleteMessageForMeAction.prototype.deleteMedia = null; + DeleteMessageForMeAction.prototype.messageTimestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeleteMessageForMeAction.prototype, "_deleteMedia", { + get: $util.oneOfGetter($oneOfFields = ["deleteMedia"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DeleteMessageForMeAction.prototype, "_messageTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["messageTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DeleteMessageForMeAction.create = function create(properties) { + return new DeleteMessageForMeAction(properties); + }; + + DeleteMessageForMeAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.deleteMedia != null && Object.hasOwnProperty.call(m, "deleteMedia")) + w.uint32(8).bool(m.deleteMedia); + if (m.messageTimestamp != null && Object.hasOwnProperty.call(m, "messageTimestamp")) + w.uint32(16).int64(m.messageTimestamp); + return w; + }; + + DeleteMessageForMeAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.DeleteMessageForMeAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.deleteMedia = r.bool(); + break; + } + case 2: { + m.messageTimestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DeleteMessageForMeAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.DeleteMessageForMeAction) + return d; + var m = new $root.proto.SyncActionValue.DeleteMessageForMeAction(); + if (d.deleteMedia != null) { + m.deleteMedia = Boolean(d.deleteMedia); + } + if (d.messageTimestamp != null) { + if ($util.Long) + (m.messageTimestamp = $util.Long.fromValue(d.messageTimestamp)).unsigned = false; + else if (typeof d.messageTimestamp === "string") + m.messageTimestamp = parseInt(d.messageTimestamp, 10); + else if (typeof d.messageTimestamp === "number") + m.messageTimestamp = d.messageTimestamp; + else if (typeof d.messageTimestamp === "object") + m.messageTimestamp = new $util.LongBits(d.messageTimestamp.low >>> 0, d.messageTimestamp.high >>> 0).toNumber(); + } + return m; + }; + + DeleteMessageForMeAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.deleteMedia != null && m.hasOwnProperty("deleteMedia")) { + d.deleteMedia = m.deleteMedia; + if (o.oneofs) + d._deleteMedia = "deleteMedia"; + } + if (m.messageTimestamp != null && m.hasOwnProperty("messageTimestamp")) { + if (typeof m.messageTimestamp === "number") + d.messageTimestamp = o.longs === String ? String(m.messageTimestamp) : m.messageTimestamp; + else + d.messageTimestamp = o.longs === String ? longToString(m.messageTimestamp) : o.longs === Number ? longToNumber(m.messageTimestamp) : m.messageTimestamp; + if (o.oneofs) + d._messageTimestamp = "messageTimestamp"; + } + return d; + }; + + DeleteMessageForMeAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DeleteMessageForMeAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.DeleteMessageForMeAction"; + }; + + return DeleteMessageForMeAction; + })(); + + SyncActionValue.DetectedOutcomesStatusAction = (function() { + + function DetectedOutcomesStatusAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + DetectedOutcomesStatusAction.prototype.isEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(DetectedOutcomesStatusAction.prototype, "_isEnabled", { + get: $util.oneOfGetter($oneOfFields = ["isEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + DetectedOutcomesStatusAction.create = function create(properties) { + return new DetectedOutcomesStatusAction(properties); + }; + + DetectedOutcomesStatusAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isEnabled != null && Object.hasOwnProperty.call(m, "isEnabled")) + w.uint32(8).bool(m.isEnabled); + return w; + }; + + DetectedOutcomesStatusAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.DetectedOutcomesStatusAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + DetectedOutcomesStatusAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.DetectedOutcomesStatusAction) + return d; + var m = new $root.proto.SyncActionValue.DetectedOutcomesStatusAction(); + if (d.isEnabled != null) { + m.isEnabled = Boolean(d.isEnabled); + } + return m; + }; + + DetectedOutcomesStatusAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isEnabled != null && m.hasOwnProperty("isEnabled")) { + d.isEnabled = m.isEnabled; + if (o.oneofs) + d._isEnabled = "isEnabled"; + } + return d; + }; + + DetectedOutcomesStatusAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + DetectedOutcomesStatusAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.DetectedOutcomesStatusAction"; + }; + + return DetectedOutcomesStatusAction; + })(); + + SyncActionValue.ExternalWebBetaAction = (function() { + + function ExternalWebBetaAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ExternalWebBetaAction.prototype.isOptIn = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ExternalWebBetaAction.prototype, "_isOptIn", { + get: $util.oneOfGetter($oneOfFields = ["isOptIn"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ExternalWebBetaAction.create = function create(properties) { + return new ExternalWebBetaAction(properties); + }; + + ExternalWebBetaAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isOptIn != null && Object.hasOwnProperty.call(m, "isOptIn")) + w.uint32(8).bool(m.isOptIn); + return w; + }; + + ExternalWebBetaAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.ExternalWebBetaAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isOptIn = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ExternalWebBetaAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.ExternalWebBetaAction) + return d; + var m = new $root.proto.SyncActionValue.ExternalWebBetaAction(); + if (d.isOptIn != null) { + m.isOptIn = Boolean(d.isOptIn); + } + return m; + }; + + ExternalWebBetaAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isOptIn != null && m.hasOwnProperty("isOptIn")) { + d.isOptIn = m.isOptIn; + if (o.oneofs) + d._isOptIn = "isOptIn"; + } + return d; + }; + + ExternalWebBetaAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ExternalWebBetaAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.ExternalWebBetaAction"; + }; + + return ExternalWebBetaAction; + })(); + + SyncActionValue.FavoritesAction = (function() { + + function FavoritesAction(p) { + this.favorites = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + FavoritesAction.prototype.favorites = $util.emptyArray; + + FavoritesAction.create = function create(properties) { + return new FavoritesAction(properties); + }; + + FavoritesAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.favorites != null && m.favorites.length) { + for (var i = 0; i < m.favorites.length; ++i) + $root.proto.SyncActionValue.FavoritesAction.Favorite.encode(m.favorites[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + FavoritesAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.FavoritesAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.favorites && m.favorites.length)) + m.favorites = []; + m.favorites.push($root.proto.SyncActionValue.FavoritesAction.Favorite.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + FavoritesAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.FavoritesAction) + return d; + var m = new $root.proto.SyncActionValue.FavoritesAction(); + if (d.favorites) { + if (!Array.isArray(d.favorites)) + throw TypeError(".proto.SyncActionValue.FavoritesAction.favorites: array expected"); + m.favorites = []; + for (var i = 0; i < d.favorites.length; ++i) { + if (typeof d.favorites[i] !== "object") + throw TypeError(".proto.SyncActionValue.FavoritesAction.favorites: object expected"); + m.favorites[i] = $root.proto.SyncActionValue.FavoritesAction.Favorite.fromObject(d.favorites[i]); + } + } + return m; + }; + + FavoritesAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.favorites = []; + } + if (m.favorites && m.favorites.length) { + d.favorites = []; + for (var j = 0; j < m.favorites.length; ++j) { + d.favorites[j] = $root.proto.SyncActionValue.FavoritesAction.Favorite.toObject(m.favorites[j], o); + } + } + return d; + }; + + FavoritesAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + FavoritesAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.FavoritesAction"; + }; + + FavoritesAction.Favorite = (function() { + + function Favorite(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Favorite.prototype.id = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Favorite.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Favorite.create = function create(properties) { + return new Favorite(properties); + }; + + Favorite.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(10).string(m.id); + return w; + }; + + Favorite.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.FavoritesAction.Favorite(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.id = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Favorite.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.FavoritesAction.Favorite) + return d; + var m = new $root.proto.SyncActionValue.FavoritesAction.Favorite(); + if (d.id != null) { + m.id = String(d.id); + } + return m; + }; + + Favorite.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + return d; + }; + + Favorite.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Favorite.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.FavoritesAction.Favorite"; + }; + + return Favorite; + })(); + + return FavoritesAction; + })(); + + SyncActionValue.InteractiveMessageAction = (function() { + + function InteractiveMessageAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + InteractiveMessageAction.prototype.type = 1; + + InteractiveMessageAction.create = function create(properties) { + return new InteractiveMessageAction(properties); + }; + + InteractiveMessageAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + return w; + }; + + InteractiveMessageAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.InteractiveMessageAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + InteractiveMessageAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.InteractiveMessageAction) + return d; + var m = new $root.proto.SyncActionValue.InteractiveMessageAction(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "DISABLE_CTA": + case 1: + m.type = 1; + break; + } + return m; + }; + + InteractiveMessageAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.type = o.enums === String ? "DISABLE_CTA" : 1; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.SyncActionValue.InteractiveMessageAction.InteractiveMessageActionMode[m.type] === undefined ? m.type : $root.proto.SyncActionValue.InteractiveMessageAction.InteractiveMessageActionMode[m.type] : m.type; + } + return d; + }; + + InteractiveMessageAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + InteractiveMessageAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.InteractiveMessageAction"; + }; + + InteractiveMessageAction.InteractiveMessageActionMode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "DISABLE_CTA"] = 1; + return values; + })(); + + return InteractiveMessageAction; + })(); + + SyncActionValue.KeyExpiration = (function() { + + function KeyExpiration(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + KeyExpiration.prototype.expiredKeyEpoch = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(KeyExpiration.prototype, "_expiredKeyEpoch", { + get: $util.oneOfGetter($oneOfFields = ["expiredKeyEpoch"]), + set: $util.oneOfSetter($oneOfFields) + }); + + KeyExpiration.create = function create(properties) { + return new KeyExpiration(properties); + }; + + KeyExpiration.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.expiredKeyEpoch != null && Object.hasOwnProperty.call(m, "expiredKeyEpoch")) + w.uint32(8).int32(m.expiredKeyEpoch); + return w; + }; + + KeyExpiration.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.KeyExpiration(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.expiredKeyEpoch = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + KeyExpiration.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.KeyExpiration) + return d; + var m = new $root.proto.SyncActionValue.KeyExpiration(); + if (d.expiredKeyEpoch != null) { + m.expiredKeyEpoch = d.expiredKeyEpoch | 0; + } + return m; + }; + + KeyExpiration.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.expiredKeyEpoch != null && m.hasOwnProperty("expiredKeyEpoch")) { + d.expiredKeyEpoch = m.expiredKeyEpoch; + if (o.oneofs) + d._expiredKeyEpoch = "expiredKeyEpoch"; + } + return d; + }; + + KeyExpiration.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + KeyExpiration.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.KeyExpiration"; + }; + + return KeyExpiration; + })(); + + SyncActionValue.LabelAssociationAction = (function() { + + function LabelAssociationAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LabelAssociationAction.prototype.labeled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelAssociationAction.prototype, "_labeled", { + get: $util.oneOfGetter($oneOfFields = ["labeled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LabelAssociationAction.create = function create(properties) { + return new LabelAssociationAction(properties); + }; + + LabelAssociationAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.labeled != null && Object.hasOwnProperty.call(m, "labeled")) + w.uint32(8).bool(m.labeled); + return w; + }; + + LabelAssociationAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.LabelAssociationAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.labeled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LabelAssociationAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.LabelAssociationAction) + return d; + var m = new $root.proto.SyncActionValue.LabelAssociationAction(); + if (d.labeled != null) { + m.labeled = Boolean(d.labeled); + } + return m; + }; + + LabelAssociationAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.labeled != null && m.hasOwnProperty("labeled")) { + d.labeled = m.labeled; + if (o.oneofs) + d._labeled = "labeled"; + } + return d; + }; + + LabelAssociationAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LabelAssociationAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.LabelAssociationAction"; + }; + + return LabelAssociationAction; + })(); + + SyncActionValue.LabelEditAction = (function() { + + function LabelEditAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LabelEditAction.prototype.name = null; + LabelEditAction.prototype.color = null; + LabelEditAction.prototype.predefinedId = null; + LabelEditAction.prototype.deleted = null; + LabelEditAction.prototype.orderIndex = null; + LabelEditAction.prototype.isActive = null; + LabelEditAction.prototype.type = null; + LabelEditAction.prototype.isImmutable = null; + LabelEditAction.prototype.muteEndTimeMs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_color", { + get: $util.oneOfGetter($oneOfFields = ["color"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_predefinedId", { + get: $util.oneOfGetter($oneOfFields = ["predefinedId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_deleted", { + get: $util.oneOfGetter($oneOfFields = ["deleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_orderIndex", { + get: $util.oneOfGetter($oneOfFields = ["orderIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_isActive", { + get: $util.oneOfGetter($oneOfFields = ["isActive"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_isImmutable", { + get: $util.oneOfGetter($oneOfFields = ["isImmutable"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LabelEditAction.prototype, "_muteEndTimeMs", { + get: $util.oneOfGetter($oneOfFields = ["muteEndTimeMs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LabelEditAction.create = function create(properties) { + return new LabelEditAction(properties); + }; + + LabelEditAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.color != null && Object.hasOwnProperty.call(m, "color")) + w.uint32(16).int32(m.color); + if (m.predefinedId != null && Object.hasOwnProperty.call(m, "predefinedId")) + w.uint32(24).int32(m.predefinedId); + if (m.deleted != null && Object.hasOwnProperty.call(m, "deleted")) + w.uint32(32).bool(m.deleted); + if (m.orderIndex != null && Object.hasOwnProperty.call(m, "orderIndex")) + w.uint32(40).int32(m.orderIndex); + if (m.isActive != null && Object.hasOwnProperty.call(m, "isActive")) + w.uint32(48).bool(m.isActive); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(56).int32(m.type); + if (m.isImmutable != null && Object.hasOwnProperty.call(m, "isImmutable")) + w.uint32(64).bool(m.isImmutable); + if (m.muteEndTimeMs != null && Object.hasOwnProperty.call(m, "muteEndTimeMs")) + w.uint32(72).int64(m.muteEndTimeMs); + return w; + }; + + LabelEditAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.LabelEditAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + m.color = r.int32(); + break; + } + case 3: { + m.predefinedId = r.int32(); + break; + } + case 4: { + m.deleted = r.bool(); + break; + } + case 5: { + m.orderIndex = r.int32(); + break; + } + case 6: { + m.isActive = r.bool(); + break; + } + case 7: { + m.type = r.int32(); + break; + } + case 8: { + m.isImmutable = r.bool(); + break; + } + case 9: { + m.muteEndTimeMs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LabelEditAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.LabelEditAction) + return d; + var m = new $root.proto.SyncActionValue.LabelEditAction(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.color != null) { + m.color = d.color | 0; + } + if (d.predefinedId != null) { + m.predefinedId = d.predefinedId | 0; + } + if (d.deleted != null) { + m.deleted = Boolean(d.deleted); + } + if (d.orderIndex != null) { + m.orderIndex = d.orderIndex | 0; + } + if (d.isActive != null) { + m.isActive = Boolean(d.isActive); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "NONE": + case 0: + m.type = 0; + break; + case "UNREAD": + case 1: + m.type = 1; + break; + case "GROUPS": + case 2: + m.type = 2; + break; + case "FAVORITES": + case 3: + m.type = 3; + break; + case "PREDEFINED": + case 4: + m.type = 4; + break; + case "CUSTOM": + case 5: + m.type = 5; + break; + case "COMMUNITY": + case 6: + m.type = 6; + break; + case "SERVER_ASSIGNED": + case 7: + m.type = 7; + break; + case "DRAFTED": + case 8: + m.type = 8; + break; + case "AI_HANDOFF": + case 9: + m.type = 9; + break; + } + if (d.isImmutable != null) { + m.isImmutable = Boolean(d.isImmutable); + } + if (d.muteEndTimeMs != null) { + if ($util.Long) + (m.muteEndTimeMs = $util.Long.fromValue(d.muteEndTimeMs)).unsigned = false; + else if (typeof d.muteEndTimeMs === "string") + m.muteEndTimeMs = parseInt(d.muteEndTimeMs, 10); + else if (typeof d.muteEndTimeMs === "number") + m.muteEndTimeMs = d.muteEndTimeMs; + else if (typeof d.muteEndTimeMs === "object") + m.muteEndTimeMs = new $util.LongBits(d.muteEndTimeMs.low >>> 0, d.muteEndTimeMs.high >>> 0).toNumber(); + } + return m; + }; + + LabelEditAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.color != null && m.hasOwnProperty("color")) { + d.color = m.color; + if (o.oneofs) + d._color = "color"; + } + if (m.predefinedId != null && m.hasOwnProperty("predefinedId")) { + d.predefinedId = m.predefinedId; + if (o.oneofs) + d._predefinedId = "predefinedId"; + } + if (m.deleted != null && m.hasOwnProperty("deleted")) { + d.deleted = m.deleted; + if (o.oneofs) + d._deleted = "deleted"; + } + if (m.orderIndex != null && m.hasOwnProperty("orderIndex")) { + d.orderIndex = m.orderIndex; + if (o.oneofs) + d._orderIndex = "orderIndex"; + } + if (m.isActive != null && m.hasOwnProperty("isActive")) { + d.isActive = m.isActive; + if (o.oneofs) + d._isActive = "isActive"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.SyncActionValue.LabelEditAction.ListType[m.type] === undefined ? m.type : $root.proto.SyncActionValue.LabelEditAction.ListType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.isImmutable != null && m.hasOwnProperty("isImmutable")) { + d.isImmutable = m.isImmutable; + if (o.oneofs) + d._isImmutable = "isImmutable"; + } + if (m.muteEndTimeMs != null && m.hasOwnProperty("muteEndTimeMs")) { + if (typeof m.muteEndTimeMs === "number") + d.muteEndTimeMs = o.longs === String ? String(m.muteEndTimeMs) : m.muteEndTimeMs; + else + d.muteEndTimeMs = o.longs === String ? longToString(m.muteEndTimeMs) : o.longs === Number ? longToNumber(m.muteEndTimeMs) : m.muteEndTimeMs; + if (o.oneofs) + d._muteEndTimeMs = "muteEndTimeMs"; + } + return d; + }; + + LabelEditAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LabelEditAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.LabelEditAction"; + }; + + LabelEditAction.ListType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "UNREAD"] = 1; + values[valuesById[2] = "GROUPS"] = 2; + values[valuesById[3] = "FAVORITES"] = 3; + values[valuesById[4] = "PREDEFINED"] = 4; + values[valuesById[5] = "CUSTOM"] = 5; + values[valuesById[6] = "COMMUNITY"] = 6; + values[valuesById[7] = "SERVER_ASSIGNED"] = 7; + values[valuesById[8] = "DRAFTED"] = 8; + values[valuesById[9] = "AI_HANDOFF"] = 9; + return values; + })(); + + return LabelEditAction; + })(); + + SyncActionValue.LabelReorderingAction = (function() { + + function LabelReorderingAction(p) { + this.sortedLabelIds = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LabelReorderingAction.prototype.sortedLabelIds = $util.emptyArray; + + LabelReorderingAction.create = function create(properties) { + return new LabelReorderingAction(properties); + }; + + LabelReorderingAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.sortedLabelIds != null && m.sortedLabelIds.length) { + w.uint32(10).fork(); + for (var i = 0; i < m.sortedLabelIds.length; ++i) + w.int32(m.sortedLabelIds[i]); + w.ldelim(); + } + return w; + }; + + LabelReorderingAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.LabelReorderingAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.sortedLabelIds && m.sortedLabelIds.length)) + m.sortedLabelIds = []; + if ((t & 7) === 2) { + var c2 = r.uint32() + r.pos; + while (r.pos < c2) + m.sortedLabelIds.push(r.int32()); + } else + m.sortedLabelIds.push(r.int32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LabelReorderingAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.LabelReorderingAction) + return d; + var m = new $root.proto.SyncActionValue.LabelReorderingAction(); + if (d.sortedLabelIds) { + if (!Array.isArray(d.sortedLabelIds)) + throw TypeError(".proto.SyncActionValue.LabelReorderingAction.sortedLabelIds: array expected"); + m.sortedLabelIds = []; + for (var i = 0; i < d.sortedLabelIds.length; ++i) { + m.sortedLabelIds[i] = d.sortedLabelIds[i] | 0; + } + } + return m; + }; + + LabelReorderingAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.sortedLabelIds = []; + } + if (m.sortedLabelIds && m.sortedLabelIds.length) { + d.sortedLabelIds = []; + for (var j = 0; j < m.sortedLabelIds.length; ++j) { + d.sortedLabelIds[j] = m.sortedLabelIds[j]; + } + } + return d; + }; + + LabelReorderingAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LabelReorderingAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.LabelReorderingAction"; + }; + + return LabelReorderingAction; + })(); + + SyncActionValue.LidContactAction = (function() { + + function LidContactAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LidContactAction.prototype.fullName = null; + LidContactAction.prototype.firstName = null; + LidContactAction.prototype.username = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LidContactAction.prototype, "_fullName", { + get: $util.oneOfGetter($oneOfFields = ["fullName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LidContactAction.prototype, "_firstName", { + get: $util.oneOfGetter($oneOfFields = ["firstName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LidContactAction.prototype, "_username", { + get: $util.oneOfGetter($oneOfFields = ["username"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LidContactAction.create = function create(properties) { + return new LidContactAction(properties); + }; + + LidContactAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.fullName != null && Object.hasOwnProperty.call(m, "fullName")) + w.uint32(10).string(m.fullName); + if (m.firstName != null && Object.hasOwnProperty.call(m, "firstName")) + w.uint32(18).string(m.firstName); + if (m.username != null && Object.hasOwnProperty.call(m, "username")) + w.uint32(26).string(m.username); + return w; + }; + + LidContactAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.LidContactAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.fullName = r.string(); + break; + } + case 2: { + m.firstName = r.string(); + break; + } + case 3: { + m.username = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LidContactAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.LidContactAction) + return d; + var m = new $root.proto.SyncActionValue.LidContactAction(); + if (d.fullName != null) { + m.fullName = String(d.fullName); + } + if (d.firstName != null) { + m.firstName = String(d.firstName); + } + if (d.username != null) { + m.username = String(d.username); + } + return m; + }; + + LidContactAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.fullName != null && m.hasOwnProperty("fullName")) { + d.fullName = m.fullName; + if (o.oneofs) + d._fullName = "fullName"; + } + if (m.firstName != null && m.hasOwnProperty("firstName")) { + d.firstName = m.firstName; + if (o.oneofs) + d._firstName = "firstName"; + } + if (m.username != null && m.hasOwnProperty("username")) { + d.username = m.username; + if (o.oneofs) + d._username = "username"; + } + return d; + }; + + LidContactAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LidContactAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.LidContactAction"; + }; + + return LidContactAction; + })(); + + SyncActionValue.LocaleSetting = (function() { + + function LocaleSetting(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LocaleSetting.prototype.locale = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LocaleSetting.prototype, "_locale", { + get: $util.oneOfGetter($oneOfFields = ["locale"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LocaleSetting.create = function create(properties) { + return new LocaleSetting(properties); + }; + + LocaleSetting.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.locale != null && Object.hasOwnProperty.call(m, "locale")) + w.uint32(10).string(m.locale); + return w; + }; + + LocaleSetting.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.LocaleSetting(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.locale = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LocaleSetting.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.LocaleSetting) + return d; + var m = new $root.proto.SyncActionValue.LocaleSetting(); + if (d.locale != null) { + m.locale = String(d.locale); + } + return m; + }; + + LocaleSetting.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.locale != null && m.hasOwnProperty("locale")) { + d.locale = m.locale; + if (o.oneofs) + d._locale = "locale"; + } + return d; + }; + + LocaleSetting.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LocaleSetting.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.LocaleSetting"; + }; + + return LocaleSetting; + })(); + + SyncActionValue.LockChatAction = (function() { + + function LockChatAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + LockChatAction.prototype.locked = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(LockChatAction.prototype, "_locked", { + get: $util.oneOfGetter($oneOfFields = ["locked"]), + set: $util.oneOfSetter($oneOfFields) + }); + + LockChatAction.create = function create(properties) { + return new LockChatAction(properties); + }; + + LockChatAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.locked != null && Object.hasOwnProperty.call(m, "locked")) + w.uint32(8).bool(m.locked); + return w; + }; + + LockChatAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.LockChatAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.locked = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + LockChatAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.LockChatAction) + return d; + var m = new $root.proto.SyncActionValue.LockChatAction(); + if (d.locked != null) { + m.locked = Boolean(d.locked); + } + return m; + }; + + LockChatAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.locked != null && m.hasOwnProperty("locked")) { + d.locked = m.locked; + if (o.oneofs) + d._locked = "locked"; + } + return d; + }; + + LockChatAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + LockChatAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.LockChatAction"; + }; + + return LockChatAction; + })(); + + SyncActionValue.MaibaAIFeaturesControlAction = (function() { + + function MaibaAIFeaturesControlAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MaibaAIFeaturesControlAction.prototype.aiFeatureStatus = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MaibaAIFeaturesControlAction.prototype, "_aiFeatureStatus", { + get: $util.oneOfGetter($oneOfFields = ["aiFeatureStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MaibaAIFeaturesControlAction.create = function create(properties) { + return new MaibaAIFeaturesControlAction(properties); + }; + + MaibaAIFeaturesControlAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.aiFeatureStatus != null && Object.hasOwnProperty.call(m, "aiFeatureStatus")) + w.uint32(8).int32(m.aiFeatureStatus); + return w; + }; + + MaibaAIFeaturesControlAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.MaibaAIFeaturesControlAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.aiFeatureStatus = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MaibaAIFeaturesControlAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.MaibaAIFeaturesControlAction) + return d; + var m = new $root.proto.SyncActionValue.MaibaAIFeaturesControlAction(); + switch (d.aiFeatureStatus) { + default: + if (typeof d.aiFeatureStatus === "number") { + m.aiFeatureStatus = d.aiFeatureStatus; + break; + } + break; + case "ENABLED": + case 0: + m.aiFeatureStatus = 0; + break; + case "ENABLED_HAS_LEARNING": + case 1: + m.aiFeatureStatus = 1; + break; + case "DISABLED": + case 2: + m.aiFeatureStatus = 2; + break; + } + return m; + }; + + MaibaAIFeaturesControlAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.aiFeatureStatus != null && m.hasOwnProperty("aiFeatureStatus")) { + d.aiFeatureStatus = o.enums === String ? $root.proto.SyncActionValue.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus[m.aiFeatureStatus] === undefined ? m.aiFeatureStatus : $root.proto.SyncActionValue.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus[m.aiFeatureStatus] : m.aiFeatureStatus; + if (o.oneofs) + d._aiFeatureStatus = "aiFeatureStatus"; + } + return d; + }; + + MaibaAIFeaturesControlAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MaibaAIFeaturesControlAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.MaibaAIFeaturesControlAction"; + }; + + MaibaAIFeaturesControlAction.MaibaAIFeatureStatus = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ENABLED"] = 0; + values[valuesById[1] = "ENABLED_HAS_LEARNING"] = 1; + values[valuesById[2] = "DISABLED"] = 2; + return values; + })(); + + return MaibaAIFeaturesControlAction; + })(); + + SyncActionValue.MarkChatAsReadAction = (function() { + + function MarkChatAsReadAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MarkChatAsReadAction.prototype.read = null; + MarkChatAsReadAction.prototype.messageRange = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarkChatAsReadAction.prototype, "_read", { + get: $util.oneOfGetter($oneOfFields = ["read"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarkChatAsReadAction.prototype, "_messageRange", { + get: $util.oneOfGetter($oneOfFields = ["messageRange"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MarkChatAsReadAction.create = function create(properties) { + return new MarkChatAsReadAction(properties); + }; + + MarkChatAsReadAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.read != null && Object.hasOwnProperty.call(m, "read")) + w.uint32(8).bool(m.read); + if (m.messageRange != null && Object.hasOwnProperty.call(m, "messageRange")) + $root.proto.SyncActionValue.SyncActionMessageRange.encode(m.messageRange, w.uint32(18).fork()).ldelim(); + return w; + }; + + MarkChatAsReadAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.MarkChatAsReadAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.read = r.bool(); + break; + } + case 2: { + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MarkChatAsReadAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.MarkChatAsReadAction) + return d; + var m = new $root.proto.SyncActionValue.MarkChatAsReadAction(); + if (d.read != null) { + m.read = Boolean(d.read); + } + if (d.messageRange != null) { + if (typeof d.messageRange !== "object") + throw TypeError(".proto.SyncActionValue.MarkChatAsReadAction.messageRange: object expected"); + m.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.fromObject(d.messageRange); + } + return m; + }; + + MarkChatAsReadAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.read != null && m.hasOwnProperty("read")) { + d.read = m.read; + if (o.oneofs) + d._read = "read"; + } + if (m.messageRange != null && m.hasOwnProperty("messageRange")) { + d.messageRange = $root.proto.SyncActionValue.SyncActionMessageRange.toObject(m.messageRange, o); + if (o.oneofs) + d._messageRange = "messageRange"; + } + return d; + }; + + MarkChatAsReadAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MarkChatAsReadAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.MarkChatAsReadAction"; + }; + + return MarkChatAsReadAction; + })(); + + SyncActionValue.MarketingMessageAction = (function() { + + function MarketingMessageAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MarketingMessageAction.prototype.name = null; + MarketingMessageAction.prototype.message = null; + MarketingMessageAction.prototype.type = null; + MarketingMessageAction.prototype.createdAt = null; + MarketingMessageAction.prototype.lastSentAt = null; + MarketingMessageAction.prototype.isDeleted = null; + MarketingMessageAction.prototype.mediaId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageAction.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageAction.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageAction.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageAction.prototype, "_createdAt", { + get: $util.oneOfGetter($oneOfFields = ["createdAt"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageAction.prototype, "_lastSentAt", { + get: $util.oneOfGetter($oneOfFields = ["lastSentAt"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageAction.prototype, "_isDeleted", { + get: $util.oneOfGetter($oneOfFields = ["isDeleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageAction.prototype, "_mediaId", { + get: $util.oneOfGetter($oneOfFields = ["mediaId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MarketingMessageAction.create = function create(properties) { + return new MarketingMessageAction(properties); + }; + + MarketingMessageAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + w.uint32(18).string(m.message); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(24).int32(m.type); + if (m.createdAt != null && Object.hasOwnProperty.call(m, "createdAt")) + w.uint32(32).int64(m.createdAt); + if (m.lastSentAt != null && Object.hasOwnProperty.call(m, "lastSentAt")) + w.uint32(40).int64(m.lastSentAt); + if (m.isDeleted != null && Object.hasOwnProperty.call(m, "isDeleted")) + w.uint32(48).bool(m.isDeleted); + if (m.mediaId != null && Object.hasOwnProperty.call(m, "mediaId")) + w.uint32(58).string(m.mediaId); + return w; + }; + + MarketingMessageAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.MarketingMessageAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + case 2: { + m.message = r.string(); + break; + } + case 3: { + m.type = r.int32(); + break; + } + case 4: { + m.createdAt = r.int64(); + break; + } + case 5: { + m.lastSentAt = r.int64(); + break; + } + case 6: { + m.isDeleted = r.bool(); + break; + } + case 7: { + m.mediaId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MarketingMessageAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.MarketingMessageAction) + return d; + var m = new $root.proto.SyncActionValue.MarketingMessageAction(); + if (d.name != null) { + m.name = String(d.name); + } + if (d.message != null) { + m.message = String(d.message); + } + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "PERSONALIZED": + case 0: + m.type = 0; + break; + } + if (d.createdAt != null) { + if ($util.Long) + (m.createdAt = $util.Long.fromValue(d.createdAt)).unsigned = false; + else if (typeof d.createdAt === "string") + m.createdAt = parseInt(d.createdAt, 10); + else if (typeof d.createdAt === "number") + m.createdAt = d.createdAt; + else if (typeof d.createdAt === "object") + m.createdAt = new $util.LongBits(d.createdAt.low >>> 0, d.createdAt.high >>> 0).toNumber(); + } + if (d.lastSentAt != null) { + if ($util.Long) + (m.lastSentAt = $util.Long.fromValue(d.lastSentAt)).unsigned = false; + else if (typeof d.lastSentAt === "string") + m.lastSentAt = parseInt(d.lastSentAt, 10); + else if (typeof d.lastSentAt === "number") + m.lastSentAt = d.lastSentAt; + else if (typeof d.lastSentAt === "object") + m.lastSentAt = new $util.LongBits(d.lastSentAt.low >>> 0, d.lastSentAt.high >>> 0).toNumber(); + } + if (d.isDeleted != null) { + m.isDeleted = Boolean(d.isDeleted); + } + if (d.mediaId != null) { + m.mediaId = String(d.mediaId); + } + return m; + }; + + MarketingMessageAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = m.message; + if (o.oneofs) + d._message = "message"; + } + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.SyncActionValue.MarketingMessageAction.MarketingMessagePrototypeType[m.type] === undefined ? m.type : $root.proto.SyncActionValue.MarketingMessageAction.MarketingMessagePrototypeType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.createdAt != null && m.hasOwnProperty("createdAt")) { + if (typeof m.createdAt === "number") + d.createdAt = o.longs === String ? String(m.createdAt) : m.createdAt; + else + d.createdAt = o.longs === String ? longToString(m.createdAt) : o.longs === Number ? longToNumber(m.createdAt) : m.createdAt; + if (o.oneofs) + d._createdAt = "createdAt"; + } + if (m.lastSentAt != null && m.hasOwnProperty("lastSentAt")) { + if (typeof m.lastSentAt === "number") + d.lastSentAt = o.longs === String ? String(m.lastSentAt) : m.lastSentAt; + else + d.lastSentAt = o.longs === String ? longToString(m.lastSentAt) : o.longs === Number ? longToNumber(m.lastSentAt) : m.lastSentAt; + if (o.oneofs) + d._lastSentAt = "lastSentAt"; + } + if (m.isDeleted != null && m.hasOwnProperty("isDeleted")) { + d.isDeleted = m.isDeleted; + if (o.oneofs) + d._isDeleted = "isDeleted"; + } + if (m.mediaId != null && m.hasOwnProperty("mediaId")) { + d.mediaId = m.mediaId; + if (o.oneofs) + d._mediaId = "mediaId"; + } + return d; + }; + + MarketingMessageAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MarketingMessageAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.MarketingMessageAction"; + }; + + MarketingMessageAction.MarketingMessagePrototypeType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "PERSONALIZED"] = 0; + return values; + })(); + + return MarketingMessageAction; + })(); + + SyncActionValue.MarketingMessageBroadcastAction = (function() { + + function MarketingMessageBroadcastAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MarketingMessageBroadcastAction.prototype.repliedCount = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MarketingMessageBroadcastAction.prototype, "_repliedCount", { + get: $util.oneOfGetter($oneOfFields = ["repliedCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MarketingMessageBroadcastAction.create = function create(properties) { + return new MarketingMessageBroadcastAction(properties); + }; + + MarketingMessageBroadcastAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.repliedCount != null && Object.hasOwnProperty.call(m, "repliedCount")) + w.uint32(8).int32(m.repliedCount); + return w; + }; + + MarketingMessageBroadcastAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.MarketingMessageBroadcastAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.repliedCount = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MarketingMessageBroadcastAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.MarketingMessageBroadcastAction) + return d; + var m = new $root.proto.SyncActionValue.MarketingMessageBroadcastAction(); + if (d.repliedCount != null) { + m.repliedCount = d.repliedCount | 0; + } + return m; + }; + + MarketingMessageBroadcastAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.repliedCount != null && m.hasOwnProperty("repliedCount")) { + d.repliedCount = m.repliedCount; + if (o.oneofs) + d._repliedCount = "repliedCount"; + } + return d; + }; + + MarketingMessageBroadcastAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MarketingMessageBroadcastAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.MarketingMessageBroadcastAction"; + }; + + return MarketingMessageBroadcastAction; + })(); + + SyncActionValue.MerchantPaymentPartnerAction = (function() { + + function MerchantPaymentPartnerAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MerchantPaymentPartnerAction.prototype.status = 0; + MerchantPaymentPartnerAction.prototype.country = ""; + MerchantPaymentPartnerAction.prototype.gatewayName = null; + MerchantPaymentPartnerAction.prototype.credentialId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MerchantPaymentPartnerAction.prototype, "_gatewayName", { + get: $util.oneOfGetter($oneOfFields = ["gatewayName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MerchantPaymentPartnerAction.prototype, "_credentialId", { + get: $util.oneOfGetter($oneOfFields = ["credentialId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MerchantPaymentPartnerAction.create = function create(properties) { + return new MerchantPaymentPartnerAction(properties); + }; + + MerchantPaymentPartnerAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.status != null && Object.hasOwnProperty.call(m, "status")) + w.uint32(8).int32(m.status); + if (m.country != null && Object.hasOwnProperty.call(m, "country")) + w.uint32(18).string(m.country); + if (m.gatewayName != null && Object.hasOwnProperty.call(m, "gatewayName")) + w.uint32(26).string(m.gatewayName); + if (m.credentialId != null && Object.hasOwnProperty.call(m, "credentialId")) + w.uint32(34).string(m.credentialId); + return w; + }; + + MerchantPaymentPartnerAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.MerchantPaymentPartnerAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.status = r.int32(); + break; + } + case 2: { + m.country = r.string(); + break; + } + case 3: { + m.gatewayName = r.string(); + break; + } + case 4: { + m.credentialId = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MerchantPaymentPartnerAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.MerchantPaymentPartnerAction) + return d; + var m = new $root.proto.SyncActionValue.MerchantPaymentPartnerAction(); + switch (d.status) { + default: + if (typeof d.status === "number") { + m.status = d.status; + break; + } + break; + case "ACTIVE": + case 0: + m.status = 0; + break; + case "INACTIVE": + case 1: + m.status = 1; + break; + } + if (d.country != null) { + m.country = String(d.country); + } + if (d.gatewayName != null) { + m.gatewayName = String(d.gatewayName); + } + if (d.credentialId != null) { + m.credentialId = String(d.credentialId); + } + return m; + }; + + MerchantPaymentPartnerAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.status = o.enums === String ? "ACTIVE" : 0; + d.country = ""; + } + if (m.status != null && m.hasOwnProperty("status")) { + d.status = o.enums === String ? $root.proto.SyncActionValue.MerchantPaymentPartnerAction.Status[m.status] === undefined ? m.status : $root.proto.SyncActionValue.MerchantPaymentPartnerAction.Status[m.status] : m.status; + } + if (m.country != null && m.hasOwnProperty("country")) { + d.country = m.country; + } + if (m.gatewayName != null && m.hasOwnProperty("gatewayName")) { + d.gatewayName = m.gatewayName; + if (o.oneofs) + d._gatewayName = "gatewayName"; + } + if (m.credentialId != null && m.hasOwnProperty("credentialId")) { + d.credentialId = m.credentialId; + if (o.oneofs) + d._credentialId = "credentialId"; + } + return d; + }; + + MerchantPaymentPartnerAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MerchantPaymentPartnerAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.MerchantPaymentPartnerAction"; + }; + + MerchantPaymentPartnerAction.Status = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ACTIVE"] = 0; + values[valuesById[1] = "INACTIVE"] = 1; + return values; + })(); + + return MerchantPaymentPartnerAction; + })(); + + SyncActionValue.MusicUserIdAction = (function() { + + function MusicUserIdAction(p) { + this.musicUserIdMap = {}; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MusicUserIdAction.prototype.musicUserId = null; + MusicUserIdAction.prototype.musicUserIdMap = $util.emptyObject; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MusicUserIdAction.prototype, "_musicUserId", { + get: $util.oneOfGetter($oneOfFields = ["musicUserId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MusicUserIdAction.create = function create(properties) { + return new MusicUserIdAction(properties); + }; + + MusicUserIdAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.musicUserId != null && Object.hasOwnProperty.call(m, "musicUserId")) + w.uint32(10).string(m.musicUserId); + if (m.musicUserIdMap != null && Object.hasOwnProperty.call(m, "musicUserIdMap")) { + for (var ks = Object.keys(m.musicUserIdMap), i = 0; i < ks.length; ++i) { + w.uint32(18).fork().uint32(10).string(ks[i]).uint32(18).string(m.musicUserIdMap[ks[i]]).ldelim(); + } + } + return w; + }; + + MusicUserIdAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.MusicUserIdAction(), k, value; + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.musicUserId = r.string(); + break; + } + case 2: { + if (m.musicUserIdMap === $util.emptyObject) + m.musicUserIdMap = {}; + var c2 = r.uint32() + r.pos; + k = ""; + value = ""; + while (r.pos < c2) { + var tag2 = r.uint32(); + switch (tag2 >>> 3) { + case 1: + k = r.string(); + break; + case 2: + value = r.string(); + break; + default: + r.skipType(tag2 & 7); + break; + } + } + m.musicUserIdMap[k] = value; + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MusicUserIdAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.MusicUserIdAction) + return d; + var m = new $root.proto.SyncActionValue.MusicUserIdAction(); + if (d.musicUserId != null) { + m.musicUserId = String(d.musicUserId); + } + if (d.musicUserIdMap) { + if (typeof d.musicUserIdMap !== "object") + throw TypeError(".proto.SyncActionValue.MusicUserIdAction.musicUserIdMap: object expected"); + m.musicUserIdMap = {}; + for (var ks = Object.keys(d.musicUserIdMap), i = 0; i < ks.length; ++i) { + m.musicUserIdMap[ks[i]] = String(d.musicUserIdMap[ks[i]]); + } + } + return m; + }; + + MusicUserIdAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.objects || o.defaults) { + d.musicUserIdMap = {}; + } + if (m.musicUserId != null && m.hasOwnProperty("musicUserId")) { + d.musicUserId = m.musicUserId; + if (o.oneofs) + d._musicUserId = "musicUserId"; + } + var ks2; + if (m.musicUserIdMap && (ks2 = Object.keys(m.musicUserIdMap)).length) { + d.musicUserIdMap = {}; + for (var j = 0; j < ks2.length; ++j) { + d.musicUserIdMap[ks2[j]] = m.musicUserIdMap[ks2[j]]; + } + } + return d; + }; + + MusicUserIdAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MusicUserIdAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.MusicUserIdAction"; + }; + + return MusicUserIdAction; + })(); + + SyncActionValue.MuteAction = (function() { + + function MuteAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + MuteAction.prototype.muted = null; + MuteAction.prototype.muteEndTimestamp = null; + MuteAction.prototype.autoMuted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MuteAction.prototype, "_muted", { + get: $util.oneOfGetter($oneOfFields = ["muted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MuteAction.prototype, "_muteEndTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["muteEndTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(MuteAction.prototype, "_autoMuted", { + get: $util.oneOfGetter($oneOfFields = ["autoMuted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + MuteAction.create = function create(properties) { + return new MuteAction(properties); + }; + + MuteAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.muted != null && Object.hasOwnProperty.call(m, "muted")) + w.uint32(8).bool(m.muted); + if (m.muteEndTimestamp != null && Object.hasOwnProperty.call(m, "muteEndTimestamp")) + w.uint32(16).int64(m.muteEndTimestamp); + if (m.autoMuted != null && Object.hasOwnProperty.call(m, "autoMuted")) + w.uint32(24).bool(m.autoMuted); + return w; + }; + + MuteAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.MuteAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.muted = r.bool(); + break; + } + case 2: { + m.muteEndTimestamp = r.int64(); + break; + } + case 3: { + m.autoMuted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + MuteAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.MuteAction) + return d; + var m = new $root.proto.SyncActionValue.MuteAction(); + if (d.muted != null) { + m.muted = Boolean(d.muted); + } + if (d.muteEndTimestamp != null) { + if ($util.Long) + (m.muteEndTimestamp = $util.Long.fromValue(d.muteEndTimestamp)).unsigned = false; + else if (typeof d.muteEndTimestamp === "string") + m.muteEndTimestamp = parseInt(d.muteEndTimestamp, 10); + else if (typeof d.muteEndTimestamp === "number") + m.muteEndTimestamp = d.muteEndTimestamp; + else if (typeof d.muteEndTimestamp === "object") + m.muteEndTimestamp = new $util.LongBits(d.muteEndTimestamp.low >>> 0, d.muteEndTimestamp.high >>> 0).toNumber(); + } + if (d.autoMuted != null) { + m.autoMuted = Boolean(d.autoMuted); + } + return m; + }; + + MuteAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.muted != null && m.hasOwnProperty("muted")) { + d.muted = m.muted; + if (o.oneofs) + d._muted = "muted"; + } + if (m.muteEndTimestamp != null && m.hasOwnProperty("muteEndTimestamp")) { + if (typeof m.muteEndTimestamp === "number") + d.muteEndTimestamp = o.longs === String ? String(m.muteEndTimestamp) : m.muteEndTimestamp; + else + d.muteEndTimestamp = o.longs === String ? longToString(m.muteEndTimestamp) : o.longs === Number ? longToNumber(m.muteEndTimestamp) : m.muteEndTimestamp; + if (o.oneofs) + d._muteEndTimestamp = "muteEndTimestamp"; + } + if (m.autoMuted != null && m.hasOwnProperty("autoMuted")) { + d.autoMuted = m.autoMuted; + if (o.oneofs) + d._autoMuted = "autoMuted"; + } + return d; + }; + + MuteAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + MuteAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.MuteAction"; + }; + + return MuteAction; + })(); + + SyncActionValue.NewsletterSavedInterestsAction = (function() { + + function NewsletterSavedInterestsAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NewsletterSavedInterestsAction.prototype.newsletterSavedInterests = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NewsletterSavedInterestsAction.prototype, "_newsletterSavedInterests", { + get: $util.oneOfGetter($oneOfFields = ["newsletterSavedInterests"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NewsletterSavedInterestsAction.create = function create(properties) { + return new NewsletterSavedInterestsAction(properties); + }; + + NewsletterSavedInterestsAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.newsletterSavedInterests != null && Object.hasOwnProperty.call(m, "newsletterSavedInterests")) + w.uint32(10).string(m.newsletterSavedInterests); + return w; + }; + + NewsletterSavedInterestsAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.NewsletterSavedInterestsAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.newsletterSavedInterests = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NewsletterSavedInterestsAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.NewsletterSavedInterestsAction) + return d; + var m = new $root.proto.SyncActionValue.NewsletterSavedInterestsAction(); + if (d.newsletterSavedInterests != null) { + m.newsletterSavedInterests = String(d.newsletterSavedInterests); + } + return m; + }; + + NewsletterSavedInterestsAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.newsletterSavedInterests != null && m.hasOwnProperty("newsletterSavedInterests")) { + d.newsletterSavedInterests = m.newsletterSavedInterests; + if (o.oneofs) + d._newsletterSavedInterests = "newsletterSavedInterests"; + } + return d; + }; + + NewsletterSavedInterestsAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NewsletterSavedInterestsAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.NewsletterSavedInterestsAction"; + }; + + return NewsletterSavedInterestsAction; + })(); + + SyncActionValue.NoteEditAction = (function() { + + function NoteEditAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NoteEditAction.prototype.type = null; + NoteEditAction.prototype.chatJid = null; + NoteEditAction.prototype.createdAt = null; + NoteEditAction.prototype.deleted = null; + NoteEditAction.prototype.unstructuredContent = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoteEditAction.prototype, "_type", { + get: $util.oneOfGetter($oneOfFields = ["type"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoteEditAction.prototype, "_chatJid", { + get: $util.oneOfGetter($oneOfFields = ["chatJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoteEditAction.prototype, "_createdAt", { + get: $util.oneOfGetter($oneOfFields = ["createdAt"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoteEditAction.prototype, "_deleted", { + get: $util.oneOfGetter($oneOfFields = ["deleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NoteEditAction.prototype, "_unstructuredContent", { + get: $util.oneOfGetter($oneOfFields = ["unstructuredContent"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NoteEditAction.create = function create(properties) { + return new NoteEditAction(properties); + }; + + NoteEditAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.type != null && Object.hasOwnProperty.call(m, "type")) + w.uint32(8).int32(m.type); + if (m.chatJid != null && Object.hasOwnProperty.call(m, "chatJid")) + w.uint32(18).string(m.chatJid); + if (m.createdAt != null && Object.hasOwnProperty.call(m, "createdAt")) + w.uint32(24).int64(m.createdAt); + if (m.deleted != null && Object.hasOwnProperty.call(m, "deleted")) + w.uint32(32).bool(m.deleted); + if (m.unstructuredContent != null && Object.hasOwnProperty.call(m, "unstructuredContent")) + w.uint32(42).string(m.unstructuredContent); + return w; + }; + + NoteEditAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.NoteEditAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.type = r.int32(); + break; + } + case 2: { + m.chatJid = r.string(); + break; + } + case 3: { + m.createdAt = r.int64(); + break; + } + case 4: { + m.deleted = r.bool(); + break; + } + case 5: { + m.unstructuredContent = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NoteEditAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.NoteEditAction) + return d; + var m = new $root.proto.SyncActionValue.NoteEditAction(); + switch (d.type) { + default: + if (typeof d.type === "number") { + m.type = d.type; + break; + } + break; + case "UNSTRUCTURED": + case 1: + m.type = 1; + break; + case "STRUCTURED": + case 2: + m.type = 2; + break; + } + if (d.chatJid != null) { + m.chatJid = String(d.chatJid); + } + if (d.createdAt != null) { + if ($util.Long) + (m.createdAt = $util.Long.fromValue(d.createdAt)).unsigned = false; + else if (typeof d.createdAt === "string") + m.createdAt = parseInt(d.createdAt, 10); + else if (typeof d.createdAt === "number") + m.createdAt = d.createdAt; + else if (typeof d.createdAt === "object") + m.createdAt = new $util.LongBits(d.createdAt.low >>> 0, d.createdAt.high >>> 0).toNumber(); + } + if (d.deleted != null) { + m.deleted = Boolean(d.deleted); + } + if (d.unstructuredContent != null) { + m.unstructuredContent = String(d.unstructuredContent); + } + return m; + }; + + NoteEditAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.type != null && m.hasOwnProperty("type")) { + d.type = o.enums === String ? $root.proto.SyncActionValue.NoteEditAction.NoteType[m.type] === undefined ? m.type : $root.proto.SyncActionValue.NoteEditAction.NoteType[m.type] : m.type; + if (o.oneofs) + d._type = "type"; + } + if (m.chatJid != null && m.hasOwnProperty("chatJid")) { + d.chatJid = m.chatJid; + if (o.oneofs) + d._chatJid = "chatJid"; + } + if (m.createdAt != null && m.hasOwnProperty("createdAt")) { + if (typeof m.createdAt === "number") + d.createdAt = o.longs === String ? String(m.createdAt) : m.createdAt; + else + d.createdAt = o.longs === String ? longToString(m.createdAt) : o.longs === Number ? longToNumber(m.createdAt) : m.createdAt; + if (o.oneofs) + d._createdAt = "createdAt"; + } + if (m.deleted != null && m.hasOwnProperty("deleted")) { + d.deleted = m.deleted; + if (o.oneofs) + d._deleted = "deleted"; + } + if (m.unstructuredContent != null && m.hasOwnProperty("unstructuredContent")) { + d.unstructuredContent = m.unstructuredContent; + if (o.oneofs) + d._unstructuredContent = "unstructuredContent"; + } + return d; + }; + + NoteEditAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NoteEditAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.NoteEditAction"; + }; + + NoteEditAction.NoteType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "UNSTRUCTURED"] = 1; + values[valuesById[2] = "STRUCTURED"] = 2; + return values; + })(); + + return NoteEditAction; + })(); + + SyncActionValue.NotificationActivitySettingAction = (function() { + + function NotificationActivitySettingAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NotificationActivitySettingAction.prototype.notificationActivitySetting = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NotificationActivitySettingAction.prototype, "_notificationActivitySetting", { + get: $util.oneOfGetter($oneOfFields = ["notificationActivitySetting"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NotificationActivitySettingAction.create = function create(properties) { + return new NotificationActivitySettingAction(properties); + }; + + NotificationActivitySettingAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.notificationActivitySetting != null && Object.hasOwnProperty.call(m, "notificationActivitySetting")) + w.uint32(8).int32(m.notificationActivitySetting); + return w; + }; + + NotificationActivitySettingAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.NotificationActivitySettingAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.notificationActivitySetting = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NotificationActivitySettingAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.NotificationActivitySettingAction) + return d; + var m = new $root.proto.SyncActionValue.NotificationActivitySettingAction(); + switch (d.notificationActivitySetting) { + default: + if (typeof d.notificationActivitySetting === "number") { + m.notificationActivitySetting = d.notificationActivitySetting; + break; + } + break; + case "DEFAULT_ALL_MESSAGES": + case 0: + m.notificationActivitySetting = 0; + break; + case "ALL_MESSAGES": + case 1: + m.notificationActivitySetting = 1; + break; + case "HIGHLIGHTS": + case 2: + m.notificationActivitySetting = 2; + break; + case "DEFAULT_HIGHLIGHTS": + case 3: + m.notificationActivitySetting = 3; + break; + } + return m; + }; + + NotificationActivitySettingAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.notificationActivitySetting != null && m.hasOwnProperty("notificationActivitySetting")) { + d.notificationActivitySetting = o.enums === String ? $root.proto.SyncActionValue.NotificationActivitySettingAction.NotificationActivitySetting[m.notificationActivitySetting] === undefined ? m.notificationActivitySetting : $root.proto.SyncActionValue.NotificationActivitySettingAction.NotificationActivitySetting[m.notificationActivitySetting] : m.notificationActivitySetting; + if (o.oneofs) + d._notificationActivitySetting = "notificationActivitySetting"; + } + return d; + }; + + NotificationActivitySettingAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NotificationActivitySettingAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.NotificationActivitySettingAction"; + }; + + NotificationActivitySettingAction.NotificationActivitySetting = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "DEFAULT_ALL_MESSAGES"] = 0; + values[valuesById[1] = "ALL_MESSAGES"] = 1; + values[valuesById[2] = "HIGHLIGHTS"] = 2; + values[valuesById[3] = "DEFAULT_HIGHLIGHTS"] = 3; + return values; + })(); + + return NotificationActivitySettingAction; + })(); + + SyncActionValue.NuxAction = (function() { + + function NuxAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + NuxAction.prototype.acknowledged = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(NuxAction.prototype, "_acknowledged", { + get: $util.oneOfGetter($oneOfFields = ["acknowledged"]), + set: $util.oneOfSetter($oneOfFields) + }); + + NuxAction.create = function create(properties) { + return new NuxAction(properties); + }; + + NuxAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.acknowledged != null && Object.hasOwnProperty.call(m, "acknowledged")) + w.uint32(8).bool(m.acknowledged); + return w; + }; + + NuxAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.NuxAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.acknowledged = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + NuxAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.NuxAction) + return d; + var m = new $root.proto.SyncActionValue.NuxAction(); + if (d.acknowledged != null) { + m.acknowledged = Boolean(d.acknowledged); + } + return m; + }; + + NuxAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.acknowledged != null && m.hasOwnProperty("acknowledged")) { + d.acknowledged = m.acknowledged; + if (o.oneofs) + d._acknowledged = "acknowledged"; + } + return d; + }; + + NuxAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + NuxAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.NuxAction"; + }; + + return NuxAction; + })(); + + SyncActionValue.PaymentInfoAction = (function() { + + function PaymentInfoAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentInfoAction.prototype.cpi = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PaymentInfoAction.prototype, "_cpi", { + get: $util.oneOfGetter($oneOfFields = ["cpi"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PaymentInfoAction.create = function create(properties) { + return new PaymentInfoAction(properties); + }; + + PaymentInfoAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.cpi != null && Object.hasOwnProperty.call(m, "cpi")) + w.uint32(10).string(m.cpi); + return w; + }; + + PaymentInfoAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PaymentInfoAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.cpi = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentInfoAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PaymentInfoAction) + return d; + var m = new $root.proto.SyncActionValue.PaymentInfoAction(); + if (d.cpi != null) { + m.cpi = String(d.cpi); + } + return m; + }; + + PaymentInfoAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.cpi != null && m.hasOwnProperty("cpi")) { + d.cpi = m.cpi; + if (o.oneofs) + d._cpi = "cpi"; + } + return d; + }; + + PaymentInfoAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentInfoAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PaymentInfoAction"; + }; + + return PaymentInfoAction; + })(); + + SyncActionValue.PaymentTosAction = (function() { + + function PaymentTosAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PaymentTosAction.prototype.paymentNotice = 0; + PaymentTosAction.prototype.accepted = false; + + PaymentTosAction.create = function create(properties) { + return new PaymentTosAction(properties); + }; + + PaymentTosAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.paymentNotice != null && Object.hasOwnProperty.call(m, "paymentNotice")) + w.uint32(8).int32(m.paymentNotice); + if (m.accepted != null && Object.hasOwnProperty.call(m, "accepted")) + w.uint32(16).bool(m.accepted); + return w; + }; + + PaymentTosAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PaymentTosAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.paymentNotice = r.int32(); + break; + } + case 2: { + m.accepted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PaymentTosAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PaymentTosAction) + return d; + var m = new $root.proto.SyncActionValue.PaymentTosAction(); + switch (d.paymentNotice) { + default: + if (typeof d.paymentNotice === "number") { + m.paymentNotice = d.paymentNotice; + break; + } + break; + case "BR_PAY_PRIVACY_POLICY": + case 0: + m.paymentNotice = 0; + break; + } + if (d.accepted != null) { + m.accepted = Boolean(d.accepted); + } + return m; + }; + + PaymentTosAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.defaults) { + d.paymentNotice = o.enums === String ? "BR_PAY_PRIVACY_POLICY" : 0; + d.accepted = false; + } + if (m.paymentNotice != null && m.hasOwnProperty("paymentNotice")) { + d.paymentNotice = o.enums === String ? $root.proto.SyncActionValue.PaymentTosAction.PaymentNotice[m.paymentNotice] === undefined ? m.paymentNotice : $root.proto.SyncActionValue.PaymentTosAction.PaymentNotice[m.paymentNotice] : m.paymentNotice; + } + if (m.accepted != null && m.hasOwnProperty("accepted")) { + d.accepted = m.accepted; + } + return d; + }; + + PaymentTosAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PaymentTosAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PaymentTosAction"; + }; + + PaymentTosAction.PaymentNotice = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "BR_PAY_PRIVACY_POLICY"] = 0; + return values; + })(); + + return PaymentTosAction; + })(); + + SyncActionValue.PinAction = (function() { + + function PinAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PinAction.prototype.pinned = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PinAction.prototype, "_pinned", { + get: $util.oneOfGetter($oneOfFields = ["pinned"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PinAction.create = function create(properties) { + return new PinAction(properties); + }; + + PinAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pinned != null && Object.hasOwnProperty.call(m, "pinned")) + w.uint32(8).bool(m.pinned); + return w; + }; + + PinAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PinAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.pinned = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PinAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PinAction) + return d; + var m = new $root.proto.SyncActionValue.PinAction(); + if (d.pinned != null) { + m.pinned = Boolean(d.pinned); + } + return m; + }; + + PinAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.pinned != null && m.hasOwnProperty("pinned")) { + d.pinned = m.pinned; + if (o.oneofs) + d._pinned = "pinned"; + } + return d; + }; + + PinAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PinAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PinAction"; + }; + + return PinAction; + })(); + + SyncActionValue.PnForLidChatAction = (function() { + + function PnForLidChatAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PnForLidChatAction.prototype.pnJid = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PnForLidChatAction.prototype, "_pnJid", { + get: $util.oneOfGetter($oneOfFields = ["pnJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PnForLidChatAction.create = function create(properties) { + return new PnForLidChatAction(properties); + }; + + PnForLidChatAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.pnJid != null && Object.hasOwnProperty.call(m, "pnJid")) + w.uint32(10).string(m.pnJid); + return w; + }; + + PnForLidChatAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PnForLidChatAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.pnJid = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PnForLidChatAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PnForLidChatAction) + return d; + var m = new $root.proto.SyncActionValue.PnForLidChatAction(); + if (d.pnJid != null) { + m.pnJid = String(d.pnJid); + } + return m; + }; + + PnForLidChatAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.pnJid != null && m.hasOwnProperty("pnJid")) { + d.pnJid = m.pnJid; + if (o.oneofs) + d._pnJid = "pnJid"; + } + return d; + }; + + PnForLidChatAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PnForLidChatAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PnForLidChatAction"; + }; + + return PnForLidChatAction; + })(); + + SyncActionValue.PrimaryFeature = (function() { + + function PrimaryFeature(p) { + this.flags = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PrimaryFeature.prototype.flags = $util.emptyArray; + + PrimaryFeature.create = function create(properties) { + return new PrimaryFeature(properties); + }; + + PrimaryFeature.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.flags != null && m.flags.length) { + for (var i = 0; i < m.flags.length; ++i) + w.uint32(10).string(m.flags[i]); + } + return w; + }; + + PrimaryFeature.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PrimaryFeature(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.flags && m.flags.length)) + m.flags = []; + m.flags.push(r.string()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PrimaryFeature.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PrimaryFeature) + return d; + var m = new $root.proto.SyncActionValue.PrimaryFeature(); + if (d.flags) { + if (!Array.isArray(d.flags)) + throw TypeError(".proto.SyncActionValue.PrimaryFeature.flags: array expected"); + m.flags = []; + for (var i = 0; i < d.flags.length; ++i) { + m.flags[i] = String(d.flags[i]); + } + } + return m; + }; + + PrimaryFeature.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.flags = []; + } + if (m.flags && m.flags.length) { + d.flags = []; + for (var j = 0; j < m.flags.length; ++j) { + d.flags[j] = m.flags[j]; + } + } + return d; + }; + + PrimaryFeature.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PrimaryFeature.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PrimaryFeature"; + }; + + return PrimaryFeature; + })(); + + SyncActionValue.PrimaryVersionAction = (function() { + + function PrimaryVersionAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PrimaryVersionAction.prototype.version = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PrimaryVersionAction.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PrimaryVersionAction.create = function create(properties) { + return new PrimaryVersionAction(properties); + }; + + PrimaryVersionAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(10).string(m.version); + return w; + }; + + PrimaryVersionAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PrimaryVersionAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.version = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PrimaryVersionAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PrimaryVersionAction) + return d; + var m = new $root.proto.SyncActionValue.PrimaryVersionAction(); + if (d.version != null) { + m.version = String(d.version); + } + return m; + }; + + PrimaryVersionAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.version != null && m.hasOwnProperty("version")) { + d.version = m.version; + if (o.oneofs) + d._version = "version"; + } + return d; + }; + + PrimaryVersionAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PrimaryVersionAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PrimaryVersionAction"; + }; + + return PrimaryVersionAction; + })(); + + SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction = (function() { + + function PrivacySettingChannelsPersonalisedRecommendationAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PrivacySettingChannelsPersonalisedRecommendationAction.prototype.isUserOptedOut = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PrivacySettingChannelsPersonalisedRecommendationAction.prototype, "_isUserOptedOut", { + get: $util.oneOfGetter($oneOfFields = ["isUserOptedOut"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PrivacySettingChannelsPersonalisedRecommendationAction.create = function create(properties) { + return new PrivacySettingChannelsPersonalisedRecommendationAction(properties); + }; + + PrivacySettingChannelsPersonalisedRecommendationAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isUserOptedOut != null && Object.hasOwnProperty.call(m, "isUserOptedOut")) + w.uint32(8).bool(m.isUserOptedOut); + return w; + }; + + PrivacySettingChannelsPersonalisedRecommendationAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isUserOptedOut = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PrivacySettingChannelsPersonalisedRecommendationAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction) + return d; + var m = new $root.proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction(); + if (d.isUserOptedOut != null) { + m.isUserOptedOut = Boolean(d.isUserOptedOut); + } + return m; + }; + + PrivacySettingChannelsPersonalisedRecommendationAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isUserOptedOut != null && m.hasOwnProperty("isUserOptedOut")) { + d.isUserOptedOut = m.isUserOptedOut; + if (o.oneofs) + d._isUserOptedOut = "isUserOptedOut"; + } + return d; + }; + + PrivacySettingChannelsPersonalisedRecommendationAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PrivacySettingChannelsPersonalisedRecommendationAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PrivacySettingChannelsPersonalisedRecommendationAction"; + }; + + return PrivacySettingChannelsPersonalisedRecommendationAction; + })(); + + SyncActionValue.PrivacySettingDisableLinkPreviewsAction = (function() { + + function PrivacySettingDisableLinkPreviewsAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PrivacySettingDisableLinkPreviewsAction.prototype.isPreviewsDisabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PrivacySettingDisableLinkPreviewsAction.prototype, "_isPreviewsDisabled", { + get: $util.oneOfGetter($oneOfFields = ["isPreviewsDisabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PrivacySettingDisableLinkPreviewsAction.create = function create(properties) { + return new PrivacySettingDisableLinkPreviewsAction(properties); + }; + + PrivacySettingDisableLinkPreviewsAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isPreviewsDisabled != null && Object.hasOwnProperty.call(m, "isPreviewsDisabled")) + w.uint32(8).bool(m.isPreviewsDisabled); + return w; + }; + + PrivacySettingDisableLinkPreviewsAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isPreviewsDisabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PrivacySettingDisableLinkPreviewsAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction) + return d; + var m = new $root.proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction(); + if (d.isPreviewsDisabled != null) { + m.isPreviewsDisabled = Boolean(d.isPreviewsDisabled); + } + return m; + }; + + PrivacySettingDisableLinkPreviewsAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isPreviewsDisabled != null && m.hasOwnProperty("isPreviewsDisabled")) { + d.isPreviewsDisabled = m.isPreviewsDisabled; + if (o.oneofs) + d._isPreviewsDisabled = "isPreviewsDisabled"; + } + return d; + }; + + PrivacySettingDisableLinkPreviewsAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PrivacySettingDisableLinkPreviewsAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PrivacySettingDisableLinkPreviewsAction"; + }; + + return PrivacySettingDisableLinkPreviewsAction; + })(); + + SyncActionValue.PrivacySettingRelayAllCalls = (function() { + + function PrivacySettingRelayAllCalls(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PrivacySettingRelayAllCalls.prototype.isEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PrivacySettingRelayAllCalls.prototype, "_isEnabled", { + get: $util.oneOfGetter($oneOfFields = ["isEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PrivacySettingRelayAllCalls.create = function create(properties) { + return new PrivacySettingRelayAllCalls(properties); + }; + + PrivacySettingRelayAllCalls.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isEnabled != null && Object.hasOwnProperty.call(m, "isEnabled")) + w.uint32(8).bool(m.isEnabled); + return w; + }; + + PrivacySettingRelayAllCalls.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PrivacySettingRelayAllCalls(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PrivacySettingRelayAllCalls.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PrivacySettingRelayAllCalls) + return d; + var m = new $root.proto.SyncActionValue.PrivacySettingRelayAllCalls(); + if (d.isEnabled != null) { + m.isEnabled = Boolean(d.isEnabled); + } + return m; + }; + + PrivacySettingRelayAllCalls.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isEnabled != null && m.hasOwnProperty("isEnabled")) { + d.isEnabled = m.isEnabled; + if (o.oneofs) + d._isEnabled = "isEnabled"; + } + return d; + }; + + PrivacySettingRelayAllCalls.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PrivacySettingRelayAllCalls.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PrivacySettingRelayAllCalls"; + }; + + return PrivacySettingRelayAllCalls; + })(); + + SyncActionValue.PrivateProcessingSettingAction = (function() { + + function PrivateProcessingSettingAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PrivateProcessingSettingAction.prototype.privateProcessingStatus = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PrivateProcessingSettingAction.prototype, "_privateProcessingStatus", { + get: $util.oneOfGetter($oneOfFields = ["privateProcessingStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PrivateProcessingSettingAction.create = function create(properties) { + return new PrivateProcessingSettingAction(properties); + }; + + PrivateProcessingSettingAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.privateProcessingStatus != null && Object.hasOwnProperty.call(m, "privateProcessingStatus")) + w.uint32(8).int32(m.privateProcessingStatus); + return w; + }; + + PrivateProcessingSettingAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PrivateProcessingSettingAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.privateProcessingStatus = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PrivateProcessingSettingAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PrivateProcessingSettingAction) + return d; + var m = new $root.proto.SyncActionValue.PrivateProcessingSettingAction(); + switch (d.privateProcessingStatus) { + default: + if (typeof d.privateProcessingStatus === "number") { + m.privateProcessingStatus = d.privateProcessingStatus; + break; + } + break; + case "UNDEFINED": + case 0: + m.privateProcessingStatus = 0; + break; + case "ENABLED": + case 1: + m.privateProcessingStatus = 1; + break; + case "DISABLED": + case 2: + m.privateProcessingStatus = 2; + break; + } + return m; + }; + + PrivateProcessingSettingAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.privateProcessingStatus != null && m.hasOwnProperty("privateProcessingStatus")) { + d.privateProcessingStatus = o.enums === String ? $root.proto.SyncActionValue.PrivateProcessingSettingAction.PrivateProcessingStatus[m.privateProcessingStatus] === undefined ? m.privateProcessingStatus : $root.proto.SyncActionValue.PrivateProcessingSettingAction.PrivateProcessingStatus[m.privateProcessingStatus] : m.privateProcessingStatus; + if (o.oneofs) + d._privateProcessingStatus = "privateProcessingStatus"; + } + return d; + }; + + PrivateProcessingSettingAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PrivateProcessingSettingAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PrivateProcessingSettingAction"; + }; + + PrivateProcessingSettingAction.PrivateProcessingStatus = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNDEFINED"] = 0; + values[valuesById[1] = "ENABLED"] = 1; + values[valuesById[2] = "DISABLED"] = 2; + return values; + })(); + + return PrivateProcessingSettingAction; + })(); + + SyncActionValue.PushNameSetting = (function() { + + function PushNameSetting(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + PushNameSetting.prototype.name = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(PushNameSetting.prototype, "_name", { + get: $util.oneOfGetter($oneOfFields = ["name"]), + set: $util.oneOfSetter($oneOfFields) + }); + + PushNameSetting.create = function create(properties) { + return new PushNameSetting(properties); + }; + + PushNameSetting.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.name != null && Object.hasOwnProperty.call(m, "name")) + w.uint32(10).string(m.name); + return w; + }; + + PushNameSetting.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.PushNameSetting(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.name = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + PushNameSetting.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.PushNameSetting) + return d; + var m = new $root.proto.SyncActionValue.PushNameSetting(); + if (d.name != null) { + m.name = String(d.name); + } + return m; + }; + + PushNameSetting.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.name != null && m.hasOwnProperty("name")) { + d.name = m.name; + if (o.oneofs) + d._name = "name"; + } + return d; + }; + + PushNameSetting.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + PushNameSetting.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.PushNameSetting"; + }; + + return PushNameSetting; + })(); + + SyncActionValue.QuickReplyAction = (function() { + + function QuickReplyAction(p) { + this.keywords = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + QuickReplyAction.prototype.shortcut = null; + QuickReplyAction.prototype.message = null; + QuickReplyAction.prototype.keywords = $util.emptyArray; + QuickReplyAction.prototype.count = null; + QuickReplyAction.prototype.deleted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuickReplyAction.prototype, "_shortcut", { + get: $util.oneOfGetter($oneOfFields = ["shortcut"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuickReplyAction.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuickReplyAction.prototype, "_count", { + get: $util.oneOfGetter($oneOfFields = ["count"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuickReplyAction.prototype, "_deleted", { + get: $util.oneOfGetter($oneOfFields = ["deleted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + QuickReplyAction.create = function create(properties) { + return new QuickReplyAction(properties); + }; + + QuickReplyAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.shortcut != null && Object.hasOwnProperty.call(m, "shortcut")) + w.uint32(10).string(m.shortcut); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + w.uint32(18).string(m.message); + if (m.keywords != null && m.keywords.length) { + for (var i = 0; i < m.keywords.length; ++i) + w.uint32(26).string(m.keywords[i]); + } + if (m.count != null && Object.hasOwnProperty.call(m, "count")) + w.uint32(32).int32(m.count); + if (m.deleted != null && Object.hasOwnProperty.call(m, "deleted")) + w.uint32(40).bool(m.deleted); + return w; + }; + + QuickReplyAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.QuickReplyAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.shortcut = r.string(); + break; + } + case 2: { + m.message = r.string(); + break; + } + case 3: { + if (!(m.keywords && m.keywords.length)) + m.keywords = []; + m.keywords.push(r.string()); + break; + } + case 4: { + m.count = r.int32(); + break; + } + case 5: { + m.deleted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + QuickReplyAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.QuickReplyAction) + return d; + var m = new $root.proto.SyncActionValue.QuickReplyAction(); + if (d.shortcut != null) { + m.shortcut = String(d.shortcut); + } + if (d.message != null) { + m.message = String(d.message); + } + if (d.keywords) { + if (!Array.isArray(d.keywords)) + throw TypeError(".proto.SyncActionValue.QuickReplyAction.keywords: array expected"); + m.keywords = []; + for (var i = 0; i < d.keywords.length; ++i) { + m.keywords[i] = String(d.keywords[i]); + } + } + if (d.count != null) { + m.count = d.count | 0; + } + if (d.deleted != null) { + m.deleted = Boolean(d.deleted); + } + return m; + }; + + QuickReplyAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.keywords = []; + } + if (m.shortcut != null && m.hasOwnProperty("shortcut")) { + d.shortcut = m.shortcut; + if (o.oneofs) + d._shortcut = "shortcut"; + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = m.message; + if (o.oneofs) + d._message = "message"; + } + if (m.keywords && m.keywords.length) { + d.keywords = []; + for (var j = 0; j < m.keywords.length; ++j) { + d.keywords[j] = m.keywords[j]; + } + } + if (m.count != null && m.hasOwnProperty("count")) { + d.count = m.count; + if (o.oneofs) + d._count = "count"; + } + if (m.deleted != null && m.hasOwnProperty("deleted")) { + d.deleted = m.deleted; + if (o.oneofs) + d._deleted = "deleted"; + } + return d; + }; + + QuickReplyAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + QuickReplyAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.QuickReplyAction"; + }; + + return QuickReplyAction; + })(); + + SyncActionValue.RecentEmojiWeightsAction = (function() { + + function RecentEmojiWeightsAction(p) { + this.weights = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RecentEmojiWeightsAction.prototype.weights = $util.emptyArray; + + RecentEmojiWeightsAction.create = function create(properties) { + return new RecentEmojiWeightsAction(properties); + }; + + RecentEmojiWeightsAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.weights != null && m.weights.length) { + for (var i = 0; i < m.weights.length; ++i) + $root.proto.RecentEmojiWeight.encode(m.weights[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + RecentEmojiWeightsAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.RecentEmojiWeightsAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.weights && m.weights.length)) + m.weights = []; + m.weights.push($root.proto.RecentEmojiWeight.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RecentEmojiWeightsAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.RecentEmojiWeightsAction) + return d; + var m = new $root.proto.SyncActionValue.RecentEmojiWeightsAction(); + if (d.weights) { + if (!Array.isArray(d.weights)) + throw TypeError(".proto.SyncActionValue.RecentEmojiWeightsAction.weights: array expected"); + m.weights = []; + for (var i = 0; i < d.weights.length; ++i) { + if (typeof d.weights[i] !== "object") + throw TypeError(".proto.SyncActionValue.RecentEmojiWeightsAction.weights: object expected"); + m.weights[i] = $root.proto.RecentEmojiWeight.fromObject(d.weights[i]); + } + } + return m; + }; + + RecentEmojiWeightsAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.weights = []; + } + if (m.weights && m.weights.length) { + d.weights = []; + for (var j = 0; j < m.weights.length; ++j) { + d.weights[j] = $root.proto.RecentEmojiWeight.toObject(m.weights[j], o); + } + } + return d; + }; + + RecentEmojiWeightsAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RecentEmojiWeightsAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.RecentEmojiWeightsAction"; + }; + + return RecentEmojiWeightsAction; + })(); + + SyncActionValue.RemoveRecentStickerAction = (function() { + + function RemoveRecentStickerAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + RemoveRecentStickerAction.prototype.lastStickerSentTs = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(RemoveRecentStickerAction.prototype, "_lastStickerSentTs", { + get: $util.oneOfGetter($oneOfFields = ["lastStickerSentTs"]), + set: $util.oneOfSetter($oneOfFields) + }); + + RemoveRecentStickerAction.create = function create(properties) { + return new RemoveRecentStickerAction(properties); + }; + + RemoveRecentStickerAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.lastStickerSentTs != null && Object.hasOwnProperty.call(m, "lastStickerSentTs")) + w.uint32(8).int64(m.lastStickerSentTs); + return w; + }; + + RemoveRecentStickerAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.RemoveRecentStickerAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.lastStickerSentTs = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + RemoveRecentStickerAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.RemoveRecentStickerAction) + return d; + var m = new $root.proto.SyncActionValue.RemoveRecentStickerAction(); + if (d.lastStickerSentTs != null) { + if ($util.Long) + (m.lastStickerSentTs = $util.Long.fromValue(d.lastStickerSentTs)).unsigned = false; + else if (typeof d.lastStickerSentTs === "string") + m.lastStickerSentTs = parseInt(d.lastStickerSentTs, 10); + else if (typeof d.lastStickerSentTs === "number") + m.lastStickerSentTs = d.lastStickerSentTs; + else if (typeof d.lastStickerSentTs === "object") + m.lastStickerSentTs = new $util.LongBits(d.lastStickerSentTs.low >>> 0, d.lastStickerSentTs.high >>> 0).toNumber(); + } + return m; + }; + + RemoveRecentStickerAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.lastStickerSentTs != null && m.hasOwnProperty("lastStickerSentTs")) { + if (typeof m.lastStickerSentTs === "number") + d.lastStickerSentTs = o.longs === String ? String(m.lastStickerSentTs) : m.lastStickerSentTs; + else + d.lastStickerSentTs = o.longs === String ? longToString(m.lastStickerSentTs) : o.longs === Number ? longToNumber(m.lastStickerSentTs) : m.lastStickerSentTs; + if (o.oneofs) + d._lastStickerSentTs = "lastStickerSentTs"; + } + return d; + }; + + RemoveRecentStickerAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + RemoveRecentStickerAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.RemoveRecentStickerAction"; + }; + + return RemoveRecentStickerAction; + })(); + + SyncActionValue.StarAction = (function() { + + function StarAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StarAction.prototype.starred = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StarAction.prototype, "_starred", { + get: $util.oneOfGetter($oneOfFields = ["starred"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StarAction.create = function create(properties) { + return new StarAction(properties); + }; + + StarAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.starred != null && Object.hasOwnProperty.call(m, "starred")) + w.uint32(8).bool(m.starred); + return w; + }; + + StarAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.StarAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.starred = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StarAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.StarAction) + return d; + var m = new $root.proto.SyncActionValue.StarAction(); + if (d.starred != null) { + m.starred = Boolean(d.starred); + } + return m; + }; + + StarAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.starred != null && m.hasOwnProperty("starred")) { + d.starred = m.starred; + if (o.oneofs) + d._starred = "starred"; + } + return d; + }; + + StarAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StarAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.StarAction"; + }; + + return StarAction; + })(); + + SyncActionValue.StatusPostOptInNotificationPreferencesAction = (function() { + + function StatusPostOptInNotificationPreferencesAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusPostOptInNotificationPreferencesAction.prototype.enabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusPostOptInNotificationPreferencesAction.prototype, "_enabled", { + get: $util.oneOfGetter($oneOfFields = ["enabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusPostOptInNotificationPreferencesAction.create = function create(properties) { + return new StatusPostOptInNotificationPreferencesAction(properties); + }; + + StatusPostOptInNotificationPreferencesAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.enabled != null && Object.hasOwnProperty.call(m, "enabled")) + w.uint32(8).bool(m.enabled); + return w; + }; + + StatusPostOptInNotificationPreferencesAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.enabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusPostOptInNotificationPreferencesAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction) + return d; + var m = new $root.proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction(); + if (d.enabled != null) { + m.enabled = Boolean(d.enabled); + } + return m; + }; + + StatusPostOptInNotificationPreferencesAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.enabled != null && m.hasOwnProperty("enabled")) { + d.enabled = m.enabled; + if (o.oneofs) + d._enabled = "enabled"; + } + return d; + }; + + StatusPostOptInNotificationPreferencesAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusPostOptInNotificationPreferencesAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.StatusPostOptInNotificationPreferencesAction"; + }; + + return StatusPostOptInNotificationPreferencesAction; + })(); + + SyncActionValue.StatusPrivacyAction = (function() { + + function StatusPrivacyAction(p) { + this.userJid = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StatusPrivacyAction.prototype.mode = null; + StatusPrivacyAction.prototype.userJid = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StatusPrivacyAction.prototype, "_mode", { + get: $util.oneOfGetter($oneOfFields = ["mode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StatusPrivacyAction.create = function create(properties) { + return new StatusPrivacyAction(properties); + }; + + StatusPrivacyAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.mode != null && Object.hasOwnProperty.call(m, "mode")) + w.uint32(8).int32(m.mode); + if (m.userJid != null && m.userJid.length) { + for (var i = 0; i < m.userJid.length; ++i) + w.uint32(18).string(m.userJid[i]); + } + return w; + }; + + StatusPrivacyAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.StatusPrivacyAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.mode = r.int32(); + break; + } + case 2: { + if (!(m.userJid && m.userJid.length)) + m.userJid = []; + m.userJid.push(r.string()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StatusPrivacyAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.StatusPrivacyAction) + return d; + var m = new $root.proto.SyncActionValue.StatusPrivacyAction(); + switch (d.mode) { + default: + if (typeof d.mode === "number") { + m.mode = d.mode; + break; + } + break; + case "ALLOW_LIST": + case 0: + m.mode = 0; + break; + case "DENY_LIST": + case 1: + m.mode = 1; + break; + case "CONTACTS": + case 2: + m.mode = 2; + break; + case "CLOSE_FRIENDS": + case 3: + m.mode = 3; + break; + } + if (d.userJid) { + if (!Array.isArray(d.userJid)) + throw TypeError(".proto.SyncActionValue.StatusPrivacyAction.userJid: array expected"); + m.userJid = []; + for (var i = 0; i < d.userJid.length; ++i) { + m.userJid[i] = String(d.userJid[i]); + } + } + return m; + }; + + StatusPrivacyAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.userJid = []; + } + if (m.mode != null && m.hasOwnProperty("mode")) { + d.mode = o.enums === String ? $root.proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[m.mode] === undefined ? m.mode : $root.proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[m.mode] : m.mode; + if (o.oneofs) + d._mode = "mode"; + } + if (m.userJid && m.userJid.length) { + d.userJid = []; + for (var j = 0; j < m.userJid.length; ++j) { + d.userJid[j] = m.userJid[j]; + } + } + return d; + }; + + StatusPrivacyAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StatusPrivacyAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.StatusPrivacyAction"; + }; + + StatusPrivacyAction.StatusDistributionMode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ALLOW_LIST"] = 0; + values[valuesById[1] = "DENY_LIST"] = 1; + values[valuesById[2] = "CONTACTS"] = 2; + values[valuesById[3] = "CLOSE_FRIENDS"] = 3; + return values; + })(); + + return StatusPrivacyAction; + })(); + + SyncActionValue.StickerAction = (function() { + + function StickerAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + StickerAction.prototype.url = null; + StickerAction.prototype.fileEncSha256 = null; + StickerAction.prototype.mediaKey = null; + StickerAction.prototype.mimetype = null; + StickerAction.prototype.height = null; + StickerAction.prototype.width = null; + StickerAction.prototype.directPath = null; + StickerAction.prototype.fileLength = null; + StickerAction.prototype.isFavorite = null; + StickerAction.prototype.deviceIdHint = null; + StickerAction.prototype.isLottie = null; + StickerAction.prototype.imageHash = null; + StickerAction.prototype.isAvatarSticker = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_fileEncSha256", { + get: $util.oneOfGetter($oneOfFields = ["fileEncSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_mediaKey", { + get: $util.oneOfGetter($oneOfFields = ["mediaKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_mimetype", { + get: $util.oneOfGetter($oneOfFields = ["mimetype"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_height", { + get: $util.oneOfGetter($oneOfFields = ["height"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_width", { + get: $util.oneOfGetter($oneOfFields = ["width"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_directPath", { + get: $util.oneOfGetter($oneOfFields = ["directPath"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_fileLength", { + get: $util.oneOfGetter($oneOfFields = ["fileLength"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_isFavorite", { + get: $util.oneOfGetter($oneOfFields = ["isFavorite"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_deviceIdHint", { + get: $util.oneOfGetter($oneOfFields = ["deviceIdHint"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_isLottie", { + get: $util.oneOfGetter($oneOfFields = ["isLottie"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_imageHash", { + get: $util.oneOfGetter($oneOfFields = ["imageHash"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(StickerAction.prototype, "_isAvatarSticker", { + get: $util.oneOfGetter($oneOfFields = ["isAvatarSticker"]), + set: $util.oneOfSetter($oneOfFields) + }); + + StickerAction.create = function create(properties) { + return new StickerAction(properties); + }; + + StickerAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + w.uint32(10).string(m.url); + if (m.fileEncSha256 != null && Object.hasOwnProperty.call(m, "fileEncSha256")) + w.uint32(18).bytes(m.fileEncSha256); + if (m.mediaKey != null && Object.hasOwnProperty.call(m, "mediaKey")) + w.uint32(26).bytes(m.mediaKey); + if (m.mimetype != null && Object.hasOwnProperty.call(m, "mimetype")) + w.uint32(34).string(m.mimetype); + if (m.height != null && Object.hasOwnProperty.call(m, "height")) + w.uint32(40).uint32(m.height); + if (m.width != null && Object.hasOwnProperty.call(m, "width")) + w.uint32(48).uint32(m.width); + if (m.directPath != null && Object.hasOwnProperty.call(m, "directPath")) + w.uint32(58).string(m.directPath); + if (m.fileLength != null && Object.hasOwnProperty.call(m, "fileLength")) + w.uint32(64).uint64(m.fileLength); + if (m.isFavorite != null && Object.hasOwnProperty.call(m, "isFavorite")) + w.uint32(72).bool(m.isFavorite); + if (m.deviceIdHint != null && Object.hasOwnProperty.call(m, "deviceIdHint")) + w.uint32(80).uint32(m.deviceIdHint); + if (m.isLottie != null && Object.hasOwnProperty.call(m, "isLottie")) + w.uint32(88).bool(m.isLottie); + if (m.imageHash != null && Object.hasOwnProperty.call(m, "imageHash")) + w.uint32(98).string(m.imageHash); + if (m.isAvatarSticker != null && Object.hasOwnProperty.call(m, "isAvatarSticker")) + w.uint32(104).bool(m.isAvatarSticker); + return w; + }; + + StickerAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.StickerAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.url = r.string(); + break; + } + case 2: { + m.fileEncSha256 = r.bytes(); + break; + } + case 3: { + m.mediaKey = r.bytes(); + break; + } + case 4: { + m.mimetype = r.string(); + break; + } + case 5: { + m.height = r.uint32(); + break; + } + case 6: { + m.width = r.uint32(); + break; + } + case 7: { + m.directPath = r.string(); + break; + } + case 8: { + m.fileLength = r.uint64(); + break; + } + case 9: { + m.isFavorite = r.bool(); + break; + } + case 10: { + m.deviceIdHint = r.uint32(); + break; + } + case 11: { + m.isLottie = r.bool(); + break; + } + case 12: { + m.imageHash = r.string(); + break; + } + case 13: { + m.isAvatarSticker = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + StickerAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.StickerAction) + return d; + var m = new $root.proto.SyncActionValue.StickerAction(); + if (d.url != null) { + m.url = String(d.url); + } + if (d.fileEncSha256 != null) { + if (typeof d.fileEncSha256 === "string") + $util.base64.decode(d.fileEncSha256, m.fileEncSha256 = $util.newBuffer($util.base64.length(d.fileEncSha256)), 0); + else if (d.fileEncSha256.length >= 0) + m.fileEncSha256 = d.fileEncSha256; + } + if (d.mediaKey != null) { + if (typeof d.mediaKey === "string") + $util.base64.decode(d.mediaKey, m.mediaKey = $util.newBuffer($util.base64.length(d.mediaKey)), 0); + else if (d.mediaKey.length >= 0) + m.mediaKey = d.mediaKey; + } + if (d.mimetype != null) { + m.mimetype = String(d.mimetype); + } + if (d.height != null) { + m.height = d.height >>> 0; + } + if (d.width != null) { + m.width = d.width >>> 0; + } + if (d.directPath != null) { + m.directPath = String(d.directPath); + } + if (d.fileLength != null) { + if ($util.Long) + (m.fileLength = $util.Long.fromValue(d.fileLength)).unsigned = true; + else if (typeof d.fileLength === "string") + m.fileLength = parseInt(d.fileLength, 10); + else if (typeof d.fileLength === "number") + m.fileLength = d.fileLength; + else if (typeof d.fileLength === "object") + m.fileLength = new $util.LongBits(d.fileLength.low >>> 0, d.fileLength.high >>> 0).toNumber(true); + } + if (d.isFavorite != null) { + m.isFavorite = Boolean(d.isFavorite); + } + if (d.deviceIdHint != null) { + m.deviceIdHint = d.deviceIdHint >>> 0; + } + if (d.isLottie != null) { + m.isLottie = Boolean(d.isLottie); + } + if (d.imageHash != null) { + m.imageHash = String(d.imageHash); + } + if (d.isAvatarSticker != null) { + m.isAvatarSticker = Boolean(d.isAvatarSticker); + } + return m; + }; + + StickerAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.url != null && m.hasOwnProperty("url")) { + d.url = m.url; + if (o.oneofs) + d._url = "url"; + } + if (m.fileEncSha256 != null && m.hasOwnProperty("fileEncSha256")) { + d.fileEncSha256 = o.bytes === String ? $util.base64.encode(m.fileEncSha256, 0, m.fileEncSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.fileEncSha256) : m.fileEncSha256; + if (o.oneofs) + d._fileEncSha256 = "fileEncSha256"; + } + if (m.mediaKey != null && m.hasOwnProperty("mediaKey")) { + d.mediaKey = o.bytes === String ? $util.base64.encode(m.mediaKey, 0, m.mediaKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaKey) : m.mediaKey; + if (o.oneofs) + d._mediaKey = "mediaKey"; + } + if (m.mimetype != null && m.hasOwnProperty("mimetype")) { + d.mimetype = m.mimetype; + if (o.oneofs) + d._mimetype = "mimetype"; + } + if (m.height != null && m.hasOwnProperty("height")) { + d.height = m.height; + if (o.oneofs) + d._height = "height"; + } + if (m.width != null && m.hasOwnProperty("width")) { + d.width = m.width; + if (o.oneofs) + d._width = "width"; + } + if (m.directPath != null && m.hasOwnProperty("directPath")) { + d.directPath = m.directPath; + if (o.oneofs) + d._directPath = "directPath"; + } + if (m.fileLength != null && m.hasOwnProperty("fileLength")) { + if (typeof m.fileLength === "number") + d.fileLength = o.longs === String ? String(m.fileLength) : m.fileLength; + else + d.fileLength = o.longs === String ? longToString(m.fileLength, true) : o.longs === Number ? longToNumber(m.fileLength, true) : m.fileLength; + if (o.oneofs) + d._fileLength = "fileLength"; + } + if (m.isFavorite != null && m.hasOwnProperty("isFavorite")) { + d.isFavorite = m.isFavorite; + if (o.oneofs) + d._isFavorite = "isFavorite"; + } + if (m.deviceIdHint != null && m.hasOwnProperty("deviceIdHint")) { + d.deviceIdHint = m.deviceIdHint; + if (o.oneofs) + d._deviceIdHint = "deviceIdHint"; + } + if (m.isLottie != null && m.hasOwnProperty("isLottie")) { + d.isLottie = m.isLottie; + if (o.oneofs) + d._isLottie = "isLottie"; + } + if (m.imageHash != null && m.hasOwnProperty("imageHash")) { + d.imageHash = m.imageHash; + if (o.oneofs) + d._imageHash = "imageHash"; + } + if (m.isAvatarSticker != null && m.hasOwnProperty("isAvatarSticker")) { + d.isAvatarSticker = m.isAvatarSticker; + if (o.oneofs) + d._isAvatarSticker = "isAvatarSticker"; + } + return d; + }; + + StickerAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + StickerAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.StickerAction"; + }; + + return StickerAction; + })(); + + SyncActionValue.SubscriptionAction = (function() { + + function SubscriptionAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SubscriptionAction.prototype.isDeactivated = null; + SubscriptionAction.prototype.isAutoRenewing = null; + SubscriptionAction.prototype.expirationDate = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SubscriptionAction.prototype, "_isDeactivated", { + get: $util.oneOfGetter($oneOfFields = ["isDeactivated"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SubscriptionAction.prototype, "_isAutoRenewing", { + get: $util.oneOfGetter($oneOfFields = ["isAutoRenewing"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SubscriptionAction.prototype, "_expirationDate", { + get: $util.oneOfGetter($oneOfFields = ["expirationDate"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SubscriptionAction.create = function create(properties) { + return new SubscriptionAction(properties); + }; + + SubscriptionAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isDeactivated != null && Object.hasOwnProperty.call(m, "isDeactivated")) + w.uint32(8).bool(m.isDeactivated); + if (m.isAutoRenewing != null && Object.hasOwnProperty.call(m, "isAutoRenewing")) + w.uint32(16).bool(m.isAutoRenewing); + if (m.expirationDate != null && Object.hasOwnProperty.call(m, "expirationDate")) + w.uint32(24).int64(m.expirationDate); + return w; + }; + + SubscriptionAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.SubscriptionAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isDeactivated = r.bool(); + break; + } + case 2: { + m.isAutoRenewing = r.bool(); + break; + } + case 3: { + m.expirationDate = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SubscriptionAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.SubscriptionAction) + return d; + var m = new $root.proto.SyncActionValue.SubscriptionAction(); + if (d.isDeactivated != null) { + m.isDeactivated = Boolean(d.isDeactivated); + } + if (d.isAutoRenewing != null) { + m.isAutoRenewing = Boolean(d.isAutoRenewing); + } + if (d.expirationDate != null) { + if ($util.Long) + (m.expirationDate = $util.Long.fromValue(d.expirationDate)).unsigned = false; + else if (typeof d.expirationDate === "string") + m.expirationDate = parseInt(d.expirationDate, 10); + else if (typeof d.expirationDate === "number") + m.expirationDate = d.expirationDate; + else if (typeof d.expirationDate === "object") + m.expirationDate = new $util.LongBits(d.expirationDate.low >>> 0, d.expirationDate.high >>> 0).toNumber(); + } + return m; + }; + + SubscriptionAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isDeactivated != null && m.hasOwnProperty("isDeactivated")) { + d.isDeactivated = m.isDeactivated; + if (o.oneofs) + d._isDeactivated = "isDeactivated"; + } + if (m.isAutoRenewing != null && m.hasOwnProperty("isAutoRenewing")) { + d.isAutoRenewing = m.isAutoRenewing; + if (o.oneofs) + d._isAutoRenewing = "isAutoRenewing"; + } + if (m.expirationDate != null && m.hasOwnProperty("expirationDate")) { + if (typeof m.expirationDate === "number") + d.expirationDate = o.longs === String ? String(m.expirationDate) : m.expirationDate; + else + d.expirationDate = o.longs === String ? longToString(m.expirationDate) : o.longs === Number ? longToNumber(m.expirationDate) : m.expirationDate; + if (o.oneofs) + d._expirationDate = "expirationDate"; + } + return d; + }; + + SubscriptionAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SubscriptionAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.SubscriptionAction"; + }; + + return SubscriptionAction; + })(); + + SyncActionValue.SyncActionMessage = (function() { + + function SyncActionMessage(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncActionMessage.prototype.key = null; + SyncActionMessage.prototype.timestamp = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionMessage.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionMessage.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncActionMessage.create = function create(properties) { + return new SyncActionMessage(properties); + }; + + SyncActionMessage.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(16).int64(m.timestamp); + return w; + }; + + SyncActionMessage.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.SyncActionMessage(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.timestamp = r.int64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncActionMessage.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.SyncActionMessage) + return d; + var m = new $root.proto.SyncActionValue.SyncActionMessage(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.SyncActionValue.SyncActionMessage.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = false; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(); + } + return m; + }; + + SyncActionMessage.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + if (o.oneofs) + d._key = "key"; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp) : o.longs === Number ? longToNumber(m.timestamp) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + return d; + }; + + SyncActionMessage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncActionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.SyncActionMessage"; + }; + + return SyncActionMessage; + })(); + + SyncActionValue.SyncActionMessageRange = (function() { + + function SyncActionMessageRange(p) { + this.messages = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncActionMessageRange.prototype.lastMessageTimestamp = null; + SyncActionMessageRange.prototype.lastSystemMessageTimestamp = null; + SyncActionMessageRange.prototype.messages = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionMessageRange.prototype, "_lastMessageTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["lastMessageTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncActionMessageRange.prototype, "_lastSystemMessageTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["lastSystemMessageTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncActionMessageRange.create = function create(properties) { + return new SyncActionMessageRange(properties); + }; + + SyncActionMessageRange.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.lastMessageTimestamp != null && Object.hasOwnProperty.call(m, "lastMessageTimestamp")) + w.uint32(8).int64(m.lastMessageTimestamp); + if (m.lastSystemMessageTimestamp != null && Object.hasOwnProperty.call(m, "lastSystemMessageTimestamp")) + w.uint32(16).int64(m.lastSystemMessageTimestamp); + if (m.messages != null && m.messages.length) { + for (var i = 0; i < m.messages.length; ++i) + $root.proto.SyncActionValue.SyncActionMessage.encode(m.messages[i], w.uint32(26).fork()).ldelim(); + } + return w; + }; + + SyncActionMessageRange.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.SyncActionMessageRange(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.lastMessageTimestamp = r.int64(); + break; + } + case 2: { + m.lastSystemMessageTimestamp = r.int64(); + break; + } + case 3: { + if (!(m.messages && m.messages.length)) + m.messages = []; + m.messages.push($root.proto.SyncActionValue.SyncActionMessage.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncActionMessageRange.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.SyncActionMessageRange) + return d; + var m = new $root.proto.SyncActionValue.SyncActionMessageRange(); + if (d.lastMessageTimestamp != null) { + if ($util.Long) + (m.lastMessageTimestamp = $util.Long.fromValue(d.lastMessageTimestamp)).unsigned = false; + else if (typeof d.lastMessageTimestamp === "string") + m.lastMessageTimestamp = parseInt(d.lastMessageTimestamp, 10); + else if (typeof d.lastMessageTimestamp === "number") + m.lastMessageTimestamp = d.lastMessageTimestamp; + else if (typeof d.lastMessageTimestamp === "object") + m.lastMessageTimestamp = new $util.LongBits(d.lastMessageTimestamp.low >>> 0, d.lastMessageTimestamp.high >>> 0).toNumber(); + } + if (d.lastSystemMessageTimestamp != null) { + if ($util.Long) + (m.lastSystemMessageTimestamp = $util.Long.fromValue(d.lastSystemMessageTimestamp)).unsigned = false; + else if (typeof d.lastSystemMessageTimestamp === "string") + m.lastSystemMessageTimestamp = parseInt(d.lastSystemMessageTimestamp, 10); + else if (typeof d.lastSystemMessageTimestamp === "number") + m.lastSystemMessageTimestamp = d.lastSystemMessageTimestamp; + else if (typeof d.lastSystemMessageTimestamp === "object") + m.lastSystemMessageTimestamp = new $util.LongBits(d.lastSystemMessageTimestamp.low >>> 0, d.lastSystemMessageTimestamp.high >>> 0).toNumber(); + } + if (d.messages) { + if (!Array.isArray(d.messages)) + throw TypeError(".proto.SyncActionValue.SyncActionMessageRange.messages: array expected"); + m.messages = []; + for (var i = 0; i < d.messages.length; ++i) { + if (typeof d.messages[i] !== "object") + throw TypeError(".proto.SyncActionValue.SyncActionMessageRange.messages: object expected"); + m.messages[i] = $root.proto.SyncActionValue.SyncActionMessage.fromObject(d.messages[i]); + } + } + return m; + }; + + SyncActionMessageRange.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.messages = []; + } + if (m.lastMessageTimestamp != null && m.hasOwnProperty("lastMessageTimestamp")) { + if (typeof m.lastMessageTimestamp === "number") + d.lastMessageTimestamp = o.longs === String ? String(m.lastMessageTimestamp) : m.lastMessageTimestamp; + else + d.lastMessageTimestamp = o.longs === String ? longToString(m.lastMessageTimestamp) : o.longs === Number ? longToNumber(m.lastMessageTimestamp) : m.lastMessageTimestamp; + if (o.oneofs) + d._lastMessageTimestamp = "lastMessageTimestamp"; + } + if (m.lastSystemMessageTimestamp != null && m.hasOwnProperty("lastSystemMessageTimestamp")) { + if (typeof m.lastSystemMessageTimestamp === "number") + d.lastSystemMessageTimestamp = o.longs === String ? String(m.lastSystemMessageTimestamp) : m.lastSystemMessageTimestamp; + else + d.lastSystemMessageTimestamp = o.longs === String ? longToString(m.lastSystemMessageTimestamp) : o.longs === Number ? longToNumber(m.lastSystemMessageTimestamp) : m.lastSystemMessageTimestamp; + if (o.oneofs) + d._lastSystemMessageTimestamp = "lastSystemMessageTimestamp"; + } + if (m.messages && m.messages.length) { + d.messages = []; + for (var j = 0; j < m.messages.length; ++j) { + d.messages[j] = $root.proto.SyncActionValue.SyncActionMessage.toObject(m.messages[j], o); + } + } + return d; + }; + + SyncActionMessageRange.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncActionMessageRange.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.SyncActionMessageRange"; + }; + + return SyncActionMessageRange; + })(); + + SyncActionValue.TimeFormatAction = (function() { + + function TimeFormatAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + TimeFormatAction.prototype.isTwentyFourHourFormatEnabled = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TimeFormatAction.prototype, "_isTwentyFourHourFormatEnabled", { + get: $util.oneOfGetter($oneOfFields = ["isTwentyFourHourFormatEnabled"]), + set: $util.oneOfSetter($oneOfFields) + }); + + TimeFormatAction.create = function create(properties) { + return new TimeFormatAction(properties); + }; + + TimeFormatAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.isTwentyFourHourFormatEnabled != null && Object.hasOwnProperty.call(m, "isTwentyFourHourFormatEnabled")) + w.uint32(8).bool(m.isTwentyFourHourFormatEnabled); + return w; + }; + + TimeFormatAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.TimeFormatAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.isTwentyFourHourFormatEnabled = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + TimeFormatAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.TimeFormatAction) + return d; + var m = new $root.proto.SyncActionValue.TimeFormatAction(); + if (d.isTwentyFourHourFormatEnabled != null) { + m.isTwentyFourHourFormatEnabled = Boolean(d.isTwentyFourHourFormatEnabled); + } + return m; + }; + + TimeFormatAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.isTwentyFourHourFormatEnabled != null && m.hasOwnProperty("isTwentyFourHourFormatEnabled")) { + d.isTwentyFourHourFormatEnabled = m.isTwentyFourHourFormatEnabled; + if (o.oneofs) + d._isTwentyFourHourFormatEnabled = "isTwentyFourHourFormatEnabled"; + } + return d; + }; + + TimeFormatAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TimeFormatAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.TimeFormatAction"; + }; + + return TimeFormatAction; + })(); + + SyncActionValue.UGCBot = (function() { + + function UGCBot(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UGCBot.prototype.definition = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UGCBot.prototype, "_definition", { + get: $util.oneOfGetter($oneOfFields = ["definition"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UGCBot.create = function create(properties) { + return new UGCBot(properties); + }; + + UGCBot.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.definition != null && Object.hasOwnProperty.call(m, "definition")) + w.uint32(10).bytes(m.definition); + return w; + }; + + UGCBot.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.UGCBot(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.definition = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UGCBot.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.UGCBot) + return d; + var m = new $root.proto.SyncActionValue.UGCBot(); + if (d.definition != null) { + if (typeof d.definition === "string") + $util.base64.decode(d.definition, m.definition = $util.newBuffer($util.base64.length(d.definition)), 0); + else if (d.definition.length >= 0) + m.definition = d.definition; + } + return m; + }; + + UGCBot.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.definition != null && m.hasOwnProperty("definition")) { + d.definition = o.bytes === String ? $util.base64.encode(m.definition, 0, m.definition.length) : o.bytes === Array ? Array.prototype.slice.call(m.definition) : m.definition; + if (o.oneofs) + d._definition = "definition"; + } + return d; + }; + + UGCBot.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UGCBot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.UGCBot"; + }; + + return UGCBot; + })(); + + SyncActionValue.UnarchiveChatsSetting = (function() { + + function UnarchiveChatsSetting(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UnarchiveChatsSetting.prototype.unarchiveChats = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UnarchiveChatsSetting.prototype, "_unarchiveChats", { + get: $util.oneOfGetter($oneOfFields = ["unarchiveChats"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UnarchiveChatsSetting.create = function create(properties) { + return new UnarchiveChatsSetting(properties); + }; + + UnarchiveChatsSetting.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.unarchiveChats != null && Object.hasOwnProperty.call(m, "unarchiveChats")) + w.uint32(8).bool(m.unarchiveChats); + return w; + }; + + UnarchiveChatsSetting.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.UnarchiveChatsSetting(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.unarchiveChats = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UnarchiveChatsSetting.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.UnarchiveChatsSetting) + return d; + var m = new $root.proto.SyncActionValue.UnarchiveChatsSetting(); + if (d.unarchiveChats != null) { + m.unarchiveChats = Boolean(d.unarchiveChats); + } + return m; + }; + + UnarchiveChatsSetting.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.unarchiveChats != null && m.hasOwnProperty("unarchiveChats")) { + d.unarchiveChats = m.unarchiveChats; + if (o.oneofs) + d._unarchiveChats = "unarchiveChats"; + } + return d; + }; + + UnarchiveChatsSetting.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UnarchiveChatsSetting.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.UnarchiveChatsSetting"; + }; + + return UnarchiveChatsSetting; + })(); + + SyncActionValue.UserStatusMuteAction = (function() { + + function UserStatusMuteAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UserStatusMuteAction.prototype.muted = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserStatusMuteAction.prototype, "_muted", { + get: $util.oneOfGetter($oneOfFields = ["muted"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UserStatusMuteAction.create = function create(properties) { + return new UserStatusMuteAction(properties); + }; + + UserStatusMuteAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.muted != null && Object.hasOwnProperty.call(m, "muted")) + w.uint32(8).bool(m.muted); + return w; + }; + + UserStatusMuteAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.UserStatusMuteAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.muted = r.bool(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UserStatusMuteAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.UserStatusMuteAction) + return d; + var m = new $root.proto.SyncActionValue.UserStatusMuteAction(); + if (d.muted != null) { + m.muted = Boolean(d.muted); + } + return m; + }; + + UserStatusMuteAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.muted != null && m.hasOwnProperty("muted")) { + d.muted = m.muted; + if (o.oneofs) + d._muted = "muted"; + } + return d; + }; + + UserStatusMuteAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UserStatusMuteAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.UserStatusMuteAction"; + }; + + return UserStatusMuteAction; + })(); + + SyncActionValue.UsernameChatStartModeAction = (function() { + + function UsernameChatStartModeAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UsernameChatStartModeAction.prototype.chatStartMode = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UsernameChatStartModeAction.prototype, "_chatStartMode", { + get: $util.oneOfGetter($oneOfFields = ["chatStartMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UsernameChatStartModeAction.create = function create(properties) { + return new UsernameChatStartModeAction(properties); + }; + + UsernameChatStartModeAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.chatStartMode != null && Object.hasOwnProperty.call(m, "chatStartMode")) + w.uint32(8).int32(m.chatStartMode); + return w; + }; + + UsernameChatStartModeAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.UsernameChatStartModeAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.chatStartMode = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UsernameChatStartModeAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.UsernameChatStartModeAction) + return d; + var m = new $root.proto.SyncActionValue.UsernameChatStartModeAction(); + switch (d.chatStartMode) { + default: + if (typeof d.chatStartMode === "number") { + m.chatStartMode = d.chatStartMode; + break; + } + break; + case "LID": + case 1: + m.chatStartMode = 1; + break; + case "PN": + case 2: + m.chatStartMode = 2; + break; + } + return m; + }; + + UsernameChatStartModeAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.chatStartMode != null && m.hasOwnProperty("chatStartMode")) { + d.chatStartMode = o.enums === String ? $root.proto.SyncActionValue.UsernameChatStartModeAction.ChatStartMode[m.chatStartMode] === undefined ? m.chatStartMode : $root.proto.SyncActionValue.UsernameChatStartModeAction.ChatStartMode[m.chatStartMode] : m.chatStartMode; + if (o.oneofs) + d._chatStartMode = "chatStartMode"; + } + return d; + }; + + UsernameChatStartModeAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UsernameChatStartModeAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.UsernameChatStartModeAction"; + }; + + UsernameChatStartModeAction.ChatStartMode = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[1] = "LID"] = 1; + values[valuesById[2] = "PN"] = 2; + return values; + })(); + + return UsernameChatStartModeAction; + })(); + + SyncActionValue.WaffleAccountLinkStateAction = (function() { + + function WaffleAccountLinkStateAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WaffleAccountLinkStateAction.prototype.linkState = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WaffleAccountLinkStateAction.prototype, "_linkState", { + get: $util.oneOfGetter($oneOfFields = ["linkState"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WaffleAccountLinkStateAction.create = function create(properties) { + return new WaffleAccountLinkStateAction(properties); + }; + + WaffleAccountLinkStateAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.linkState != null && Object.hasOwnProperty.call(m, "linkState")) + w.uint32(16).int32(m.linkState); + return w; + }; + + WaffleAccountLinkStateAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.WaffleAccountLinkStateAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 2: { + m.linkState = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WaffleAccountLinkStateAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.WaffleAccountLinkStateAction) + return d; + var m = new $root.proto.SyncActionValue.WaffleAccountLinkStateAction(); + switch (d.linkState) { + default: + if (typeof d.linkState === "number") { + m.linkState = d.linkState; + break; + } + break; + case "ACTIVE": + case 0: + m.linkState = 0; + break; + case "PAUSED": + case 1: + m.linkState = 1; + break; + case "UNLINKED": + case 2: + m.linkState = 2; + break; + } + return m; + }; + + WaffleAccountLinkStateAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.linkState != null && m.hasOwnProperty("linkState")) { + d.linkState = o.enums === String ? $root.proto.SyncActionValue.WaffleAccountLinkStateAction.AccountLinkState[m.linkState] === undefined ? m.linkState : $root.proto.SyncActionValue.WaffleAccountLinkStateAction.AccountLinkState[m.linkState] : m.linkState; + if (o.oneofs) + d._linkState = "linkState"; + } + return d; + }; + + WaffleAccountLinkStateAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WaffleAccountLinkStateAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.WaffleAccountLinkStateAction"; + }; + + WaffleAccountLinkStateAction.AccountLinkState = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ACTIVE"] = 0; + values[valuesById[1] = "PAUSED"] = 1; + values[valuesById[2] = "UNLINKED"] = 2; + return values; + })(); + + return WaffleAccountLinkStateAction; + })(); + + SyncActionValue.WamoUserIdentifierAction = (function() { + + function WamoUserIdentifierAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WamoUserIdentifierAction.prototype.identifier = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WamoUserIdentifierAction.prototype, "_identifier", { + get: $util.oneOfGetter($oneOfFields = ["identifier"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WamoUserIdentifierAction.create = function create(properties) { + return new WamoUserIdentifierAction(properties); + }; + + WamoUserIdentifierAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.identifier != null && Object.hasOwnProperty.call(m, "identifier")) + w.uint32(10).string(m.identifier); + return w; + }; + + WamoUserIdentifierAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.WamoUserIdentifierAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.identifier = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WamoUserIdentifierAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncActionValue.WamoUserIdentifierAction) + return d; + var m = new $root.proto.SyncActionValue.WamoUserIdentifierAction(); + if (d.identifier != null) { + m.identifier = String(d.identifier); + } + return m; + }; + + WamoUserIdentifierAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.identifier != null && m.hasOwnProperty("identifier")) { + d.identifier = m.identifier; + if (o.oneofs) + d._identifier = "identifier"; + } + return d; + }; + + WamoUserIdentifierAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WamoUserIdentifierAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncActionValue.WamoUserIdentifierAction"; + }; + + return WamoUserIdentifierAction; + })(); + + return SyncActionValue; + })(); + + proto.SyncdIndex = (function() { + + function SyncdIndex(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdIndex.prototype.blob = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdIndex.prototype, "_blob", { + get: $util.oneOfGetter($oneOfFields = ["blob"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncdIndex.create = function create(properties) { + return new SyncdIndex(properties); + }; + + SyncdIndex.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.blob != null && Object.hasOwnProperty.call(m, "blob")) + w.uint32(10).bytes(m.blob); + return w; + }; + + SyncdIndex.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdIndex(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.blob = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdIndex.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdIndex) + return d; + var m = new $root.proto.SyncdIndex(); + if (d.blob != null) { + if (typeof d.blob === "string") + $util.base64.decode(d.blob, m.blob = $util.newBuffer($util.base64.length(d.blob)), 0); + else if (d.blob.length >= 0) + m.blob = d.blob; + } + return m; + }; + + SyncdIndex.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.blob != null && m.hasOwnProperty("blob")) { + d.blob = o.bytes === String ? $util.base64.encode(m.blob, 0, m.blob.length) : o.bytes === Array ? Array.prototype.slice.call(m.blob) : m.blob; + if (o.oneofs) + d._blob = "blob"; + } + return d; + }; + + SyncdIndex.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdIndex.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdIndex"; + }; + + return SyncdIndex; + })(); + + proto.SyncdMutation = (function() { + + function SyncdMutation(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdMutation.prototype.operation = null; + SyncdMutation.prototype.record = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdMutation.prototype, "_operation", { + get: $util.oneOfGetter($oneOfFields = ["operation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdMutation.prototype, "_record", { + get: $util.oneOfGetter($oneOfFields = ["record"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncdMutation.create = function create(properties) { + return new SyncdMutation(properties); + }; + + SyncdMutation.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.operation != null && Object.hasOwnProperty.call(m, "operation")) + w.uint32(8).int32(m.operation); + if (m.record != null && Object.hasOwnProperty.call(m, "record")) + $root.proto.SyncdRecord.encode(m.record, w.uint32(18).fork()).ldelim(); + return w; + }; + + SyncdMutation.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdMutation(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.operation = r.int32(); + break; + } + case 2: { + m.record = $root.proto.SyncdRecord.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdMutation.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdMutation) + return d; + var m = new $root.proto.SyncdMutation(); + switch (d.operation) { + default: + if (typeof d.operation === "number") { + m.operation = d.operation; + break; + } + break; + case "SET": + case 0: + m.operation = 0; + break; + case "REMOVE": + case 1: + m.operation = 1; + break; + } + if (d.record != null) { + if (typeof d.record !== "object") + throw TypeError(".proto.SyncdMutation.record: object expected"); + m.record = $root.proto.SyncdRecord.fromObject(d.record); + } + return m; + }; + + SyncdMutation.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.operation != null && m.hasOwnProperty("operation")) { + d.operation = o.enums === String ? $root.proto.SyncdMutation.SyncdOperation[m.operation] === undefined ? m.operation : $root.proto.SyncdMutation.SyncdOperation[m.operation] : m.operation; + if (o.oneofs) + d._operation = "operation"; + } + if (m.record != null && m.hasOwnProperty("record")) { + d.record = $root.proto.SyncdRecord.toObject(m.record, o); + if (o.oneofs) + d._record = "record"; + } + return d; + }; + + SyncdMutation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdMutation.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdMutation"; + }; + + SyncdMutation.SyncdOperation = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "SET"] = 0; + values[valuesById[1] = "REMOVE"] = 1; + return values; + })(); + + return SyncdMutation; + })(); + + proto.SyncdMutations = (function() { + + function SyncdMutations(p) { + this.mutations = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdMutations.prototype.mutations = $util.emptyArray; + + SyncdMutations.create = function create(properties) { + return new SyncdMutations(properties); + }; + + SyncdMutations.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.mutations != null && m.mutations.length) { + for (var i = 0; i < m.mutations.length; ++i) + $root.proto.SyncdMutation.encode(m.mutations[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + SyncdMutations.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdMutations(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.mutations && m.mutations.length)) + m.mutations = []; + m.mutations.push($root.proto.SyncdMutation.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdMutations.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdMutations) + return d; + var m = new $root.proto.SyncdMutations(); + if (d.mutations) { + if (!Array.isArray(d.mutations)) + throw TypeError(".proto.SyncdMutations.mutations: array expected"); + m.mutations = []; + for (var i = 0; i < d.mutations.length; ++i) { + if (typeof d.mutations[i] !== "object") + throw TypeError(".proto.SyncdMutations.mutations: object expected"); + m.mutations[i] = $root.proto.SyncdMutation.fromObject(d.mutations[i]); + } + } + return m; + }; + + SyncdMutations.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.mutations = []; + } + if (m.mutations && m.mutations.length) { + d.mutations = []; + for (var j = 0; j < m.mutations.length; ++j) { + d.mutations[j] = $root.proto.SyncdMutation.toObject(m.mutations[j], o); + } + } + return d; + }; + + SyncdMutations.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdMutations.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdMutations"; + }; + + return SyncdMutations; + })(); + + proto.SyncdPatch = (function() { + + function SyncdPatch(p) { + this.mutations = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdPatch.prototype.version = null; + SyncdPatch.prototype.mutations = $util.emptyArray; + SyncdPatch.prototype.externalMutations = null; + SyncdPatch.prototype.snapshotMac = null; + SyncdPatch.prototype.patchMac = null; + SyncdPatch.prototype.keyId = null; + SyncdPatch.prototype.exitCode = null; + SyncdPatch.prototype.deviceIndex = null; + SyncdPatch.prototype.clientDebugData = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_externalMutations", { + get: $util.oneOfGetter($oneOfFields = ["externalMutations"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_snapshotMac", { + get: $util.oneOfGetter($oneOfFields = ["snapshotMac"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_patchMac", { + get: $util.oneOfGetter($oneOfFields = ["patchMac"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_keyId", { + get: $util.oneOfGetter($oneOfFields = ["keyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_exitCode", { + get: $util.oneOfGetter($oneOfFields = ["exitCode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_deviceIndex", { + get: $util.oneOfGetter($oneOfFields = ["deviceIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdPatch.prototype, "_clientDebugData", { + get: $util.oneOfGetter($oneOfFields = ["clientDebugData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncdPatch.create = function create(properties) { + return new SyncdPatch(properties); + }; + + SyncdPatch.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + $root.proto.SyncdVersion.encode(m.version, w.uint32(10).fork()).ldelim(); + if (m.mutations != null && m.mutations.length) { + for (var i = 0; i < m.mutations.length; ++i) + $root.proto.SyncdMutation.encode(m.mutations[i], w.uint32(18).fork()).ldelim(); + } + if (m.externalMutations != null && Object.hasOwnProperty.call(m, "externalMutations")) + $root.proto.ExternalBlobReference.encode(m.externalMutations, w.uint32(26).fork()).ldelim(); + if (m.snapshotMac != null && Object.hasOwnProperty.call(m, "snapshotMac")) + w.uint32(34).bytes(m.snapshotMac); + if (m.patchMac != null && Object.hasOwnProperty.call(m, "patchMac")) + w.uint32(42).bytes(m.patchMac); + if (m.keyId != null && Object.hasOwnProperty.call(m, "keyId")) + $root.proto.KeyId.encode(m.keyId, w.uint32(50).fork()).ldelim(); + if (m.exitCode != null && Object.hasOwnProperty.call(m, "exitCode")) + $root.proto.ExitCode.encode(m.exitCode, w.uint32(58).fork()).ldelim(); + if (m.deviceIndex != null && Object.hasOwnProperty.call(m, "deviceIndex")) + w.uint32(64).uint32(m.deviceIndex); + if (m.clientDebugData != null && Object.hasOwnProperty.call(m, "clientDebugData")) + w.uint32(74).bytes(m.clientDebugData); + return w; + }; + + SyncdPatch.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdPatch(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.version = $root.proto.SyncdVersion.decode(r, r.uint32()); + break; + } + case 2: { + if (!(m.mutations && m.mutations.length)) + m.mutations = []; + m.mutations.push($root.proto.SyncdMutation.decode(r, r.uint32())); + break; + } + case 3: { + m.externalMutations = $root.proto.ExternalBlobReference.decode(r, r.uint32()); + break; + } + case 4: { + m.snapshotMac = r.bytes(); + break; + } + case 5: { + m.patchMac = r.bytes(); + break; + } + case 6: { + m.keyId = $root.proto.KeyId.decode(r, r.uint32()); + break; + } + case 7: { + m.exitCode = $root.proto.ExitCode.decode(r, r.uint32()); + break; + } + case 8: { + m.deviceIndex = r.uint32(); + break; + } + case 9: { + m.clientDebugData = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdPatch.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdPatch) + return d; + var m = new $root.proto.SyncdPatch(); + if (d.version != null) { + if (typeof d.version !== "object") + throw TypeError(".proto.SyncdPatch.version: object expected"); + m.version = $root.proto.SyncdVersion.fromObject(d.version); + } + if (d.mutations) { + if (!Array.isArray(d.mutations)) + throw TypeError(".proto.SyncdPatch.mutations: array expected"); + m.mutations = []; + for (var i = 0; i < d.mutations.length; ++i) { + if (typeof d.mutations[i] !== "object") + throw TypeError(".proto.SyncdPatch.mutations: object expected"); + m.mutations[i] = $root.proto.SyncdMutation.fromObject(d.mutations[i]); + } + } + if (d.externalMutations != null) { + if (typeof d.externalMutations !== "object") + throw TypeError(".proto.SyncdPatch.externalMutations: object expected"); + m.externalMutations = $root.proto.ExternalBlobReference.fromObject(d.externalMutations); + } + if (d.snapshotMac != null) { + if (typeof d.snapshotMac === "string") + $util.base64.decode(d.snapshotMac, m.snapshotMac = $util.newBuffer($util.base64.length(d.snapshotMac)), 0); + else if (d.snapshotMac.length >= 0) + m.snapshotMac = d.snapshotMac; + } + if (d.patchMac != null) { + if (typeof d.patchMac === "string") + $util.base64.decode(d.patchMac, m.patchMac = $util.newBuffer($util.base64.length(d.patchMac)), 0); + else if (d.patchMac.length >= 0) + m.patchMac = d.patchMac; + } + if (d.keyId != null) { + if (typeof d.keyId !== "object") + throw TypeError(".proto.SyncdPatch.keyId: object expected"); + m.keyId = $root.proto.KeyId.fromObject(d.keyId); + } + if (d.exitCode != null) { + if (typeof d.exitCode !== "object") + throw TypeError(".proto.SyncdPatch.exitCode: object expected"); + m.exitCode = $root.proto.ExitCode.fromObject(d.exitCode); + } + if (d.deviceIndex != null) { + m.deviceIndex = d.deviceIndex >>> 0; + } + if (d.clientDebugData != null) { + if (typeof d.clientDebugData === "string") + $util.base64.decode(d.clientDebugData, m.clientDebugData = $util.newBuffer($util.base64.length(d.clientDebugData)), 0); + else if (d.clientDebugData.length >= 0) + m.clientDebugData = d.clientDebugData; + } + return m; + }; + + SyncdPatch.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.mutations = []; + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = $root.proto.SyncdVersion.toObject(m.version, o); + if (o.oneofs) + d._version = "version"; + } + if (m.mutations && m.mutations.length) { + d.mutations = []; + for (var j = 0; j < m.mutations.length; ++j) { + d.mutations[j] = $root.proto.SyncdMutation.toObject(m.mutations[j], o); + } + } + if (m.externalMutations != null && m.hasOwnProperty("externalMutations")) { + d.externalMutations = $root.proto.ExternalBlobReference.toObject(m.externalMutations, o); + if (o.oneofs) + d._externalMutations = "externalMutations"; + } + if (m.snapshotMac != null && m.hasOwnProperty("snapshotMac")) { + d.snapshotMac = o.bytes === String ? $util.base64.encode(m.snapshotMac, 0, m.snapshotMac.length) : o.bytes === Array ? Array.prototype.slice.call(m.snapshotMac) : m.snapshotMac; + if (o.oneofs) + d._snapshotMac = "snapshotMac"; + } + if (m.patchMac != null && m.hasOwnProperty("patchMac")) { + d.patchMac = o.bytes === String ? $util.base64.encode(m.patchMac, 0, m.patchMac.length) : o.bytes === Array ? Array.prototype.slice.call(m.patchMac) : m.patchMac; + if (o.oneofs) + d._patchMac = "patchMac"; + } + if (m.keyId != null && m.hasOwnProperty("keyId")) { + d.keyId = $root.proto.KeyId.toObject(m.keyId, o); + if (o.oneofs) + d._keyId = "keyId"; + } + if (m.exitCode != null && m.hasOwnProperty("exitCode")) { + d.exitCode = $root.proto.ExitCode.toObject(m.exitCode, o); + if (o.oneofs) + d._exitCode = "exitCode"; + } + if (m.deviceIndex != null && m.hasOwnProperty("deviceIndex")) { + d.deviceIndex = m.deviceIndex; + if (o.oneofs) + d._deviceIndex = "deviceIndex"; + } + if (m.clientDebugData != null && m.hasOwnProperty("clientDebugData")) { + d.clientDebugData = o.bytes === String ? $util.base64.encode(m.clientDebugData, 0, m.clientDebugData.length) : o.bytes === Array ? Array.prototype.slice.call(m.clientDebugData) : m.clientDebugData; + if (o.oneofs) + d._clientDebugData = "clientDebugData"; + } + return d; + }; + + SyncdPatch.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdPatch.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdPatch"; + }; + + return SyncdPatch; + })(); + + proto.SyncdRecord = (function() { + + function SyncdRecord(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdRecord.prototype.index = null; + SyncdRecord.prototype.value = null; + SyncdRecord.prototype.keyId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdRecord.prototype, "_index", { + get: $util.oneOfGetter($oneOfFields = ["index"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdRecord.prototype, "_value", { + get: $util.oneOfGetter($oneOfFields = ["value"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdRecord.prototype, "_keyId", { + get: $util.oneOfGetter($oneOfFields = ["keyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncdRecord.create = function create(properties) { + return new SyncdRecord(properties); + }; + + SyncdRecord.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.index != null && Object.hasOwnProperty.call(m, "index")) + $root.proto.SyncdIndex.encode(m.index, w.uint32(10).fork()).ldelim(); + if (m.value != null && Object.hasOwnProperty.call(m, "value")) + $root.proto.SyncdValue.encode(m.value, w.uint32(18).fork()).ldelim(); + if (m.keyId != null && Object.hasOwnProperty.call(m, "keyId")) + $root.proto.KeyId.encode(m.keyId, w.uint32(26).fork()).ldelim(); + return w; + }; + + SyncdRecord.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdRecord(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.index = $root.proto.SyncdIndex.decode(r, r.uint32()); + break; + } + case 2: { + m.value = $root.proto.SyncdValue.decode(r, r.uint32()); + break; + } + case 3: { + m.keyId = $root.proto.KeyId.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdRecord.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdRecord) + return d; + var m = new $root.proto.SyncdRecord(); + if (d.index != null) { + if (typeof d.index !== "object") + throw TypeError(".proto.SyncdRecord.index: object expected"); + m.index = $root.proto.SyncdIndex.fromObject(d.index); + } + if (d.value != null) { + if (typeof d.value !== "object") + throw TypeError(".proto.SyncdRecord.value: object expected"); + m.value = $root.proto.SyncdValue.fromObject(d.value); + } + if (d.keyId != null) { + if (typeof d.keyId !== "object") + throw TypeError(".proto.SyncdRecord.keyId: object expected"); + m.keyId = $root.proto.KeyId.fromObject(d.keyId); + } + return m; + }; + + SyncdRecord.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.index != null && m.hasOwnProperty("index")) { + d.index = $root.proto.SyncdIndex.toObject(m.index, o); + if (o.oneofs) + d._index = "index"; + } + if (m.value != null && m.hasOwnProperty("value")) { + d.value = $root.proto.SyncdValue.toObject(m.value, o); + if (o.oneofs) + d._value = "value"; + } + if (m.keyId != null && m.hasOwnProperty("keyId")) { + d.keyId = $root.proto.KeyId.toObject(m.keyId, o); + if (o.oneofs) + d._keyId = "keyId"; + } + return d; + }; + + SyncdRecord.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdRecord"; + }; + + return SyncdRecord; + })(); + + proto.SyncdSnapshot = (function() { + + function SyncdSnapshot(p) { + this.records = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdSnapshot.prototype.version = null; + SyncdSnapshot.prototype.records = $util.emptyArray; + SyncdSnapshot.prototype.mac = null; + SyncdSnapshot.prototype.keyId = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdSnapshot.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdSnapshot.prototype, "_mac", { + get: $util.oneOfGetter($oneOfFields = ["mac"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdSnapshot.prototype, "_keyId", { + get: $util.oneOfGetter($oneOfFields = ["keyId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncdSnapshot.create = function create(properties) { + return new SyncdSnapshot(properties); + }; + + SyncdSnapshot.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + $root.proto.SyncdVersion.encode(m.version, w.uint32(10).fork()).ldelim(); + if (m.records != null && m.records.length) { + for (var i = 0; i < m.records.length; ++i) + $root.proto.SyncdRecord.encode(m.records[i], w.uint32(18).fork()).ldelim(); + } + if (m.mac != null && Object.hasOwnProperty.call(m, "mac")) + w.uint32(26).bytes(m.mac); + if (m.keyId != null && Object.hasOwnProperty.call(m, "keyId")) + $root.proto.KeyId.encode(m.keyId, w.uint32(34).fork()).ldelim(); + return w; + }; + + SyncdSnapshot.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdSnapshot(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.version = $root.proto.SyncdVersion.decode(r, r.uint32()); + break; + } + case 2: { + if (!(m.records && m.records.length)) + m.records = []; + m.records.push($root.proto.SyncdRecord.decode(r, r.uint32())); + break; + } + case 3: { + m.mac = r.bytes(); + break; + } + case 4: { + m.keyId = $root.proto.KeyId.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdSnapshot.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdSnapshot) + return d; + var m = new $root.proto.SyncdSnapshot(); + if (d.version != null) { + if (typeof d.version !== "object") + throw TypeError(".proto.SyncdSnapshot.version: object expected"); + m.version = $root.proto.SyncdVersion.fromObject(d.version); + } + if (d.records) { + if (!Array.isArray(d.records)) + throw TypeError(".proto.SyncdSnapshot.records: array expected"); + m.records = []; + for (var i = 0; i < d.records.length; ++i) { + if (typeof d.records[i] !== "object") + throw TypeError(".proto.SyncdSnapshot.records: object expected"); + m.records[i] = $root.proto.SyncdRecord.fromObject(d.records[i]); + } + } + if (d.mac != null) { + if (typeof d.mac === "string") + $util.base64.decode(d.mac, m.mac = $util.newBuffer($util.base64.length(d.mac)), 0); + else if (d.mac.length >= 0) + m.mac = d.mac; + } + if (d.keyId != null) { + if (typeof d.keyId !== "object") + throw TypeError(".proto.SyncdSnapshot.keyId: object expected"); + m.keyId = $root.proto.KeyId.fromObject(d.keyId); + } + return m; + }; + + SyncdSnapshot.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.records = []; + } + if (m.version != null && m.hasOwnProperty("version")) { + d.version = $root.proto.SyncdVersion.toObject(m.version, o); + if (o.oneofs) + d._version = "version"; + } + if (m.records && m.records.length) { + d.records = []; + for (var j = 0; j < m.records.length; ++j) { + d.records[j] = $root.proto.SyncdRecord.toObject(m.records[j], o); + } + } + if (m.mac != null && m.hasOwnProperty("mac")) { + d.mac = o.bytes === String ? $util.base64.encode(m.mac, 0, m.mac.length) : o.bytes === Array ? Array.prototype.slice.call(m.mac) : m.mac; + if (o.oneofs) + d._mac = "mac"; + } + if (m.keyId != null && m.hasOwnProperty("keyId")) { + d.keyId = $root.proto.KeyId.toObject(m.keyId, o); + if (o.oneofs) + d._keyId = "keyId"; + } + return d; + }; + + SyncdSnapshot.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdSnapshot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdSnapshot"; + }; + + return SyncdSnapshot; + })(); + + proto.SyncdValue = (function() { + + function SyncdValue(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdValue.prototype.blob = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdValue.prototype, "_blob", { + get: $util.oneOfGetter($oneOfFields = ["blob"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncdValue.create = function create(properties) { + return new SyncdValue(properties); + }; + + SyncdValue.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.blob != null && Object.hasOwnProperty.call(m, "blob")) + w.uint32(10).bytes(m.blob); + return w; + }; + + SyncdValue.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdValue(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.blob = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdValue.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdValue) + return d; + var m = new $root.proto.SyncdValue(); + if (d.blob != null) { + if (typeof d.blob === "string") + $util.base64.decode(d.blob, m.blob = $util.newBuffer($util.base64.length(d.blob)), 0); + else if (d.blob.length >= 0) + m.blob = d.blob; + } + return m; + }; + + SyncdValue.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.blob != null && m.hasOwnProperty("blob")) { + d.blob = o.bytes === String ? $util.base64.encode(m.blob, 0, m.blob.length) : o.bytes === Array ? Array.prototype.slice.call(m.blob) : m.blob; + if (o.oneofs) + d._blob = "blob"; + } + return d; + }; + + SyncdValue.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdValue"; + }; + + return SyncdValue; + })(); + + proto.SyncdVersion = (function() { + + function SyncdVersion(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + SyncdVersion.prototype.version = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(SyncdVersion.prototype, "_version", { + get: $util.oneOfGetter($oneOfFields = ["version"]), + set: $util.oneOfSetter($oneOfFields) + }); + + SyncdVersion.create = function create(properties) { + return new SyncdVersion(properties); + }; + + SyncdVersion.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.version != null && Object.hasOwnProperty.call(m, "version")) + w.uint32(8).uint64(m.version); + return w; + }; + + SyncdVersion.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncdVersion(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.version = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + SyncdVersion.fromObject = function fromObject(d) { + if (d instanceof $root.proto.SyncdVersion) + return d; + var m = new $root.proto.SyncdVersion(); + if (d.version != null) { + if ($util.Long) + (m.version = $util.Long.fromValue(d.version)).unsigned = true; + else if (typeof d.version === "string") + m.version = parseInt(d.version, 10); + else if (typeof d.version === "number") + m.version = d.version; + else if (typeof d.version === "object") + m.version = new $util.LongBits(d.version.low >>> 0, d.version.high >>> 0).toNumber(true); + } + return m; + }; + + SyncdVersion.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.version != null && m.hasOwnProperty("version")) { + if (typeof m.version === "number") + d.version = o.longs === String ? String(m.version) : m.version; + else + d.version = o.longs === String ? longToString(m.version, true) : o.longs === Number ? longToNumber(m.version, true) : m.version; + if (o.oneofs) + d._version = "version"; + } + return d; + }; + + SyncdVersion.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + SyncdVersion.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.SyncdVersion"; + }; + + return SyncdVersion; + })(); + + proto.TapLinkAction = (function() { + + function TapLinkAction(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + TapLinkAction.prototype.title = null; + TapLinkAction.prototype.tapUrl = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TapLinkAction.prototype, "_title", { + get: $util.oneOfGetter($oneOfFields = ["title"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TapLinkAction.prototype, "_tapUrl", { + get: $util.oneOfGetter($oneOfFields = ["tapUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + TapLinkAction.create = function create(properties) { + return new TapLinkAction(properties); + }; + + TapLinkAction.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.title != null && Object.hasOwnProperty.call(m, "title")) + w.uint32(10).string(m.title); + if (m.tapUrl != null && Object.hasOwnProperty.call(m, "tapUrl")) + w.uint32(18).string(m.tapUrl); + return w; + }; + + TapLinkAction.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.TapLinkAction(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.title = r.string(); + break; + } + case 2: { + m.tapUrl = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + TapLinkAction.fromObject = function fromObject(d) { + if (d instanceof $root.proto.TapLinkAction) + return d; + var m = new $root.proto.TapLinkAction(); + if (d.title != null) { + m.title = String(d.title); + } + if (d.tapUrl != null) { + m.tapUrl = String(d.tapUrl); + } + return m; + }; + + TapLinkAction.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.title != null && m.hasOwnProperty("title")) { + d.title = m.title; + if (o.oneofs) + d._title = "title"; + } + if (m.tapUrl != null && m.hasOwnProperty("tapUrl")) { + d.tapUrl = m.tapUrl; + if (o.oneofs) + d._tapUrl = "tapUrl"; + } + return d; + }; + + TapLinkAction.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TapLinkAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.TapLinkAction"; + }; + + return TapLinkAction; + })(); + + proto.TemplateButton = (function() { + + function TemplateButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + TemplateButton.prototype.index = null; + TemplateButton.prototype.quickReplyButton = null; + TemplateButton.prototype.urlButton = null; + TemplateButton.prototype.callButton = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TemplateButton.prototype, "_index", { + get: $util.oneOfGetter($oneOfFields = ["index"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Object.defineProperty(TemplateButton.prototype, "button", { + get: $util.oneOfGetter($oneOfFields = ["quickReplyButton", "urlButton", "callButton"]), + set: $util.oneOfSetter($oneOfFields) + }); + + TemplateButton.create = function create(properties) { + return new TemplateButton(properties); + }; + + TemplateButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.quickReplyButton != null && Object.hasOwnProperty.call(m, "quickReplyButton")) + $root.proto.TemplateButton.QuickReplyButton.encode(m.quickReplyButton, w.uint32(10).fork()).ldelim(); + if (m.urlButton != null && Object.hasOwnProperty.call(m, "urlButton")) + $root.proto.TemplateButton.URLButton.encode(m.urlButton, w.uint32(18).fork()).ldelim(); + if (m.callButton != null && Object.hasOwnProperty.call(m, "callButton")) + $root.proto.TemplateButton.CallButton.encode(m.callButton, w.uint32(26).fork()).ldelim(); + if (m.index != null && Object.hasOwnProperty.call(m, "index")) + w.uint32(32).uint32(m.index); + return w; + }; + + TemplateButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.TemplateButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 4: { + m.index = r.uint32(); + break; + } + case 1: { + m.quickReplyButton = $root.proto.TemplateButton.QuickReplyButton.decode(r, r.uint32()); + break; + } + case 2: { + m.urlButton = $root.proto.TemplateButton.URLButton.decode(r, r.uint32()); + break; + } + case 3: { + m.callButton = $root.proto.TemplateButton.CallButton.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + TemplateButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.TemplateButton) + return d; + var m = new $root.proto.TemplateButton(); + if (d.index != null) { + m.index = d.index >>> 0; + } + if (d.quickReplyButton != null) { + if (typeof d.quickReplyButton !== "object") + throw TypeError(".proto.TemplateButton.quickReplyButton: object expected"); + m.quickReplyButton = $root.proto.TemplateButton.QuickReplyButton.fromObject(d.quickReplyButton); + } + if (d.urlButton != null) { + if (typeof d.urlButton !== "object") + throw TypeError(".proto.TemplateButton.urlButton: object expected"); + m.urlButton = $root.proto.TemplateButton.URLButton.fromObject(d.urlButton); + } + if (d.callButton != null) { + if (typeof d.callButton !== "object") + throw TypeError(".proto.TemplateButton.callButton: object expected"); + m.callButton = $root.proto.TemplateButton.CallButton.fromObject(d.callButton); + } + return m; + }; + + TemplateButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.quickReplyButton != null && m.hasOwnProperty("quickReplyButton")) { + d.quickReplyButton = $root.proto.TemplateButton.QuickReplyButton.toObject(m.quickReplyButton, o); + if (o.oneofs) + d.button = "quickReplyButton"; + } + if (m.urlButton != null && m.hasOwnProperty("urlButton")) { + d.urlButton = $root.proto.TemplateButton.URLButton.toObject(m.urlButton, o); + if (o.oneofs) + d.button = "urlButton"; + } + if (m.callButton != null && m.hasOwnProperty("callButton")) { + d.callButton = $root.proto.TemplateButton.CallButton.toObject(m.callButton, o); + if (o.oneofs) + d.button = "callButton"; + } + if (m.index != null && m.hasOwnProperty("index")) { + d.index = m.index; + if (o.oneofs) + d._index = "index"; + } + return d; + }; + + TemplateButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TemplateButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.TemplateButton"; + }; + + TemplateButton.CallButton = (function() { + + function CallButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + CallButton.prototype.displayText = null; + CallButton.prototype.phoneNumber = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallButton.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(CallButton.prototype, "_phoneNumber", { + get: $util.oneOfGetter($oneOfFields = ["phoneNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + CallButton.create = function create(properties) { + return new CallButton(properties); + }; + + CallButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + $root.proto.Message.HighlyStructuredMessage.encode(m.displayText, w.uint32(10).fork()).ldelim(); + if (m.phoneNumber != null && Object.hasOwnProperty.call(m, "phoneNumber")) + $root.proto.Message.HighlyStructuredMessage.encode(m.phoneNumber, w.uint32(18).fork()).ldelim(); + return w; + }; + + CallButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.TemplateButton.CallButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.phoneNumber = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + CallButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.TemplateButton.CallButton) + return d; + var m = new $root.proto.TemplateButton.CallButton(); + if (d.displayText != null) { + if (typeof d.displayText !== "object") + throw TypeError(".proto.TemplateButton.CallButton.displayText: object expected"); + m.displayText = $root.proto.Message.HighlyStructuredMessage.fromObject(d.displayText); + } + if (d.phoneNumber != null) { + if (typeof d.phoneNumber !== "object") + throw TypeError(".proto.TemplateButton.CallButton.phoneNumber: object expected"); + m.phoneNumber = $root.proto.Message.HighlyStructuredMessage.fromObject(d.phoneNumber); + } + return m; + }; + + CallButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = $root.proto.Message.HighlyStructuredMessage.toObject(m.displayText, o); + if (o.oneofs) + d._displayText = "displayText"; + } + if (m.phoneNumber != null && m.hasOwnProperty("phoneNumber")) { + d.phoneNumber = $root.proto.Message.HighlyStructuredMessage.toObject(m.phoneNumber, o); + if (o.oneofs) + d._phoneNumber = "phoneNumber"; + } + return d; + }; + + CallButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + CallButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.TemplateButton.CallButton"; + }; + + return CallButton; + })(); + + TemplateButton.QuickReplyButton = (function() { + + function QuickReplyButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + QuickReplyButton.prototype.displayText = null; + QuickReplyButton.prototype.id = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuickReplyButton.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(QuickReplyButton.prototype, "_id", { + get: $util.oneOfGetter($oneOfFields = ["id"]), + set: $util.oneOfSetter($oneOfFields) + }); + + QuickReplyButton.create = function create(properties) { + return new QuickReplyButton(properties); + }; + + QuickReplyButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + $root.proto.Message.HighlyStructuredMessage.encode(m.displayText, w.uint32(10).fork()).ldelim(); + if (m.id != null && Object.hasOwnProperty.call(m, "id")) + w.uint32(18).string(m.id); + return w; + }; + + QuickReplyButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.TemplateButton.QuickReplyButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.id = r.string(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + QuickReplyButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.TemplateButton.QuickReplyButton) + return d; + var m = new $root.proto.TemplateButton.QuickReplyButton(); + if (d.displayText != null) { + if (typeof d.displayText !== "object") + throw TypeError(".proto.TemplateButton.QuickReplyButton.displayText: object expected"); + m.displayText = $root.proto.Message.HighlyStructuredMessage.fromObject(d.displayText); + } + if (d.id != null) { + m.id = String(d.id); + } + return m; + }; + + QuickReplyButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = $root.proto.Message.HighlyStructuredMessage.toObject(m.displayText, o); + if (o.oneofs) + d._displayText = "displayText"; + } + if (m.id != null && m.hasOwnProperty("id")) { + d.id = m.id; + if (o.oneofs) + d._id = "id"; + } + return d; + }; + + QuickReplyButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + QuickReplyButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.TemplateButton.QuickReplyButton"; + }; + + return QuickReplyButton; + })(); + + TemplateButton.URLButton = (function() { + + function URLButton(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + URLButton.prototype.displayText = null; + URLButton.prototype.url = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(URLButton.prototype, "_displayText", { + get: $util.oneOfGetter($oneOfFields = ["displayText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(URLButton.prototype, "_url", { + get: $util.oneOfGetter($oneOfFields = ["url"]), + set: $util.oneOfSetter($oneOfFields) + }); + + URLButton.create = function create(properties) { + return new URLButton(properties); + }; + + URLButton.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.displayText != null && Object.hasOwnProperty.call(m, "displayText")) + $root.proto.Message.HighlyStructuredMessage.encode(m.displayText, w.uint32(10).fork()).ldelim(); + if (m.url != null && Object.hasOwnProperty.call(m, "url")) + $root.proto.Message.HighlyStructuredMessage.encode(m.url, w.uint32(18).fork()).ldelim(); + return w; + }; + + URLButton.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.TemplateButton.URLButton(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.displayText = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + case 2: { + m.url = $root.proto.Message.HighlyStructuredMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + URLButton.fromObject = function fromObject(d) { + if (d instanceof $root.proto.TemplateButton.URLButton) + return d; + var m = new $root.proto.TemplateButton.URLButton(); + if (d.displayText != null) { + if (typeof d.displayText !== "object") + throw TypeError(".proto.TemplateButton.URLButton.displayText: object expected"); + m.displayText = $root.proto.Message.HighlyStructuredMessage.fromObject(d.displayText); + } + if (d.url != null) { + if (typeof d.url !== "object") + throw TypeError(".proto.TemplateButton.URLButton.url: object expected"); + m.url = $root.proto.Message.HighlyStructuredMessage.fromObject(d.url); + } + return m; + }; + + URLButton.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.displayText != null && m.hasOwnProperty("displayText")) { + d.displayText = $root.proto.Message.HighlyStructuredMessage.toObject(m.displayText, o); + if (o.oneofs) + d._displayText = "displayText"; + } + if (m.url != null && m.hasOwnProperty("url")) { + d.url = $root.proto.Message.HighlyStructuredMessage.toObject(m.url, o); + if (o.oneofs) + d._url = "url"; + } + return d; + }; + + URLButton.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + URLButton.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.TemplateButton.URLButton"; + }; + + return URLButton; + })(); + + return TemplateButton; + })(); + + proto.ThreadID = (function() { + + function ThreadID(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + ThreadID.prototype.threadType = null; + ThreadID.prototype.threadKey = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ThreadID.prototype, "_threadType", { + get: $util.oneOfGetter($oneOfFields = ["threadType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(ThreadID.prototype, "_threadKey", { + get: $util.oneOfGetter($oneOfFields = ["threadKey"]), + set: $util.oneOfSetter($oneOfFields) + }); + + ThreadID.create = function create(properties) { + return new ThreadID(properties); + }; + + ThreadID.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.threadType != null && Object.hasOwnProperty.call(m, "threadType")) + w.uint32(8).int32(m.threadType); + if (m.threadKey != null && Object.hasOwnProperty.call(m, "threadKey")) + $root.proto.MessageKey.encode(m.threadKey, w.uint32(18).fork()).ldelim(); + return w; + }; + + ThreadID.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.ThreadID(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.threadType = r.int32(); + break; + } + case 2: { + m.threadKey = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + ThreadID.fromObject = function fromObject(d) { + if (d instanceof $root.proto.ThreadID) + return d; + var m = new $root.proto.ThreadID(); + switch (d.threadType) { + default: + if (typeof d.threadType === "number") { + m.threadType = d.threadType; + break; + } + break; + case "UNKNOWN": + case 0: + m.threadType = 0; + break; + case "VIEW_REPLIES": + case 1: + m.threadType = 1; + break; + case "AI_THREAD": + case 2: + m.threadType = 2; + break; + } + if (d.threadKey != null) { + if (typeof d.threadKey !== "object") + throw TypeError(".proto.ThreadID.threadKey: object expected"); + m.threadKey = $root.proto.MessageKey.fromObject(d.threadKey); + } + return m; + }; + + ThreadID.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.threadType != null && m.hasOwnProperty("threadType")) { + d.threadType = o.enums === String ? $root.proto.ThreadID.ThreadType[m.threadType] === undefined ? m.threadType : $root.proto.ThreadID.ThreadType[m.threadType] : m.threadType; + if (o.oneofs) + d._threadType = "threadType"; + } + if (m.threadKey != null && m.hasOwnProperty("threadKey")) { + d.threadKey = $root.proto.MessageKey.toObject(m.threadKey, o); + if (o.oneofs) + d._threadKey = "threadKey"; + } + return d; + }; + + ThreadID.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + ThreadID.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.ThreadID"; + }; + + ThreadID.ThreadType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "VIEW_REPLIES"] = 1; + values[valuesById[2] = "AI_THREAD"] = 2; + return values; + })(); + + return ThreadID; + })(); + + proto.UrlTrackingMap = (function() { + + function UrlTrackingMap(p) { + this.urlTrackingMapElements = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UrlTrackingMap.prototype.urlTrackingMapElements = $util.emptyArray; + + UrlTrackingMap.create = function create(properties) { + return new UrlTrackingMap(properties); + }; + + UrlTrackingMap.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.urlTrackingMapElements != null && m.urlTrackingMapElements.length) { + for (var i = 0; i < m.urlTrackingMapElements.length; ++i) + $root.proto.UrlTrackingMap.UrlTrackingMapElement.encode(m.urlTrackingMapElements[i], w.uint32(10).fork()).ldelim(); + } + return w; + }; + + UrlTrackingMap.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.UrlTrackingMap(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + if (!(m.urlTrackingMapElements && m.urlTrackingMapElements.length)) + m.urlTrackingMapElements = []; + m.urlTrackingMapElements.push($root.proto.UrlTrackingMap.UrlTrackingMapElement.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UrlTrackingMap.fromObject = function fromObject(d) { + if (d instanceof $root.proto.UrlTrackingMap) + return d; + var m = new $root.proto.UrlTrackingMap(); + if (d.urlTrackingMapElements) { + if (!Array.isArray(d.urlTrackingMapElements)) + throw TypeError(".proto.UrlTrackingMap.urlTrackingMapElements: array expected"); + m.urlTrackingMapElements = []; + for (var i = 0; i < d.urlTrackingMapElements.length; ++i) { + if (typeof d.urlTrackingMapElements[i] !== "object") + throw TypeError(".proto.UrlTrackingMap.urlTrackingMapElements: object expected"); + m.urlTrackingMapElements[i] = $root.proto.UrlTrackingMap.UrlTrackingMapElement.fromObject(d.urlTrackingMapElements[i]); + } + } + return m; + }; + + UrlTrackingMap.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.urlTrackingMapElements = []; + } + if (m.urlTrackingMapElements && m.urlTrackingMapElements.length) { + d.urlTrackingMapElements = []; + for (var j = 0; j < m.urlTrackingMapElements.length; ++j) { + d.urlTrackingMapElements[j] = $root.proto.UrlTrackingMap.UrlTrackingMapElement.toObject(m.urlTrackingMapElements[j], o); + } + } + return d; + }; + + UrlTrackingMap.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UrlTrackingMap.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.UrlTrackingMap"; + }; + + UrlTrackingMap.UrlTrackingMapElement = (function() { + + function UrlTrackingMapElement(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UrlTrackingMapElement.prototype.originalUrl = null; + UrlTrackingMapElement.prototype.unconsentedUsersUrl = null; + UrlTrackingMapElement.prototype.consentedUsersUrl = null; + UrlTrackingMapElement.prototype.cardIndex = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UrlTrackingMapElement.prototype, "_originalUrl", { + get: $util.oneOfGetter($oneOfFields = ["originalUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UrlTrackingMapElement.prototype, "_unconsentedUsersUrl", { + get: $util.oneOfGetter($oneOfFields = ["unconsentedUsersUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UrlTrackingMapElement.prototype, "_consentedUsersUrl", { + get: $util.oneOfGetter($oneOfFields = ["consentedUsersUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UrlTrackingMapElement.prototype, "_cardIndex", { + get: $util.oneOfGetter($oneOfFields = ["cardIndex"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UrlTrackingMapElement.create = function create(properties) { + return new UrlTrackingMapElement(properties); + }; + + UrlTrackingMapElement.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.originalUrl != null && Object.hasOwnProperty.call(m, "originalUrl")) + w.uint32(10).string(m.originalUrl); + if (m.unconsentedUsersUrl != null && Object.hasOwnProperty.call(m, "unconsentedUsersUrl")) + w.uint32(18).string(m.unconsentedUsersUrl); + if (m.consentedUsersUrl != null && Object.hasOwnProperty.call(m, "consentedUsersUrl")) + w.uint32(26).string(m.consentedUsersUrl); + if (m.cardIndex != null && Object.hasOwnProperty.call(m, "cardIndex")) + w.uint32(32).uint32(m.cardIndex); + return w; + }; + + UrlTrackingMapElement.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.UrlTrackingMap.UrlTrackingMapElement(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.originalUrl = r.string(); + break; + } + case 2: { + m.unconsentedUsersUrl = r.string(); + break; + } + case 3: { + m.consentedUsersUrl = r.string(); + break; + } + case 4: { + m.cardIndex = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UrlTrackingMapElement.fromObject = function fromObject(d) { + if (d instanceof $root.proto.UrlTrackingMap.UrlTrackingMapElement) + return d; + var m = new $root.proto.UrlTrackingMap.UrlTrackingMapElement(); + if (d.originalUrl != null) { + m.originalUrl = String(d.originalUrl); + } + if (d.unconsentedUsersUrl != null) { + m.unconsentedUsersUrl = String(d.unconsentedUsersUrl); + } + if (d.consentedUsersUrl != null) { + m.consentedUsersUrl = String(d.consentedUsersUrl); + } + if (d.cardIndex != null) { + m.cardIndex = d.cardIndex >>> 0; + } + return m; + }; + + UrlTrackingMapElement.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.originalUrl != null && m.hasOwnProperty("originalUrl")) { + d.originalUrl = m.originalUrl; + if (o.oneofs) + d._originalUrl = "originalUrl"; + } + if (m.unconsentedUsersUrl != null && m.hasOwnProperty("unconsentedUsersUrl")) { + d.unconsentedUsersUrl = m.unconsentedUsersUrl; + if (o.oneofs) + d._unconsentedUsersUrl = "unconsentedUsersUrl"; + } + if (m.consentedUsersUrl != null && m.hasOwnProperty("consentedUsersUrl")) { + d.consentedUsersUrl = m.consentedUsersUrl; + if (o.oneofs) + d._consentedUsersUrl = "consentedUsersUrl"; + } + if (m.cardIndex != null && m.hasOwnProperty("cardIndex")) { + d.cardIndex = m.cardIndex; + if (o.oneofs) + d._cardIndex = "cardIndex"; + } + return d; + }; + + UrlTrackingMapElement.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UrlTrackingMapElement.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.UrlTrackingMap.UrlTrackingMapElement"; + }; + + return UrlTrackingMapElement; + })(); + + return UrlTrackingMap; + })(); + + proto.UserPassword = (function() { + + function UserPassword(p) { + this.transformerArg = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UserPassword.prototype.encoding = null; + UserPassword.prototype.transformer = null; + UserPassword.prototype.transformerArg = $util.emptyArray; + UserPassword.prototype.transformedData = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserPassword.prototype, "_encoding", { + get: $util.oneOfGetter($oneOfFields = ["encoding"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserPassword.prototype, "_transformer", { + get: $util.oneOfGetter($oneOfFields = ["transformer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserPassword.prototype, "_transformedData", { + get: $util.oneOfGetter($oneOfFields = ["transformedData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UserPassword.create = function create(properties) { + return new UserPassword(properties); + }; + + UserPassword.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.encoding != null && Object.hasOwnProperty.call(m, "encoding")) + w.uint32(8).int32(m.encoding); + if (m.transformer != null && Object.hasOwnProperty.call(m, "transformer")) + w.uint32(16).int32(m.transformer); + if (m.transformerArg != null && m.transformerArg.length) { + for (var i = 0; i < m.transformerArg.length; ++i) + $root.proto.UserPassword.TransformerArg.encode(m.transformerArg[i], w.uint32(26).fork()).ldelim(); + } + if (m.transformedData != null && Object.hasOwnProperty.call(m, "transformedData")) + w.uint32(34).bytes(m.transformedData); + return w; + }; + + UserPassword.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.UserPassword(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.encoding = r.int32(); + break; + } + case 2: { + m.transformer = r.int32(); + break; + } + case 3: { + if (!(m.transformerArg && m.transformerArg.length)) + m.transformerArg = []; + m.transformerArg.push($root.proto.UserPassword.TransformerArg.decode(r, r.uint32())); + break; + } + case 4: { + m.transformedData = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UserPassword.fromObject = function fromObject(d) { + if (d instanceof $root.proto.UserPassword) + return d; + var m = new $root.proto.UserPassword(); + switch (d.encoding) { + default: + if (typeof d.encoding === "number") { + m.encoding = d.encoding; + break; + } + break; + case "UTF8": + case 0: + m.encoding = 0; + break; + case "UTF8_BROKEN": + case 1: + m.encoding = 1; + break; + } + switch (d.transformer) { + default: + if (typeof d.transformer === "number") { + m.transformer = d.transformer; + break; + } + break; + case "NONE": + case 0: + m.transformer = 0; + break; + case "PBKDF2_HMAC_SHA512": + case 1: + m.transformer = 1; + break; + case "PBKDF2_HMAC_SHA384": + case 2: + m.transformer = 2; + break; + } + if (d.transformerArg) { + if (!Array.isArray(d.transformerArg)) + throw TypeError(".proto.UserPassword.transformerArg: array expected"); + m.transformerArg = []; + for (var i = 0; i < d.transformerArg.length; ++i) { + if (typeof d.transformerArg[i] !== "object") + throw TypeError(".proto.UserPassword.transformerArg: object expected"); + m.transformerArg[i] = $root.proto.UserPassword.TransformerArg.fromObject(d.transformerArg[i]); + } + } + if (d.transformedData != null) { + if (typeof d.transformedData === "string") + $util.base64.decode(d.transformedData, m.transformedData = $util.newBuffer($util.base64.length(d.transformedData)), 0); + else if (d.transformedData.length >= 0) + m.transformedData = d.transformedData; + } + return m; + }; + + UserPassword.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.transformerArg = []; + } + if (m.encoding != null && m.hasOwnProperty("encoding")) { + d.encoding = o.enums === String ? $root.proto.UserPassword.Encoding[m.encoding] === undefined ? m.encoding : $root.proto.UserPassword.Encoding[m.encoding] : m.encoding; + if (o.oneofs) + d._encoding = "encoding"; + } + if (m.transformer != null && m.hasOwnProperty("transformer")) { + d.transformer = o.enums === String ? $root.proto.UserPassword.Transformer[m.transformer] === undefined ? m.transformer : $root.proto.UserPassword.Transformer[m.transformer] : m.transformer; + if (o.oneofs) + d._transformer = "transformer"; + } + if (m.transformerArg && m.transformerArg.length) { + d.transformerArg = []; + for (var j = 0; j < m.transformerArg.length; ++j) { + d.transformerArg[j] = $root.proto.UserPassword.TransformerArg.toObject(m.transformerArg[j], o); + } + } + if (m.transformedData != null && m.hasOwnProperty("transformedData")) { + d.transformedData = o.bytes === String ? $util.base64.encode(m.transformedData, 0, m.transformedData.length) : o.bytes === Array ? Array.prototype.slice.call(m.transformedData) : m.transformedData; + if (o.oneofs) + d._transformedData = "transformedData"; + } + return d; + }; + + UserPassword.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UserPassword.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.UserPassword"; + }; + + UserPassword.Encoding = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UTF8"] = 0; + values[valuesById[1] = "UTF8_BROKEN"] = 1; + return values; + })(); + + UserPassword.Transformer = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NONE"] = 0; + values[valuesById[1] = "PBKDF2_HMAC_SHA512"] = 1; + values[valuesById[2] = "PBKDF2_HMAC_SHA384"] = 2; + return values; + })(); + + UserPassword.TransformerArg = (function() { + + function TransformerArg(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + TransformerArg.prototype.key = null; + TransformerArg.prototype.value = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TransformerArg.prototype, "_key", { + get: $util.oneOfGetter($oneOfFields = ["key"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(TransformerArg.prototype, "_value", { + get: $util.oneOfGetter($oneOfFields = ["value"]), + set: $util.oneOfSetter($oneOfFields) + }); + + TransformerArg.create = function create(properties) { + return new TransformerArg(properties); + }; + + TransformerArg.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + w.uint32(10).string(m.key); + if (m.value != null && Object.hasOwnProperty.call(m, "value")) + $root.proto.UserPassword.TransformerArg.Value.encode(m.value, w.uint32(18).fork()).ldelim(); + return w; + }; + + TransformerArg.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.UserPassword.TransformerArg(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = r.string(); + break; + } + case 2: { + m.value = $root.proto.UserPassword.TransformerArg.Value.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + TransformerArg.fromObject = function fromObject(d) { + if (d instanceof $root.proto.UserPassword.TransformerArg) + return d; + var m = new $root.proto.UserPassword.TransformerArg(); + if (d.key != null) { + m.key = String(d.key); + } + if (d.value != null) { + if (typeof d.value !== "object") + throw TypeError(".proto.UserPassword.TransformerArg.value: object expected"); + m.value = $root.proto.UserPassword.TransformerArg.Value.fromObject(d.value); + } + return m; + }; + + TransformerArg.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.key != null && m.hasOwnProperty("key")) { + d.key = m.key; + if (o.oneofs) + d._key = "key"; + } + if (m.value != null && m.hasOwnProperty("value")) { + d.value = $root.proto.UserPassword.TransformerArg.Value.toObject(m.value, o); + if (o.oneofs) + d._value = "value"; + } + return d; + }; + + TransformerArg.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + TransformerArg.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.UserPassword.TransformerArg"; + }; + + TransformerArg.Value = (function() { + + function Value(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Value.prototype.asBlob = null; + Value.prototype.asUnsignedInteger = null; + + let $oneOfFields; + + Object.defineProperty(Value.prototype, "value", { + get: $util.oneOfGetter($oneOfFields = ["asBlob", "asUnsignedInteger"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Value.create = function create(properties) { + return new Value(properties); + }; + + Value.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.asBlob != null && Object.hasOwnProperty.call(m, "asBlob")) + w.uint32(10).bytes(m.asBlob); + if (m.asUnsignedInteger != null && Object.hasOwnProperty.call(m, "asUnsignedInteger")) + w.uint32(16).uint32(m.asUnsignedInteger); + return w; + }; + + Value.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.UserPassword.TransformerArg.Value(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.asBlob = r.bytes(); + break; + } + case 2: { + m.asUnsignedInteger = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Value.fromObject = function fromObject(d) { + if (d instanceof $root.proto.UserPassword.TransformerArg.Value) + return d; + var m = new $root.proto.UserPassword.TransformerArg.Value(); + if (d.asBlob != null) { + if (typeof d.asBlob === "string") + $util.base64.decode(d.asBlob, m.asBlob = $util.newBuffer($util.base64.length(d.asBlob)), 0); + else if (d.asBlob.length >= 0) + m.asBlob = d.asBlob; + } + if (d.asUnsignedInteger != null) { + m.asUnsignedInteger = d.asUnsignedInteger >>> 0; + } + return m; + }; + + Value.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.asBlob != null && m.hasOwnProperty("asBlob")) { + d.asBlob = o.bytes === String ? $util.base64.encode(m.asBlob, 0, m.asBlob.length) : o.bytes === Array ? Array.prototype.slice.call(m.asBlob) : m.asBlob; + if (o.oneofs) + d.value = "asBlob"; + } + if (m.asUnsignedInteger != null && m.hasOwnProperty("asUnsignedInteger")) { + d.asUnsignedInteger = m.asUnsignedInteger; + if (o.oneofs) + d.value = "asUnsignedInteger"; + } + return d; + }; + + Value.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Value.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.UserPassword.TransformerArg.Value"; + }; + + return Value; + })(); + + return TransformerArg; + })(); + + return UserPassword; + })(); + + proto.UserReceipt = (function() { + + function UserReceipt(p) { + this.pendingDeviceJid = []; + this.deliveredDeviceJid = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + UserReceipt.prototype.userJid = ""; + UserReceipt.prototype.receiptTimestamp = null; + UserReceipt.prototype.readTimestamp = null; + UserReceipt.prototype.playedTimestamp = null; + UserReceipt.prototype.pendingDeviceJid = $util.emptyArray; + UserReceipt.prototype.deliveredDeviceJid = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserReceipt.prototype, "_receiptTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["receiptTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserReceipt.prototype, "_readTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["readTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(UserReceipt.prototype, "_playedTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["playedTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + UserReceipt.create = function create(properties) { + return new UserReceipt(properties); + }; + + UserReceipt.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.userJid != null && Object.hasOwnProperty.call(m, "userJid")) + w.uint32(10).string(m.userJid); + if (m.receiptTimestamp != null && Object.hasOwnProperty.call(m, "receiptTimestamp")) + w.uint32(16).int64(m.receiptTimestamp); + if (m.readTimestamp != null && Object.hasOwnProperty.call(m, "readTimestamp")) + w.uint32(24).int64(m.readTimestamp); + if (m.playedTimestamp != null && Object.hasOwnProperty.call(m, "playedTimestamp")) + w.uint32(32).int64(m.playedTimestamp); + if (m.pendingDeviceJid != null && m.pendingDeviceJid.length) { + for (var i = 0; i < m.pendingDeviceJid.length; ++i) + w.uint32(42).string(m.pendingDeviceJid[i]); + } + if (m.deliveredDeviceJid != null && m.deliveredDeviceJid.length) { + for (var i = 0; i < m.deliveredDeviceJid.length; ++i) + w.uint32(50).string(m.deliveredDeviceJid[i]); + } + return w; + }; + + UserReceipt.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.UserReceipt(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.userJid = r.string(); + break; + } + case 2: { + m.receiptTimestamp = r.int64(); + break; + } + case 3: { + m.readTimestamp = r.int64(); + break; + } + case 4: { + m.playedTimestamp = r.int64(); + break; + } + case 5: { + if (!(m.pendingDeviceJid && m.pendingDeviceJid.length)) + m.pendingDeviceJid = []; + m.pendingDeviceJid.push(r.string()); + break; + } + case 6: { + if (!(m.deliveredDeviceJid && m.deliveredDeviceJid.length)) + m.deliveredDeviceJid = []; + m.deliveredDeviceJid.push(r.string()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + UserReceipt.fromObject = function fromObject(d) { + if (d instanceof $root.proto.UserReceipt) + return d; + var m = new $root.proto.UserReceipt(); + if (d.userJid != null) { + m.userJid = String(d.userJid); + } + if (d.receiptTimestamp != null) { + if ($util.Long) + (m.receiptTimestamp = $util.Long.fromValue(d.receiptTimestamp)).unsigned = false; + else if (typeof d.receiptTimestamp === "string") + m.receiptTimestamp = parseInt(d.receiptTimestamp, 10); + else if (typeof d.receiptTimestamp === "number") + m.receiptTimestamp = d.receiptTimestamp; + else if (typeof d.receiptTimestamp === "object") + m.receiptTimestamp = new $util.LongBits(d.receiptTimestamp.low >>> 0, d.receiptTimestamp.high >>> 0).toNumber(); + } + if (d.readTimestamp != null) { + if ($util.Long) + (m.readTimestamp = $util.Long.fromValue(d.readTimestamp)).unsigned = false; + else if (typeof d.readTimestamp === "string") + m.readTimestamp = parseInt(d.readTimestamp, 10); + else if (typeof d.readTimestamp === "number") + m.readTimestamp = d.readTimestamp; + else if (typeof d.readTimestamp === "object") + m.readTimestamp = new $util.LongBits(d.readTimestamp.low >>> 0, d.readTimestamp.high >>> 0).toNumber(); + } + if (d.playedTimestamp != null) { + if ($util.Long) + (m.playedTimestamp = $util.Long.fromValue(d.playedTimestamp)).unsigned = false; + else if (typeof d.playedTimestamp === "string") + m.playedTimestamp = parseInt(d.playedTimestamp, 10); + else if (typeof d.playedTimestamp === "number") + m.playedTimestamp = d.playedTimestamp; + else if (typeof d.playedTimestamp === "object") + m.playedTimestamp = new $util.LongBits(d.playedTimestamp.low >>> 0, d.playedTimestamp.high >>> 0).toNumber(); + } + if (d.pendingDeviceJid) { + if (!Array.isArray(d.pendingDeviceJid)) + throw TypeError(".proto.UserReceipt.pendingDeviceJid: array expected"); + m.pendingDeviceJid = []; + for (var i = 0; i < d.pendingDeviceJid.length; ++i) { + m.pendingDeviceJid[i] = String(d.pendingDeviceJid[i]); + } + } + if (d.deliveredDeviceJid) { + if (!Array.isArray(d.deliveredDeviceJid)) + throw TypeError(".proto.UserReceipt.deliveredDeviceJid: array expected"); + m.deliveredDeviceJid = []; + for (var i = 0; i < d.deliveredDeviceJid.length; ++i) { + m.deliveredDeviceJid[i] = String(d.deliveredDeviceJid[i]); + } + } + return m; + }; + + UserReceipt.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.pendingDeviceJid = []; + d.deliveredDeviceJid = []; + } + if (o.defaults) { + d.userJid = ""; + } + if (m.userJid != null && m.hasOwnProperty("userJid")) { + d.userJid = m.userJid; + } + if (m.receiptTimestamp != null && m.hasOwnProperty("receiptTimestamp")) { + if (typeof m.receiptTimestamp === "number") + d.receiptTimestamp = o.longs === String ? String(m.receiptTimestamp) : m.receiptTimestamp; + else + d.receiptTimestamp = o.longs === String ? longToString(m.receiptTimestamp) : o.longs === Number ? longToNumber(m.receiptTimestamp) : m.receiptTimestamp; + if (o.oneofs) + d._receiptTimestamp = "receiptTimestamp"; + } + if (m.readTimestamp != null && m.hasOwnProperty("readTimestamp")) { + if (typeof m.readTimestamp === "number") + d.readTimestamp = o.longs === String ? String(m.readTimestamp) : m.readTimestamp; + else + d.readTimestamp = o.longs === String ? longToString(m.readTimestamp) : o.longs === Number ? longToNumber(m.readTimestamp) : m.readTimestamp; + if (o.oneofs) + d._readTimestamp = "readTimestamp"; + } + if (m.playedTimestamp != null && m.hasOwnProperty("playedTimestamp")) { + if (typeof m.playedTimestamp === "number") + d.playedTimestamp = o.longs === String ? String(m.playedTimestamp) : m.playedTimestamp; + else + d.playedTimestamp = o.longs === String ? longToString(m.playedTimestamp) : o.longs === Number ? longToNumber(m.playedTimestamp) : m.playedTimestamp; + if (o.oneofs) + d._playedTimestamp = "playedTimestamp"; + } + if (m.pendingDeviceJid && m.pendingDeviceJid.length) { + d.pendingDeviceJid = []; + for (var j = 0; j < m.pendingDeviceJid.length; ++j) { + d.pendingDeviceJid[j] = m.pendingDeviceJid[j]; + } + } + if (m.deliveredDeviceJid && m.deliveredDeviceJid.length) { + d.deliveredDeviceJid = []; + for (var j = 0; j < m.deliveredDeviceJid.length; ++j) { + d.deliveredDeviceJid[j] = m.deliveredDeviceJid[j]; + } + } + return d; + }; + + UserReceipt.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + UserReceipt.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.UserReceipt"; + }; + + return UserReceipt; + })(); + + proto.VerifiedNameCertificate = (function() { + + function VerifiedNameCertificate(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + VerifiedNameCertificate.prototype.details = null; + VerifiedNameCertificate.prototype.signature = null; + VerifiedNameCertificate.prototype.serverSignature = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VerifiedNameCertificate.prototype, "_details", { + get: $util.oneOfGetter($oneOfFields = ["details"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VerifiedNameCertificate.prototype, "_signature", { + get: $util.oneOfGetter($oneOfFields = ["signature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(VerifiedNameCertificate.prototype, "_serverSignature", { + get: $util.oneOfGetter($oneOfFields = ["serverSignature"]), + set: $util.oneOfSetter($oneOfFields) + }); + + VerifiedNameCertificate.create = function create(properties) { + return new VerifiedNameCertificate(properties); + }; + + VerifiedNameCertificate.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.details != null && Object.hasOwnProperty.call(m, "details")) + w.uint32(10).bytes(m.details); + if (m.signature != null && Object.hasOwnProperty.call(m, "signature")) + w.uint32(18).bytes(m.signature); + if (m.serverSignature != null && Object.hasOwnProperty.call(m, "serverSignature")) + w.uint32(26).bytes(m.serverSignature); + return w; + }; + + VerifiedNameCertificate.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.VerifiedNameCertificate(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.details = r.bytes(); + break; + } + case 2: { + m.signature = r.bytes(); + break; + } + case 3: { + m.serverSignature = r.bytes(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + VerifiedNameCertificate.fromObject = function fromObject(d) { + if (d instanceof $root.proto.VerifiedNameCertificate) + return d; + var m = new $root.proto.VerifiedNameCertificate(); + if (d.details != null) { + if (typeof d.details === "string") + $util.base64.decode(d.details, m.details = $util.newBuffer($util.base64.length(d.details)), 0); + else if (d.details.length >= 0) + m.details = d.details; + } + if (d.signature != null) { + if (typeof d.signature === "string") + $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0); + else if (d.signature.length >= 0) + m.signature = d.signature; + } + if (d.serverSignature != null) { + if (typeof d.serverSignature === "string") + $util.base64.decode(d.serverSignature, m.serverSignature = $util.newBuffer($util.base64.length(d.serverSignature)), 0); + else if (d.serverSignature.length >= 0) + m.serverSignature = d.serverSignature; + } + return m; + }; + + VerifiedNameCertificate.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.details != null && m.hasOwnProperty("details")) { + d.details = o.bytes === String ? $util.base64.encode(m.details, 0, m.details.length) : o.bytes === Array ? Array.prototype.slice.call(m.details) : m.details; + if (o.oneofs) + d._details = "details"; + } + if (m.signature != null && m.hasOwnProperty("signature")) { + d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature; + if (o.oneofs) + d._signature = "signature"; + } + if (m.serverSignature != null && m.hasOwnProperty("serverSignature")) { + d.serverSignature = o.bytes === String ? $util.base64.encode(m.serverSignature, 0, m.serverSignature.length) : o.bytes === Array ? Array.prototype.slice.call(m.serverSignature) : m.serverSignature; + if (o.oneofs) + d._serverSignature = "serverSignature"; + } + return d; + }; + + VerifiedNameCertificate.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + VerifiedNameCertificate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.VerifiedNameCertificate"; + }; + + VerifiedNameCertificate.Details = (function() { + + function Details(p) { + this.localizedNames = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + Details.prototype.serial = null; + Details.prototype.issuer = null; + Details.prototype.verifiedName = null; + Details.prototype.localizedNames = $util.emptyArray; + Details.prototype.issueTime = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_serial", { + get: $util.oneOfGetter($oneOfFields = ["serial"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_issuer", { + get: $util.oneOfGetter($oneOfFields = ["issuer"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_verifiedName", { + get: $util.oneOfGetter($oneOfFields = ["verifiedName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(Details.prototype, "_issueTime", { + get: $util.oneOfGetter($oneOfFields = ["issueTime"]), + set: $util.oneOfSetter($oneOfFields) + }); + + Details.create = function create(properties) { + return new Details(properties); + }; + + Details.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.serial != null && Object.hasOwnProperty.call(m, "serial")) + w.uint32(8).uint64(m.serial); + if (m.issuer != null && Object.hasOwnProperty.call(m, "issuer")) + w.uint32(18).string(m.issuer); + if (m.verifiedName != null && Object.hasOwnProperty.call(m, "verifiedName")) + w.uint32(34).string(m.verifiedName); + if (m.localizedNames != null && m.localizedNames.length) { + for (var i = 0; i < m.localizedNames.length; ++i) + $root.proto.LocalizedName.encode(m.localizedNames[i], w.uint32(66).fork()).ldelim(); + } + if (m.issueTime != null && Object.hasOwnProperty.call(m, "issueTime")) + w.uint32(80).uint64(m.issueTime); + return w; + }; + + Details.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.VerifiedNameCertificate.Details(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.serial = r.uint64(); + break; + } + case 2: { + m.issuer = r.string(); + break; + } + case 4: { + m.verifiedName = r.string(); + break; + } + case 8: { + if (!(m.localizedNames && m.localizedNames.length)) + m.localizedNames = []; + m.localizedNames.push($root.proto.LocalizedName.decode(r, r.uint32())); + break; + } + case 10: { + m.issueTime = r.uint64(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + Details.fromObject = function fromObject(d) { + if (d instanceof $root.proto.VerifiedNameCertificate.Details) + return d; + var m = new $root.proto.VerifiedNameCertificate.Details(); + if (d.serial != null) { + if ($util.Long) + (m.serial = $util.Long.fromValue(d.serial)).unsigned = true; + else if (typeof d.serial === "string") + m.serial = parseInt(d.serial, 10); + else if (typeof d.serial === "number") + m.serial = d.serial; + else if (typeof d.serial === "object") + m.serial = new $util.LongBits(d.serial.low >>> 0, d.serial.high >>> 0).toNumber(true); + } + if (d.issuer != null) { + m.issuer = String(d.issuer); + } + if (d.verifiedName != null) { + m.verifiedName = String(d.verifiedName); + } + if (d.localizedNames) { + if (!Array.isArray(d.localizedNames)) + throw TypeError(".proto.VerifiedNameCertificate.Details.localizedNames: array expected"); + m.localizedNames = []; + for (var i = 0; i < d.localizedNames.length; ++i) { + if (typeof d.localizedNames[i] !== "object") + throw TypeError(".proto.VerifiedNameCertificate.Details.localizedNames: object expected"); + m.localizedNames[i] = $root.proto.LocalizedName.fromObject(d.localizedNames[i]); + } + } + if (d.issueTime != null) { + if ($util.Long) + (m.issueTime = $util.Long.fromValue(d.issueTime)).unsigned = true; + else if (typeof d.issueTime === "string") + m.issueTime = parseInt(d.issueTime, 10); + else if (typeof d.issueTime === "number") + m.issueTime = d.issueTime; + else if (typeof d.issueTime === "object") + m.issueTime = new $util.LongBits(d.issueTime.low >>> 0, d.issueTime.high >>> 0).toNumber(true); + } + return m; + }; + + Details.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.localizedNames = []; + } + if (m.serial != null && m.hasOwnProperty("serial")) { + if (typeof m.serial === "number") + d.serial = o.longs === String ? String(m.serial) : m.serial; + else + d.serial = o.longs === String ? longToString(m.serial, true) : o.longs === Number ? longToNumber(m.serial, true) : m.serial; + if (o.oneofs) + d._serial = "serial"; + } + if (m.issuer != null && m.hasOwnProperty("issuer")) { + d.issuer = m.issuer; + if (o.oneofs) + d._issuer = "issuer"; + } + if (m.verifiedName != null && m.hasOwnProperty("verifiedName")) { + d.verifiedName = m.verifiedName; + if (o.oneofs) + d._verifiedName = "verifiedName"; + } + if (m.localizedNames && m.localizedNames.length) { + d.localizedNames = []; + for (var j = 0; j < m.localizedNames.length; ++j) { + d.localizedNames[j] = $root.proto.LocalizedName.toObject(m.localizedNames[j], o); + } + } + if (m.issueTime != null && m.hasOwnProperty("issueTime")) { + if (typeof m.issueTime === "number") + d.issueTime = o.longs === String ? String(m.issueTime) : m.issueTime; + else + d.issueTime = o.longs === String ? longToString(m.issueTime, true) : o.longs === Number ? longToNumber(m.issueTime, true) : m.issueTime; + if (o.oneofs) + d._issueTime = "issueTime"; + } + return d; + }; + + Details.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + Details.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.VerifiedNameCertificate.Details"; + }; + + return Details; + })(); + + return VerifiedNameCertificate; + })(); + + proto.WallpaperSettings = (function() { + + function WallpaperSettings(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WallpaperSettings.prototype.filename = null; + WallpaperSettings.prototype.opacity = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WallpaperSettings.prototype, "_filename", { + get: $util.oneOfGetter($oneOfFields = ["filename"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WallpaperSettings.prototype, "_opacity", { + get: $util.oneOfGetter($oneOfFields = ["opacity"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WallpaperSettings.create = function create(properties) { + return new WallpaperSettings(properties); + }; + + WallpaperSettings.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.filename != null && Object.hasOwnProperty.call(m, "filename")) + w.uint32(10).string(m.filename); + if (m.opacity != null && Object.hasOwnProperty.call(m, "opacity")) + w.uint32(16).uint32(m.opacity); + return w; + }; + + WallpaperSettings.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.WallpaperSettings(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.filename = r.string(); + break; + } + case 2: { + m.opacity = r.uint32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WallpaperSettings.fromObject = function fromObject(d) { + if (d instanceof $root.proto.WallpaperSettings) + return d; + var m = new $root.proto.WallpaperSettings(); + if (d.filename != null) { + m.filename = String(d.filename); + } + if (d.opacity != null) { + m.opacity = d.opacity >>> 0; + } + return m; + }; + + WallpaperSettings.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.filename != null && m.hasOwnProperty("filename")) { + d.filename = m.filename; + if (o.oneofs) + d._filename = "filename"; + } + if (m.opacity != null && m.hasOwnProperty("opacity")) { + d.opacity = m.opacity; + if (o.oneofs) + d._opacity = "opacity"; + } + return d; + }; + + WallpaperSettings.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WallpaperSettings.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.WallpaperSettings"; + }; + + return WallpaperSettings; + })(); + + proto.WebFeatures = (function() { + + function WebFeatures(p) { + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WebFeatures.prototype.labelsDisplay = null; + WebFeatures.prototype.voipIndividualOutgoing = null; + WebFeatures.prototype.groupsV3 = null; + WebFeatures.prototype.groupsV3Create = null; + WebFeatures.prototype.changeNumberV2 = null; + WebFeatures.prototype.queryStatusV3Thumbnail = null; + WebFeatures.prototype.liveLocations = null; + WebFeatures.prototype.queryVname = null; + WebFeatures.prototype.voipIndividualIncoming = null; + WebFeatures.prototype.quickRepliesQuery = null; + WebFeatures.prototype.payments = null; + WebFeatures.prototype.stickerPackQuery = null; + WebFeatures.prototype.liveLocationsFinal = null; + WebFeatures.prototype.labelsEdit = null; + WebFeatures.prototype.mediaUpload = null; + WebFeatures.prototype.mediaUploadRichQuickReplies = null; + WebFeatures.prototype.vnameV2 = null; + WebFeatures.prototype.videoPlaybackUrl = null; + WebFeatures.prototype.statusRanking = null; + WebFeatures.prototype.voipIndividualVideo = null; + WebFeatures.prototype.thirdPartyStickers = null; + WebFeatures.prototype.frequentlyForwardedSetting = null; + WebFeatures.prototype.groupsV4JoinPermission = null; + WebFeatures.prototype.recentStickers = null; + WebFeatures.prototype.catalog = null; + WebFeatures.prototype.starredStickers = null; + WebFeatures.prototype.voipGroupCall = null; + WebFeatures.prototype.templateMessage = null; + WebFeatures.prototype.templateMessageInteractivity = null; + WebFeatures.prototype.ephemeralMessages = null; + WebFeatures.prototype.e2ENotificationSync = null; + WebFeatures.prototype.recentStickersV2 = null; + WebFeatures.prototype.recentStickersV3 = null; + WebFeatures.prototype.userNotice = null; + WebFeatures.prototype.support = null; + WebFeatures.prototype.groupUiiCleanup = null; + WebFeatures.prototype.groupDogfoodingInternalOnly = null; + WebFeatures.prototype.settingsSync = null; + WebFeatures.prototype.archiveV2 = null; + WebFeatures.prototype.ephemeralAllowGroupMembers = null; + WebFeatures.prototype.ephemeral24HDuration = null; + WebFeatures.prototype.mdForceUpgrade = null; + WebFeatures.prototype.disappearingMode = null; + WebFeatures.prototype.externalMdOptInAvailable = null; + WebFeatures.prototype.noDeleteMessageTimeLimit = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_labelsDisplay", { + get: $util.oneOfGetter($oneOfFields = ["labelsDisplay"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_voipIndividualOutgoing", { + get: $util.oneOfGetter($oneOfFields = ["voipIndividualOutgoing"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_groupsV3", { + get: $util.oneOfGetter($oneOfFields = ["groupsV3"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_groupsV3Create", { + get: $util.oneOfGetter($oneOfFields = ["groupsV3Create"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_changeNumberV2", { + get: $util.oneOfGetter($oneOfFields = ["changeNumberV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_queryStatusV3Thumbnail", { + get: $util.oneOfGetter($oneOfFields = ["queryStatusV3Thumbnail"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_liveLocations", { + get: $util.oneOfGetter($oneOfFields = ["liveLocations"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_queryVname", { + get: $util.oneOfGetter($oneOfFields = ["queryVname"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_voipIndividualIncoming", { + get: $util.oneOfGetter($oneOfFields = ["voipIndividualIncoming"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_quickRepliesQuery", { + get: $util.oneOfGetter($oneOfFields = ["quickRepliesQuery"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_payments", { + get: $util.oneOfGetter($oneOfFields = ["payments"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_stickerPackQuery", { + get: $util.oneOfGetter($oneOfFields = ["stickerPackQuery"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_liveLocationsFinal", { + get: $util.oneOfGetter($oneOfFields = ["liveLocationsFinal"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_labelsEdit", { + get: $util.oneOfGetter($oneOfFields = ["labelsEdit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_mediaUpload", { + get: $util.oneOfGetter($oneOfFields = ["mediaUpload"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_mediaUploadRichQuickReplies", { + get: $util.oneOfGetter($oneOfFields = ["mediaUploadRichQuickReplies"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_vnameV2", { + get: $util.oneOfGetter($oneOfFields = ["vnameV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_videoPlaybackUrl", { + get: $util.oneOfGetter($oneOfFields = ["videoPlaybackUrl"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_statusRanking", { + get: $util.oneOfGetter($oneOfFields = ["statusRanking"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_voipIndividualVideo", { + get: $util.oneOfGetter($oneOfFields = ["voipIndividualVideo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_thirdPartyStickers", { + get: $util.oneOfGetter($oneOfFields = ["thirdPartyStickers"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_frequentlyForwardedSetting", { + get: $util.oneOfGetter($oneOfFields = ["frequentlyForwardedSetting"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_groupsV4JoinPermission", { + get: $util.oneOfGetter($oneOfFields = ["groupsV4JoinPermission"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_recentStickers", { + get: $util.oneOfGetter($oneOfFields = ["recentStickers"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_catalog", { + get: $util.oneOfGetter($oneOfFields = ["catalog"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_starredStickers", { + get: $util.oneOfGetter($oneOfFields = ["starredStickers"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_voipGroupCall", { + get: $util.oneOfGetter($oneOfFields = ["voipGroupCall"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_templateMessage", { + get: $util.oneOfGetter($oneOfFields = ["templateMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_templateMessageInteractivity", { + get: $util.oneOfGetter($oneOfFields = ["templateMessageInteractivity"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_ephemeralMessages", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralMessages"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_e2ENotificationSync", { + get: $util.oneOfGetter($oneOfFields = ["e2ENotificationSync"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_recentStickersV2", { + get: $util.oneOfGetter($oneOfFields = ["recentStickersV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_recentStickersV3", { + get: $util.oneOfGetter($oneOfFields = ["recentStickersV3"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_userNotice", { + get: $util.oneOfGetter($oneOfFields = ["userNotice"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_support", { + get: $util.oneOfGetter($oneOfFields = ["support"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_groupUiiCleanup", { + get: $util.oneOfGetter($oneOfFields = ["groupUiiCleanup"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_groupDogfoodingInternalOnly", { + get: $util.oneOfGetter($oneOfFields = ["groupDogfoodingInternalOnly"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_settingsSync", { + get: $util.oneOfGetter($oneOfFields = ["settingsSync"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_archiveV2", { + get: $util.oneOfGetter($oneOfFields = ["archiveV2"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_ephemeralAllowGroupMembers", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralAllowGroupMembers"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_ephemeral24HDuration", { + get: $util.oneOfGetter($oneOfFields = ["ephemeral24HDuration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_mdForceUpgrade", { + get: $util.oneOfGetter($oneOfFields = ["mdForceUpgrade"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_disappearingMode", { + get: $util.oneOfGetter($oneOfFields = ["disappearingMode"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_externalMdOptInAvailable", { + get: $util.oneOfGetter($oneOfFields = ["externalMdOptInAvailable"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebFeatures.prototype, "_noDeleteMessageTimeLimit", { + get: $util.oneOfGetter($oneOfFields = ["noDeleteMessageTimeLimit"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WebFeatures.create = function create(properties) { + return new WebFeatures(properties); + }; + + WebFeatures.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.labelsDisplay != null && Object.hasOwnProperty.call(m, "labelsDisplay")) + w.uint32(8).int32(m.labelsDisplay); + if (m.voipIndividualOutgoing != null && Object.hasOwnProperty.call(m, "voipIndividualOutgoing")) + w.uint32(16).int32(m.voipIndividualOutgoing); + if (m.groupsV3 != null && Object.hasOwnProperty.call(m, "groupsV3")) + w.uint32(24).int32(m.groupsV3); + if (m.groupsV3Create != null && Object.hasOwnProperty.call(m, "groupsV3Create")) + w.uint32(32).int32(m.groupsV3Create); + if (m.changeNumberV2 != null && Object.hasOwnProperty.call(m, "changeNumberV2")) + w.uint32(40).int32(m.changeNumberV2); + if (m.queryStatusV3Thumbnail != null && Object.hasOwnProperty.call(m, "queryStatusV3Thumbnail")) + w.uint32(48).int32(m.queryStatusV3Thumbnail); + if (m.liveLocations != null && Object.hasOwnProperty.call(m, "liveLocations")) + w.uint32(56).int32(m.liveLocations); + if (m.queryVname != null && Object.hasOwnProperty.call(m, "queryVname")) + w.uint32(64).int32(m.queryVname); + if (m.voipIndividualIncoming != null && Object.hasOwnProperty.call(m, "voipIndividualIncoming")) + w.uint32(72).int32(m.voipIndividualIncoming); + if (m.quickRepliesQuery != null && Object.hasOwnProperty.call(m, "quickRepliesQuery")) + w.uint32(80).int32(m.quickRepliesQuery); + if (m.payments != null && Object.hasOwnProperty.call(m, "payments")) + w.uint32(88).int32(m.payments); + if (m.stickerPackQuery != null && Object.hasOwnProperty.call(m, "stickerPackQuery")) + w.uint32(96).int32(m.stickerPackQuery); + if (m.liveLocationsFinal != null && Object.hasOwnProperty.call(m, "liveLocationsFinal")) + w.uint32(104).int32(m.liveLocationsFinal); + if (m.labelsEdit != null && Object.hasOwnProperty.call(m, "labelsEdit")) + w.uint32(112).int32(m.labelsEdit); + if (m.mediaUpload != null && Object.hasOwnProperty.call(m, "mediaUpload")) + w.uint32(120).int32(m.mediaUpload); + if (m.mediaUploadRichQuickReplies != null && Object.hasOwnProperty.call(m, "mediaUploadRichQuickReplies")) + w.uint32(144).int32(m.mediaUploadRichQuickReplies); + if (m.vnameV2 != null && Object.hasOwnProperty.call(m, "vnameV2")) + w.uint32(152).int32(m.vnameV2); + if (m.videoPlaybackUrl != null && Object.hasOwnProperty.call(m, "videoPlaybackUrl")) + w.uint32(160).int32(m.videoPlaybackUrl); + if (m.statusRanking != null && Object.hasOwnProperty.call(m, "statusRanking")) + w.uint32(168).int32(m.statusRanking); + if (m.voipIndividualVideo != null && Object.hasOwnProperty.call(m, "voipIndividualVideo")) + w.uint32(176).int32(m.voipIndividualVideo); + if (m.thirdPartyStickers != null && Object.hasOwnProperty.call(m, "thirdPartyStickers")) + w.uint32(184).int32(m.thirdPartyStickers); + if (m.frequentlyForwardedSetting != null && Object.hasOwnProperty.call(m, "frequentlyForwardedSetting")) + w.uint32(192).int32(m.frequentlyForwardedSetting); + if (m.groupsV4JoinPermission != null && Object.hasOwnProperty.call(m, "groupsV4JoinPermission")) + w.uint32(200).int32(m.groupsV4JoinPermission); + if (m.recentStickers != null && Object.hasOwnProperty.call(m, "recentStickers")) + w.uint32(208).int32(m.recentStickers); + if (m.catalog != null && Object.hasOwnProperty.call(m, "catalog")) + w.uint32(216).int32(m.catalog); + if (m.starredStickers != null && Object.hasOwnProperty.call(m, "starredStickers")) + w.uint32(224).int32(m.starredStickers); + if (m.voipGroupCall != null && Object.hasOwnProperty.call(m, "voipGroupCall")) + w.uint32(232).int32(m.voipGroupCall); + if (m.templateMessage != null && Object.hasOwnProperty.call(m, "templateMessage")) + w.uint32(240).int32(m.templateMessage); + if (m.templateMessageInteractivity != null && Object.hasOwnProperty.call(m, "templateMessageInteractivity")) + w.uint32(248).int32(m.templateMessageInteractivity); + if (m.ephemeralMessages != null && Object.hasOwnProperty.call(m, "ephemeralMessages")) + w.uint32(256).int32(m.ephemeralMessages); + if (m.e2ENotificationSync != null && Object.hasOwnProperty.call(m, "e2ENotificationSync")) + w.uint32(264).int32(m.e2ENotificationSync); + if (m.recentStickersV2 != null && Object.hasOwnProperty.call(m, "recentStickersV2")) + w.uint32(272).int32(m.recentStickersV2); + if (m.recentStickersV3 != null && Object.hasOwnProperty.call(m, "recentStickersV3")) + w.uint32(288).int32(m.recentStickersV3); + if (m.userNotice != null && Object.hasOwnProperty.call(m, "userNotice")) + w.uint32(296).int32(m.userNotice); + if (m.support != null && Object.hasOwnProperty.call(m, "support")) + w.uint32(312).int32(m.support); + if (m.groupUiiCleanup != null && Object.hasOwnProperty.call(m, "groupUiiCleanup")) + w.uint32(320).int32(m.groupUiiCleanup); + if (m.groupDogfoodingInternalOnly != null && Object.hasOwnProperty.call(m, "groupDogfoodingInternalOnly")) + w.uint32(328).int32(m.groupDogfoodingInternalOnly); + if (m.settingsSync != null && Object.hasOwnProperty.call(m, "settingsSync")) + w.uint32(336).int32(m.settingsSync); + if (m.archiveV2 != null && Object.hasOwnProperty.call(m, "archiveV2")) + w.uint32(344).int32(m.archiveV2); + if (m.ephemeralAllowGroupMembers != null && Object.hasOwnProperty.call(m, "ephemeralAllowGroupMembers")) + w.uint32(352).int32(m.ephemeralAllowGroupMembers); + if (m.ephemeral24HDuration != null && Object.hasOwnProperty.call(m, "ephemeral24HDuration")) + w.uint32(360).int32(m.ephemeral24HDuration); + if (m.mdForceUpgrade != null && Object.hasOwnProperty.call(m, "mdForceUpgrade")) + w.uint32(368).int32(m.mdForceUpgrade); + if (m.disappearingMode != null && Object.hasOwnProperty.call(m, "disappearingMode")) + w.uint32(376).int32(m.disappearingMode); + if (m.externalMdOptInAvailable != null && Object.hasOwnProperty.call(m, "externalMdOptInAvailable")) + w.uint32(384).int32(m.externalMdOptInAvailable); + if (m.noDeleteMessageTimeLimit != null && Object.hasOwnProperty.call(m, "noDeleteMessageTimeLimit")) + w.uint32(392).int32(m.noDeleteMessageTimeLimit); + return w; + }; + + WebFeatures.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.WebFeatures(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.labelsDisplay = r.int32(); + break; + } + case 2: { + m.voipIndividualOutgoing = r.int32(); + break; + } + case 3: { + m.groupsV3 = r.int32(); + break; + } + case 4: { + m.groupsV3Create = r.int32(); + break; + } + case 5: { + m.changeNumberV2 = r.int32(); + break; + } + case 6: { + m.queryStatusV3Thumbnail = r.int32(); + break; + } + case 7: { + m.liveLocations = r.int32(); + break; + } + case 8: { + m.queryVname = r.int32(); + break; + } + case 9: { + m.voipIndividualIncoming = r.int32(); + break; + } + case 10: { + m.quickRepliesQuery = r.int32(); + break; + } + case 11: { + m.payments = r.int32(); + break; + } + case 12: { + m.stickerPackQuery = r.int32(); + break; + } + case 13: { + m.liveLocationsFinal = r.int32(); + break; + } + case 14: { + m.labelsEdit = r.int32(); + break; + } + case 15: { + m.mediaUpload = r.int32(); + break; + } + case 18: { + m.mediaUploadRichQuickReplies = r.int32(); + break; + } + case 19: { + m.vnameV2 = r.int32(); + break; + } + case 20: { + m.videoPlaybackUrl = r.int32(); + break; + } + case 21: { + m.statusRanking = r.int32(); + break; + } + case 22: { + m.voipIndividualVideo = r.int32(); + break; + } + case 23: { + m.thirdPartyStickers = r.int32(); + break; + } + case 24: { + m.frequentlyForwardedSetting = r.int32(); + break; + } + case 25: { + m.groupsV4JoinPermission = r.int32(); + break; + } + case 26: { + m.recentStickers = r.int32(); + break; + } + case 27: { + m.catalog = r.int32(); + break; + } + case 28: { + m.starredStickers = r.int32(); + break; + } + case 29: { + m.voipGroupCall = r.int32(); + break; + } + case 30: { + m.templateMessage = r.int32(); + break; + } + case 31: { + m.templateMessageInteractivity = r.int32(); + break; + } + case 32: { + m.ephemeralMessages = r.int32(); + break; + } + case 33: { + m.e2ENotificationSync = r.int32(); + break; + } + case 34: { + m.recentStickersV2 = r.int32(); + break; + } + case 36: { + m.recentStickersV3 = r.int32(); + break; + } + case 37: { + m.userNotice = r.int32(); + break; + } + case 39: { + m.support = r.int32(); + break; + } + case 40: { + m.groupUiiCleanup = r.int32(); + break; + } + case 41: { + m.groupDogfoodingInternalOnly = r.int32(); + break; + } + case 42: { + m.settingsSync = r.int32(); + break; + } + case 43: { + m.archiveV2 = r.int32(); + break; + } + case 44: { + m.ephemeralAllowGroupMembers = r.int32(); + break; + } + case 45: { + m.ephemeral24HDuration = r.int32(); + break; + } + case 46: { + m.mdForceUpgrade = r.int32(); + break; + } + case 47: { + m.disappearingMode = r.int32(); + break; + } + case 48: { + m.externalMdOptInAvailable = r.int32(); + break; + } + case 49: { + m.noDeleteMessageTimeLimit = r.int32(); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WebFeatures.fromObject = function fromObject(d) { + if (d instanceof $root.proto.WebFeatures) + return d; + var m = new $root.proto.WebFeatures(); + switch (d.labelsDisplay) { + default: + if (typeof d.labelsDisplay === "number") { + m.labelsDisplay = d.labelsDisplay; + break; + } + break; + case "NOT_STARTED": + case 0: + m.labelsDisplay = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.labelsDisplay = 1; + break; + case "DEVELOPMENT": + case 2: + m.labelsDisplay = 2; + break; + case "PRODUCTION": + case 3: + m.labelsDisplay = 3; + break; + } + switch (d.voipIndividualOutgoing) { + default: + if (typeof d.voipIndividualOutgoing === "number") { + m.voipIndividualOutgoing = d.voipIndividualOutgoing; + break; + } + break; + case "NOT_STARTED": + case 0: + m.voipIndividualOutgoing = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.voipIndividualOutgoing = 1; + break; + case "DEVELOPMENT": + case 2: + m.voipIndividualOutgoing = 2; + break; + case "PRODUCTION": + case 3: + m.voipIndividualOutgoing = 3; + break; + } + switch (d.groupsV3) { + default: + if (typeof d.groupsV3 === "number") { + m.groupsV3 = d.groupsV3; + break; + } + break; + case "NOT_STARTED": + case 0: + m.groupsV3 = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.groupsV3 = 1; + break; + case "DEVELOPMENT": + case 2: + m.groupsV3 = 2; + break; + case "PRODUCTION": + case 3: + m.groupsV3 = 3; + break; + } + switch (d.groupsV3Create) { + default: + if (typeof d.groupsV3Create === "number") { + m.groupsV3Create = d.groupsV3Create; + break; + } + break; + case "NOT_STARTED": + case 0: + m.groupsV3Create = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.groupsV3Create = 1; + break; + case "DEVELOPMENT": + case 2: + m.groupsV3Create = 2; + break; + case "PRODUCTION": + case 3: + m.groupsV3Create = 3; + break; + } + switch (d.changeNumberV2) { + default: + if (typeof d.changeNumberV2 === "number") { + m.changeNumberV2 = d.changeNumberV2; + break; + } + break; + case "NOT_STARTED": + case 0: + m.changeNumberV2 = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.changeNumberV2 = 1; + break; + case "DEVELOPMENT": + case 2: + m.changeNumberV2 = 2; + break; + case "PRODUCTION": + case 3: + m.changeNumberV2 = 3; + break; + } + switch (d.queryStatusV3Thumbnail) { + default: + if (typeof d.queryStatusV3Thumbnail === "number") { + m.queryStatusV3Thumbnail = d.queryStatusV3Thumbnail; + break; + } + break; + case "NOT_STARTED": + case 0: + m.queryStatusV3Thumbnail = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.queryStatusV3Thumbnail = 1; + break; + case "DEVELOPMENT": + case 2: + m.queryStatusV3Thumbnail = 2; + break; + case "PRODUCTION": + case 3: + m.queryStatusV3Thumbnail = 3; + break; + } + switch (d.liveLocations) { + default: + if (typeof d.liveLocations === "number") { + m.liveLocations = d.liveLocations; + break; + } + break; + case "NOT_STARTED": + case 0: + m.liveLocations = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.liveLocations = 1; + break; + case "DEVELOPMENT": + case 2: + m.liveLocations = 2; + break; + case "PRODUCTION": + case 3: + m.liveLocations = 3; + break; + } + switch (d.queryVname) { + default: + if (typeof d.queryVname === "number") { + m.queryVname = d.queryVname; + break; + } + break; + case "NOT_STARTED": + case 0: + m.queryVname = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.queryVname = 1; + break; + case "DEVELOPMENT": + case 2: + m.queryVname = 2; + break; + case "PRODUCTION": + case 3: + m.queryVname = 3; + break; + } + switch (d.voipIndividualIncoming) { + default: + if (typeof d.voipIndividualIncoming === "number") { + m.voipIndividualIncoming = d.voipIndividualIncoming; + break; + } + break; + case "NOT_STARTED": + case 0: + m.voipIndividualIncoming = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.voipIndividualIncoming = 1; + break; + case "DEVELOPMENT": + case 2: + m.voipIndividualIncoming = 2; + break; + case "PRODUCTION": + case 3: + m.voipIndividualIncoming = 3; + break; + } + switch (d.quickRepliesQuery) { + default: + if (typeof d.quickRepliesQuery === "number") { + m.quickRepliesQuery = d.quickRepliesQuery; + break; + } + break; + case "NOT_STARTED": + case 0: + m.quickRepliesQuery = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.quickRepliesQuery = 1; + break; + case "DEVELOPMENT": + case 2: + m.quickRepliesQuery = 2; + break; + case "PRODUCTION": + case 3: + m.quickRepliesQuery = 3; + break; + } + switch (d.payments) { + default: + if (typeof d.payments === "number") { + m.payments = d.payments; + break; + } + break; + case "NOT_STARTED": + case 0: + m.payments = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.payments = 1; + break; + case "DEVELOPMENT": + case 2: + m.payments = 2; + break; + case "PRODUCTION": + case 3: + m.payments = 3; + break; + } + switch (d.stickerPackQuery) { + default: + if (typeof d.stickerPackQuery === "number") { + m.stickerPackQuery = d.stickerPackQuery; + break; + } + break; + case "NOT_STARTED": + case 0: + m.stickerPackQuery = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.stickerPackQuery = 1; + break; + case "DEVELOPMENT": + case 2: + m.stickerPackQuery = 2; + break; + case "PRODUCTION": + case 3: + m.stickerPackQuery = 3; + break; + } + switch (d.liveLocationsFinal) { + default: + if (typeof d.liveLocationsFinal === "number") { + m.liveLocationsFinal = d.liveLocationsFinal; + break; + } + break; + case "NOT_STARTED": + case 0: + m.liveLocationsFinal = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.liveLocationsFinal = 1; + break; + case "DEVELOPMENT": + case 2: + m.liveLocationsFinal = 2; + break; + case "PRODUCTION": + case 3: + m.liveLocationsFinal = 3; + break; + } + switch (d.labelsEdit) { + default: + if (typeof d.labelsEdit === "number") { + m.labelsEdit = d.labelsEdit; + break; + } + break; + case "NOT_STARTED": + case 0: + m.labelsEdit = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.labelsEdit = 1; + break; + case "DEVELOPMENT": + case 2: + m.labelsEdit = 2; + break; + case "PRODUCTION": + case 3: + m.labelsEdit = 3; + break; + } + switch (d.mediaUpload) { + default: + if (typeof d.mediaUpload === "number") { + m.mediaUpload = d.mediaUpload; + break; + } + break; + case "NOT_STARTED": + case 0: + m.mediaUpload = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.mediaUpload = 1; + break; + case "DEVELOPMENT": + case 2: + m.mediaUpload = 2; + break; + case "PRODUCTION": + case 3: + m.mediaUpload = 3; + break; + } + switch (d.mediaUploadRichQuickReplies) { + default: + if (typeof d.mediaUploadRichQuickReplies === "number") { + m.mediaUploadRichQuickReplies = d.mediaUploadRichQuickReplies; + break; + } + break; + case "NOT_STARTED": + case 0: + m.mediaUploadRichQuickReplies = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.mediaUploadRichQuickReplies = 1; + break; + case "DEVELOPMENT": + case 2: + m.mediaUploadRichQuickReplies = 2; + break; + case "PRODUCTION": + case 3: + m.mediaUploadRichQuickReplies = 3; + break; + } + switch (d.vnameV2) { + default: + if (typeof d.vnameV2 === "number") { + m.vnameV2 = d.vnameV2; + break; + } + break; + case "NOT_STARTED": + case 0: + m.vnameV2 = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.vnameV2 = 1; + break; + case "DEVELOPMENT": + case 2: + m.vnameV2 = 2; + break; + case "PRODUCTION": + case 3: + m.vnameV2 = 3; + break; + } + switch (d.videoPlaybackUrl) { + default: + if (typeof d.videoPlaybackUrl === "number") { + m.videoPlaybackUrl = d.videoPlaybackUrl; + break; + } + break; + case "NOT_STARTED": + case 0: + m.videoPlaybackUrl = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.videoPlaybackUrl = 1; + break; + case "DEVELOPMENT": + case 2: + m.videoPlaybackUrl = 2; + break; + case "PRODUCTION": + case 3: + m.videoPlaybackUrl = 3; + break; + } + switch (d.statusRanking) { + default: + if (typeof d.statusRanking === "number") { + m.statusRanking = d.statusRanking; + break; + } + break; + case "NOT_STARTED": + case 0: + m.statusRanking = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.statusRanking = 1; + break; + case "DEVELOPMENT": + case 2: + m.statusRanking = 2; + break; + case "PRODUCTION": + case 3: + m.statusRanking = 3; + break; + } + switch (d.voipIndividualVideo) { + default: + if (typeof d.voipIndividualVideo === "number") { + m.voipIndividualVideo = d.voipIndividualVideo; + break; + } + break; + case "NOT_STARTED": + case 0: + m.voipIndividualVideo = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.voipIndividualVideo = 1; + break; + case "DEVELOPMENT": + case 2: + m.voipIndividualVideo = 2; + break; + case "PRODUCTION": + case 3: + m.voipIndividualVideo = 3; + break; + } + switch (d.thirdPartyStickers) { + default: + if (typeof d.thirdPartyStickers === "number") { + m.thirdPartyStickers = d.thirdPartyStickers; + break; + } + break; + case "NOT_STARTED": + case 0: + m.thirdPartyStickers = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.thirdPartyStickers = 1; + break; + case "DEVELOPMENT": + case 2: + m.thirdPartyStickers = 2; + break; + case "PRODUCTION": + case 3: + m.thirdPartyStickers = 3; + break; + } + switch (d.frequentlyForwardedSetting) { + default: + if (typeof d.frequentlyForwardedSetting === "number") { + m.frequentlyForwardedSetting = d.frequentlyForwardedSetting; + break; + } + break; + case "NOT_STARTED": + case 0: + m.frequentlyForwardedSetting = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.frequentlyForwardedSetting = 1; + break; + case "DEVELOPMENT": + case 2: + m.frequentlyForwardedSetting = 2; + break; + case "PRODUCTION": + case 3: + m.frequentlyForwardedSetting = 3; + break; + } + switch (d.groupsV4JoinPermission) { + default: + if (typeof d.groupsV4JoinPermission === "number") { + m.groupsV4JoinPermission = d.groupsV4JoinPermission; + break; + } + break; + case "NOT_STARTED": + case 0: + m.groupsV4JoinPermission = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.groupsV4JoinPermission = 1; + break; + case "DEVELOPMENT": + case 2: + m.groupsV4JoinPermission = 2; + break; + case "PRODUCTION": + case 3: + m.groupsV4JoinPermission = 3; + break; + } + switch (d.recentStickers) { + default: + if (typeof d.recentStickers === "number") { + m.recentStickers = d.recentStickers; + break; + } + break; + case "NOT_STARTED": + case 0: + m.recentStickers = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.recentStickers = 1; + break; + case "DEVELOPMENT": + case 2: + m.recentStickers = 2; + break; + case "PRODUCTION": + case 3: + m.recentStickers = 3; + break; + } + switch (d.catalog) { + default: + if (typeof d.catalog === "number") { + m.catalog = d.catalog; + break; + } + break; + case "NOT_STARTED": + case 0: + m.catalog = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.catalog = 1; + break; + case "DEVELOPMENT": + case 2: + m.catalog = 2; + break; + case "PRODUCTION": + case 3: + m.catalog = 3; + break; + } + switch (d.starredStickers) { + default: + if (typeof d.starredStickers === "number") { + m.starredStickers = d.starredStickers; + break; + } + break; + case "NOT_STARTED": + case 0: + m.starredStickers = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.starredStickers = 1; + break; + case "DEVELOPMENT": + case 2: + m.starredStickers = 2; + break; + case "PRODUCTION": + case 3: + m.starredStickers = 3; + break; + } + switch (d.voipGroupCall) { + default: + if (typeof d.voipGroupCall === "number") { + m.voipGroupCall = d.voipGroupCall; + break; + } + break; + case "NOT_STARTED": + case 0: + m.voipGroupCall = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.voipGroupCall = 1; + break; + case "DEVELOPMENT": + case 2: + m.voipGroupCall = 2; + break; + case "PRODUCTION": + case 3: + m.voipGroupCall = 3; + break; + } + switch (d.templateMessage) { + default: + if (typeof d.templateMessage === "number") { + m.templateMessage = d.templateMessage; + break; + } + break; + case "NOT_STARTED": + case 0: + m.templateMessage = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.templateMessage = 1; + break; + case "DEVELOPMENT": + case 2: + m.templateMessage = 2; + break; + case "PRODUCTION": + case 3: + m.templateMessage = 3; + break; + } + switch (d.templateMessageInteractivity) { + default: + if (typeof d.templateMessageInteractivity === "number") { + m.templateMessageInteractivity = d.templateMessageInteractivity; + break; + } + break; + case "NOT_STARTED": + case 0: + m.templateMessageInteractivity = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.templateMessageInteractivity = 1; + break; + case "DEVELOPMENT": + case 2: + m.templateMessageInteractivity = 2; + break; + case "PRODUCTION": + case 3: + m.templateMessageInteractivity = 3; + break; + } + switch (d.ephemeralMessages) { + default: + if (typeof d.ephemeralMessages === "number") { + m.ephemeralMessages = d.ephemeralMessages; + break; + } + break; + case "NOT_STARTED": + case 0: + m.ephemeralMessages = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.ephemeralMessages = 1; + break; + case "DEVELOPMENT": + case 2: + m.ephemeralMessages = 2; + break; + case "PRODUCTION": + case 3: + m.ephemeralMessages = 3; + break; + } + switch (d.e2ENotificationSync) { + default: + if (typeof d.e2ENotificationSync === "number") { + m.e2ENotificationSync = d.e2ENotificationSync; + break; + } + break; + case "NOT_STARTED": + case 0: + m.e2ENotificationSync = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.e2ENotificationSync = 1; + break; + case "DEVELOPMENT": + case 2: + m.e2ENotificationSync = 2; + break; + case "PRODUCTION": + case 3: + m.e2ENotificationSync = 3; + break; + } + switch (d.recentStickersV2) { + default: + if (typeof d.recentStickersV2 === "number") { + m.recentStickersV2 = d.recentStickersV2; + break; + } + break; + case "NOT_STARTED": + case 0: + m.recentStickersV2 = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.recentStickersV2 = 1; + break; + case "DEVELOPMENT": + case 2: + m.recentStickersV2 = 2; + break; + case "PRODUCTION": + case 3: + m.recentStickersV2 = 3; + break; + } + switch (d.recentStickersV3) { + default: + if (typeof d.recentStickersV3 === "number") { + m.recentStickersV3 = d.recentStickersV3; + break; + } + break; + case "NOT_STARTED": + case 0: + m.recentStickersV3 = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.recentStickersV3 = 1; + break; + case "DEVELOPMENT": + case 2: + m.recentStickersV3 = 2; + break; + case "PRODUCTION": + case 3: + m.recentStickersV3 = 3; + break; + } + switch (d.userNotice) { + default: + if (typeof d.userNotice === "number") { + m.userNotice = d.userNotice; + break; + } + break; + case "NOT_STARTED": + case 0: + m.userNotice = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.userNotice = 1; + break; + case "DEVELOPMENT": + case 2: + m.userNotice = 2; + break; + case "PRODUCTION": + case 3: + m.userNotice = 3; + break; + } + switch (d.support) { + default: + if (typeof d.support === "number") { + m.support = d.support; + break; + } + break; + case "NOT_STARTED": + case 0: + m.support = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.support = 1; + break; + case "DEVELOPMENT": + case 2: + m.support = 2; + break; + case "PRODUCTION": + case 3: + m.support = 3; + break; + } + switch (d.groupUiiCleanup) { + default: + if (typeof d.groupUiiCleanup === "number") { + m.groupUiiCleanup = d.groupUiiCleanup; + break; + } + break; + case "NOT_STARTED": + case 0: + m.groupUiiCleanup = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.groupUiiCleanup = 1; + break; + case "DEVELOPMENT": + case 2: + m.groupUiiCleanup = 2; + break; + case "PRODUCTION": + case 3: + m.groupUiiCleanup = 3; + break; + } + switch (d.groupDogfoodingInternalOnly) { + default: + if (typeof d.groupDogfoodingInternalOnly === "number") { + m.groupDogfoodingInternalOnly = d.groupDogfoodingInternalOnly; + break; + } + break; + case "NOT_STARTED": + case 0: + m.groupDogfoodingInternalOnly = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.groupDogfoodingInternalOnly = 1; + break; + case "DEVELOPMENT": + case 2: + m.groupDogfoodingInternalOnly = 2; + break; + case "PRODUCTION": + case 3: + m.groupDogfoodingInternalOnly = 3; + break; + } + switch (d.settingsSync) { + default: + if (typeof d.settingsSync === "number") { + m.settingsSync = d.settingsSync; + break; + } + break; + case "NOT_STARTED": + case 0: + m.settingsSync = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.settingsSync = 1; + break; + case "DEVELOPMENT": + case 2: + m.settingsSync = 2; + break; + case "PRODUCTION": + case 3: + m.settingsSync = 3; + break; + } + switch (d.archiveV2) { + default: + if (typeof d.archiveV2 === "number") { + m.archiveV2 = d.archiveV2; + break; + } + break; + case "NOT_STARTED": + case 0: + m.archiveV2 = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.archiveV2 = 1; + break; + case "DEVELOPMENT": + case 2: + m.archiveV2 = 2; + break; + case "PRODUCTION": + case 3: + m.archiveV2 = 3; + break; + } + switch (d.ephemeralAllowGroupMembers) { + default: + if (typeof d.ephemeralAllowGroupMembers === "number") { + m.ephemeralAllowGroupMembers = d.ephemeralAllowGroupMembers; + break; + } + break; + case "NOT_STARTED": + case 0: + m.ephemeralAllowGroupMembers = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.ephemeralAllowGroupMembers = 1; + break; + case "DEVELOPMENT": + case 2: + m.ephemeralAllowGroupMembers = 2; + break; + case "PRODUCTION": + case 3: + m.ephemeralAllowGroupMembers = 3; + break; + } + switch (d.ephemeral24HDuration) { + default: + if (typeof d.ephemeral24HDuration === "number") { + m.ephemeral24HDuration = d.ephemeral24HDuration; + break; + } + break; + case "NOT_STARTED": + case 0: + m.ephemeral24HDuration = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.ephemeral24HDuration = 1; + break; + case "DEVELOPMENT": + case 2: + m.ephemeral24HDuration = 2; + break; + case "PRODUCTION": + case 3: + m.ephemeral24HDuration = 3; + break; + } + switch (d.mdForceUpgrade) { + default: + if (typeof d.mdForceUpgrade === "number") { + m.mdForceUpgrade = d.mdForceUpgrade; + break; + } + break; + case "NOT_STARTED": + case 0: + m.mdForceUpgrade = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.mdForceUpgrade = 1; + break; + case "DEVELOPMENT": + case 2: + m.mdForceUpgrade = 2; + break; + case "PRODUCTION": + case 3: + m.mdForceUpgrade = 3; + break; + } + switch (d.disappearingMode) { + default: + if (typeof d.disappearingMode === "number") { + m.disappearingMode = d.disappearingMode; + break; + } + break; + case "NOT_STARTED": + case 0: + m.disappearingMode = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.disappearingMode = 1; + break; + case "DEVELOPMENT": + case 2: + m.disappearingMode = 2; + break; + case "PRODUCTION": + case 3: + m.disappearingMode = 3; + break; + } + switch (d.externalMdOptInAvailable) { + default: + if (typeof d.externalMdOptInAvailable === "number") { + m.externalMdOptInAvailable = d.externalMdOptInAvailable; + break; + } + break; + case "NOT_STARTED": + case 0: + m.externalMdOptInAvailable = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.externalMdOptInAvailable = 1; + break; + case "DEVELOPMENT": + case 2: + m.externalMdOptInAvailable = 2; + break; + case "PRODUCTION": + case 3: + m.externalMdOptInAvailable = 3; + break; + } + switch (d.noDeleteMessageTimeLimit) { + default: + if (typeof d.noDeleteMessageTimeLimit === "number") { + m.noDeleteMessageTimeLimit = d.noDeleteMessageTimeLimit; + break; + } + break; + case "NOT_STARTED": + case 0: + m.noDeleteMessageTimeLimit = 0; + break; + case "FORCE_UPGRADE": + case 1: + m.noDeleteMessageTimeLimit = 1; + break; + case "DEVELOPMENT": + case 2: + m.noDeleteMessageTimeLimit = 2; + break; + case "PRODUCTION": + case 3: + m.noDeleteMessageTimeLimit = 3; + break; + } + return m; + }; + + WebFeatures.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (m.labelsDisplay != null && m.hasOwnProperty("labelsDisplay")) { + d.labelsDisplay = o.enums === String ? $root.proto.WebFeatures.Flag[m.labelsDisplay] === undefined ? m.labelsDisplay : $root.proto.WebFeatures.Flag[m.labelsDisplay] : m.labelsDisplay; + if (o.oneofs) + d._labelsDisplay = "labelsDisplay"; + } + if (m.voipIndividualOutgoing != null && m.hasOwnProperty("voipIndividualOutgoing")) { + d.voipIndividualOutgoing = o.enums === String ? $root.proto.WebFeatures.Flag[m.voipIndividualOutgoing] === undefined ? m.voipIndividualOutgoing : $root.proto.WebFeatures.Flag[m.voipIndividualOutgoing] : m.voipIndividualOutgoing; + if (o.oneofs) + d._voipIndividualOutgoing = "voipIndividualOutgoing"; + } + if (m.groupsV3 != null && m.hasOwnProperty("groupsV3")) { + d.groupsV3 = o.enums === String ? $root.proto.WebFeatures.Flag[m.groupsV3] === undefined ? m.groupsV3 : $root.proto.WebFeatures.Flag[m.groupsV3] : m.groupsV3; + if (o.oneofs) + d._groupsV3 = "groupsV3"; + } + if (m.groupsV3Create != null && m.hasOwnProperty("groupsV3Create")) { + d.groupsV3Create = o.enums === String ? $root.proto.WebFeatures.Flag[m.groupsV3Create] === undefined ? m.groupsV3Create : $root.proto.WebFeatures.Flag[m.groupsV3Create] : m.groupsV3Create; + if (o.oneofs) + d._groupsV3Create = "groupsV3Create"; + } + if (m.changeNumberV2 != null && m.hasOwnProperty("changeNumberV2")) { + d.changeNumberV2 = o.enums === String ? $root.proto.WebFeatures.Flag[m.changeNumberV2] === undefined ? m.changeNumberV2 : $root.proto.WebFeatures.Flag[m.changeNumberV2] : m.changeNumberV2; + if (o.oneofs) + d._changeNumberV2 = "changeNumberV2"; + } + if (m.queryStatusV3Thumbnail != null && m.hasOwnProperty("queryStatusV3Thumbnail")) { + d.queryStatusV3Thumbnail = o.enums === String ? $root.proto.WebFeatures.Flag[m.queryStatusV3Thumbnail] === undefined ? m.queryStatusV3Thumbnail : $root.proto.WebFeatures.Flag[m.queryStatusV3Thumbnail] : m.queryStatusV3Thumbnail; + if (o.oneofs) + d._queryStatusV3Thumbnail = "queryStatusV3Thumbnail"; + } + if (m.liveLocations != null && m.hasOwnProperty("liveLocations")) { + d.liveLocations = o.enums === String ? $root.proto.WebFeatures.Flag[m.liveLocations] === undefined ? m.liveLocations : $root.proto.WebFeatures.Flag[m.liveLocations] : m.liveLocations; + if (o.oneofs) + d._liveLocations = "liveLocations"; + } + if (m.queryVname != null && m.hasOwnProperty("queryVname")) { + d.queryVname = o.enums === String ? $root.proto.WebFeatures.Flag[m.queryVname] === undefined ? m.queryVname : $root.proto.WebFeatures.Flag[m.queryVname] : m.queryVname; + if (o.oneofs) + d._queryVname = "queryVname"; + } + if (m.voipIndividualIncoming != null && m.hasOwnProperty("voipIndividualIncoming")) { + d.voipIndividualIncoming = o.enums === String ? $root.proto.WebFeatures.Flag[m.voipIndividualIncoming] === undefined ? m.voipIndividualIncoming : $root.proto.WebFeatures.Flag[m.voipIndividualIncoming] : m.voipIndividualIncoming; + if (o.oneofs) + d._voipIndividualIncoming = "voipIndividualIncoming"; + } + if (m.quickRepliesQuery != null && m.hasOwnProperty("quickRepliesQuery")) { + d.quickRepliesQuery = o.enums === String ? $root.proto.WebFeatures.Flag[m.quickRepliesQuery] === undefined ? m.quickRepliesQuery : $root.proto.WebFeatures.Flag[m.quickRepliesQuery] : m.quickRepliesQuery; + if (o.oneofs) + d._quickRepliesQuery = "quickRepliesQuery"; + } + if (m.payments != null && m.hasOwnProperty("payments")) { + d.payments = o.enums === String ? $root.proto.WebFeatures.Flag[m.payments] === undefined ? m.payments : $root.proto.WebFeatures.Flag[m.payments] : m.payments; + if (o.oneofs) + d._payments = "payments"; + } + if (m.stickerPackQuery != null && m.hasOwnProperty("stickerPackQuery")) { + d.stickerPackQuery = o.enums === String ? $root.proto.WebFeatures.Flag[m.stickerPackQuery] === undefined ? m.stickerPackQuery : $root.proto.WebFeatures.Flag[m.stickerPackQuery] : m.stickerPackQuery; + if (o.oneofs) + d._stickerPackQuery = "stickerPackQuery"; + } + if (m.liveLocationsFinal != null && m.hasOwnProperty("liveLocationsFinal")) { + d.liveLocationsFinal = o.enums === String ? $root.proto.WebFeatures.Flag[m.liveLocationsFinal] === undefined ? m.liveLocationsFinal : $root.proto.WebFeatures.Flag[m.liveLocationsFinal] : m.liveLocationsFinal; + if (o.oneofs) + d._liveLocationsFinal = "liveLocationsFinal"; + } + if (m.labelsEdit != null && m.hasOwnProperty("labelsEdit")) { + d.labelsEdit = o.enums === String ? $root.proto.WebFeatures.Flag[m.labelsEdit] === undefined ? m.labelsEdit : $root.proto.WebFeatures.Flag[m.labelsEdit] : m.labelsEdit; + if (o.oneofs) + d._labelsEdit = "labelsEdit"; + } + if (m.mediaUpload != null && m.hasOwnProperty("mediaUpload")) { + d.mediaUpload = o.enums === String ? $root.proto.WebFeatures.Flag[m.mediaUpload] === undefined ? m.mediaUpload : $root.proto.WebFeatures.Flag[m.mediaUpload] : m.mediaUpload; + if (o.oneofs) + d._mediaUpload = "mediaUpload"; + } + if (m.mediaUploadRichQuickReplies != null && m.hasOwnProperty("mediaUploadRichQuickReplies")) { + d.mediaUploadRichQuickReplies = o.enums === String ? $root.proto.WebFeatures.Flag[m.mediaUploadRichQuickReplies] === undefined ? m.mediaUploadRichQuickReplies : $root.proto.WebFeatures.Flag[m.mediaUploadRichQuickReplies] : m.mediaUploadRichQuickReplies; + if (o.oneofs) + d._mediaUploadRichQuickReplies = "mediaUploadRichQuickReplies"; + } + if (m.vnameV2 != null && m.hasOwnProperty("vnameV2")) { + d.vnameV2 = o.enums === String ? $root.proto.WebFeatures.Flag[m.vnameV2] === undefined ? m.vnameV2 : $root.proto.WebFeatures.Flag[m.vnameV2] : m.vnameV2; + if (o.oneofs) + d._vnameV2 = "vnameV2"; + } + if (m.videoPlaybackUrl != null && m.hasOwnProperty("videoPlaybackUrl")) { + d.videoPlaybackUrl = o.enums === String ? $root.proto.WebFeatures.Flag[m.videoPlaybackUrl] === undefined ? m.videoPlaybackUrl : $root.proto.WebFeatures.Flag[m.videoPlaybackUrl] : m.videoPlaybackUrl; + if (o.oneofs) + d._videoPlaybackUrl = "videoPlaybackUrl"; + } + if (m.statusRanking != null && m.hasOwnProperty("statusRanking")) { + d.statusRanking = o.enums === String ? $root.proto.WebFeatures.Flag[m.statusRanking] === undefined ? m.statusRanking : $root.proto.WebFeatures.Flag[m.statusRanking] : m.statusRanking; + if (o.oneofs) + d._statusRanking = "statusRanking"; + } + if (m.voipIndividualVideo != null && m.hasOwnProperty("voipIndividualVideo")) { + d.voipIndividualVideo = o.enums === String ? $root.proto.WebFeatures.Flag[m.voipIndividualVideo] === undefined ? m.voipIndividualVideo : $root.proto.WebFeatures.Flag[m.voipIndividualVideo] : m.voipIndividualVideo; + if (o.oneofs) + d._voipIndividualVideo = "voipIndividualVideo"; + } + if (m.thirdPartyStickers != null && m.hasOwnProperty("thirdPartyStickers")) { + d.thirdPartyStickers = o.enums === String ? $root.proto.WebFeatures.Flag[m.thirdPartyStickers] === undefined ? m.thirdPartyStickers : $root.proto.WebFeatures.Flag[m.thirdPartyStickers] : m.thirdPartyStickers; + if (o.oneofs) + d._thirdPartyStickers = "thirdPartyStickers"; + } + if (m.frequentlyForwardedSetting != null && m.hasOwnProperty("frequentlyForwardedSetting")) { + d.frequentlyForwardedSetting = o.enums === String ? $root.proto.WebFeatures.Flag[m.frequentlyForwardedSetting] === undefined ? m.frequentlyForwardedSetting : $root.proto.WebFeatures.Flag[m.frequentlyForwardedSetting] : m.frequentlyForwardedSetting; + if (o.oneofs) + d._frequentlyForwardedSetting = "frequentlyForwardedSetting"; + } + if (m.groupsV4JoinPermission != null && m.hasOwnProperty("groupsV4JoinPermission")) { + d.groupsV4JoinPermission = o.enums === String ? $root.proto.WebFeatures.Flag[m.groupsV4JoinPermission] === undefined ? m.groupsV4JoinPermission : $root.proto.WebFeatures.Flag[m.groupsV4JoinPermission] : m.groupsV4JoinPermission; + if (o.oneofs) + d._groupsV4JoinPermission = "groupsV4JoinPermission"; + } + if (m.recentStickers != null && m.hasOwnProperty("recentStickers")) { + d.recentStickers = o.enums === String ? $root.proto.WebFeatures.Flag[m.recentStickers] === undefined ? m.recentStickers : $root.proto.WebFeatures.Flag[m.recentStickers] : m.recentStickers; + if (o.oneofs) + d._recentStickers = "recentStickers"; + } + if (m.catalog != null && m.hasOwnProperty("catalog")) { + d.catalog = o.enums === String ? $root.proto.WebFeatures.Flag[m.catalog] === undefined ? m.catalog : $root.proto.WebFeatures.Flag[m.catalog] : m.catalog; + if (o.oneofs) + d._catalog = "catalog"; + } + if (m.starredStickers != null && m.hasOwnProperty("starredStickers")) { + d.starredStickers = o.enums === String ? $root.proto.WebFeatures.Flag[m.starredStickers] === undefined ? m.starredStickers : $root.proto.WebFeatures.Flag[m.starredStickers] : m.starredStickers; + if (o.oneofs) + d._starredStickers = "starredStickers"; + } + if (m.voipGroupCall != null && m.hasOwnProperty("voipGroupCall")) { + d.voipGroupCall = o.enums === String ? $root.proto.WebFeatures.Flag[m.voipGroupCall] === undefined ? m.voipGroupCall : $root.proto.WebFeatures.Flag[m.voipGroupCall] : m.voipGroupCall; + if (o.oneofs) + d._voipGroupCall = "voipGroupCall"; + } + if (m.templateMessage != null && m.hasOwnProperty("templateMessage")) { + d.templateMessage = o.enums === String ? $root.proto.WebFeatures.Flag[m.templateMessage] === undefined ? m.templateMessage : $root.proto.WebFeatures.Flag[m.templateMessage] : m.templateMessage; + if (o.oneofs) + d._templateMessage = "templateMessage"; + } + if (m.templateMessageInteractivity != null && m.hasOwnProperty("templateMessageInteractivity")) { + d.templateMessageInteractivity = o.enums === String ? $root.proto.WebFeatures.Flag[m.templateMessageInteractivity] === undefined ? m.templateMessageInteractivity : $root.proto.WebFeatures.Flag[m.templateMessageInteractivity] : m.templateMessageInteractivity; + if (o.oneofs) + d._templateMessageInteractivity = "templateMessageInteractivity"; + } + if (m.ephemeralMessages != null && m.hasOwnProperty("ephemeralMessages")) { + d.ephemeralMessages = o.enums === String ? $root.proto.WebFeatures.Flag[m.ephemeralMessages] === undefined ? m.ephemeralMessages : $root.proto.WebFeatures.Flag[m.ephemeralMessages] : m.ephemeralMessages; + if (o.oneofs) + d._ephemeralMessages = "ephemeralMessages"; + } + if (m.e2ENotificationSync != null && m.hasOwnProperty("e2ENotificationSync")) { + d.e2ENotificationSync = o.enums === String ? $root.proto.WebFeatures.Flag[m.e2ENotificationSync] === undefined ? m.e2ENotificationSync : $root.proto.WebFeatures.Flag[m.e2ENotificationSync] : m.e2ENotificationSync; + if (o.oneofs) + d._e2ENotificationSync = "e2ENotificationSync"; + } + if (m.recentStickersV2 != null && m.hasOwnProperty("recentStickersV2")) { + d.recentStickersV2 = o.enums === String ? $root.proto.WebFeatures.Flag[m.recentStickersV2] === undefined ? m.recentStickersV2 : $root.proto.WebFeatures.Flag[m.recentStickersV2] : m.recentStickersV2; + if (o.oneofs) + d._recentStickersV2 = "recentStickersV2"; + } + if (m.recentStickersV3 != null && m.hasOwnProperty("recentStickersV3")) { + d.recentStickersV3 = o.enums === String ? $root.proto.WebFeatures.Flag[m.recentStickersV3] === undefined ? m.recentStickersV3 : $root.proto.WebFeatures.Flag[m.recentStickersV3] : m.recentStickersV3; + if (o.oneofs) + d._recentStickersV3 = "recentStickersV3"; + } + if (m.userNotice != null && m.hasOwnProperty("userNotice")) { + d.userNotice = o.enums === String ? $root.proto.WebFeatures.Flag[m.userNotice] === undefined ? m.userNotice : $root.proto.WebFeatures.Flag[m.userNotice] : m.userNotice; + if (o.oneofs) + d._userNotice = "userNotice"; + } + if (m.support != null && m.hasOwnProperty("support")) { + d.support = o.enums === String ? $root.proto.WebFeatures.Flag[m.support] === undefined ? m.support : $root.proto.WebFeatures.Flag[m.support] : m.support; + if (o.oneofs) + d._support = "support"; + } + if (m.groupUiiCleanup != null && m.hasOwnProperty("groupUiiCleanup")) { + d.groupUiiCleanup = o.enums === String ? $root.proto.WebFeatures.Flag[m.groupUiiCleanup] === undefined ? m.groupUiiCleanup : $root.proto.WebFeatures.Flag[m.groupUiiCleanup] : m.groupUiiCleanup; + if (o.oneofs) + d._groupUiiCleanup = "groupUiiCleanup"; + } + if (m.groupDogfoodingInternalOnly != null && m.hasOwnProperty("groupDogfoodingInternalOnly")) { + d.groupDogfoodingInternalOnly = o.enums === String ? $root.proto.WebFeatures.Flag[m.groupDogfoodingInternalOnly] === undefined ? m.groupDogfoodingInternalOnly : $root.proto.WebFeatures.Flag[m.groupDogfoodingInternalOnly] : m.groupDogfoodingInternalOnly; + if (o.oneofs) + d._groupDogfoodingInternalOnly = "groupDogfoodingInternalOnly"; + } + if (m.settingsSync != null && m.hasOwnProperty("settingsSync")) { + d.settingsSync = o.enums === String ? $root.proto.WebFeatures.Flag[m.settingsSync] === undefined ? m.settingsSync : $root.proto.WebFeatures.Flag[m.settingsSync] : m.settingsSync; + if (o.oneofs) + d._settingsSync = "settingsSync"; + } + if (m.archiveV2 != null && m.hasOwnProperty("archiveV2")) { + d.archiveV2 = o.enums === String ? $root.proto.WebFeatures.Flag[m.archiveV2] === undefined ? m.archiveV2 : $root.proto.WebFeatures.Flag[m.archiveV2] : m.archiveV2; + if (o.oneofs) + d._archiveV2 = "archiveV2"; + } + if (m.ephemeralAllowGroupMembers != null && m.hasOwnProperty("ephemeralAllowGroupMembers")) { + d.ephemeralAllowGroupMembers = o.enums === String ? $root.proto.WebFeatures.Flag[m.ephemeralAllowGroupMembers] === undefined ? m.ephemeralAllowGroupMembers : $root.proto.WebFeatures.Flag[m.ephemeralAllowGroupMembers] : m.ephemeralAllowGroupMembers; + if (o.oneofs) + d._ephemeralAllowGroupMembers = "ephemeralAllowGroupMembers"; + } + if (m.ephemeral24HDuration != null && m.hasOwnProperty("ephemeral24HDuration")) { + d.ephemeral24HDuration = o.enums === String ? $root.proto.WebFeatures.Flag[m.ephemeral24HDuration] === undefined ? m.ephemeral24HDuration : $root.proto.WebFeatures.Flag[m.ephemeral24HDuration] : m.ephemeral24HDuration; + if (o.oneofs) + d._ephemeral24HDuration = "ephemeral24HDuration"; + } + if (m.mdForceUpgrade != null && m.hasOwnProperty("mdForceUpgrade")) { + d.mdForceUpgrade = o.enums === String ? $root.proto.WebFeatures.Flag[m.mdForceUpgrade] === undefined ? m.mdForceUpgrade : $root.proto.WebFeatures.Flag[m.mdForceUpgrade] : m.mdForceUpgrade; + if (o.oneofs) + d._mdForceUpgrade = "mdForceUpgrade"; + } + if (m.disappearingMode != null && m.hasOwnProperty("disappearingMode")) { + d.disappearingMode = o.enums === String ? $root.proto.WebFeatures.Flag[m.disappearingMode] === undefined ? m.disappearingMode : $root.proto.WebFeatures.Flag[m.disappearingMode] : m.disappearingMode; + if (o.oneofs) + d._disappearingMode = "disappearingMode"; + } + if (m.externalMdOptInAvailable != null && m.hasOwnProperty("externalMdOptInAvailable")) { + d.externalMdOptInAvailable = o.enums === String ? $root.proto.WebFeatures.Flag[m.externalMdOptInAvailable] === undefined ? m.externalMdOptInAvailable : $root.proto.WebFeatures.Flag[m.externalMdOptInAvailable] : m.externalMdOptInAvailable; + if (o.oneofs) + d._externalMdOptInAvailable = "externalMdOptInAvailable"; + } + if (m.noDeleteMessageTimeLimit != null && m.hasOwnProperty("noDeleteMessageTimeLimit")) { + d.noDeleteMessageTimeLimit = o.enums === String ? $root.proto.WebFeatures.Flag[m.noDeleteMessageTimeLimit] === undefined ? m.noDeleteMessageTimeLimit : $root.proto.WebFeatures.Flag[m.noDeleteMessageTimeLimit] : m.noDeleteMessageTimeLimit; + if (o.oneofs) + d._noDeleteMessageTimeLimit = "noDeleteMessageTimeLimit"; + } + return d; + }; + + WebFeatures.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WebFeatures.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.WebFeatures"; + }; + + WebFeatures.Flag = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "NOT_STARTED"] = 0; + values[valuesById[1] = "FORCE_UPGRADE"] = 1; + values[valuesById[2] = "DEVELOPMENT"] = 2; + values[valuesById[3] = "PRODUCTION"] = 3; + return values; + })(); + + return WebFeatures; + })(); + + proto.WebLinkRenderConfig = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "WEBVIEW"] = 0; + values[valuesById[1] = "SYSTEM"] = 1; + return values; + })(); + + proto.WebMessageInfo = (function() { + + function WebMessageInfo(p) { + this.messageStubParameters = []; + this.labels = []; + this.userReceipt = []; + this.reactions = []; + this.pollUpdates = []; + this.eventResponses = []; + this.statusMentions = []; + this.messageAddOns = []; + this.statusMentionSources = []; + this.supportAiCitations = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WebMessageInfo.prototype.key = null; + WebMessageInfo.prototype.message = null; + WebMessageInfo.prototype.messageTimestamp = null; + WebMessageInfo.prototype.status = null; + WebMessageInfo.prototype.participant = null; + WebMessageInfo.prototype.messageC2STimestamp = null; + WebMessageInfo.prototype.ignore = null; + WebMessageInfo.prototype.starred = null; + WebMessageInfo.prototype.broadcast = null; + WebMessageInfo.prototype.pushName = null; + WebMessageInfo.prototype.mediaCiphertextSha256 = null; + WebMessageInfo.prototype.multicast = null; + WebMessageInfo.prototype.urlText = null; + WebMessageInfo.prototype.urlNumber = null; + WebMessageInfo.prototype.messageStubType = null; + WebMessageInfo.prototype.clearMedia = null; + WebMessageInfo.prototype.messageStubParameters = $util.emptyArray; + WebMessageInfo.prototype.duration = null; + WebMessageInfo.prototype.labels = $util.emptyArray; + WebMessageInfo.prototype.paymentInfo = null; + WebMessageInfo.prototype.finalLiveLocation = null; + WebMessageInfo.prototype.quotedPaymentInfo = null; + WebMessageInfo.prototype.ephemeralStartTimestamp = null; + WebMessageInfo.prototype.ephemeralDuration = null; + WebMessageInfo.prototype.ephemeralOffToOn = null; + WebMessageInfo.prototype.ephemeralOutOfSync = null; + WebMessageInfo.prototype.bizPrivacyStatus = null; + WebMessageInfo.prototype.verifiedBizName = null; + WebMessageInfo.prototype.mediaData = null; + WebMessageInfo.prototype.photoChange = null; + WebMessageInfo.prototype.userReceipt = $util.emptyArray; + WebMessageInfo.prototype.reactions = $util.emptyArray; + WebMessageInfo.prototype.quotedStickerData = null; + WebMessageInfo.prototype.futureproofData = null; + WebMessageInfo.prototype.statusPsa = null; + WebMessageInfo.prototype.pollUpdates = $util.emptyArray; + WebMessageInfo.prototype.pollAdditionalMetadata = null; + WebMessageInfo.prototype.agentId = null; + WebMessageInfo.prototype.statusAlreadyViewed = null; + WebMessageInfo.prototype.messageSecret = null; + WebMessageInfo.prototype.keepInChat = null; + WebMessageInfo.prototype.originalSelfAuthorUserJidString = null; + WebMessageInfo.prototype.revokeMessageTimestamp = null; + WebMessageInfo.prototype.pinInChat = null; + WebMessageInfo.prototype.premiumMessageInfo = null; + WebMessageInfo.prototype.is1PBizBotMessage = null; + WebMessageInfo.prototype.isGroupHistoryMessage = null; + WebMessageInfo.prototype.botMessageInvokerJid = null; + WebMessageInfo.prototype.commentMetadata = null; + WebMessageInfo.prototype.eventResponses = $util.emptyArray; + WebMessageInfo.prototype.reportingTokenInfo = null; + WebMessageInfo.prototype.newsletterServerId = null; + WebMessageInfo.prototype.eventAdditionalMetadata = null; + WebMessageInfo.prototype.isMentionedInStatus = null; + WebMessageInfo.prototype.statusMentions = $util.emptyArray; + WebMessageInfo.prototype.targetMessageId = null; + WebMessageInfo.prototype.messageAddOns = $util.emptyArray; + WebMessageInfo.prototype.statusMentionMessageInfo = null; + WebMessageInfo.prototype.isSupportAiMessage = null; + WebMessageInfo.prototype.statusMentionSources = $util.emptyArray; + WebMessageInfo.prototype.supportAiCitations = $util.emptyArray; + WebMessageInfo.prototype.botTargetId = null; + WebMessageInfo.prototype.groupHistoryIndividualMessageInfo = null; + WebMessageInfo.prototype.groupHistoryBundleInfo = null; + WebMessageInfo.prototype.interactiveMessageAdditionalMetadata = null; + WebMessageInfo.prototype.quarantinedMessage = null; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_message", { + get: $util.oneOfGetter($oneOfFields = ["message"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_messageTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["messageTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_status", { + get: $util.oneOfGetter($oneOfFields = ["status"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_participant", { + get: $util.oneOfGetter($oneOfFields = ["participant"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_messageC2STimestamp", { + get: $util.oneOfGetter($oneOfFields = ["messageC2STimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_ignore", { + get: $util.oneOfGetter($oneOfFields = ["ignore"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_starred", { + get: $util.oneOfGetter($oneOfFields = ["starred"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_broadcast", { + get: $util.oneOfGetter($oneOfFields = ["broadcast"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_pushName", { + get: $util.oneOfGetter($oneOfFields = ["pushName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_mediaCiphertextSha256", { + get: $util.oneOfGetter($oneOfFields = ["mediaCiphertextSha256"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_multicast", { + get: $util.oneOfGetter($oneOfFields = ["multicast"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_urlText", { + get: $util.oneOfGetter($oneOfFields = ["urlText"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_urlNumber", { + get: $util.oneOfGetter($oneOfFields = ["urlNumber"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_messageStubType", { + get: $util.oneOfGetter($oneOfFields = ["messageStubType"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_clearMedia", { + get: $util.oneOfGetter($oneOfFields = ["clearMedia"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_duration", { + get: $util.oneOfGetter($oneOfFields = ["duration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_paymentInfo", { + get: $util.oneOfGetter($oneOfFields = ["paymentInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_finalLiveLocation", { + get: $util.oneOfGetter($oneOfFields = ["finalLiveLocation"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_quotedPaymentInfo", { + get: $util.oneOfGetter($oneOfFields = ["quotedPaymentInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_ephemeralStartTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralStartTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_ephemeralDuration", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralDuration"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_ephemeralOffToOn", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralOffToOn"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_ephemeralOutOfSync", { + get: $util.oneOfGetter($oneOfFields = ["ephemeralOutOfSync"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_bizPrivacyStatus", { + get: $util.oneOfGetter($oneOfFields = ["bizPrivacyStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_verifiedBizName", { + get: $util.oneOfGetter($oneOfFields = ["verifiedBizName"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_mediaData", { + get: $util.oneOfGetter($oneOfFields = ["mediaData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_photoChange", { + get: $util.oneOfGetter($oneOfFields = ["photoChange"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_quotedStickerData", { + get: $util.oneOfGetter($oneOfFields = ["quotedStickerData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_futureproofData", { + get: $util.oneOfGetter($oneOfFields = ["futureproofData"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_statusPsa", { + get: $util.oneOfGetter($oneOfFields = ["statusPsa"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_pollAdditionalMetadata", { + get: $util.oneOfGetter($oneOfFields = ["pollAdditionalMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_agentId", { + get: $util.oneOfGetter($oneOfFields = ["agentId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_statusAlreadyViewed", { + get: $util.oneOfGetter($oneOfFields = ["statusAlreadyViewed"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_messageSecret", { + get: $util.oneOfGetter($oneOfFields = ["messageSecret"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_keepInChat", { + get: $util.oneOfGetter($oneOfFields = ["keepInChat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_originalSelfAuthorUserJidString", { + get: $util.oneOfGetter($oneOfFields = ["originalSelfAuthorUserJidString"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_revokeMessageTimestamp", { + get: $util.oneOfGetter($oneOfFields = ["revokeMessageTimestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_pinInChat", { + get: $util.oneOfGetter($oneOfFields = ["pinInChat"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_premiumMessageInfo", { + get: $util.oneOfGetter($oneOfFields = ["premiumMessageInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_is1PBizBotMessage", { + get: $util.oneOfGetter($oneOfFields = ["is1PBizBotMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_isGroupHistoryMessage", { + get: $util.oneOfGetter($oneOfFields = ["isGroupHistoryMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_botMessageInvokerJid", { + get: $util.oneOfGetter($oneOfFields = ["botMessageInvokerJid"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_commentMetadata", { + get: $util.oneOfGetter($oneOfFields = ["commentMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_reportingTokenInfo", { + get: $util.oneOfGetter($oneOfFields = ["reportingTokenInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_newsletterServerId", { + get: $util.oneOfGetter($oneOfFields = ["newsletterServerId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_eventAdditionalMetadata", { + get: $util.oneOfGetter($oneOfFields = ["eventAdditionalMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_isMentionedInStatus", { + get: $util.oneOfGetter($oneOfFields = ["isMentionedInStatus"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_targetMessageId", { + get: $util.oneOfGetter($oneOfFields = ["targetMessageId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_statusMentionMessageInfo", { + get: $util.oneOfGetter($oneOfFields = ["statusMentionMessageInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_isSupportAiMessage", { + get: $util.oneOfGetter($oneOfFields = ["isSupportAiMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_botTargetId", { + get: $util.oneOfGetter($oneOfFields = ["botTargetId"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_groupHistoryIndividualMessageInfo", { + get: $util.oneOfGetter($oneOfFields = ["groupHistoryIndividualMessageInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_groupHistoryBundleInfo", { + get: $util.oneOfGetter($oneOfFields = ["groupHistoryBundleInfo"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_interactiveMessageAdditionalMetadata", { + get: $util.oneOfGetter($oneOfFields = ["interactiveMessageAdditionalMetadata"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebMessageInfo.prototype, "_quarantinedMessage", { + get: $util.oneOfGetter($oneOfFields = ["quarantinedMessage"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WebMessageInfo.create = function create(properties) { + return new WebMessageInfo(properties); + }; + + WebMessageInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.key != null && Object.hasOwnProperty.call(m, "key")) + $root.proto.MessageKey.encode(m.key, w.uint32(10).fork()).ldelim(); + if (m.message != null && Object.hasOwnProperty.call(m, "message")) + $root.proto.Message.encode(m.message, w.uint32(18).fork()).ldelim(); + if (m.messageTimestamp != null && Object.hasOwnProperty.call(m, "messageTimestamp")) + w.uint32(24).uint64(m.messageTimestamp); + if (m.status != null && Object.hasOwnProperty.call(m, "status")) + w.uint32(32).int32(m.status); + if (m.participant != null && Object.hasOwnProperty.call(m, "participant")) + w.uint32(42).string(m.participant); + if (m.messageC2STimestamp != null && Object.hasOwnProperty.call(m, "messageC2STimestamp")) + w.uint32(48).uint64(m.messageC2STimestamp); + if (m.ignore != null && Object.hasOwnProperty.call(m, "ignore")) + w.uint32(128).bool(m.ignore); + if (m.starred != null && Object.hasOwnProperty.call(m, "starred")) + w.uint32(136).bool(m.starred); + if (m.broadcast != null && Object.hasOwnProperty.call(m, "broadcast")) + w.uint32(144).bool(m.broadcast); + if (m.pushName != null && Object.hasOwnProperty.call(m, "pushName")) + w.uint32(154).string(m.pushName); + if (m.mediaCiphertextSha256 != null && Object.hasOwnProperty.call(m, "mediaCiphertextSha256")) + w.uint32(162).bytes(m.mediaCiphertextSha256); + if (m.multicast != null && Object.hasOwnProperty.call(m, "multicast")) + w.uint32(168).bool(m.multicast); + if (m.urlText != null && Object.hasOwnProperty.call(m, "urlText")) + w.uint32(176).bool(m.urlText); + if (m.urlNumber != null && Object.hasOwnProperty.call(m, "urlNumber")) + w.uint32(184).bool(m.urlNumber); + if (m.messageStubType != null && Object.hasOwnProperty.call(m, "messageStubType")) + w.uint32(192).int32(m.messageStubType); + if (m.clearMedia != null && Object.hasOwnProperty.call(m, "clearMedia")) + w.uint32(200).bool(m.clearMedia); + if (m.messageStubParameters != null && m.messageStubParameters.length) { + for (var i = 0; i < m.messageStubParameters.length; ++i) + w.uint32(210).string(m.messageStubParameters[i]); + } + if (m.duration != null && Object.hasOwnProperty.call(m, "duration")) + w.uint32(216).uint32(m.duration); + if (m.labels != null && m.labels.length) { + for (var i = 0; i < m.labels.length; ++i) + w.uint32(226).string(m.labels[i]); + } + if (m.paymentInfo != null && Object.hasOwnProperty.call(m, "paymentInfo")) + $root.proto.PaymentInfo.encode(m.paymentInfo, w.uint32(234).fork()).ldelim(); + if (m.finalLiveLocation != null && Object.hasOwnProperty.call(m, "finalLiveLocation")) + $root.proto.Message.LiveLocationMessage.encode(m.finalLiveLocation, w.uint32(242).fork()).ldelim(); + if (m.quotedPaymentInfo != null && Object.hasOwnProperty.call(m, "quotedPaymentInfo")) + $root.proto.PaymentInfo.encode(m.quotedPaymentInfo, w.uint32(250).fork()).ldelim(); + if (m.ephemeralStartTimestamp != null && Object.hasOwnProperty.call(m, "ephemeralStartTimestamp")) + w.uint32(256).uint64(m.ephemeralStartTimestamp); + if (m.ephemeralDuration != null && Object.hasOwnProperty.call(m, "ephemeralDuration")) + w.uint32(264).uint32(m.ephemeralDuration); + if (m.ephemeralOffToOn != null && Object.hasOwnProperty.call(m, "ephemeralOffToOn")) + w.uint32(272).bool(m.ephemeralOffToOn); + if (m.ephemeralOutOfSync != null && Object.hasOwnProperty.call(m, "ephemeralOutOfSync")) + w.uint32(280).bool(m.ephemeralOutOfSync); + if (m.bizPrivacyStatus != null && Object.hasOwnProperty.call(m, "bizPrivacyStatus")) + w.uint32(288).int32(m.bizPrivacyStatus); + if (m.verifiedBizName != null && Object.hasOwnProperty.call(m, "verifiedBizName")) + w.uint32(298).string(m.verifiedBizName); + if (m.mediaData != null && Object.hasOwnProperty.call(m, "mediaData")) + $root.proto.MediaData.encode(m.mediaData, w.uint32(306).fork()).ldelim(); + if (m.photoChange != null && Object.hasOwnProperty.call(m, "photoChange")) + $root.proto.PhotoChange.encode(m.photoChange, w.uint32(314).fork()).ldelim(); + if (m.userReceipt != null && m.userReceipt.length) { + for (var i = 0; i < m.userReceipt.length; ++i) + $root.proto.UserReceipt.encode(m.userReceipt[i], w.uint32(322).fork()).ldelim(); + } + if (m.reactions != null && m.reactions.length) { + for (var i = 0; i < m.reactions.length; ++i) + $root.proto.Reaction.encode(m.reactions[i], w.uint32(330).fork()).ldelim(); + } + if (m.quotedStickerData != null && Object.hasOwnProperty.call(m, "quotedStickerData")) + $root.proto.MediaData.encode(m.quotedStickerData, w.uint32(338).fork()).ldelim(); + if (m.futureproofData != null && Object.hasOwnProperty.call(m, "futureproofData")) + w.uint32(346).bytes(m.futureproofData); + if (m.statusPsa != null && Object.hasOwnProperty.call(m, "statusPsa")) + $root.proto.StatusPSA.encode(m.statusPsa, w.uint32(354).fork()).ldelim(); + if (m.pollUpdates != null && m.pollUpdates.length) { + for (var i = 0; i < m.pollUpdates.length; ++i) + $root.proto.PollUpdate.encode(m.pollUpdates[i], w.uint32(362).fork()).ldelim(); + } + if (m.pollAdditionalMetadata != null && Object.hasOwnProperty.call(m, "pollAdditionalMetadata")) + $root.proto.PollAdditionalMetadata.encode(m.pollAdditionalMetadata, w.uint32(370).fork()).ldelim(); + if (m.agentId != null && Object.hasOwnProperty.call(m, "agentId")) + w.uint32(378).string(m.agentId); + if (m.statusAlreadyViewed != null && Object.hasOwnProperty.call(m, "statusAlreadyViewed")) + w.uint32(384).bool(m.statusAlreadyViewed); + if (m.messageSecret != null && Object.hasOwnProperty.call(m, "messageSecret")) + w.uint32(394).bytes(m.messageSecret); + if (m.keepInChat != null && Object.hasOwnProperty.call(m, "keepInChat")) + $root.proto.KeepInChat.encode(m.keepInChat, w.uint32(402).fork()).ldelim(); + if (m.originalSelfAuthorUserJidString != null && Object.hasOwnProperty.call(m, "originalSelfAuthorUserJidString")) + w.uint32(410).string(m.originalSelfAuthorUserJidString); + if (m.revokeMessageTimestamp != null && Object.hasOwnProperty.call(m, "revokeMessageTimestamp")) + w.uint32(416).uint64(m.revokeMessageTimestamp); + if (m.pinInChat != null && Object.hasOwnProperty.call(m, "pinInChat")) + $root.proto.PinInChat.encode(m.pinInChat, w.uint32(434).fork()).ldelim(); + if (m.premiumMessageInfo != null && Object.hasOwnProperty.call(m, "premiumMessageInfo")) + $root.proto.PremiumMessageInfo.encode(m.premiumMessageInfo, w.uint32(442).fork()).ldelim(); + if (m.is1PBizBotMessage != null && Object.hasOwnProperty.call(m, "is1PBizBotMessage")) + w.uint32(448).bool(m.is1PBizBotMessage); + if (m.isGroupHistoryMessage != null && Object.hasOwnProperty.call(m, "isGroupHistoryMessage")) + w.uint32(456).bool(m.isGroupHistoryMessage); + if (m.botMessageInvokerJid != null && Object.hasOwnProperty.call(m, "botMessageInvokerJid")) + w.uint32(466).string(m.botMessageInvokerJid); + if (m.commentMetadata != null && Object.hasOwnProperty.call(m, "commentMetadata")) + $root.proto.CommentMetadata.encode(m.commentMetadata, w.uint32(474).fork()).ldelim(); + if (m.eventResponses != null && m.eventResponses.length) { + for (var i = 0; i < m.eventResponses.length; ++i) + $root.proto.EventResponse.encode(m.eventResponses[i], w.uint32(490).fork()).ldelim(); + } + if (m.reportingTokenInfo != null && Object.hasOwnProperty.call(m, "reportingTokenInfo")) + $root.proto.ReportingTokenInfo.encode(m.reportingTokenInfo, w.uint32(498).fork()).ldelim(); + if (m.newsletterServerId != null && Object.hasOwnProperty.call(m, "newsletterServerId")) + w.uint32(504).uint64(m.newsletterServerId); + if (m.eventAdditionalMetadata != null && Object.hasOwnProperty.call(m, "eventAdditionalMetadata")) + $root.proto.EventAdditionalMetadata.encode(m.eventAdditionalMetadata, w.uint32(514).fork()).ldelim(); + if (m.isMentionedInStatus != null && Object.hasOwnProperty.call(m, "isMentionedInStatus")) + w.uint32(520).bool(m.isMentionedInStatus); + if (m.statusMentions != null && m.statusMentions.length) { + for (var i = 0; i < m.statusMentions.length; ++i) + w.uint32(530).string(m.statusMentions[i]); + } + if (m.targetMessageId != null && Object.hasOwnProperty.call(m, "targetMessageId")) + $root.proto.MessageKey.encode(m.targetMessageId, w.uint32(538).fork()).ldelim(); + if (m.messageAddOns != null && m.messageAddOns.length) { + for (var i = 0; i < m.messageAddOns.length; ++i) + $root.proto.MessageAddOn.encode(m.messageAddOns[i], w.uint32(546).fork()).ldelim(); + } + if (m.statusMentionMessageInfo != null && Object.hasOwnProperty.call(m, "statusMentionMessageInfo")) + $root.proto.StatusMentionMessage.encode(m.statusMentionMessageInfo, w.uint32(554).fork()).ldelim(); + if (m.isSupportAiMessage != null && Object.hasOwnProperty.call(m, "isSupportAiMessage")) + w.uint32(560).bool(m.isSupportAiMessage); + if (m.statusMentionSources != null && m.statusMentionSources.length) { + for (var i = 0; i < m.statusMentionSources.length; ++i) + w.uint32(570).string(m.statusMentionSources[i]); + } + if (m.supportAiCitations != null && m.supportAiCitations.length) { + for (var i = 0; i < m.supportAiCitations.length; ++i) + $root.proto.Citation.encode(m.supportAiCitations[i], w.uint32(578).fork()).ldelim(); + } + if (m.botTargetId != null && Object.hasOwnProperty.call(m, "botTargetId")) + w.uint32(586).string(m.botTargetId); + if (m.groupHistoryIndividualMessageInfo != null && Object.hasOwnProperty.call(m, "groupHistoryIndividualMessageInfo")) + $root.proto.GroupHistoryIndividualMessageInfo.encode(m.groupHistoryIndividualMessageInfo, w.uint32(594).fork()).ldelim(); + if (m.groupHistoryBundleInfo != null && Object.hasOwnProperty.call(m, "groupHistoryBundleInfo")) + $root.proto.GroupHistoryBundleInfo.encode(m.groupHistoryBundleInfo, w.uint32(602).fork()).ldelim(); + if (m.interactiveMessageAdditionalMetadata != null && Object.hasOwnProperty.call(m, "interactiveMessageAdditionalMetadata")) + $root.proto.InteractiveMessageAdditionalMetadata.encode(m.interactiveMessageAdditionalMetadata, w.uint32(610).fork()).ldelim(); + if (m.quarantinedMessage != null && Object.hasOwnProperty.call(m, "quarantinedMessage")) + $root.proto.QuarantinedMessage.encode(m.quarantinedMessage, w.uint32(618).fork()).ldelim(); + return w; + }; + + WebMessageInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.WebMessageInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 1: { + m.key = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 2: { + m.message = $root.proto.Message.decode(r, r.uint32()); + break; + } + case 3: { + m.messageTimestamp = r.uint64(); + break; + } + case 4: { + m.status = r.int32(); + break; + } + case 5: { + m.participant = r.string(); + break; + } + case 6: { + m.messageC2STimestamp = r.uint64(); + break; + } + case 16: { + m.ignore = r.bool(); + break; + } + case 17: { + m.starred = r.bool(); + break; + } + case 18: { + m.broadcast = r.bool(); + break; + } + case 19: { + m.pushName = r.string(); + break; + } + case 20: { + m.mediaCiphertextSha256 = r.bytes(); + break; + } + case 21: { + m.multicast = r.bool(); + break; + } + case 22: { + m.urlText = r.bool(); + break; + } + case 23: { + m.urlNumber = r.bool(); + break; + } + case 24: { + m.messageStubType = r.int32(); + break; + } + case 25: { + m.clearMedia = r.bool(); + break; + } + case 26: { + if (!(m.messageStubParameters && m.messageStubParameters.length)) + m.messageStubParameters = []; + m.messageStubParameters.push(r.string()); + break; + } + case 27: { + m.duration = r.uint32(); + break; + } + case 28: { + if (!(m.labels && m.labels.length)) + m.labels = []; + m.labels.push(r.string()); + break; + } + case 29: { + m.paymentInfo = $root.proto.PaymentInfo.decode(r, r.uint32()); + break; + } + case 30: { + m.finalLiveLocation = $root.proto.Message.LiveLocationMessage.decode(r, r.uint32()); + break; + } + case 31: { + m.quotedPaymentInfo = $root.proto.PaymentInfo.decode(r, r.uint32()); + break; + } + case 32: { + m.ephemeralStartTimestamp = r.uint64(); + break; + } + case 33: { + m.ephemeralDuration = r.uint32(); + break; + } + case 34: { + m.ephemeralOffToOn = r.bool(); + break; + } + case 35: { + m.ephemeralOutOfSync = r.bool(); + break; + } + case 36: { + m.bizPrivacyStatus = r.int32(); + break; + } + case 37: { + m.verifiedBizName = r.string(); + break; + } + case 38: { + m.mediaData = $root.proto.MediaData.decode(r, r.uint32()); + break; + } + case 39: { + m.photoChange = $root.proto.PhotoChange.decode(r, r.uint32()); + break; + } + case 40: { + if (!(m.userReceipt && m.userReceipt.length)) + m.userReceipt = []; + m.userReceipt.push($root.proto.UserReceipt.decode(r, r.uint32())); + break; + } + case 41: { + if (!(m.reactions && m.reactions.length)) + m.reactions = []; + m.reactions.push($root.proto.Reaction.decode(r, r.uint32())); + break; + } + case 42: { + m.quotedStickerData = $root.proto.MediaData.decode(r, r.uint32()); + break; + } + case 43: { + m.futureproofData = r.bytes(); + break; + } + case 44: { + m.statusPsa = $root.proto.StatusPSA.decode(r, r.uint32()); + break; + } + case 45: { + if (!(m.pollUpdates && m.pollUpdates.length)) + m.pollUpdates = []; + m.pollUpdates.push($root.proto.PollUpdate.decode(r, r.uint32())); + break; + } + case 46: { + m.pollAdditionalMetadata = $root.proto.PollAdditionalMetadata.decode(r, r.uint32()); + break; + } + case 47: { + m.agentId = r.string(); + break; + } + case 48: { + m.statusAlreadyViewed = r.bool(); + break; + } + case 49: { + m.messageSecret = r.bytes(); + break; + } + case 50: { + m.keepInChat = $root.proto.KeepInChat.decode(r, r.uint32()); + break; + } + case 51: { + m.originalSelfAuthorUserJidString = r.string(); + break; + } + case 52: { + m.revokeMessageTimestamp = r.uint64(); + break; + } + case 54: { + m.pinInChat = $root.proto.PinInChat.decode(r, r.uint32()); + break; + } + case 55: { + m.premiumMessageInfo = $root.proto.PremiumMessageInfo.decode(r, r.uint32()); + break; + } + case 56: { + m.is1PBizBotMessage = r.bool(); + break; + } + case 57: { + m.isGroupHistoryMessage = r.bool(); + break; + } + case 58: { + m.botMessageInvokerJid = r.string(); + break; + } + case 59: { + m.commentMetadata = $root.proto.CommentMetadata.decode(r, r.uint32()); + break; + } + case 61: { + if (!(m.eventResponses && m.eventResponses.length)) + m.eventResponses = []; + m.eventResponses.push($root.proto.EventResponse.decode(r, r.uint32())); + break; + } + case 62: { + m.reportingTokenInfo = $root.proto.ReportingTokenInfo.decode(r, r.uint32()); + break; + } + case 63: { + m.newsletterServerId = r.uint64(); + break; + } + case 64: { + m.eventAdditionalMetadata = $root.proto.EventAdditionalMetadata.decode(r, r.uint32()); + break; + } + case 65: { + m.isMentionedInStatus = r.bool(); + break; + } + case 66: { + if (!(m.statusMentions && m.statusMentions.length)) + m.statusMentions = []; + m.statusMentions.push(r.string()); + break; + } + case 67: { + m.targetMessageId = $root.proto.MessageKey.decode(r, r.uint32()); + break; + } + case 68: { + if (!(m.messageAddOns && m.messageAddOns.length)) + m.messageAddOns = []; + m.messageAddOns.push($root.proto.MessageAddOn.decode(r, r.uint32())); + break; + } + case 69: { + m.statusMentionMessageInfo = $root.proto.StatusMentionMessage.decode(r, r.uint32()); + break; + } + case 70: { + m.isSupportAiMessage = r.bool(); + break; + } + case 71: { + if (!(m.statusMentionSources && m.statusMentionSources.length)) + m.statusMentionSources = []; + m.statusMentionSources.push(r.string()); + break; + } + case 72: { + if (!(m.supportAiCitations && m.supportAiCitations.length)) + m.supportAiCitations = []; + m.supportAiCitations.push($root.proto.Citation.decode(r, r.uint32())); + break; + } + case 73: { + m.botTargetId = r.string(); + break; + } + case 74: { + m.groupHistoryIndividualMessageInfo = $root.proto.GroupHistoryIndividualMessageInfo.decode(r, r.uint32()); + break; + } + case 75: { + m.groupHistoryBundleInfo = $root.proto.GroupHistoryBundleInfo.decode(r, r.uint32()); + break; + } + case 76: { + m.interactiveMessageAdditionalMetadata = $root.proto.InteractiveMessageAdditionalMetadata.decode(r, r.uint32()); + break; + } + case 77: { + m.quarantinedMessage = $root.proto.QuarantinedMessage.decode(r, r.uint32()); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WebMessageInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.WebMessageInfo) + return d; + var m = new $root.proto.WebMessageInfo(); + if (d.key != null) { + if (typeof d.key !== "object") + throw TypeError(".proto.WebMessageInfo.key: object expected"); + m.key = $root.proto.MessageKey.fromObject(d.key); + } + if (d.message != null) { + if (typeof d.message !== "object") + throw TypeError(".proto.WebMessageInfo.message: object expected"); + m.message = $root.proto.Message.fromObject(d.message); + } + if (d.messageTimestamp != null) { + if ($util.Long) + (m.messageTimestamp = $util.Long.fromValue(d.messageTimestamp)).unsigned = true; + else if (typeof d.messageTimestamp === "string") + m.messageTimestamp = parseInt(d.messageTimestamp, 10); + else if (typeof d.messageTimestamp === "number") + m.messageTimestamp = d.messageTimestamp; + else if (typeof d.messageTimestamp === "object") + m.messageTimestamp = new $util.LongBits(d.messageTimestamp.low >>> 0, d.messageTimestamp.high >>> 0).toNumber(true); + } + switch (d.status) { + default: + if (typeof d.status === "number") { + m.status = d.status; + break; + } + break; + case "ERROR": + case 0: + m.status = 0; + break; + case "PENDING": + case 1: + m.status = 1; + break; + case "SERVER_ACK": + case 2: + m.status = 2; + break; + case "DELIVERY_ACK": + case 3: + m.status = 3; + break; + case "READ": + case 4: + m.status = 4; + break; + case "PLAYED": + case 5: + m.status = 5; + break; + } + if (d.participant != null) { + m.participant = String(d.participant); + } + if (d.messageC2STimestamp != null) { + if ($util.Long) + (m.messageC2STimestamp = $util.Long.fromValue(d.messageC2STimestamp)).unsigned = true; + else if (typeof d.messageC2STimestamp === "string") + m.messageC2STimestamp = parseInt(d.messageC2STimestamp, 10); + else if (typeof d.messageC2STimestamp === "number") + m.messageC2STimestamp = d.messageC2STimestamp; + else if (typeof d.messageC2STimestamp === "object") + m.messageC2STimestamp = new $util.LongBits(d.messageC2STimestamp.low >>> 0, d.messageC2STimestamp.high >>> 0).toNumber(true); + } + if (d.ignore != null) { + m.ignore = Boolean(d.ignore); + } + if (d.starred != null) { + m.starred = Boolean(d.starred); + } + if (d.broadcast != null) { + m.broadcast = Boolean(d.broadcast); + } + if (d.pushName != null) { + m.pushName = String(d.pushName); + } + if (d.mediaCiphertextSha256 != null) { + if (typeof d.mediaCiphertextSha256 === "string") + $util.base64.decode(d.mediaCiphertextSha256, m.mediaCiphertextSha256 = $util.newBuffer($util.base64.length(d.mediaCiphertextSha256)), 0); + else if (d.mediaCiphertextSha256.length >= 0) + m.mediaCiphertextSha256 = d.mediaCiphertextSha256; + } + if (d.multicast != null) { + m.multicast = Boolean(d.multicast); + } + if (d.urlText != null) { + m.urlText = Boolean(d.urlText); + } + if (d.urlNumber != null) { + m.urlNumber = Boolean(d.urlNumber); + } + switch (d.messageStubType) { + default: + if (typeof d.messageStubType === "number") { + m.messageStubType = d.messageStubType; + break; + } + break; + case "UNKNOWN": + case 0: + m.messageStubType = 0; + break; + case "REVOKE": + case 1: + m.messageStubType = 1; + break; + case "CIPHERTEXT": + case 2: + m.messageStubType = 2; + break; + case "FUTUREPROOF": + case 3: + m.messageStubType = 3; + break; + case "NON_VERIFIED_TRANSITION": + case 4: + m.messageStubType = 4; + break; + case "UNVERIFIED_TRANSITION": + case 5: + m.messageStubType = 5; + break; + case "VERIFIED_TRANSITION": + case 6: + m.messageStubType = 6; + break; + case "VERIFIED_LOW_UNKNOWN": + case 7: + m.messageStubType = 7; + break; + case "VERIFIED_HIGH": + case 8: + m.messageStubType = 8; + break; + case "VERIFIED_INITIAL_UNKNOWN": + case 9: + m.messageStubType = 9; + break; + case "VERIFIED_INITIAL_LOW": + case 10: + m.messageStubType = 10; + break; + case "VERIFIED_INITIAL_HIGH": + case 11: + m.messageStubType = 11; + break; + case "VERIFIED_TRANSITION_ANY_TO_NONE": + case 12: + m.messageStubType = 12; + break; + case "VERIFIED_TRANSITION_ANY_TO_HIGH": + case 13: + m.messageStubType = 13; + break; + case "VERIFIED_TRANSITION_HIGH_TO_LOW": + case 14: + m.messageStubType = 14; + break; + case "VERIFIED_TRANSITION_HIGH_TO_UNKNOWN": + case 15: + m.messageStubType = 15; + break; + case "VERIFIED_TRANSITION_UNKNOWN_TO_LOW": + case 16: + m.messageStubType = 16; + break; + case "VERIFIED_TRANSITION_LOW_TO_UNKNOWN": + case 17: + m.messageStubType = 17; + break; + case "VERIFIED_TRANSITION_NONE_TO_LOW": + case 18: + m.messageStubType = 18; + break; + case "VERIFIED_TRANSITION_NONE_TO_UNKNOWN": + case 19: + m.messageStubType = 19; + break; + case "GROUP_CREATE": + case 20: + m.messageStubType = 20; + break; + case "GROUP_CHANGE_SUBJECT": + case 21: + m.messageStubType = 21; + break; + case "GROUP_CHANGE_ICON": + case 22: + m.messageStubType = 22; + break; + case "GROUP_CHANGE_INVITE_LINK": + case 23: + m.messageStubType = 23; + break; + case "GROUP_CHANGE_DESCRIPTION": + case 24: + m.messageStubType = 24; + break; + case "GROUP_CHANGE_RESTRICT": + case 25: + m.messageStubType = 25; + break; + case "GROUP_CHANGE_ANNOUNCE": + case 26: + m.messageStubType = 26; + break; + case "GROUP_PARTICIPANT_ADD": + case 27: + m.messageStubType = 27; + break; + case "GROUP_PARTICIPANT_REMOVE": + case 28: + m.messageStubType = 28; + break; + case "GROUP_PARTICIPANT_PROMOTE": + case 29: + m.messageStubType = 29; + break; + case "GROUP_PARTICIPANT_DEMOTE": + case 30: + m.messageStubType = 30; + break; + case "GROUP_PARTICIPANT_INVITE": + case 31: + m.messageStubType = 31; + break; + case "GROUP_PARTICIPANT_LEAVE": + case 32: + m.messageStubType = 32; + break; + case "GROUP_PARTICIPANT_CHANGE_NUMBER": + case 33: + m.messageStubType = 33; + break; + case "BROADCAST_CREATE": + case 34: + m.messageStubType = 34; + break; + case "BROADCAST_ADD": + case 35: + m.messageStubType = 35; + break; + case "BROADCAST_REMOVE": + case 36: + m.messageStubType = 36; + break; + case "GENERIC_NOTIFICATION": + case 37: + m.messageStubType = 37; + break; + case "E2E_IDENTITY_CHANGED": + case 38: + m.messageStubType = 38; + break; + case "E2E_ENCRYPTED": + case 39: + m.messageStubType = 39; + break; + case "CALL_MISSED_VOICE": + case 40: + m.messageStubType = 40; + break; + case "CALL_MISSED_VIDEO": + case 41: + m.messageStubType = 41; + break; + case "INDIVIDUAL_CHANGE_NUMBER": + case 42: + m.messageStubType = 42; + break; + case "GROUP_DELETE": + case 43: + m.messageStubType = 43; + break; + case "GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE": + case 44: + m.messageStubType = 44; + break; + case "CALL_MISSED_GROUP_VOICE": + case 45: + m.messageStubType = 45; + break; + case "CALL_MISSED_GROUP_VIDEO": + case 46: + m.messageStubType = 46; + break; + case "PAYMENT_CIPHERTEXT": + case 47: + m.messageStubType = 47; + break; + case "PAYMENT_FUTUREPROOF": + case 48: + m.messageStubType = 48; + break; + case "PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED": + case 49: + m.messageStubType = 49; + break; + case "PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED": + case 50: + m.messageStubType = 50; + break; + case "PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED": + case 51: + m.messageStubType = 51; + break; + case "PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP": + case 52: + m.messageStubType = 52; + break; + case "PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP": + case 53: + m.messageStubType = 53; + break; + case "PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER": + case 54: + m.messageStubType = 54; + break; + case "PAYMENT_ACTION_SEND_PAYMENT_REMINDER": + case 55: + m.messageStubType = 55; + break; + case "PAYMENT_ACTION_SEND_PAYMENT_INVITATION": + case 56: + m.messageStubType = 56; + break; + case "PAYMENT_ACTION_REQUEST_DECLINED": + case 57: + m.messageStubType = 57; + break; + case "PAYMENT_ACTION_REQUEST_EXPIRED": + case 58: + m.messageStubType = 58; + break; + case "PAYMENT_ACTION_REQUEST_CANCELLED": + case 59: + m.messageStubType = 59; + break; + case "BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM": + case 60: + m.messageStubType = 60; + break; + case "BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP": + case 61: + m.messageStubType = 61; + break; + case "BIZ_INTRO_TOP": + case 62: + m.messageStubType = 62; + break; + case "BIZ_INTRO_BOTTOM": + case 63: + m.messageStubType = 63; + break; + case "BIZ_NAME_CHANGE": + case 64: + m.messageStubType = 64; + break; + case "BIZ_MOVE_TO_CONSUMER_APP": + case 65: + m.messageStubType = 65; + break; + case "BIZ_TWO_TIER_MIGRATION_TOP": + case 66: + m.messageStubType = 66; + break; + case "BIZ_TWO_TIER_MIGRATION_BOTTOM": + case 67: + m.messageStubType = 67; + break; + case "OVERSIZED": + case 68: + m.messageStubType = 68; + break; + case "GROUP_CHANGE_NO_FREQUENTLY_FORWARDED": + case 69: + m.messageStubType = 69; + break; + case "GROUP_V4_ADD_INVITE_SENT": + case 70: + m.messageStubType = 70; + break; + case "GROUP_PARTICIPANT_ADD_REQUEST_JOIN": + case 71: + m.messageStubType = 71; + break; + case "CHANGE_EPHEMERAL_SETTING": + case 72: + m.messageStubType = 72; + break; + case "E2E_DEVICE_CHANGED": + case 73: + m.messageStubType = 73; + break; + case "VIEWED_ONCE": + case 74: + m.messageStubType = 74; + break; + case "E2E_ENCRYPTED_NOW": + case 75: + m.messageStubType = 75; + break; + case "BLUE_MSG_BSP_FB_TO_BSP_PREMISE": + case 76: + m.messageStubType = 76; + break; + case "BLUE_MSG_BSP_FB_TO_SELF_FB": + case 77: + m.messageStubType = 77; + break; + case "BLUE_MSG_BSP_FB_TO_SELF_PREMISE": + case 78: + m.messageStubType = 78; + break; + case "BLUE_MSG_BSP_FB_UNVERIFIED": + case 79: + m.messageStubType = 79; + break; + case "BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED": + case 80: + m.messageStubType = 80; + break; + case "BLUE_MSG_BSP_FB_VERIFIED": + case 81: + m.messageStubType = 81; + break; + case "BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED": + case 82: + m.messageStubType = 82; + break; + case "BLUE_MSG_BSP_PREMISE_TO_SELF_PREMISE": + case 83: + m.messageStubType = 83; + break; + case "BLUE_MSG_BSP_PREMISE_UNVERIFIED": + case 84: + m.messageStubType = 84; + break; + case "BLUE_MSG_BSP_PREMISE_UNVERIFIED_TO_SELF_PREMISE_VERIFIED": + case 85: + m.messageStubType = 85; + break; + case "BLUE_MSG_BSP_PREMISE_VERIFIED": + case 86: + m.messageStubType = 86; + break; + case "BLUE_MSG_BSP_PREMISE_VERIFIED_TO_SELF_PREMISE_UNVERIFIED": + case 87: + m.messageStubType = 87; + break; + case "BLUE_MSG_CONSUMER_TO_BSP_FB_UNVERIFIED": + case 88: + m.messageStubType = 88; + break; + case "BLUE_MSG_CONSUMER_TO_BSP_PREMISE_UNVERIFIED": + case 89: + m.messageStubType = 89; + break; + case "BLUE_MSG_CONSUMER_TO_SELF_FB_UNVERIFIED": + case 90: + m.messageStubType = 90; + break; + case "BLUE_MSG_CONSUMER_TO_SELF_PREMISE_UNVERIFIED": + case 91: + m.messageStubType = 91; + break; + case "BLUE_MSG_SELF_FB_TO_BSP_PREMISE": + case 92: + m.messageStubType = 92; + break; + case "BLUE_MSG_SELF_FB_TO_SELF_PREMISE": + case 93: + m.messageStubType = 93; + break; + case "BLUE_MSG_SELF_FB_UNVERIFIED": + case 94: + m.messageStubType = 94; + break; + case "BLUE_MSG_SELF_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED": + case 95: + m.messageStubType = 95; + break; + case "BLUE_MSG_SELF_FB_VERIFIED": + case 96: + m.messageStubType = 96; + break; + case "BLUE_MSG_SELF_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED": + case 97: + m.messageStubType = 97; + break; + case "BLUE_MSG_SELF_PREMISE_TO_BSP_PREMISE": + case 98: + m.messageStubType = 98; + break; + case "BLUE_MSG_SELF_PREMISE_UNVERIFIED": + case 99: + m.messageStubType = 99; + break; + case "BLUE_MSG_SELF_PREMISE_VERIFIED": + case 100: + m.messageStubType = 100; + break; + case "BLUE_MSG_TO_BSP_FB": + case 101: + m.messageStubType = 101; + break; + case "BLUE_MSG_TO_CONSUMER": + case 102: + m.messageStubType = 102; + break; + case "BLUE_MSG_TO_SELF_FB": + case 103: + m.messageStubType = 103; + break; + case "BLUE_MSG_UNVERIFIED_TO_BSP_FB_VERIFIED": + case 104: + m.messageStubType = 104; + break; + case "BLUE_MSG_UNVERIFIED_TO_BSP_PREMISE_VERIFIED": + case 105: + m.messageStubType = 105; + break; + case "BLUE_MSG_UNVERIFIED_TO_SELF_FB_VERIFIED": + case 106: + m.messageStubType = 106; + break; + case "BLUE_MSG_UNVERIFIED_TO_VERIFIED": + case 107: + m.messageStubType = 107; + break; + case "BLUE_MSG_VERIFIED_TO_BSP_FB_UNVERIFIED": + case 108: + m.messageStubType = 108; + break; + case "BLUE_MSG_VERIFIED_TO_BSP_PREMISE_UNVERIFIED": + case 109: + m.messageStubType = 109; + break; + case "BLUE_MSG_VERIFIED_TO_SELF_FB_UNVERIFIED": + case 110: + m.messageStubType = 110; + break; + case "BLUE_MSG_VERIFIED_TO_UNVERIFIED": + case 111: + m.messageStubType = 111; + break; + case "BLUE_MSG_BSP_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED": + case 112: + m.messageStubType = 112; + break; + case "BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_FB_VERIFIED": + case 113: + m.messageStubType = 113; + break; + case "BLUE_MSG_BSP_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED": + case 114: + m.messageStubType = 114; + break; + case "BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_FB_UNVERIFIED": + case 115: + m.messageStubType = 115; + break; + case "BLUE_MSG_SELF_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED": + case 116: + m.messageStubType = 116; + break; + case "BLUE_MSG_SELF_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED": + case 117: + m.messageStubType = 117; + break; + case "E2E_IDENTITY_UNAVAILABLE": + case 118: + m.messageStubType = 118; + break; + case "GROUP_CREATING": + case 119: + m.messageStubType = 119; + break; + case "GROUP_CREATE_FAILED": + case 120: + m.messageStubType = 120; + break; + case "GROUP_BOUNCED": + case 121: + m.messageStubType = 121; + break; + case "BLOCK_CONTACT": + case 122: + m.messageStubType = 122; + break; + case "EPHEMERAL_SETTING_NOT_APPLIED": + case 123: + m.messageStubType = 123; + break; + case "SYNC_FAILED": + case 124: + m.messageStubType = 124; + break; + case "SYNCING": + case 125: + m.messageStubType = 125; + break; + case "BIZ_PRIVACY_MODE_INIT_FB": + case 126: + m.messageStubType = 126; + break; + case "BIZ_PRIVACY_MODE_INIT_BSP": + case 127: + m.messageStubType = 127; + break; + case "BIZ_PRIVACY_MODE_TO_FB": + case 128: + m.messageStubType = 128; + break; + case "BIZ_PRIVACY_MODE_TO_BSP": + case 129: + m.messageStubType = 129; + break; + case "DISAPPEARING_MODE": + case 130: + m.messageStubType = 130; + break; + case "E2E_DEVICE_FETCH_FAILED": + case 131: + m.messageStubType = 131; + break; + case "ADMIN_REVOKE": + case 132: + m.messageStubType = 132; + break; + case "GROUP_INVITE_LINK_GROWTH_LOCKED": + case 133: + m.messageStubType = 133; + break; + case "COMMUNITY_LINK_PARENT_GROUP": + case 134: + m.messageStubType = 134; + break; + case "COMMUNITY_LINK_SIBLING_GROUP": + case 135: + m.messageStubType = 135; + break; + case "COMMUNITY_LINK_SUB_GROUP": + case 136: + m.messageStubType = 136; + break; + case "COMMUNITY_UNLINK_PARENT_GROUP": + case 137: + m.messageStubType = 137; + break; + case "COMMUNITY_UNLINK_SIBLING_GROUP": + case 138: + m.messageStubType = 138; + break; + case "COMMUNITY_UNLINK_SUB_GROUP": + case 139: + m.messageStubType = 139; + break; + case "GROUP_PARTICIPANT_ACCEPT": + case 140: + m.messageStubType = 140; + break; + case "GROUP_PARTICIPANT_LINKED_GROUP_JOIN": + case 141: + m.messageStubType = 141; + break; + case "COMMUNITY_CREATE": + case 142: + m.messageStubType = 142; + break; + case "EPHEMERAL_KEEP_IN_CHAT": + case 143: + m.messageStubType = 143; + break; + case "GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST": + case 144: + m.messageStubType = 144; + break; + case "GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE": + case 145: + m.messageStubType = 145; + break; + case "INTEGRITY_UNLINK_PARENT_GROUP": + case 146: + m.messageStubType = 146; + break; + case "COMMUNITY_PARTICIPANT_PROMOTE": + case 147: + m.messageStubType = 147; + break; + case "COMMUNITY_PARTICIPANT_DEMOTE": + case 148: + m.messageStubType = 148; + break; + case "COMMUNITY_PARENT_GROUP_DELETED": + case 149: + m.messageStubType = 149; + break; + case "COMMUNITY_LINK_PARENT_GROUP_MEMBERSHIP_APPROVAL": + case 150: + m.messageStubType = 150; + break; + case "GROUP_PARTICIPANT_JOINED_GROUP_AND_PARENT_GROUP": + case 151: + m.messageStubType = 151; + break; + case "MASKED_THREAD_CREATED": + case 152: + m.messageStubType = 152; + break; + case "MASKED_THREAD_UNMASKED": + case 153: + m.messageStubType = 153; + break; + case "BIZ_CHAT_ASSIGNMENT": + case 154: + m.messageStubType = 154; + break; + case "CHAT_PSA": + case 155: + m.messageStubType = 155; + break; + case "CHAT_POLL_CREATION_MESSAGE": + case 156: + m.messageStubType = 156; + break; + case "CAG_MASKED_THREAD_CREATED": + case 157: + m.messageStubType = 157; + break; + case "COMMUNITY_PARENT_GROUP_SUBJECT_CHANGED": + case 158: + m.messageStubType = 158; + break; + case "CAG_INVITE_AUTO_ADD": + case 159: + m.messageStubType = 159; + break; + case "BIZ_CHAT_ASSIGNMENT_UNASSIGN": + case 160: + m.messageStubType = 160; + break; + case "CAG_INVITE_AUTO_JOINED": + case 161: + m.messageStubType = 161; + break; + case "SCHEDULED_CALL_START_MESSAGE": + case 162: + m.messageStubType = 162; + break; + case "COMMUNITY_INVITE_RICH": + case 163: + m.messageStubType = 163; + break; + case "COMMUNITY_INVITE_AUTO_ADD_RICH": + case 164: + m.messageStubType = 164; + break; + case "SUB_GROUP_INVITE_RICH": + case 165: + m.messageStubType = 165; + break; + case "SUB_GROUP_PARTICIPANT_ADD_RICH": + case 166: + m.messageStubType = 166; + break; + case "COMMUNITY_LINK_PARENT_GROUP_RICH": + case 167: + m.messageStubType = 167; + break; + case "COMMUNITY_PARTICIPANT_ADD_RICH": + case 168: + m.messageStubType = 168; + break; + case "SILENCED_UNKNOWN_CALLER_AUDIO": + case 169: + m.messageStubType = 169; + break; + case "SILENCED_UNKNOWN_CALLER_VIDEO": + case 170: + m.messageStubType = 170; + break; + case "GROUP_MEMBER_ADD_MODE": + case 171: + m.messageStubType = 171; + break; + case "GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD": + case 172: + m.messageStubType = 172; + break; + case "COMMUNITY_CHANGE_DESCRIPTION": + case 173: + m.messageStubType = 173; + break; + case "SENDER_INVITE": + case 174: + m.messageStubType = 174; + break; + case "RECEIVER_INVITE": + case 175: + m.messageStubType = 175; + break; + case "COMMUNITY_ALLOW_MEMBER_ADDED_GROUPS": + case 176: + m.messageStubType = 176; + break; + case "PINNED_MESSAGE_IN_CHAT": + case 177: + m.messageStubType = 177; + break; + case "PAYMENT_INVITE_SETUP_INVITER": + case 178: + m.messageStubType = 178; + break; + case "PAYMENT_INVITE_SETUP_INVITEE_RECEIVE_ONLY": + case 179: + m.messageStubType = 179; + break; + case "PAYMENT_INVITE_SETUP_INVITEE_SEND_AND_RECEIVE": + case 180: + m.messageStubType = 180; + break; + case "LINKED_GROUP_CALL_START": + case 181: + m.messageStubType = 181; + break; + case "REPORT_TO_ADMIN_ENABLED_STATUS": + case 182: + m.messageStubType = 182; + break; + case "EMPTY_SUBGROUP_CREATE": + case 183: + m.messageStubType = 183; + break; + case "SCHEDULED_CALL_CANCEL": + case 184: + m.messageStubType = 184; + break; + case "SUBGROUP_ADMIN_TRIGGERED_AUTO_ADD_RICH": + case 185: + m.messageStubType = 185; + break; + case "GROUP_CHANGE_RECENT_HISTORY_SHARING": + case 186: + m.messageStubType = 186; + break; + case "PAID_MESSAGE_SERVER_CAMPAIGN_ID": + case 187: + m.messageStubType = 187; + break; + case "GENERAL_CHAT_CREATE": + case 188: + m.messageStubType = 188; + break; + case "GENERAL_CHAT_ADD": + case 189: + m.messageStubType = 189; + break; + case "GENERAL_CHAT_AUTO_ADD_DISABLED": + case 190: + m.messageStubType = 190; + break; + case "SUGGESTED_SUBGROUP_ANNOUNCE": + case 191: + m.messageStubType = 191; + break; + case "BIZ_BOT_1P_MESSAGING_ENABLED": + case 192: + m.messageStubType = 192; + break; + case "CHANGE_USERNAME": + case 193: + m.messageStubType = 193; + break; + case "BIZ_COEX_PRIVACY_INIT_SELF": + case 194: + m.messageStubType = 194; + break; + case "BIZ_COEX_PRIVACY_TRANSITION_SELF": + case 195: + m.messageStubType = 195; + break; + case "SUPPORT_AI_EDUCATION": + case 196: + m.messageStubType = 196; + break; + case "BIZ_BOT_3P_MESSAGING_ENABLED": + case 197: + m.messageStubType = 197; + break; + case "REMINDER_SETUP_MESSAGE": + case 198: + m.messageStubType = 198; + break; + case "REMINDER_SENT_MESSAGE": + case 199: + m.messageStubType = 199; + break; + case "REMINDER_CANCEL_MESSAGE": + case 200: + m.messageStubType = 200; + break; + case "BIZ_COEX_PRIVACY_INIT": + case 201: + m.messageStubType = 201; + break; + case "BIZ_COEX_PRIVACY_TRANSITION": + case 202: + m.messageStubType = 202; + break; + case "GROUP_DEACTIVATED": + case 203: + m.messageStubType = 203; + break; + case "COMMUNITY_DEACTIVATE_SIBLING_GROUP": + case 204: + m.messageStubType = 204; + break; + case "EVENT_UPDATED": + case 205: + m.messageStubType = 205; + break; + case "EVENT_CANCELED": + case 206: + m.messageStubType = 206; + break; + case "COMMUNITY_OWNER_UPDATED": + case 207: + m.messageStubType = 207; + break; + case "COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN": + case 208: + m.messageStubType = 208; + break; + case "CAPI_GROUP_NE2EE_SYSTEM_MESSAGE": + case 209: + m.messageStubType = 209; + break; + case "STATUS_MENTION": + case 210: + m.messageStubType = 210; + break; + case "USER_CONTROLS_SYSTEM_MESSAGE": + case 211: + m.messageStubType = 211; + break; + case "SUPPORT_SYSTEM_MESSAGE": + case 212: + m.messageStubType = 212; + break; + case "CHANGE_LID": + case 213: + m.messageStubType = 213; + break; + case "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE": + case 214: + m.messageStubType = 214; + break; + case "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE": + case 215: + m.messageStubType = 215; + break; + case "CHANGE_LIMIT_SHARING": + case 216: + m.messageStubType = 216; + break; + case "GROUP_MEMBER_LINK_MODE": + case 217: + m.messageStubType = 217; + break; + case "BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE": + case 218: + m.messageStubType = 218; + break; + case "PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE": + case 219: + m.messageStubType = 219; + break; + case "QUARANTINED_MESSAGE": + case 220: + m.messageStubType = 220; + break; + case "GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE": + case 221: + m.messageStubType = 221; + break; + } + if (d.clearMedia != null) { + m.clearMedia = Boolean(d.clearMedia); + } + if (d.messageStubParameters) { + if (!Array.isArray(d.messageStubParameters)) + throw TypeError(".proto.WebMessageInfo.messageStubParameters: array expected"); + m.messageStubParameters = []; + for (var i = 0; i < d.messageStubParameters.length; ++i) { + m.messageStubParameters[i] = String(d.messageStubParameters[i]); + } + } + if (d.duration != null) { + m.duration = d.duration >>> 0; + } + if (d.labels) { + if (!Array.isArray(d.labels)) + throw TypeError(".proto.WebMessageInfo.labels: array expected"); + m.labels = []; + for (var i = 0; i < d.labels.length; ++i) { + m.labels[i] = String(d.labels[i]); + } + } + if (d.paymentInfo != null) { + if (typeof d.paymentInfo !== "object") + throw TypeError(".proto.WebMessageInfo.paymentInfo: object expected"); + m.paymentInfo = $root.proto.PaymentInfo.fromObject(d.paymentInfo); + } + if (d.finalLiveLocation != null) { + if (typeof d.finalLiveLocation !== "object") + throw TypeError(".proto.WebMessageInfo.finalLiveLocation: object expected"); + m.finalLiveLocation = $root.proto.Message.LiveLocationMessage.fromObject(d.finalLiveLocation); + } + if (d.quotedPaymentInfo != null) { + if (typeof d.quotedPaymentInfo !== "object") + throw TypeError(".proto.WebMessageInfo.quotedPaymentInfo: object expected"); + m.quotedPaymentInfo = $root.proto.PaymentInfo.fromObject(d.quotedPaymentInfo); + } + if (d.ephemeralStartTimestamp != null) { + if ($util.Long) + (m.ephemeralStartTimestamp = $util.Long.fromValue(d.ephemeralStartTimestamp)).unsigned = true; + else if (typeof d.ephemeralStartTimestamp === "string") + m.ephemeralStartTimestamp = parseInt(d.ephemeralStartTimestamp, 10); + else if (typeof d.ephemeralStartTimestamp === "number") + m.ephemeralStartTimestamp = d.ephemeralStartTimestamp; + else if (typeof d.ephemeralStartTimestamp === "object") + m.ephemeralStartTimestamp = new $util.LongBits(d.ephemeralStartTimestamp.low >>> 0, d.ephemeralStartTimestamp.high >>> 0).toNumber(true); + } + if (d.ephemeralDuration != null) { + m.ephemeralDuration = d.ephemeralDuration >>> 0; + } + if (d.ephemeralOffToOn != null) { + m.ephemeralOffToOn = Boolean(d.ephemeralOffToOn); + } + if (d.ephemeralOutOfSync != null) { + m.ephemeralOutOfSync = Boolean(d.ephemeralOutOfSync); + } + switch (d.bizPrivacyStatus) { + default: + if (typeof d.bizPrivacyStatus === "number") { + m.bizPrivacyStatus = d.bizPrivacyStatus; + break; + } + break; + case "E2EE": + case 0: + m.bizPrivacyStatus = 0; + break; + case "FB": + case 2: + m.bizPrivacyStatus = 2; + break; + case "BSP": + case 1: + m.bizPrivacyStatus = 1; + break; + case "BSP_AND_FB": + case 3: + m.bizPrivacyStatus = 3; + break; + } + if (d.verifiedBizName != null) { + m.verifiedBizName = String(d.verifiedBizName); + } + if (d.mediaData != null) { + if (typeof d.mediaData !== "object") + throw TypeError(".proto.WebMessageInfo.mediaData: object expected"); + m.mediaData = $root.proto.MediaData.fromObject(d.mediaData); + } + if (d.photoChange != null) { + if (typeof d.photoChange !== "object") + throw TypeError(".proto.WebMessageInfo.photoChange: object expected"); + m.photoChange = $root.proto.PhotoChange.fromObject(d.photoChange); + } + if (d.userReceipt) { + if (!Array.isArray(d.userReceipt)) + throw TypeError(".proto.WebMessageInfo.userReceipt: array expected"); + m.userReceipt = []; + for (var i = 0; i < d.userReceipt.length; ++i) { + if (typeof d.userReceipt[i] !== "object") + throw TypeError(".proto.WebMessageInfo.userReceipt: object expected"); + m.userReceipt[i] = $root.proto.UserReceipt.fromObject(d.userReceipt[i]); + } + } + if (d.reactions) { + if (!Array.isArray(d.reactions)) + throw TypeError(".proto.WebMessageInfo.reactions: array expected"); + m.reactions = []; + for (var i = 0; i < d.reactions.length; ++i) { + if (typeof d.reactions[i] !== "object") + throw TypeError(".proto.WebMessageInfo.reactions: object expected"); + m.reactions[i] = $root.proto.Reaction.fromObject(d.reactions[i]); + } + } + if (d.quotedStickerData != null) { + if (typeof d.quotedStickerData !== "object") + throw TypeError(".proto.WebMessageInfo.quotedStickerData: object expected"); + m.quotedStickerData = $root.proto.MediaData.fromObject(d.quotedStickerData); + } + if (d.futureproofData != null) { + if (typeof d.futureproofData === "string") + $util.base64.decode(d.futureproofData, m.futureproofData = $util.newBuffer($util.base64.length(d.futureproofData)), 0); + else if (d.futureproofData.length >= 0) + m.futureproofData = d.futureproofData; + } + if (d.statusPsa != null) { + if (typeof d.statusPsa !== "object") + throw TypeError(".proto.WebMessageInfo.statusPsa: object expected"); + m.statusPsa = $root.proto.StatusPSA.fromObject(d.statusPsa); + } + if (d.pollUpdates) { + if (!Array.isArray(d.pollUpdates)) + throw TypeError(".proto.WebMessageInfo.pollUpdates: array expected"); + m.pollUpdates = []; + for (var i = 0; i < d.pollUpdates.length; ++i) { + if (typeof d.pollUpdates[i] !== "object") + throw TypeError(".proto.WebMessageInfo.pollUpdates: object expected"); + m.pollUpdates[i] = $root.proto.PollUpdate.fromObject(d.pollUpdates[i]); + } + } + if (d.pollAdditionalMetadata != null) { + if (typeof d.pollAdditionalMetadata !== "object") + throw TypeError(".proto.WebMessageInfo.pollAdditionalMetadata: object expected"); + m.pollAdditionalMetadata = $root.proto.PollAdditionalMetadata.fromObject(d.pollAdditionalMetadata); + } + if (d.agentId != null) { + m.agentId = String(d.agentId); + } + if (d.statusAlreadyViewed != null) { + m.statusAlreadyViewed = Boolean(d.statusAlreadyViewed); + } + if (d.messageSecret != null) { + if (typeof d.messageSecret === "string") + $util.base64.decode(d.messageSecret, m.messageSecret = $util.newBuffer($util.base64.length(d.messageSecret)), 0); + else if (d.messageSecret.length >= 0) + m.messageSecret = d.messageSecret; + } + if (d.keepInChat != null) { + if (typeof d.keepInChat !== "object") + throw TypeError(".proto.WebMessageInfo.keepInChat: object expected"); + m.keepInChat = $root.proto.KeepInChat.fromObject(d.keepInChat); + } + if (d.originalSelfAuthorUserJidString != null) { + m.originalSelfAuthorUserJidString = String(d.originalSelfAuthorUserJidString); + } + if (d.revokeMessageTimestamp != null) { + if ($util.Long) + (m.revokeMessageTimestamp = $util.Long.fromValue(d.revokeMessageTimestamp)).unsigned = true; + else if (typeof d.revokeMessageTimestamp === "string") + m.revokeMessageTimestamp = parseInt(d.revokeMessageTimestamp, 10); + else if (typeof d.revokeMessageTimestamp === "number") + m.revokeMessageTimestamp = d.revokeMessageTimestamp; + else if (typeof d.revokeMessageTimestamp === "object") + m.revokeMessageTimestamp = new $util.LongBits(d.revokeMessageTimestamp.low >>> 0, d.revokeMessageTimestamp.high >>> 0).toNumber(true); + } + if (d.pinInChat != null) { + if (typeof d.pinInChat !== "object") + throw TypeError(".proto.WebMessageInfo.pinInChat: object expected"); + m.pinInChat = $root.proto.PinInChat.fromObject(d.pinInChat); + } + if (d.premiumMessageInfo != null) { + if (typeof d.premiumMessageInfo !== "object") + throw TypeError(".proto.WebMessageInfo.premiumMessageInfo: object expected"); + m.premiumMessageInfo = $root.proto.PremiumMessageInfo.fromObject(d.premiumMessageInfo); + } + if (d.is1PBizBotMessage != null) { + m.is1PBizBotMessage = Boolean(d.is1PBizBotMessage); + } + if (d.isGroupHistoryMessage != null) { + m.isGroupHistoryMessage = Boolean(d.isGroupHistoryMessage); + } + if (d.botMessageInvokerJid != null) { + m.botMessageInvokerJid = String(d.botMessageInvokerJid); + } + if (d.commentMetadata != null) { + if (typeof d.commentMetadata !== "object") + throw TypeError(".proto.WebMessageInfo.commentMetadata: object expected"); + m.commentMetadata = $root.proto.CommentMetadata.fromObject(d.commentMetadata); + } + if (d.eventResponses) { + if (!Array.isArray(d.eventResponses)) + throw TypeError(".proto.WebMessageInfo.eventResponses: array expected"); + m.eventResponses = []; + for (var i = 0; i < d.eventResponses.length; ++i) { + if (typeof d.eventResponses[i] !== "object") + throw TypeError(".proto.WebMessageInfo.eventResponses: object expected"); + m.eventResponses[i] = $root.proto.EventResponse.fromObject(d.eventResponses[i]); + } + } + if (d.reportingTokenInfo != null) { + if (typeof d.reportingTokenInfo !== "object") + throw TypeError(".proto.WebMessageInfo.reportingTokenInfo: object expected"); + m.reportingTokenInfo = $root.proto.ReportingTokenInfo.fromObject(d.reportingTokenInfo); + } + if (d.newsletterServerId != null) { + if ($util.Long) + (m.newsletterServerId = $util.Long.fromValue(d.newsletterServerId)).unsigned = true; + else if (typeof d.newsletterServerId === "string") + m.newsletterServerId = parseInt(d.newsletterServerId, 10); + else if (typeof d.newsletterServerId === "number") + m.newsletterServerId = d.newsletterServerId; + else if (typeof d.newsletterServerId === "object") + m.newsletterServerId = new $util.LongBits(d.newsletterServerId.low >>> 0, d.newsletterServerId.high >>> 0).toNumber(true); + } + if (d.eventAdditionalMetadata != null) { + if (typeof d.eventAdditionalMetadata !== "object") + throw TypeError(".proto.WebMessageInfo.eventAdditionalMetadata: object expected"); + m.eventAdditionalMetadata = $root.proto.EventAdditionalMetadata.fromObject(d.eventAdditionalMetadata); + } + if (d.isMentionedInStatus != null) { + m.isMentionedInStatus = Boolean(d.isMentionedInStatus); + } + if (d.statusMentions) { + if (!Array.isArray(d.statusMentions)) + throw TypeError(".proto.WebMessageInfo.statusMentions: array expected"); + m.statusMentions = []; + for (var i = 0; i < d.statusMentions.length; ++i) { + m.statusMentions[i] = String(d.statusMentions[i]); + } + } + if (d.targetMessageId != null) { + if (typeof d.targetMessageId !== "object") + throw TypeError(".proto.WebMessageInfo.targetMessageId: object expected"); + m.targetMessageId = $root.proto.MessageKey.fromObject(d.targetMessageId); + } + if (d.messageAddOns) { + if (!Array.isArray(d.messageAddOns)) + throw TypeError(".proto.WebMessageInfo.messageAddOns: array expected"); + m.messageAddOns = []; + for (var i = 0; i < d.messageAddOns.length; ++i) { + if (typeof d.messageAddOns[i] !== "object") + throw TypeError(".proto.WebMessageInfo.messageAddOns: object expected"); + m.messageAddOns[i] = $root.proto.MessageAddOn.fromObject(d.messageAddOns[i]); + } + } + if (d.statusMentionMessageInfo != null) { + if (typeof d.statusMentionMessageInfo !== "object") + throw TypeError(".proto.WebMessageInfo.statusMentionMessageInfo: object expected"); + m.statusMentionMessageInfo = $root.proto.StatusMentionMessage.fromObject(d.statusMentionMessageInfo); + } + if (d.isSupportAiMessage != null) { + m.isSupportAiMessage = Boolean(d.isSupportAiMessage); + } + if (d.statusMentionSources) { + if (!Array.isArray(d.statusMentionSources)) + throw TypeError(".proto.WebMessageInfo.statusMentionSources: array expected"); + m.statusMentionSources = []; + for (var i = 0; i < d.statusMentionSources.length; ++i) { + m.statusMentionSources[i] = String(d.statusMentionSources[i]); + } + } + if (d.supportAiCitations) { + if (!Array.isArray(d.supportAiCitations)) + throw TypeError(".proto.WebMessageInfo.supportAiCitations: array expected"); + m.supportAiCitations = []; + for (var i = 0; i < d.supportAiCitations.length; ++i) { + if (typeof d.supportAiCitations[i] !== "object") + throw TypeError(".proto.WebMessageInfo.supportAiCitations: object expected"); + m.supportAiCitations[i] = $root.proto.Citation.fromObject(d.supportAiCitations[i]); + } + } + if (d.botTargetId != null) { + m.botTargetId = String(d.botTargetId); + } + if (d.groupHistoryIndividualMessageInfo != null) { + if (typeof d.groupHistoryIndividualMessageInfo !== "object") + throw TypeError(".proto.WebMessageInfo.groupHistoryIndividualMessageInfo: object expected"); + m.groupHistoryIndividualMessageInfo = $root.proto.GroupHistoryIndividualMessageInfo.fromObject(d.groupHistoryIndividualMessageInfo); + } + if (d.groupHistoryBundleInfo != null) { + if (typeof d.groupHistoryBundleInfo !== "object") + throw TypeError(".proto.WebMessageInfo.groupHistoryBundleInfo: object expected"); + m.groupHistoryBundleInfo = $root.proto.GroupHistoryBundleInfo.fromObject(d.groupHistoryBundleInfo); + } + if (d.interactiveMessageAdditionalMetadata != null) { + if (typeof d.interactiveMessageAdditionalMetadata !== "object") + throw TypeError(".proto.WebMessageInfo.interactiveMessageAdditionalMetadata: object expected"); + m.interactiveMessageAdditionalMetadata = $root.proto.InteractiveMessageAdditionalMetadata.fromObject(d.interactiveMessageAdditionalMetadata); + } + if (d.quarantinedMessage != null) { + if (typeof d.quarantinedMessage !== "object") + throw TypeError(".proto.WebMessageInfo.quarantinedMessage: object expected"); + m.quarantinedMessage = $root.proto.QuarantinedMessage.fromObject(d.quarantinedMessage); + } + return m; + }; + + WebMessageInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.messageStubParameters = []; + d.labels = []; + d.userReceipt = []; + d.reactions = []; + d.pollUpdates = []; + d.eventResponses = []; + d.statusMentions = []; + d.messageAddOns = []; + d.statusMentionSources = []; + d.supportAiCitations = []; + } + if (o.defaults) { + d.key = null; + } + if (m.key != null && m.hasOwnProperty("key")) { + d.key = $root.proto.MessageKey.toObject(m.key, o); + } + if (m.message != null && m.hasOwnProperty("message")) { + d.message = $root.proto.Message.toObject(m.message, o); + if (o.oneofs) + d._message = "message"; + } + if (m.messageTimestamp != null && m.hasOwnProperty("messageTimestamp")) { + if (typeof m.messageTimestamp === "number") + d.messageTimestamp = o.longs === String ? String(m.messageTimestamp) : m.messageTimestamp; + else + d.messageTimestamp = o.longs === String ? longToString(m.messageTimestamp, true) : o.longs === Number ? longToNumber(m.messageTimestamp, true) : m.messageTimestamp; + if (o.oneofs) + d._messageTimestamp = "messageTimestamp"; + } + if (m.status != null && m.hasOwnProperty("status")) { + d.status = o.enums === String ? $root.proto.WebMessageInfo.Status[m.status] === undefined ? m.status : $root.proto.WebMessageInfo.Status[m.status] : m.status; + if (o.oneofs) + d._status = "status"; + } + if (m.participant != null && m.hasOwnProperty("participant")) { + d.participant = m.participant; + if (o.oneofs) + d._participant = "participant"; + } + if (m.messageC2STimestamp != null && m.hasOwnProperty("messageC2STimestamp")) { + if (typeof m.messageC2STimestamp === "number") + d.messageC2STimestamp = o.longs === String ? String(m.messageC2STimestamp) : m.messageC2STimestamp; + else + d.messageC2STimestamp = o.longs === String ? longToString(m.messageC2STimestamp, true) : o.longs === Number ? longToNumber(m.messageC2STimestamp, true) : m.messageC2STimestamp; + if (o.oneofs) + d._messageC2STimestamp = "messageC2STimestamp"; + } + if (m.ignore != null && m.hasOwnProperty("ignore")) { + d.ignore = m.ignore; + if (o.oneofs) + d._ignore = "ignore"; + } + if (m.starred != null && m.hasOwnProperty("starred")) { + d.starred = m.starred; + if (o.oneofs) + d._starred = "starred"; + } + if (m.broadcast != null && m.hasOwnProperty("broadcast")) { + d.broadcast = m.broadcast; + if (o.oneofs) + d._broadcast = "broadcast"; + } + if (m.pushName != null && m.hasOwnProperty("pushName")) { + d.pushName = m.pushName; + if (o.oneofs) + d._pushName = "pushName"; + } + if (m.mediaCiphertextSha256 != null && m.hasOwnProperty("mediaCiphertextSha256")) { + d.mediaCiphertextSha256 = o.bytes === String ? $util.base64.encode(m.mediaCiphertextSha256, 0, m.mediaCiphertextSha256.length) : o.bytes === Array ? Array.prototype.slice.call(m.mediaCiphertextSha256) : m.mediaCiphertextSha256; + if (o.oneofs) + d._mediaCiphertextSha256 = "mediaCiphertextSha256"; + } + if (m.multicast != null && m.hasOwnProperty("multicast")) { + d.multicast = m.multicast; + if (o.oneofs) + d._multicast = "multicast"; + } + if (m.urlText != null && m.hasOwnProperty("urlText")) { + d.urlText = m.urlText; + if (o.oneofs) + d._urlText = "urlText"; + } + if (m.urlNumber != null && m.hasOwnProperty("urlNumber")) { + d.urlNumber = m.urlNumber; + if (o.oneofs) + d._urlNumber = "urlNumber"; + } + if (m.messageStubType != null && m.hasOwnProperty("messageStubType")) { + d.messageStubType = o.enums === String ? $root.proto.WebMessageInfo.StubType[m.messageStubType] === undefined ? m.messageStubType : $root.proto.WebMessageInfo.StubType[m.messageStubType] : m.messageStubType; + if (o.oneofs) + d._messageStubType = "messageStubType"; + } + if (m.clearMedia != null && m.hasOwnProperty("clearMedia")) { + d.clearMedia = m.clearMedia; + if (o.oneofs) + d._clearMedia = "clearMedia"; + } + if (m.messageStubParameters && m.messageStubParameters.length) { + d.messageStubParameters = []; + for (var j = 0; j < m.messageStubParameters.length; ++j) { + d.messageStubParameters[j] = m.messageStubParameters[j]; + } + } + if (m.duration != null && m.hasOwnProperty("duration")) { + d.duration = m.duration; + if (o.oneofs) + d._duration = "duration"; + } + if (m.labels && m.labels.length) { + d.labels = []; + for (var j = 0; j < m.labels.length; ++j) { + d.labels[j] = m.labels[j]; + } + } + if (m.paymentInfo != null && m.hasOwnProperty("paymentInfo")) { + d.paymentInfo = $root.proto.PaymentInfo.toObject(m.paymentInfo, o); + if (o.oneofs) + d._paymentInfo = "paymentInfo"; + } + if (m.finalLiveLocation != null && m.hasOwnProperty("finalLiveLocation")) { + d.finalLiveLocation = $root.proto.Message.LiveLocationMessage.toObject(m.finalLiveLocation, o); + if (o.oneofs) + d._finalLiveLocation = "finalLiveLocation"; + } + if (m.quotedPaymentInfo != null && m.hasOwnProperty("quotedPaymentInfo")) { + d.quotedPaymentInfo = $root.proto.PaymentInfo.toObject(m.quotedPaymentInfo, o); + if (o.oneofs) + d._quotedPaymentInfo = "quotedPaymentInfo"; + } + if (m.ephemeralStartTimestamp != null && m.hasOwnProperty("ephemeralStartTimestamp")) { + if (typeof m.ephemeralStartTimestamp === "number") + d.ephemeralStartTimestamp = o.longs === String ? String(m.ephemeralStartTimestamp) : m.ephemeralStartTimestamp; + else + d.ephemeralStartTimestamp = o.longs === String ? longToString(m.ephemeralStartTimestamp, true) : o.longs === Number ? longToNumber(m.ephemeralStartTimestamp, true) : m.ephemeralStartTimestamp; + if (o.oneofs) + d._ephemeralStartTimestamp = "ephemeralStartTimestamp"; + } + if (m.ephemeralDuration != null && m.hasOwnProperty("ephemeralDuration")) { + d.ephemeralDuration = m.ephemeralDuration; + if (o.oneofs) + d._ephemeralDuration = "ephemeralDuration"; + } + if (m.ephemeralOffToOn != null && m.hasOwnProperty("ephemeralOffToOn")) { + d.ephemeralOffToOn = m.ephemeralOffToOn; + if (o.oneofs) + d._ephemeralOffToOn = "ephemeralOffToOn"; + } + if (m.ephemeralOutOfSync != null && m.hasOwnProperty("ephemeralOutOfSync")) { + d.ephemeralOutOfSync = m.ephemeralOutOfSync; + if (o.oneofs) + d._ephemeralOutOfSync = "ephemeralOutOfSync"; + } + if (m.bizPrivacyStatus != null && m.hasOwnProperty("bizPrivacyStatus")) { + d.bizPrivacyStatus = o.enums === String ? $root.proto.WebMessageInfo.BizPrivacyStatus[m.bizPrivacyStatus] === undefined ? m.bizPrivacyStatus : $root.proto.WebMessageInfo.BizPrivacyStatus[m.bizPrivacyStatus] : m.bizPrivacyStatus; + if (o.oneofs) + d._bizPrivacyStatus = "bizPrivacyStatus"; + } + if (m.verifiedBizName != null && m.hasOwnProperty("verifiedBizName")) { + d.verifiedBizName = m.verifiedBizName; + if (o.oneofs) + d._verifiedBizName = "verifiedBizName"; + } + if (m.mediaData != null && m.hasOwnProperty("mediaData")) { + d.mediaData = $root.proto.MediaData.toObject(m.mediaData, o); + if (o.oneofs) + d._mediaData = "mediaData"; + } + if (m.photoChange != null && m.hasOwnProperty("photoChange")) { + d.photoChange = $root.proto.PhotoChange.toObject(m.photoChange, o); + if (o.oneofs) + d._photoChange = "photoChange"; + } + if (m.userReceipt && m.userReceipt.length) { + d.userReceipt = []; + for (var j = 0; j < m.userReceipt.length; ++j) { + d.userReceipt[j] = $root.proto.UserReceipt.toObject(m.userReceipt[j], o); + } + } + if (m.reactions && m.reactions.length) { + d.reactions = []; + for (var j = 0; j < m.reactions.length; ++j) { + d.reactions[j] = $root.proto.Reaction.toObject(m.reactions[j], o); + } + } + if (m.quotedStickerData != null && m.hasOwnProperty("quotedStickerData")) { + d.quotedStickerData = $root.proto.MediaData.toObject(m.quotedStickerData, o); + if (o.oneofs) + d._quotedStickerData = "quotedStickerData"; + } + if (m.futureproofData != null && m.hasOwnProperty("futureproofData")) { + d.futureproofData = o.bytes === String ? $util.base64.encode(m.futureproofData, 0, m.futureproofData.length) : o.bytes === Array ? Array.prototype.slice.call(m.futureproofData) : m.futureproofData; + if (o.oneofs) + d._futureproofData = "futureproofData"; + } + if (m.statusPsa != null && m.hasOwnProperty("statusPsa")) { + d.statusPsa = $root.proto.StatusPSA.toObject(m.statusPsa, o); + if (o.oneofs) + d._statusPsa = "statusPsa"; + } + if (m.pollUpdates && m.pollUpdates.length) { + d.pollUpdates = []; + for (var j = 0; j < m.pollUpdates.length; ++j) { + d.pollUpdates[j] = $root.proto.PollUpdate.toObject(m.pollUpdates[j], o); + } + } + if (m.pollAdditionalMetadata != null && m.hasOwnProperty("pollAdditionalMetadata")) { + d.pollAdditionalMetadata = $root.proto.PollAdditionalMetadata.toObject(m.pollAdditionalMetadata, o); + if (o.oneofs) + d._pollAdditionalMetadata = "pollAdditionalMetadata"; + } + if (m.agentId != null && m.hasOwnProperty("agentId")) { + d.agentId = m.agentId; + if (o.oneofs) + d._agentId = "agentId"; + } + if (m.statusAlreadyViewed != null && m.hasOwnProperty("statusAlreadyViewed")) { + d.statusAlreadyViewed = m.statusAlreadyViewed; + if (o.oneofs) + d._statusAlreadyViewed = "statusAlreadyViewed"; + } + if (m.messageSecret != null && m.hasOwnProperty("messageSecret")) { + d.messageSecret = o.bytes === String ? $util.base64.encode(m.messageSecret, 0, m.messageSecret.length) : o.bytes === Array ? Array.prototype.slice.call(m.messageSecret) : m.messageSecret; + if (o.oneofs) + d._messageSecret = "messageSecret"; + } + if (m.keepInChat != null && m.hasOwnProperty("keepInChat")) { + d.keepInChat = $root.proto.KeepInChat.toObject(m.keepInChat, o); + if (o.oneofs) + d._keepInChat = "keepInChat"; + } + if (m.originalSelfAuthorUserJidString != null && m.hasOwnProperty("originalSelfAuthorUserJidString")) { + d.originalSelfAuthorUserJidString = m.originalSelfAuthorUserJidString; + if (o.oneofs) + d._originalSelfAuthorUserJidString = "originalSelfAuthorUserJidString"; + } + if (m.revokeMessageTimestamp != null && m.hasOwnProperty("revokeMessageTimestamp")) { + if (typeof m.revokeMessageTimestamp === "number") + d.revokeMessageTimestamp = o.longs === String ? String(m.revokeMessageTimestamp) : m.revokeMessageTimestamp; + else + d.revokeMessageTimestamp = o.longs === String ? longToString(m.revokeMessageTimestamp, true) : o.longs === Number ? longToNumber(m.revokeMessageTimestamp, true) : m.revokeMessageTimestamp; + if (o.oneofs) + d._revokeMessageTimestamp = "revokeMessageTimestamp"; + } + if (m.pinInChat != null && m.hasOwnProperty("pinInChat")) { + d.pinInChat = $root.proto.PinInChat.toObject(m.pinInChat, o); + if (o.oneofs) + d._pinInChat = "pinInChat"; + } + if (m.premiumMessageInfo != null && m.hasOwnProperty("premiumMessageInfo")) { + d.premiumMessageInfo = $root.proto.PremiumMessageInfo.toObject(m.premiumMessageInfo, o); + if (o.oneofs) + d._premiumMessageInfo = "premiumMessageInfo"; + } + if (m.is1PBizBotMessage != null && m.hasOwnProperty("is1PBizBotMessage")) { + d.is1PBizBotMessage = m.is1PBizBotMessage; + if (o.oneofs) + d._is1PBizBotMessage = "is1PBizBotMessage"; + } + if (m.isGroupHistoryMessage != null && m.hasOwnProperty("isGroupHistoryMessage")) { + d.isGroupHistoryMessage = m.isGroupHistoryMessage; + if (o.oneofs) + d._isGroupHistoryMessage = "isGroupHistoryMessage"; + } + if (m.botMessageInvokerJid != null && m.hasOwnProperty("botMessageInvokerJid")) { + d.botMessageInvokerJid = m.botMessageInvokerJid; + if (o.oneofs) + d._botMessageInvokerJid = "botMessageInvokerJid"; + } + if (m.commentMetadata != null && m.hasOwnProperty("commentMetadata")) { + d.commentMetadata = $root.proto.CommentMetadata.toObject(m.commentMetadata, o); + if (o.oneofs) + d._commentMetadata = "commentMetadata"; + } + if (m.eventResponses && m.eventResponses.length) { + d.eventResponses = []; + for (var j = 0; j < m.eventResponses.length; ++j) { + d.eventResponses[j] = $root.proto.EventResponse.toObject(m.eventResponses[j], o); + } + } + if (m.reportingTokenInfo != null && m.hasOwnProperty("reportingTokenInfo")) { + d.reportingTokenInfo = $root.proto.ReportingTokenInfo.toObject(m.reportingTokenInfo, o); + if (o.oneofs) + d._reportingTokenInfo = "reportingTokenInfo"; + } + if (m.newsletterServerId != null && m.hasOwnProperty("newsletterServerId")) { + if (typeof m.newsletterServerId === "number") + d.newsletterServerId = o.longs === String ? String(m.newsletterServerId) : m.newsletterServerId; + else + d.newsletterServerId = o.longs === String ? longToString(m.newsletterServerId, true) : o.longs === Number ? longToNumber(m.newsletterServerId, true) : m.newsletterServerId; + if (o.oneofs) + d._newsletterServerId = "newsletterServerId"; + } + if (m.eventAdditionalMetadata != null && m.hasOwnProperty("eventAdditionalMetadata")) { + d.eventAdditionalMetadata = $root.proto.EventAdditionalMetadata.toObject(m.eventAdditionalMetadata, o); + if (o.oneofs) + d._eventAdditionalMetadata = "eventAdditionalMetadata"; + } + if (m.isMentionedInStatus != null && m.hasOwnProperty("isMentionedInStatus")) { + d.isMentionedInStatus = m.isMentionedInStatus; + if (o.oneofs) + d._isMentionedInStatus = "isMentionedInStatus"; + } + if (m.statusMentions && m.statusMentions.length) { + d.statusMentions = []; + for (var j = 0; j < m.statusMentions.length; ++j) { + d.statusMentions[j] = m.statusMentions[j]; + } + } + if (m.targetMessageId != null && m.hasOwnProperty("targetMessageId")) { + d.targetMessageId = $root.proto.MessageKey.toObject(m.targetMessageId, o); + if (o.oneofs) + d._targetMessageId = "targetMessageId"; + } + if (m.messageAddOns && m.messageAddOns.length) { + d.messageAddOns = []; + for (var j = 0; j < m.messageAddOns.length; ++j) { + d.messageAddOns[j] = $root.proto.MessageAddOn.toObject(m.messageAddOns[j], o); + } + } + if (m.statusMentionMessageInfo != null && m.hasOwnProperty("statusMentionMessageInfo")) { + d.statusMentionMessageInfo = $root.proto.StatusMentionMessage.toObject(m.statusMentionMessageInfo, o); + if (o.oneofs) + d._statusMentionMessageInfo = "statusMentionMessageInfo"; + } + if (m.isSupportAiMessage != null && m.hasOwnProperty("isSupportAiMessage")) { + d.isSupportAiMessage = m.isSupportAiMessage; + if (o.oneofs) + d._isSupportAiMessage = "isSupportAiMessage"; + } + if (m.statusMentionSources && m.statusMentionSources.length) { + d.statusMentionSources = []; + for (var j = 0; j < m.statusMentionSources.length; ++j) { + d.statusMentionSources[j] = m.statusMentionSources[j]; + } + } + if (m.supportAiCitations && m.supportAiCitations.length) { + d.supportAiCitations = []; + for (var j = 0; j < m.supportAiCitations.length; ++j) { + d.supportAiCitations[j] = $root.proto.Citation.toObject(m.supportAiCitations[j], o); + } + } + if (m.botTargetId != null && m.hasOwnProperty("botTargetId")) { + d.botTargetId = m.botTargetId; + if (o.oneofs) + d._botTargetId = "botTargetId"; + } + if (m.groupHistoryIndividualMessageInfo != null && m.hasOwnProperty("groupHistoryIndividualMessageInfo")) { + d.groupHistoryIndividualMessageInfo = $root.proto.GroupHistoryIndividualMessageInfo.toObject(m.groupHistoryIndividualMessageInfo, o); + if (o.oneofs) + d._groupHistoryIndividualMessageInfo = "groupHistoryIndividualMessageInfo"; + } + if (m.groupHistoryBundleInfo != null && m.hasOwnProperty("groupHistoryBundleInfo")) { + d.groupHistoryBundleInfo = $root.proto.GroupHistoryBundleInfo.toObject(m.groupHistoryBundleInfo, o); + if (o.oneofs) + d._groupHistoryBundleInfo = "groupHistoryBundleInfo"; + } + if (m.interactiveMessageAdditionalMetadata != null && m.hasOwnProperty("interactiveMessageAdditionalMetadata")) { + d.interactiveMessageAdditionalMetadata = $root.proto.InteractiveMessageAdditionalMetadata.toObject(m.interactiveMessageAdditionalMetadata, o); + if (o.oneofs) + d._interactiveMessageAdditionalMetadata = "interactiveMessageAdditionalMetadata"; + } + if (m.quarantinedMessage != null && m.hasOwnProperty("quarantinedMessage")) { + d.quarantinedMessage = $root.proto.QuarantinedMessage.toObject(m.quarantinedMessage, o); + if (o.oneofs) + d._quarantinedMessage = "quarantinedMessage"; + } + return d; + }; + + WebMessageInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WebMessageInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.WebMessageInfo"; + }; + + WebMessageInfo.BizPrivacyStatus = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "E2EE"] = 0; + values[valuesById[2] = "FB"] = 2; + values[valuesById[1] = "BSP"] = 1; + values[valuesById[3] = "BSP_AND_FB"] = 3; + return values; + })(); + + WebMessageInfo.Status = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "ERROR"] = 0; + values[valuesById[1] = "PENDING"] = 1; + values[valuesById[2] = "SERVER_ACK"] = 2; + values[valuesById[3] = "DELIVERY_ACK"] = 3; + values[valuesById[4] = "READ"] = 4; + values[valuesById[5] = "PLAYED"] = 5; + return values; + })(); + + WebMessageInfo.StubType = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNKNOWN"] = 0; + values[valuesById[1] = "REVOKE"] = 1; + values[valuesById[2] = "CIPHERTEXT"] = 2; + values[valuesById[3] = "FUTUREPROOF"] = 3; + values[valuesById[4] = "NON_VERIFIED_TRANSITION"] = 4; + values[valuesById[5] = "UNVERIFIED_TRANSITION"] = 5; + values[valuesById[6] = "VERIFIED_TRANSITION"] = 6; + values[valuesById[7] = "VERIFIED_LOW_UNKNOWN"] = 7; + values[valuesById[8] = "VERIFIED_HIGH"] = 8; + values[valuesById[9] = "VERIFIED_INITIAL_UNKNOWN"] = 9; + values[valuesById[10] = "VERIFIED_INITIAL_LOW"] = 10; + values[valuesById[11] = "VERIFIED_INITIAL_HIGH"] = 11; + values[valuesById[12] = "VERIFIED_TRANSITION_ANY_TO_NONE"] = 12; + values[valuesById[13] = "VERIFIED_TRANSITION_ANY_TO_HIGH"] = 13; + values[valuesById[14] = "VERIFIED_TRANSITION_HIGH_TO_LOW"] = 14; + values[valuesById[15] = "VERIFIED_TRANSITION_HIGH_TO_UNKNOWN"] = 15; + values[valuesById[16] = "VERIFIED_TRANSITION_UNKNOWN_TO_LOW"] = 16; + values[valuesById[17] = "VERIFIED_TRANSITION_LOW_TO_UNKNOWN"] = 17; + values[valuesById[18] = "VERIFIED_TRANSITION_NONE_TO_LOW"] = 18; + values[valuesById[19] = "VERIFIED_TRANSITION_NONE_TO_UNKNOWN"] = 19; + values[valuesById[20] = "GROUP_CREATE"] = 20; + values[valuesById[21] = "GROUP_CHANGE_SUBJECT"] = 21; + values[valuesById[22] = "GROUP_CHANGE_ICON"] = 22; + values[valuesById[23] = "GROUP_CHANGE_INVITE_LINK"] = 23; + values[valuesById[24] = "GROUP_CHANGE_DESCRIPTION"] = 24; + values[valuesById[25] = "GROUP_CHANGE_RESTRICT"] = 25; + values[valuesById[26] = "GROUP_CHANGE_ANNOUNCE"] = 26; + values[valuesById[27] = "GROUP_PARTICIPANT_ADD"] = 27; + values[valuesById[28] = "GROUP_PARTICIPANT_REMOVE"] = 28; + values[valuesById[29] = "GROUP_PARTICIPANT_PROMOTE"] = 29; + values[valuesById[30] = "GROUP_PARTICIPANT_DEMOTE"] = 30; + values[valuesById[31] = "GROUP_PARTICIPANT_INVITE"] = 31; + values[valuesById[32] = "GROUP_PARTICIPANT_LEAVE"] = 32; + values[valuesById[33] = "GROUP_PARTICIPANT_CHANGE_NUMBER"] = 33; + values[valuesById[34] = "BROADCAST_CREATE"] = 34; + values[valuesById[35] = "BROADCAST_ADD"] = 35; + values[valuesById[36] = "BROADCAST_REMOVE"] = 36; + values[valuesById[37] = "GENERIC_NOTIFICATION"] = 37; + values[valuesById[38] = "E2E_IDENTITY_CHANGED"] = 38; + values[valuesById[39] = "E2E_ENCRYPTED"] = 39; + values[valuesById[40] = "CALL_MISSED_VOICE"] = 40; + values[valuesById[41] = "CALL_MISSED_VIDEO"] = 41; + values[valuesById[42] = "INDIVIDUAL_CHANGE_NUMBER"] = 42; + values[valuesById[43] = "GROUP_DELETE"] = 43; + values[valuesById[44] = "GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE"] = 44; + values[valuesById[45] = "CALL_MISSED_GROUP_VOICE"] = 45; + values[valuesById[46] = "CALL_MISSED_GROUP_VIDEO"] = 46; + values[valuesById[47] = "PAYMENT_CIPHERTEXT"] = 47; + values[valuesById[48] = "PAYMENT_FUTUREPROOF"] = 48; + values[valuesById[49] = "PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED"] = 49; + values[valuesById[50] = "PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED"] = 50; + values[valuesById[51] = "PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED"] = 51; + values[valuesById[52] = "PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP"] = 52; + values[valuesById[53] = "PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP"] = 53; + values[valuesById[54] = "PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER"] = 54; + values[valuesById[55] = "PAYMENT_ACTION_SEND_PAYMENT_REMINDER"] = 55; + values[valuesById[56] = "PAYMENT_ACTION_SEND_PAYMENT_INVITATION"] = 56; + values[valuesById[57] = "PAYMENT_ACTION_REQUEST_DECLINED"] = 57; + values[valuesById[58] = "PAYMENT_ACTION_REQUEST_EXPIRED"] = 58; + values[valuesById[59] = "PAYMENT_ACTION_REQUEST_CANCELLED"] = 59; + values[valuesById[60] = "BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM"] = 60; + values[valuesById[61] = "BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP"] = 61; + values[valuesById[62] = "BIZ_INTRO_TOP"] = 62; + values[valuesById[63] = "BIZ_INTRO_BOTTOM"] = 63; + values[valuesById[64] = "BIZ_NAME_CHANGE"] = 64; + values[valuesById[65] = "BIZ_MOVE_TO_CONSUMER_APP"] = 65; + values[valuesById[66] = "BIZ_TWO_TIER_MIGRATION_TOP"] = 66; + values[valuesById[67] = "BIZ_TWO_TIER_MIGRATION_BOTTOM"] = 67; + values[valuesById[68] = "OVERSIZED"] = 68; + values[valuesById[69] = "GROUP_CHANGE_NO_FREQUENTLY_FORWARDED"] = 69; + values[valuesById[70] = "GROUP_V4_ADD_INVITE_SENT"] = 70; + values[valuesById[71] = "GROUP_PARTICIPANT_ADD_REQUEST_JOIN"] = 71; + values[valuesById[72] = "CHANGE_EPHEMERAL_SETTING"] = 72; + values[valuesById[73] = "E2E_DEVICE_CHANGED"] = 73; + values[valuesById[74] = "VIEWED_ONCE"] = 74; + values[valuesById[75] = "E2E_ENCRYPTED_NOW"] = 75; + values[valuesById[76] = "BLUE_MSG_BSP_FB_TO_BSP_PREMISE"] = 76; + values[valuesById[77] = "BLUE_MSG_BSP_FB_TO_SELF_FB"] = 77; + values[valuesById[78] = "BLUE_MSG_BSP_FB_TO_SELF_PREMISE"] = 78; + values[valuesById[79] = "BLUE_MSG_BSP_FB_UNVERIFIED"] = 79; + values[valuesById[80] = "BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED"] = 80; + values[valuesById[81] = "BLUE_MSG_BSP_FB_VERIFIED"] = 81; + values[valuesById[82] = "BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED"] = 82; + values[valuesById[83] = "BLUE_MSG_BSP_PREMISE_TO_SELF_PREMISE"] = 83; + values[valuesById[84] = "BLUE_MSG_BSP_PREMISE_UNVERIFIED"] = 84; + values[valuesById[85] = "BLUE_MSG_BSP_PREMISE_UNVERIFIED_TO_SELF_PREMISE_VERIFIED"] = 85; + values[valuesById[86] = "BLUE_MSG_BSP_PREMISE_VERIFIED"] = 86; + values[valuesById[87] = "BLUE_MSG_BSP_PREMISE_VERIFIED_TO_SELF_PREMISE_UNVERIFIED"] = 87; + values[valuesById[88] = "BLUE_MSG_CONSUMER_TO_BSP_FB_UNVERIFIED"] = 88; + values[valuesById[89] = "BLUE_MSG_CONSUMER_TO_BSP_PREMISE_UNVERIFIED"] = 89; + values[valuesById[90] = "BLUE_MSG_CONSUMER_TO_SELF_FB_UNVERIFIED"] = 90; + values[valuesById[91] = "BLUE_MSG_CONSUMER_TO_SELF_PREMISE_UNVERIFIED"] = 91; + values[valuesById[92] = "BLUE_MSG_SELF_FB_TO_BSP_PREMISE"] = 92; + values[valuesById[93] = "BLUE_MSG_SELF_FB_TO_SELF_PREMISE"] = 93; + values[valuesById[94] = "BLUE_MSG_SELF_FB_UNVERIFIED"] = 94; + values[valuesById[95] = "BLUE_MSG_SELF_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED"] = 95; + values[valuesById[96] = "BLUE_MSG_SELF_FB_VERIFIED"] = 96; + values[valuesById[97] = "BLUE_MSG_SELF_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED"] = 97; + values[valuesById[98] = "BLUE_MSG_SELF_PREMISE_TO_BSP_PREMISE"] = 98; + values[valuesById[99] = "BLUE_MSG_SELF_PREMISE_UNVERIFIED"] = 99; + values[valuesById[100] = "BLUE_MSG_SELF_PREMISE_VERIFIED"] = 100; + values[valuesById[101] = "BLUE_MSG_TO_BSP_FB"] = 101; + values[valuesById[102] = "BLUE_MSG_TO_CONSUMER"] = 102; + values[valuesById[103] = "BLUE_MSG_TO_SELF_FB"] = 103; + values[valuesById[104] = "BLUE_MSG_UNVERIFIED_TO_BSP_FB_VERIFIED"] = 104; + values[valuesById[105] = "BLUE_MSG_UNVERIFIED_TO_BSP_PREMISE_VERIFIED"] = 105; + values[valuesById[106] = "BLUE_MSG_UNVERIFIED_TO_SELF_FB_VERIFIED"] = 106; + values[valuesById[107] = "BLUE_MSG_UNVERIFIED_TO_VERIFIED"] = 107; + values[valuesById[108] = "BLUE_MSG_VERIFIED_TO_BSP_FB_UNVERIFIED"] = 108; + values[valuesById[109] = "BLUE_MSG_VERIFIED_TO_BSP_PREMISE_UNVERIFIED"] = 109; + values[valuesById[110] = "BLUE_MSG_VERIFIED_TO_SELF_FB_UNVERIFIED"] = 110; + values[valuesById[111] = "BLUE_MSG_VERIFIED_TO_UNVERIFIED"] = 111; + values[valuesById[112] = "BLUE_MSG_BSP_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED"] = 112; + values[valuesById[113] = "BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_FB_VERIFIED"] = 113; + values[valuesById[114] = "BLUE_MSG_BSP_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED"] = 114; + values[valuesById[115] = "BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_FB_UNVERIFIED"] = 115; + values[valuesById[116] = "BLUE_MSG_SELF_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED"] = 116; + values[valuesById[117] = "BLUE_MSG_SELF_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED"] = 117; + values[valuesById[118] = "E2E_IDENTITY_UNAVAILABLE"] = 118; + values[valuesById[119] = "GROUP_CREATING"] = 119; + values[valuesById[120] = "GROUP_CREATE_FAILED"] = 120; + values[valuesById[121] = "GROUP_BOUNCED"] = 121; + values[valuesById[122] = "BLOCK_CONTACT"] = 122; + values[valuesById[123] = "EPHEMERAL_SETTING_NOT_APPLIED"] = 123; + values[valuesById[124] = "SYNC_FAILED"] = 124; + values[valuesById[125] = "SYNCING"] = 125; + values[valuesById[126] = "BIZ_PRIVACY_MODE_INIT_FB"] = 126; + values[valuesById[127] = "BIZ_PRIVACY_MODE_INIT_BSP"] = 127; + values[valuesById[128] = "BIZ_PRIVACY_MODE_TO_FB"] = 128; + values[valuesById[129] = "BIZ_PRIVACY_MODE_TO_BSP"] = 129; + values[valuesById[130] = "DISAPPEARING_MODE"] = 130; + values[valuesById[131] = "E2E_DEVICE_FETCH_FAILED"] = 131; + values[valuesById[132] = "ADMIN_REVOKE"] = 132; + values[valuesById[133] = "GROUP_INVITE_LINK_GROWTH_LOCKED"] = 133; + values[valuesById[134] = "COMMUNITY_LINK_PARENT_GROUP"] = 134; + values[valuesById[135] = "COMMUNITY_LINK_SIBLING_GROUP"] = 135; + values[valuesById[136] = "COMMUNITY_LINK_SUB_GROUP"] = 136; + values[valuesById[137] = "COMMUNITY_UNLINK_PARENT_GROUP"] = 137; + values[valuesById[138] = "COMMUNITY_UNLINK_SIBLING_GROUP"] = 138; + values[valuesById[139] = "COMMUNITY_UNLINK_SUB_GROUP"] = 139; + values[valuesById[140] = "GROUP_PARTICIPANT_ACCEPT"] = 140; + values[valuesById[141] = "GROUP_PARTICIPANT_LINKED_GROUP_JOIN"] = 141; + values[valuesById[142] = "COMMUNITY_CREATE"] = 142; + values[valuesById[143] = "EPHEMERAL_KEEP_IN_CHAT"] = 143; + values[valuesById[144] = "GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST"] = 144; + values[valuesById[145] = "GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE"] = 145; + values[valuesById[146] = "INTEGRITY_UNLINK_PARENT_GROUP"] = 146; + values[valuesById[147] = "COMMUNITY_PARTICIPANT_PROMOTE"] = 147; + values[valuesById[148] = "COMMUNITY_PARTICIPANT_DEMOTE"] = 148; + values[valuesById[149] = "COMMUNITY_PARENT_GROUP_DELETED"] = 149; + values[valuesById[150] = "COMMUNITY_LINK_PARENT_GROUP_MEMBERSHIP_APPROVAL"] = 150; + values[valuesById[151] = "GROUP_PARTICIPANT_JOINED_GROUP_AND_PARENT_GROUP"] = 151; + values[valuesById[152] = "MASKED_THREAD_CREATED"] = 152; + values[valuesById[153] = "MASKED_THREAD_UNMASKED"] = 153; + values[valuesById[154] = "BIZ_CHAT_ASSIGNMENT"] = 154; + values[valuesById[155] = "CHAT_PSA"] = 155; + values[valuesById[156] = "CHAT_POLL_CREATION_MESSAGE"] = 156; + values[valuesById[157] = "CAG_MASKED_THREAD_CREATED"] = 157; + values[valuesById[158] = "COMMUNITY_PARENT_GROUP_SUBJECT_CHANGED"] = 158; + values[valuesById[159] = "CAG_INVITE_AUTO_ADD"] = 159; + values[valuesById[160] = "BIZ_CHAT_ASSIGNMENT_UNASSIGN"] = 160; + values[valuesById[161] = "CAG_INVITE_AUTO_JOINED"] = 161; + values[valuesById[162] = "SCHEDULED_CALL_START_MESSAGE"] = 162; + values[valuesById[163] = "COMMUNITY_INVITE_RICH"] = 163; + values[valuesById[164] = "COMMUNITY_INVITE_AUTO_ADD_RICH"] = 164; + values[valuesById[165] = "SUB_GROUP_INVITE_RICH"] = 165; + values[valuesById[166] = "SUB_GROUP_PARTICIPANT_ADD_RICH"] = 166; + values[valuesById[167] = "COMMUNITY_LINK_PARENT_GROUP_RICH"] = 167; + values[valuesById[168] = "COMMUNITY_PARTICIPANT_ADD_RICH"] = 168; + values[valuesById[169] = "SILENCED_UNKNOWN_CALLER_AUDIO"] = 169; + values[valuesById[170] = "SILENCED_UNKNOWN_CALLER_VIDEO"] = 170; + values[valuesById[171] = "GROUP_MEMBER_ADD_MODE"] = 171; + values[valuesById[172] = "GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD"] = 172; + values[valuesById[173] = "COMMUNITY_CHANGE_DESCRIPTION"] = 173; + values[valuesById[174] = "SENDER_INVITE"] = 174; + values[valuesById[175] = "RECEIVER_INVITE"] = 175; + values[valuesById[176] = "COMMUNITY_ALLOW_MEMBER_ADDED_GROUPS"] = 176; + values[valuesById[177] = "PINNED_MESSAGE_IN_CHAT"] = 177; + values[valuesById[178] = "PAYMENT_INVITE_SETUP_INVITER"] = 178; + values[valuesById[179] = "PAYMENT_INVITE_SETUP_INVITEE_RECEIVE_ONLY"] = 179; + values[valuesById[180] = "PAYMENT_INVITE_SETUP_INVITEE_SEND_AND_RECEIVE"] = 180; + values[valuesById[181] = "LINKED_GROUP_CALL_START"] = 181; + values[valuesById[182] = "REPORT_TO_ADMIN_ENABLED_STATUS"] = 182; + values[valuesById[183] = "EMPTY_SUBGROUP_CREATE"] = 183; + values[valuesById[184] = "SCHEDULED_CALL_CANCEL"] = 184; + values[valuesById[185] = "SUBGROUP_ADMIN_TRIGGERED_AUTO_ADD_RICH"] = 185; + values[valuesById[186] = "GROUP_CHANGE_RECENT_HISTORY_SHARING"] = 186; + values[valuesById[187] = "PAID_MESSAGE_SERVER_CAMPAIGN_ID"] = 187; + values[valuesById[188] = "GENERAL_CHAT_CREATE"] = 188; + values[valuesById[189] = "GENERAL_CHAT_ADD"] = 189; + values[valuesById[190] = "GENERAL_CHAT_AUTO_ADD_DISABLED"] = 190; + values[valuesById[191] = "SUGGESTED_SUBGROUP_ANNOUNCE"] = 191; + values[valuesById[192] = "BIZ_BOT_1P_MESSAGING_ENABLED"] = 192; + values[valuesById[193] = "CHANGE_USERNAME"] = 193; + values[valuesById[194] = "BIZ_COEX_PRIVACY_INIT_SELF"] = 194; + values[valuesById[195] = "BIZ_COEX_PRIVACY_TRANSITION_SELF"] = 195; + values[valuesById[196] = "SUPPORT_AI_EDUCATION"] = 196; + values[valuesById[197] = "BIZ_BOT_3P_MESSAGING_ENABLED"] = 197; + values[valuesById[198] = "REMINDER_SETUP_MESSAGE"] = 198; + values[valuesById[199] = "REMINDER_SENT_MESSAGE"] = 199; + values[valuesById[200] = "REMINDER_CANCEL_MESSAGE"] = 200; + values[valuesById[201] = "BIZ_COEX_PRIVACY_INIT"] = 201; + values[valuesById[202] = "BIZ_COEX_PRIVACY_TRANSITION"] = 202; + values[valuesById[203] = "GROUP_DEACTIVATED"] = 203; + values[valuesById[204] = "COMMUNITY_DEACTIVATE_SIBLING_GROUP"] = 204; + values[valuesById[205] = "EVENT_UPDATED"] = 205; + values[valuesById[206] = "EVENT_CANCELED"] = 206; + values[valuesById[207] = "COMMUNITY_OWNER_UPDATED"] = 207; + values[valuesById[208] = "COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN"] = 208; + values[valuesById[209] = "CAPI_GROUP_NE2EE_SYSTEM_MESSAGE"] = 209; + values[valuesById[210] = "STATUS_MENTION"] = 210; + values[valuesById[211] = "USER_CONTROLS_SYSTEM_MESSAGE"] = 211; + values[valuesById[212] = "SUPPORT_SYSTEM_MESSAGE"] = 212; + values[valuesById[213] = "CHANGE_LID"] = 213; + values[valuesById[214] = "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE"] = 214; + values[valuesById[215] = "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE"] = 215; + values[valuesById[216] = "CHANGE_LIMIT_SHARING"] = 216; + values[valuesById[217] = "GROUP_MEMBER_LINK_MODE"] = 217; + values[valuesById[218] = "BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE"] = 218; + values[valuesById[219] = "PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE"] = 219; + values[valuesById[220] = "QUARANTINED_MESSAGE"] = 220; + values[valuesById[221] = "GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE"] = 221; + return values; + })(); + + return WebMessageInfo; + })(); + + proto.WebNotificationsInfo = (function() { + + function WebNotificationsInfo(p) { + this.notifyMessages = []; + if (p) + for (var ks = Object.keys(p), i = 0; i < ks.length; ++i) + if (p[ks[i]] != null) + this[ks[i]] = p[ks[i]]; + } + + WebNotificationsInfo.prototype.timestamp = null; + WebNotificationsInfo.prototype.unreadChats = null; + WebNotificationsInfo.prototype.notifyMessageCount = null; + WebNotificationsInfo.prototype.notifyMessages = $util.emptyArray; + + let $oneOfFields; + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebNotificationsInfo.prototype, "_timestamp", { + get: $util.oneOfGetter($oneOfFields = ["timestamp"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebNotificationsInfo.prototype, "_unreadChats", { + get: $util.oneOfGetter($oneOfFields = ["unreadChats"]), + set: $util.oneOfSetter($oneOfFields) + }); + + // Virtual OneOf for proto3 optional field + Object.defineProperty(WebNotificationsInfo.prototype, "_notifyMessageCount", { + get: $util.oneOfGetter($oneOfFields = ["notifyMessageCount"]), + set: $util.oneOfSetter($oneOfFields) + }); + + WebNotificationsInfo.create = function create(properties) { + return new WebNotificationsInfo(properties); + }; + + WebNotificationsInfo.encode = function encode(m, w) { + if (!w) + w = $Writer.create(); + if (m.timestamp != null && Object.hasOwnProperty.call(m, "timestamp")) + w.uint32(16).uint64(m.timestamp); + if (m.unreadChats != null && Object.hasOwnProperty.call(m, "unreadChats")) + w.uint32(24).uint32(m.unreadChats); + if (m.notifyMessageCount != null && Object.hasOwnProperty.call(m, "notifyMessageCount")) + w.uint32(32).uint32(m.notifyMessageCount); + if (m.notifyMessages != null && m.notifyMessages.length) { + for (var i = 0; i < m.notifyMessages.length; ++i) + $root.proto.WebMessageInfo.encode(m.notifyMessages[i], w.uint32(42).fork()).ldelim(); + } + return w; + }; + + WebNotificationsInfo.decode = function decode(r, l, e) { + if (!(r instanceof $Reader)) + r = $Reader.create(r); + var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.WebNotificationsInfo(); + while (r.pos < c) { + var t = r.uint32(); + if (t === e) + break; + switch (t >>> 3) { + case 2: { + m.timestamp = r.uint64(); + break; + } + case 3: { + m.unreadChats = r.uint32(); + break; + } + case 4: { + m.notifyMessageCount = r.uint32(); + break; + } + case 5: { + if (!(m.notifyMessages && m.notifyMessages.length)) + m.notifyMessages = []; + m.notifyMessages.push($root.proto.WebMessageInfo.decode(r, r.uint32())); + break; + } + default: + r.skipType(t & 7); + break; + } + } + return m; + }; + + WebNotificationsInfo.fromObject = function fromObject(d) { + if (d instanceof $root.proto.WebNotificationsInfo) + return d; + var m = new $root.proto.WebNotificationsInfo(); + if (d.timestamp != null) { + if ($util.Long) + (m.timestamp = $util.Long.fromValue(d.timestamp)).unsigned = true; + else if (typeof d.timestamp === "string") + m.timestamp = parseInt(d.timestamp, 10); + else if (typeof d.timestamp === "number") + m.timestamp = d.timestamp; + else if (typeof d.timestamp === "object") + m.timestamp = new $util.LongBits(d.timestamp.low >>> 0, d.timestamp.high >>> 0).toNumber(true); + } + if (d.unreadChats != null) { + m.unreadChats = d.unreadChats >>> 0; + } + if (d.notifyMessageCount != null) { + m.notifyMessageCount = d.notifyMessageCount >>> 0; + } + if (d.notifyMessages) { + if (!Array.isArray(d.notifyMessages)) + throw TypeError(".proto.WebNotificationsInfo.notifyMessages: array expected"); + m.notifyMessages = []; + for (var i = 0; i < d.notifyMessages.length; ++i) { + if (typeof d.notifyMessages[i] !== "object") + throw TypeError(".proto.WebNotificationsInfo.notifyMessages: object expected"); + m.notifyMessages[i] = $root.proto.WebMessageInfo.fromObject(d.notifyMessages[i]); + } + } + return m; + }; + + WebNotificationsInfo.toObject = function toObject(m, o) { + if (!o) + o = {}; + var d = {}; + if (o.arrays || o.defaults) { + d.notifyMessages = []; + } + if (m.timestamp != null && m.hasOwnProperty("timestamp")) { + if (typeof m.timestamp === "number") + d.timestamp = o.longs === String ? String(m.timestamp) : m.timestamp; + else + d.timestamp = o.longs === String ? longToString(m.timestamp, true) : o.longs === Number ? longToNumber(m.timestamp, true) : m.timestamp; + if (o.oneofs) + d._timestamp = "timestamp"; + } + if (m.unreadChats != null && m.hasOwnProperty("unreadChats")) { + d.unreadChats = m.unreadChats; + if (o.oneofs) + d._unreadChats = "unreadChats"; + } + if (m.notifyMessageCount != null && m.hasOwnProperty("notifyMessageCount")) { + d.notifyMessageCount = m.notifyMessageCount; + if (o.oneofs) + d._notifyMessageCount = "notifyMessageCount"; + } + if (m.notifyMessages && m.notifyMessages.length) { + d.notifyMessages = []; + for (var j = 0; j < m.notifyMessages.length; ++j) { + d.notifyMessages[j] = $root.proto.WebMessageInfo.toObject(m.notifyMessages[j], o); + } + } + return d; + }; + + WebNotificationsInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + WebNotificationsInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/proto.WebNotificationsInfo"; + }; + + return WebNotificationsInfo; + })(); + + return proto; +})(); + +export { $root as default }; diff --git a/packages/transport/vendor/lib/Defaults/index.d.ts b/packages/transport/vendor/lib/Defaults/index.d.ts new file mode 100644 index 0000000..ef8d208 --- /dev/null +++ b/packages/transport/vendor/lib/Defaults/index.d.ts @@ -0,0 +1,75 @@ +import { proto } from '../../WAProto/index.js'; +import type { SocketConfig } from '../Types/index.js'; +export declare const UNAUTHORIZED_CODES: number[]; +export declare const DEFAULT_ORIGIN = "https://web.whatsapp.com"; +export declare const CALL_VIDEO_PREFIX = "https://call.whatsapp.com/video/"; +export declare const CALL_AUDIO_PREFIX = "https://call.whatsapp.com/voice/"; +export declare const DEF_CALLBACK_PREFIX = "CB:"; +export declare const DEF_TAG_PREFIX = "TAG:"; +export declare const PHONE_CONNECTION_CB = "CB:Pong"; +export declare const WA_ADV_ACCOUNT_SIG_PREFIX: Buffer; +export declare const WA_ADV_DEVICE_SIG_PREFIX: Buffer; +export declare const WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX: Buffer; +export declare const WA_ADV_HOSTED_DEVICE_SIG_PREFIX: Buffer; +export declare const WA_DEFAULT_EPHEMERAL: number; +/** Status messages older than 24 hours are considered expired */ +export declare const STATUS_EXPIRY_SECONDS: number; +/** WA Web enforces a 14-day maximum age for placeholder resend requests */ +export declare const PLACEHOLDER_MAX_AGE_SECONDS: number; +export declare const NOISE_MODE = "Noise_XX_25519_AESGCM_SHA256\0\0\0\0"; +export declare const DICT_VERSION = 3; +export declare const KEY_BUNDLE_TYPE: Buffer; +export declare const NOISE_WA_HEADER: Buffer; +/** from: https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url */ +export declare const URL_REGEX: RegExp; +export declare const WA_CERT_DETAILS: { + SERIAL: number; + ISSUER: string; + PUBLIC_KEY: Buffer; +}; +export declare const PROCESSABLE_HISTORY_TYPES: proto.HistorySync.HistorySyncType[]; +export declare const DEFAULT_CACHE_TTLS: { + SIGNAL_STORE: number; + MSG_RETRY: number; + CALL_OFFER: number; + USER_DEVICES: number; +}; +export declare const DEFAULT_CONNECTION_CONFIG: SocketConfig; +export declare const MEDIA_PATH_MAP: { + [T in MediaType]?: string; +}; +export declare const MEDIA_HKDF_KEY_MAPPING: { + audio: string; + document: string; + gif: string; + image: string; + ppic: string; + product: string; + ptt: string; + sticker: string; + video: string; + 'thumbnail-document': string; + 'thumbnail-image': string; + 'thumbnail-video': string; + 'thumbnail-link': string; + 'md-msg-hist': string; + 'md-app-state': string; + 'product-catalog-image': string; + 'payment-bg-image': string; + ptv: string; + 'biz-cover-photo': string; +}; +export type MediaType = keyof typeof MEDIA_HKDF_KEY_MAPPING; +export declare const MEDIA_KEYS: MediaType[]; +/** 120s timeout for history sync stall detection, same as WA Web's handleChunkProgress / restartPausedTimer (g = 120) */ +export declare const HISTORY_SYNC_PAUSED_TIMEOUT_MS = 120000; +export declare const MIN_PREKEY_COUNT = 5; +export declare const INITIAL_PREKEY_COUNT = 812; +export declare const UPLOAD_TIMEOUT = 30000; +export declare const TimeMs: { + Minute: number; + Hour: number; + Day: number; + Week: number; +}; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Defaults/index.d.ts.map b/packages/transport/vendor/lib/Defaults/index.d.ts.map new file mode 100644 index 0000000..d99f647 --- /dev/null +++ b/packages/transport/vendor/lib/Defaults/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Defaults/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,KAAK,EAAuB,YAAY,EAAa,MAAM,UAAU,CAAA;AAM5E,eAAO,MAAM,kBAAkB,UAAkB,CAAA;AAEjD,eAAO,MAAM,cAAc,6BAA6B,CAAA;AACxD,eAAO,MAAM,iBAAiB,qCAAqC,CAAA;AACnE,eAAO,MAAM,iBAAiB,qCAAqC,CAAA;AACnE,eAAO,MAAM,mBAAmB,QAAQ,CAAA;AACxC,eAAO,MAAM,cAAc,SAAS,CAAA;AACpC,eAAO,MAAM,mBAAmB,YAAY,CAAA;AAE5C,eAAO,MAAM,yBAAyB,qBAAsB,CAAA;AAC5D,eAAO,MAAM,wBAAwB,qBAAsB,CAAA;AAC3D,eAAO,MAAM,gCAAgC,qBAAsB,CAAA;AACnE,eAAO,MAAM,+BAA+B,qBAAsB,CAAA;AAElE,eAAO,MAAM,oBAAoB,QAAmB,CAAA;AAEpD,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,QAAe,CAAA;AAEjD,2EAA2E;AAC3E,eAAO,MAAM,2BAA2B,QAAoB,CAAA;AAE5D,eAAO,MAAM,UAAU,yCAAyC,CAAA;AAChE,eAAO,MAAM,YAAY,IAAI,CAAA;AAC7B,eAAO,MAAM,eAAe,qBAAmB,CAAA;AAC/C,eAAO,MAAM,eAAe,qBAAyC,CAAA;AACrE,yGAAyG;AACzG,eAAO,MAAM,SAAS,QAAwF,CAAA;AAE9G,eAAO,MAAM,eAAe;;;;CAI3B,CAAA;AAED,eAAO,MAAM,yBAAyB,qCAQrC,CAAA;AAED,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,YAmCvC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE;KAAG,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM;CAWvD,CAAA;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;CAoBlC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,sBAAsB,CAAA;AAE3D,eAAO,MAAM,UAAU,EAAkC,SAAS,EAAE,CAAA;AAEpE,yHAAyH;AACzH,eAAO,MAAM,8BAA8B,SAAU,CAAA;AAErD,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAEjC,eAAO,MAAM,oBAAoB,MAAM,CAAA;AAEvC,eAAO,MAAM,cAAc,QAAQ,CAAA;AAEnC,eAAO,MAAM,MAAM;;;;;CAKlB,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Defaults/index.js b/packages/transport/vendor/lib/Defaults/index.js new file mode 100644 index 0000000..ef16578 --- /dev/null +++ b/packages/transport/vendor/lib/Defaults/index.js @@ -0,0 +1,129 @@ +import { proto } from '../../WAProto/index.js'; +import { makeLibSignalRepository } from '../Signal/libsignal.js'; +import { Browsers } from '../Utils/browser-utils.js'; +import logger from '../Utils/logger.js'; +const version = [2, 3000, 1035194821]; +export const UNAUTHORIZED_CODES = [401, 403, 419]; +export const DEFAULT_ORIGIN = 'https://web.whatsapp.com'; +export const CALL_VIDEO_PREFIX = 'https://call.whatsapp.com/video/'; +export const CALL_AUDIO_PREFIX = 'https://call.whatsapp.com/voice/'; +export const DEF_CALLBACK_PREFIX = 'CB:'; +export const DEF_TAG_PREFIX = 'TAG:'; +export const PHONE_CONNECTION_CB = 'CB:Pong'; +export const WA_ADV_ACCOUNT_SIG_PREFIX = Buffer.from([6, 0]); +export const WA_ADV_DEVICE_SIG_PREFIX = Buffer.from([6, 1]); +export const WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX = Buffer.from([6, 5]); +export const WA_ADV_HOSTED_DEVICE_SIG_PREFIX = Buffer.from([6, 6]); +export const WA_DEFAULT_EPHEMERAL = 7 * 24 * 60 * 60; +/** Status messages older than 24 hours are considered expired */ +export const STATUS_EXPIRY_SECONDS = 24 * 60 * 60; +/** WA Web enforces a 14-day maximum age for placeholder resend requests */ +export const PLACEHOLDER_MAX_AGE_SECONDS = 14 * 24 * 60 * 60; +export const NOISE_MODE = 'Noise_XX_25519_AESGCM_SHA256\0\0\0\0'; +export const DICT_VERSION = 3; +export const KEY_BUNDLE_TYPE = Buffer.from([5]); +export const NOISE_WA_HEADER = Buffer.from([87, 65, 6, DICT_VERSION]); // last is "DICT_VERSION" +/** from: https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url */ +export const URL_REGEX = /https:\/\/(?![^:@\/\s]+:[^:@\/\s]+@)[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?(\/[^\s]*)?/g; +export const WA_CERT_DETAILS = { + SERIAL: 0, + ISSUER: 'WhatsAppLongTerm1', + PUBLIC_KEY: Buffer.from('142375574d0a587166aae71ebe516437c4a28b73e3695c6ce1f7f9545da8ee6b', 'hex') +}; +export const PROCESSABLE_HISTORY_TYPES = [ + proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP, + proto.HistorySync.HistorySyncType.PUSH_NAME, + proto.HistorySync.HistorySyncType.RECENT, + proto.HistorySync.HistorySyncType.FULL, + proto.HistorySync.HistorySyncType.ON_DEMAND, + proto.HistorySync.HistorySyncType.NON_BLOCKING_DATA, + proto.HistorySync.HistorySyncType.INITIAL_STATUS_V3 +]; +export const DEFAULT_CACHE_TTLS = { + SIGNAL_STORE: 5 * 60, // 5 minutes + MSG_RETRY: 60 * 60, // 1 hour + CALL_OFFER: 5 * 60, // 5 minutes + USER_DEVICES: 5 * 60 // 5 minutes +}; +export const DEFAULT_CONNECTION_CONFIG = { + version: version, + browser: Browsers.macOS('Chrome'), + waWebSocketUrl: 'wss://web.whatsapp.com/ws/chat', + connectTimeoutMs: 20000, + keepAliveIntervalMs: 30000, + logger: logger.child({ class: 'baileys' }), + emitOwnEvents: true, + defaultQueryTimeoutMs: 60000, + customUploadHosts: [], + retryRequestDelayMs: 250, + maxMsgRetryCount: 5, + fireInitQueries: true, + auth: undefined, + markOnlineOnConnect: true, + syncFullHistory: true, + patchMessageBeforeSending: msg => msg, + shouldSyncHistoryMessage: ({ syncType }) => { + return syncType !== proto.HistorySync.HistorySyncType.FULL; + }, + shouldIgnoreJid: () => false, + linkPreviewImageThumbnailWidth: 192, + transactionOpts: { maxCommitRetries: 10, delayBetweenTriesMs: 3000 }, + generateHighQualityLinkPreview: false, + enableAutoSessionRecreation: true, + enableRecentMessageCache: true, + options: {}, + appStateMacVerification: { + patch: false, + snapshot: false + }, + countryCode: 'US', + getMessage: async () => undefined, + cachedGroupMetadata: async () => undefined, + makeSignalRepository: makeLibSignalRepository +}; +export const MEDIA_PATH_MAP = { + image: '/mms/image', + video: '/mms/video', + document: '/mms/document', + audio: '/mms/audio', + sticker: '/mms/image', + 'thumbnail-link': '/mms/image', + 'product-catalog-image': '/product/image', + 'md-app-state': '', + 'md-msg-hist': '/mms/md-app-state', + 'biz-cover-photo': '/pps/biz-cover-photo' +}; +export const MEDIA_HKDF_KEY_MAPPING = { + audio: 'Audio', + document: 'Document', + gif: 'Video', + image: 'Image', + ppic: '', + product: 'Image', + ptt: 'Audio', + sticker: 'Image', + video: 'Video', + 'thumbnail-document': 'Document Thumbnail', + 'thumbnail-image': 'Image Thumbnail', + 'thumbnail-video': 'Video Thumbnail', + 'thumbnail-link': 'Link Thumbnail', + 'md-msg-hist': 'History', + 'md-app-state': 'App State', + 'product-catalog-image': '', + 'payment-bg-image': 'Payment Background', + ptv: 'Video', + 'biz-cover-photo': 'Image' +}; +export const MEDIA_KEYS = Object.keys(MEDIA_PATH_MAP); +/** 120s timeout for history sync stall detection, same as WA Web's handleChunkProgress / restartPausedTimer (g = 120) */ +export const HISTORY_SYNC_PAUSED_TIMEOUT_MS = 120000; +export const MIN_PREKEY_COUNT = 5; +export const INITIAL_PREKEY_COUNT = 812; +export const UPLOAD_TIMEOUT = 30000; // 30 seconds +export const TimeMs = { + Minute: 60 * 1000, + Hour: 60 * 60 * 1000, + Day: 24 * 60 * 60 * 1000, + Week: 7 * 24 * 60 * 60 * 1000 +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Defaults/index.js.map b/packages/transport/vendor/lib/Defaults/index.js.map new file mode 100644 index 0000000..0906e5e --- /dev/null +++ b/packages/transport/vendor/lib/Defaults/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Defaults/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts new file mode 100644 index 0000000..7ad6188 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts @@ -0,0 +1,10 @@ +export declare class CiphertextMessage { + readonly UNSUPPORTED_VERSION: number; + readonly CURRENT_VERSION: number; + readonly WHISPER_TYPE: number; + readonly PREKEY_TYPE: number; + readonly SENDERKEY_TYPE: number; + readonly SENDERKEY_DISTRIBUTION_TYPE: number; + readonly ENCRYPTED_MESSAGE_OVERHEAD: number; +} +//# sourceMappingURL=ciphertext-message.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts.map b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts.map new file mode 100644 index 0000000..0476a69 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ciphertext-message.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/ciphertext-message.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAI;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAI;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAI;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAI;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAI;IACnC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAI;IAChD,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAK;CAChD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/ciphertext-message.js b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.js new file mode 100644 index 0000000..c1be8d1 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.js @@ -0,0 +1,12 @@ +export class CiphertextMessage { + constructor() { + this.UNSUPPORTED_VERSION = 1; + this.CURRENT_VERSION = 3; + this.WHISPER_TYPE = 2; + this.PREKEY_TYPE = 3; + this.SENDERKEY_TYPE = 4; + this.SENDERKEY_DISTRIBUTION_TYPE = 5; + this.ENCRYPTED_MESSAGE_OVERHEAD = 53; + } +} +//# sourceMappingURL=ciphertext-message.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/ciphertext-message.js.map b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.js.map new file mode 100644 index 0000000..f17ed3e --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/ciphertext-message.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ciphertext-message.js","sourceRoot":"","sources":["../../../src/Signal/Group/ciphertext-message.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IAA9B;QACU,wBAAmB,GAAW,CAAC,CAAA;QAC/B,oBAAe,GAAW,CAAC,CAAA;QAC3B,iBAAY,GAAW,CAAC,CAAA;QACxB,gBAAW,GAAW,CAAC,CAAA;QACvB,mBAAc,GAAW,CAAC,CAAA;QAC1B,gCAA2B,GAAW,CAAC,CAAA;QACvC,+BAA0B,GAAW,EAAE,CAAA;IACjD,CAAC;CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts b/packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts new file mode 100644 index 0000000..20571b5 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts @@ -0,0 +1,15 @@ +import { SenderKeyDistributionMessage } from './sender-key-distribution-message.js'; +import { SenderKeyName } from './sender-key-name.js'; +import { SenderKeyRecord } from './sender-key-record.js'; +interface SenderKeyStore { + loadSenderKey(senderKeyName: SenderKeyName): Promise; + storeSenderKey(senderKeyName: SenderKeyName, record: SenderKeyRecord): Promise; +} +export declare class GroupSessionBuilder { + private readonly senderKeyStore; + constructor(senderKeyStore: SenderKeyStore); + process(senderKeyName: SenderKeyName, senderKeyDistributionMessage: SenderKeyDistributionMessage): Promise; + create(senderKeyName: SenderKeyName): Promise; +} +export {}; +//# sourceMappingURL=group-session-builder.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts.map b/packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts.map new file mode 100644 index 0000000..9cd94fa --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group-session-builder.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"group-session-builder.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/group-session-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,UAAU,cAAc;IACvB,aAAa,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IACrE,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpF;AAED,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAEnC,cAAc,EAAE,cAAc;IAI7B,OAAO,CACnB,aAAa,EAAE,aAAa,EAC5B,4BAA4B,EAAE,4BAA4B,GACxD,OAAO,CAAC,IAAI,CAAC;IAWH,MAAM,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,4BAA4B,CAAC;CAwBxF"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group-session-builder.js b/packages/transport/vendor/lib/Signal/Group/group-session-builder.js new file mode 100644 index 0000000..7d41a42 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group-session-builder.js @@ -0,0 +1,30 @@ +import * as keyhelper from './keyhelper.js'; +import { SenderKeyDistributionMessage } from './sender-key-distribution-message.js'; +import { SenderKeyName } from './sender-key-name.js'; +import { SenderKeyRecord } from './sender-key-record.js'; +export class GroupSessionBuilder { + constructor(senderKeyStore) { + this.senderKeyStore = senderKeyStore; + } + async process(senderKeyName, senderKeyDistributionMessage) { + const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName); + senderKeyRecord.addSenderKeyState(senderKeyDistributionMessage.getId(), senderKeyDistributionMessage.getIteration(), senderKeyDistributionMessage.getChainKey(), senderKeyDistributionMessage.getSignatureKey()); + await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord); + } + async create(senderKeyName) { + const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName); + if (senderKeyRecord.isEmpty()) { + const keyId = keyhelper.generateSenderKeyId(); + const senderKey = keyhelper.generateSenderKey(); + const signingKey = keyhelper.generateSenderSigningKey(); + senderKeyRecord.setSenderKeyState(keyId, 0, senderKey, signingKey); + await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord); + } + const state = senderKeyRecord.getSenderKeyState(); + if (!state) { + throw new Error('No session state available'); + } + return new SenderKeyDistributionMessage(state.getKeyId(), state.getSenderChainKey().getIteration(), state.getSenderChainKey().getSeed(), state.getSigningKeyPublic()); + } +} +//# sourceMappingURL=group-session-builder.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group-session-builder.js.map b/packages/transport/vendor/lib/Signal/Group/group-session-builder.js.map new file mode 100644 index 0000000..40ea9aa --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group-session-builder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"group-session-builder.js","sourceRoot":"","sources":["../../../src/Signal/Group/group-session-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAOrD,MAAM,OAAO,mBAAmB;IAG/B,YAAY,cAA8B;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;IACrC,CAAC;IAEM,KAAK,CAAC,OAAO,CACnB,aAA4B,EAC5B,4BAA0D;QAE1D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;QAC9E,eAAe,CAAC,iBAAiB,CAChC,4BAA4B,CAAC,KAAK,EAAE,EACpC,4BAA4B,CAAC,YAAY,EAAE,EAC3C,4BAA4B,CAAC,WAAW,EAAE,EAC1C,4BAA4B,CAAC,eAAe,EAAE,CAC9C,CAAA;QACD,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;IACzE,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,aAA4B;QAC/C,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;QAE9E,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAA;YAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAA;YAC/C,MAAM,UAAU,GAAG,SAAS,CAAC,wBAAwB,EAAE,CAAA;YAEvD,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;YAClE,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;QACzE,CAAC;QAED,MAAM,KAAK,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAA;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC9C,CAAC;QAED,OAAO,IAAI,4BAA4B,CACtC,KAAK,CAAC,QAAQ,EAAE,EAChB,KAAK,CAAC,iBAAiB,EAAE,CAAC,YAAY,EAAE,EACxC,KAAK,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EACnC,KAAK,CAAC,mBAAmB,EAAE,CAC3B,CAAA;IACF,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts b/packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts new file mode 100644 index 0000000..0f29ea7 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts @@ -0,0 +1,17 @@ +import { SenderKeyName } from './sender-key-name.js'; +import { SenderKeyRecord } from './sender-key-record.js'; +export interface SenderKeyStore { + loadSenderKey(senderKeyName: SenderKeyName): Promise; + storeSenderKey(senderKeyName: SenderKeyName, record: SenderKeyRecord): Promise; +} +export declare class GroupCipher { + private readonly senderKeyStore; + private readonly senderKeyName; + constructor(senderKeyStore: SenderKeyStore, senderKeyName: SenderKeyName); + encrypt(paddedPlaintext: Uint8Array): Promise; + decrypt(senderKeyMessageBytes: Uint8Array): Promise; + private getSenderKey; + private getPlainText; + private getCipherText; +} +//# sourceMappingURL=group_cipher.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts.map b/packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts.map new file mode 100644 index 0000000..5344854 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group_cipher.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"group_cipher.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/group_cipher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGrD,MAAM,WAAW,cAAc;IAC9B,aAAa,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAErE,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpF;AAED,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAEjC,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa;IAK3D,OAAO,CAAC,eAAe,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BzD,OAAO,CAAC,qBAAqB,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB5E,OAAO,CAAC,YAAY;YA4BN,YAAY;YAQZ,aAAa;CAO3B"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group_cipher.js b/packages/transport/vendor/lib/Signal/Group/group_cipher.js new file mode 100644 index 0000000..568fc30 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group_cipher.js @@ -0,0 +1,82 @@ +import { decrypt, encrypt } from 'libsignal/src/crypto.js'; +import { SenderKeyMessage } from './sender-key-message.js'; +import { SenderKeyName } from './sender-key-name.js'; +import { SenderKeyRecord } from './sender-key-record.js'; +import { SenderKeyState } from './sender-key-state.js'; +export class GroupCipher { + constructor(senderKeyStore, senderKeyName) { + this.senderKeyStore = senderKeyStore; + this.senderKeyName = senderKeyName; + } + async encrypt(paddedPlaintext) { + const record = await this.senderKeyStore.loadSenderKey(this.senderKeyName); + if (!record) { + throw new Error('No SenderKeyRecord found for encryption'); + } + const senderKeyState = record.getSenderKeyState(); + if (!senderKeyState) { + throw new Error('No session to encrypt message'); + } + const iteration = senderKeyState.getSenderChainKey().getIteration(); + const senderKey = this.getSenderKey(senderKeyState, iteration === 0 ? 0 : iteration + 1); + const ciphertext = await this.getCipherText(senderKey.getIv(), senderKey.getCipherKey(), paddedPlaintext); + const senderKeyMessage = new SenderKeyMessage(senderKeyState.getKeyId(), senderKey.getIteration(), ciphertext, senderKeyState.getSigningKeyPrivate()); + await this.senderKeyStore.storeSenderKey(this.senderKeyName, record); + return senderKeyMessage.serialize(); + } + async decrypt(senderKeyMessageBytes) { + const record = await this.senderKeyStore.loadSenderKey(this.senderKeyName); + if (!record) { + throw new Error('No SenderKeyRecord found for decryption'); + } + const senderKeyMessage = new SenderKeyMessage(null, null, null, null, senderKeyMessageBytes); + const senderKeyState = record.getSenderKeyState(senderKeyMessage.getKeyId()); + if (!senderKeyState) { + throw new Error('No session found to decrypt message'); + } + senderKeyMessage.verifySignature(senderKeyState.getSigningKeyPublic()); + const senderKey = this.getSenderKey(senderKeyState, senderKeyMessage.getIteration()); + const plaintext = await this.getPlainText(senderKey.getIv(), senderKey.getCipherKey(), senderKeyMessage.getCipherText()); + await this.senderKeyStore.storeSenderKey(this.senderKeyName, record); + return plaintext; + } + getSenderKey(senderKeyState, iteration) { + let senderChainKey = senderKeyState.getSenderChainKey(); + if (senderChainKey.getIteration() > iteration) { + if (senderKeyState.hasSenderMessageKey(iteration)) { + const messageKey = senderKeyState.removeSenderMessageKey(iteration); + if (!messageKey) { + throw new Error('No sender message key found for iteration'); + } + return messageKey; + } + throw new Error(`Received message with old counter: ${senderChainKey.getIteration()}, ${iteration}`); + } + if (iteration - senderChainKey.getIteration() > 2000) { + throw new Error('Over 2000 messages into the future!'); + } + while (senderChainKey.getIteration() < iteration) { + senderKeyState.addSenderMessageKey(senderChainKey.getSenderMessageKey()); + senderChainKey = senderChainKey.getNext(); + } + senderKeyState.setSenderChainKey(senderChainKey.getNext()); + return senderChainKey.getSenderMessageKey(); + } + async getPlainText(iv, key, ciphertext) { + try { + return decrypt(key, ciphertext, iv); + } + catch (e) { + throw new Error('InvalidMessageException'); + } + } + async getCipherText(iv, key, plaintext) { + try { + return encrypt(key, plaintext, iv); + } + catch (e) { + throw new Error('InvalidMessageException'); + } + } +} +//# sourceMappingURL=group_cipher.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/group_cipher.js.map b/packages/transport/vendor/lib/Signal/Group/group_cipher.js.map new file mode 100644 index 0000000..e74c89e --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/group_cipher.js.map @@ -0,0 +1 @@ +{"version":3,"file":"group_cipher.js","sourceRoot":"","sources":["../../../src/Signal/Group/group_cipher.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/index.d.ts b/packages/transport/vendor/lib/Signal/Group/index.d.ts new file mode 100644 index 0000000..24d2e5b --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/index.d.ts @@ -0,0 +1,12 @@ +export { GroupSessionBuilder } from './group-session-builder.js'; +export { SenderKeyDistributionMessage } from './sender-key-distribution-message.js'; +export { SenderKeyRecord } from './sender-key-record.js'; +export { SenderKeyName } from './sender-key-name.js'; +export { GroupCipher } from './group_cipher.js'; +export { SenderKeyState } from './sender-key-state.js'; +export { SenderKeyMessage } from './sender-key-message.js'; +export { SenderMessageKey } from './sender-message-key.js'; +export { SenderChainKey } from './sender-chain-key.js'; +export { CiphertextMessage } from './ciphertext-message.js'; +export * as keyhelper from './keyhelper.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/index.d.ts.map b/packages/transport/vendor/lib/Signal/Group/index.d.ts.map new file mode 100644 index 0000000..3520f5a --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/index.js b/packages/transport/vendor/lib/Signal/Group/index.js new file mode 100644 index 0000000..2b74b86 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/index.js @@ -0,0 +1,12 @@ +export { GroupSessionBuilder } from './group-session-builder.js'; +export { SenderKeyDistributionMessage } from './sender-key-distribution-message.js'; +export { SenderKeyRecord } from './sender-key-record.js'; +export { SenderKeyName } from './sender-key-name.js'; +export { GroupCipher } from './group_cipher.js'; +export { SenderKeyState } from './sender-key-state.js'; +export { SenderKeyMessage } from './sender-key-message.js'; +export { SenderMessageKey } from './sender-message-key.js'; +export { SenderChainKey } from './sender-chain-key.js'; +export { CiphertextMessage } from './ciphertext-message.js'; +export * as keyhelper from './keyhelper.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/index.js.map b/packages/transport/vendor/lib/Signal/Group/index.js.map new file mode 100644 index 0000000..cf791ad --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Signal/Group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts b/packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts new file mode 100644 index 0000000..4f45cf9 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts @@ -0,0 +1,11 @@ +import { generateKeyPair } from 'libsignal/src/curve.js'; +type KeyPairType = ReturnType; +export declare function generateSenderKey(): Buffer; +export declare function generateSenderKeyId(): number; +export interface SigningKeyPair { + public: Buffer; + private: Buffer; +} +export declare function generateSenderSigningKey(key?: KeyPairType): SigningKeyPair; +export {}; +//# sourceMappingURL=keyhelper.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts.map b/packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts.map new file mode 100644 index 0000000..4743738 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/keyhelper.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"keyhelper.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/keyhelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;AAErD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,wBAAwB,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,cAAc,CAS1E"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/keyhelper.js b/packages/transport/vendor/lib/Signal/Group/keyhelper.js new file mode 100644 index 0000000..cf6eacd --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/keyhelper.js @@ -0,0 +1,18 @@ +import * as nodeCrypto from 'crypto'; +import { generateKeyPair } from 'libsignal/src/curve.js'; +export function generateSenderKey() { + return nodeCrypto.randomBytes(32); +} +export function generateSenderKeyId() { + return nodeCrypto.randomInt(2147483647); +} +export function generateSenderSigningKey(key) { + if (!key) { + key = generateKeyPair(); + } + return { + public: Buffer.from(key.pubKey), + private: Buffer.from(key.privKey) + }; +} +//# sourceMappingURL=keyhelper.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/keyhelper.js.map b/packages/transport/vendor/lib/Signal/Group/keyhelper.js.map new file mode 100644 index 0000000..4911b2d --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/keyhelper.js.map @@ -0,0 +1 @@ +{"version":3,"file":"keyhelper.js","sourceRoot":"","sources":["../../../src/Signal/Group/keyhelper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAIrD,MAAM,UAAU,iBAAiB;IAChC,OAAO,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,mBAAmB;IAClC,OAAO,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;AACxC,CAAC;AAOD,MAAM,UAAU,wBAAwB,CAAC,GAAiB;IACzD,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,GAAG,GAAG,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,OAAO;QACN,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;KACjC,CAAA;AACF,CAAC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts new file mode 100644 index 0000000..ffe60d2 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts @@ -0,0 +1,14 @@ +import { SenderMessageKey } from './sender-message-key.js'; +export declare class SenderChainKey { + private readonly MESSAGE_KEY_SEED; + private readonly CHAIN_KEY_SEED; + private readonly iteration; + private readonly chainKey; + constructor(iteration: number, chainKey: Uint8Array | Buffer); + getIteration(): number; + getSenderMessageKey(): SenderMessageKey; + getNext(): SenderChainKey; + getSeed(): Uint8Array; + private getDerivative; +} +//# sourceMappingURL=sender-chain-key.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts.map b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts.map new file mode 100644 index 0000000..c801333 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-chain-key.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/sender-chain-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM;IAKrD,YAAY,IAAI,MAAM;IAItB,mBAAmB,IAAI,gBAAgB;IAIvC,OAAO,IAAI,cAAc;IAIzB,OAAO,IAAI,UAAU;IAI5B,OAAO,CAAC,aAAa;CAGrB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-chain-key.js b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.js new file mode 100644 index 0000000..c92bd25 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.js @@ -0,0 +1,26 @@ +import { calculateMAC } from 'libsignal/src/crypto.js'; +import { SenderMessageKey } from './sender-message-key.js'; +export class SenderChainKey { + constructor(iteration, chainKey) { + this.MESSAGE_KEY_SEED = Buffer.from([0x01]); + this.CHAIN_KEY_SEED = Buffer.from([0x02]); + this.iteration = iteration; + this.chainKey = Buffer.from(chainKey); + } + getIteration() { + return this.iteration; + } + getSenderMessageKey() { + return new SenderMessageKey(this.iteration, this.getDerivative(this.MESSAGE_KEY_SEED, this.chainKey)); + } + getNext() { + return new SenderChainKey(this.iteration + 1, this.getDerivative(this.CHAIN_KEY_SEED, this.chainKey)); + } + getSeed() { + return this.chainKey; + } + getDerivative(seed, key) { + return calculateMAC(key, seed); + } +} +//# sourceMappingURL=sender-chain-key.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-chain-key.js.map b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.js.map new file mode 100644 index 0000000..fa2978f --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-chain-key.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-chain-key.js","sourceRoot":"","sources":["../../../src/Signal/Group/sender-chain-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,OAAO,cAAc;IAM1B,YAAY,SAAiB,EAAE,QAA6B;QAL3C,qBAAgB,GAAe,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAClD,mBAAc,GAAe,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAKhE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;IAEM,mBAAmB;QACzB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtG,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtG,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,QAAQ,CAAA;IACrB,CAAC;IAEO,aAAa,CAAC,IAAgB,EAAE,GAAW;QAClD,OAAO,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts new file mode 100644 index 0000000..3146580 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts @@ -0,0 +1,17 @@ +import { CiphertextMessage } from './ciphertext-message.js'; +export declare class SenderKeyDistributionMessage extends CiphertextMessage { + private readonly id; + private readonly iteration; + private readonly chainKey; + private readonly signatureKey; + private readonly serialized; + constructor(id?: number | null, iteration?: number | null, chainKey?: Uint8Array | null, signatureKey?: Uint8Array | null, serialized?: Uint8Array | null); + private intsToByteHighAndLow; + serialize(): Uint8Array; + getType(): number; + getIteration(): number; + getChainKey(): Uint8Array; + getSignatureKey(): Uint8Array; + getId(): number; +} +//# sourceMappingURL=sender-key-distribution-message.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts.map b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts.map new file mode 100644 index 0000000..8939e1f --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-distribution-message.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-distribution-message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AASxD,qBAAa,4BAA6B,SAAQ,iBAAiB;IAClE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAY;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAGtC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,EAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,EAC5B,YAAY,CAAC,EAAE,UAAU,GAAG,IAAI,EAChC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IA6C/B,OAAO,CAAC,oBAAoB;IAIrB,SAAS,IAAI,UAAU;IAIvB,OAAO,IAAI,MAAM;IAIjB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,UAAU;IAIzB,eAAe,IAAI,UAAU;IAI7B,KAAK,IAAI,MAAM;CAGtB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js new file mode 100644 index 0000000..bf638e3 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js @@ -0,0 +1,63 @@ +import { proto } from '../../../WAProto/index.js'; +import { CiphertextMessage } from './ciphertext-message.js'; +export class SenderKeyDistributionMessage extends CiphertextMessage { + constructor(id, iteration, chainKey, signatureKey, serialized) { + super(); + if (serialized) { + try { + const message = serialized.slice(1); + const distributionMessage = proto.SenderKeyDistributionMessage.decode(message).toJSON(); + this.serialized = serialized; + this.id = distributionMessage.id; + this.iteration = distributionMessage.iteration; + this.chainKey = + typeof distributionMessage.chainKey === 'string' + ? Buffer.from(distributionMessage.chainKey, 'base64') + : distributionMessage.chainKey; + this.signatureKey = + typeof distributionMessage.signingKey === 'string' + ? Buffer.from(distributionMessage.signingKey, 'base64') + : distributionMessage.signingKey; + } + catch (e) { + throw new Error(String(e)); + } + } + else { + const version = this.intsToByteHighAndLow(this.CURRENT_VERSION, this.CURRENT_VERSION); + this.id = id; + this.iteration = iteration; + this.chainKey = chainKey; + this.signatureKey = signatureKey; + const message = proto.SenderKeyDistributionMessage.encode(proto.SenderKeyDistributionMessage.create({ + id, + iteration, + chainKey, + signingKey: this.signatureKey + })).finish(); + this.serialized = Buffer.concat([Buffer.from([version]), message]); + } + } + intsToByteHighAndLow(highValue, lowValue) { + return (((highValue << 4) | lowValue) & 0xff) % 256; + } + serialize() { + return this.serialized; + } + getType() { + return this.SENDERKEY_DISTRIBUTION_TYPE; + } + getIteration() { + return this.iteration; + } + getChainKey() { + return this.chainKey; + } + getSignatureKey() { + return this.signatureKey; + } + getId() { + return this.id; + } +} +//# sourceMappingURL=sender-key-distribution-message.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js.map b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js.map new file mode 100644 index 0000000..fad1060 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-distribution-message.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-distribution-message.js","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-distribution-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AASxD,MAAM,OAAO,4BAA6B,SAAQ,iBAAiB;IAOlE,YACC,EAAkB,EAClB,SAAyB,EACzB,QAA4B,EAC5B,YAAgC,EAChC,UAA8B;QAE9B,KAAK,EAAE,CAAA;QAEP,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,mBAAmB,GAAG,KAAK,CAAC,4BAA4B,CAAC,MAAM,CACpE,OAAO,CACP,CAAC,MAAM,EAA2C,CAAA;gBAEnD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;gBAC5B,IAAI,CAAC,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAA;gBAChC,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,SAAS,CAAA;gBAC9C,IAAI,CAAC,QAAQ;oBACZ,OAAO,mBAAmB,CAAC,QAAQ,KAAK,QAAQ;wBAC/C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;wBACrD,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAA;gBAChC,IAAI,CAAC,YAAY;oBAChB,OAAO,mBAAmB,CAAC,UAAU,KAAK,QAAQ;wBACjD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC;wBACvD,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAA;YACnC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3B,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;YACrF,IAAI,CAAC,EAAE,GAAG,EAAG,CAAA;YACb,IAAI,CAAC,SAAS,GAAG,SAAU,CAAA;YAC3B,IAAI,CAAC,QAAQ,GAAG,QAAS,CAAA;YACzB,IAAI,CAAC,YAAY,GAAG,YAAa,CAAA;YAEjC,MAAM,OAAO,GAAG,KAAK,CAAC,4BAA4B,CAAC,MAAM,CACxD,KAAK,CAAC,4BAA4B,CAAC,MAAM,CAAC;gBACzC,EAAE;gBACF,SAAS;gBACT,QAAQ;gBACR,UAAU,EAAE,IAAI,CAAC,YAAY;aAC7B,CAAC,CACF,CAAC,MAAM,EAAE,CAAA;YAEV,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QACnE,CAAC;IACF,CAAC;IAEO,oBAAoB,CAAC,SAAiB,EAAE,QAAgB;QAC/D,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAA;IACpD,CAAC;IAEM,SAAS;QACf,OAAO,IAAI,CAAC,UAAU,CAAA;IACvB,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,2BAA2B,CAAA;IACxC,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;IAEM,WAAW;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAA;IACrB,CAAC;IAEM,eAAe;QACrB,OAAO,IAAI,CAAC,YAAY,CAAA;IACzB,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,CAAA;IACf,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts b/packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts new file mode 100644 index 0000000..f5475d4 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts @@ -0,0 +1,19 @@ +import { CiphertextMessage } from './ciphertext-message.js'; +export declare class SenderKeyMessage extends CiphertextMessage { + private readonly SIGNATURE_LENGTH; + private readonly messageVersion; + private readonly keyId; + private readonly iteration; + private readonly ciphertext; + private readonly signature; + private readonly serialized; + constructor(keyId?: number | null, iteration?: number | null, ciphertext?: Uint8Array | null, signatureKey?: Uint8Array | null, serialized?: Uint8Array | null); + getKeyId(): number; + getIteration(): number; + getCipherText(): Uint8Array; + verifySignature(signatureKey: Uint8Array): void; + private getSignature; + serialize(): Uint8Array; + getType(): number; +} +//# sourceMappingURL=sender-key-message.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts.map b/packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts.map new file mode 100644 index 0000000..26c1a41 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-message.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-message.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAQxD,qBAAa,gBAAiB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAGtC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,EAC9B,YAAY,CAAC,EAAE,UAAU,GAAG,IAAI,EAChC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAyCxB,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,UAAU;IAI3B,eAAe,CAAC,YAAY,EAAE,UAAU,GAAG,IAAI;IAOtD,OAAO,CAAC,YAAY;IAIb,SAAS,IAAI,UAAU;IAIvB,OAAO,IAAI,MAAM;CAGxB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-message.js b/packages/transport/vendor/lib/Signal/Group/sender-key-message.js new file mode 100644 index 0000000..2d686f2 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-message.js @@ -0,0 +1,66 @@ +import { calculateSignature, verifySignature } from 'libsignal/src/curve.js'; +import { proto } from '../../../WAProto/index.js'; +import { CiphertextMessage } from './ciphertext-message.js'; +export class SenderKeyMessage extends CiphertextMessage { + constructor(keyId, iteration, ciphertext, signatureKey, serialized) { + super(); + this.SIGNATURE_LENGTH = 64; + if (serialized) { + const version = serialized[0]; + const message = serialized.slice(1, serialized.length - this.SIGNATURE_LENGTH); + const signature = serialized.slice(-1 * this.SIGNATURE_LENGTH); + const senderKeyMessage = proto.SenderKeyMessage.decode(message).toJSON(); + this.serialized = serialized; + this.messageVersion = (version & 0xff) >> 4; + this.keyId = senderKeyMessage.id; + this.iteration = senderKeyMessage.iteration; + this.ciphertext = + typeof senderKeyMessage.ciphertext === 'string' + ? Buffer.from(senderKeyMessage.ciphertext, 'base64') + : senderKeyMessage.ciphertext; + this.signature = signature; + } + else { + const version = (((this.CURRENT_VERSION << 4) | this.CURRENT_VERSION) & 0xff) % 256; + const ciphertextBuffer = Buffer.from(ciphertext); + const message = proto.SenderKeyMessage.encode(proto.SenderKeyMessage.create({ + id: keyId, + iteration: iteration, + ciphertext: ciphertextBuffer + })).finish(); + const signature = this.getSignature(signatureKey, Buffer.concat([Buffer.from([version]), message])); + this.serialized = Buffer.concat([Buffer.from([version]), message, Buffer.from(signature)]); + this.messageVersion = this.CURRENT_VERSION; + this.keyId = keyId; + this.iteration = iteration; + this.ciphertext = ciphertextBuffer; + this.signature = signature; + } + } + getKeyId() { + return this.keyId; + } + getIteration() { + return this.iteration; + } + getCipherText() { + return this.ciphertext; + } + verifySignature(signatureKey) { + const part1 = this.serialized.slice(0, this.serialized.length - this.SIGNATURE_LENGTH); + const part2 = this.serialized.slice(-1 * this.SIGNATURE_LENGTH); + const res = verifySignature(signatureKey, part1, part2); + if (!res) + throw new Error('Invalid signature!'); + } + getSignature(signatureKey, serialized) { + return Buffer.from(calculateSignature(signatureKey, serialized)); + } + serialize() { + return this.serialized; + } + getType() { + return 4; + } +} +//# sourceMappingURL=sender-key-message.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-message.js.map b/packages/transport/vendor/lib/Signal/Group/sender-key-message.js.map new file mode 100644 index 0000000..ef1d3a1 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-message.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-message.js","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-message.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts b/packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts new file mode 100644 index 0000000..bc45a01 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts @@ -0,0 +1,18 @@ +interface Sender { + id: string; + deviceId: number; + toString(): string; +} +export declare class SenderKeyName { + private readonly groupId; + private readonly sender; + constructor(groupId: string, sender: Sender); + getGroupId(): string; + getSender(): Sender; + serialize(): string; + toString(): string; + equals(other: SenderKeyName | null): boolean; + hashCode(): number; +} +export {}; +//# sourceMappingURL=sender-key-name.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts.map b/packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts.map new file mode 100644 index 0000000..aaa2726 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-name.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-name.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-name.ts"],"names":[],"mappings":"AAAA,UAAU,MAAM;IACf,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,IAAI,MAAM,CAAA;CAClB;AA4BD,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAEnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKpC,UAAU,IAAI,MAAM;IAIpB,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,MAAM;IAInB,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO;IAK5C,QAAQ,IAAI,MAAM;CAGzB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-name.js b/packages/transport/vendor/lib/Signal/Group/sender-key-name.js new file mode 100644 index 0000000..3dadff6 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-name.js @@ -0,0 +1,48 @@ +function isNull(str) { + return str === null || str === ''; +} +function intValue(num) { + const MAX_VALUE = 0x7fffffff; + const MIN_VALUE = -0x80000000; + if (num > MAX_VALUE || num < MIN_VALUE) { + return num & 0xffffffff; + } + return num; +} +function hashCode(strKey) { + let hash = 0; + if (!isNull(strKey)) { + for (let i = 0; i < strKey.length; i++) { + hash = hash * 31 + strKey.charCodeAt(i); + hash = intValue(hash); + } + } + return hash; +} +export class SenderKeyName { + constructor(groupId, sender) { + this.groupId = groupId; + this.sender = sender; + } + getGroupId() { + return this.groupId; + } + getSender() { + return this.sender; + } + serialize() { + return `${this.groupId}::${this.sender.id}::${this.sender.deviceId}`; + } + toString() { + return this.serialize(); + } + equals(other) { + if (other === null) + return false; + return this.groupId === other.groupId && this.sender.toString() === other.sender.toString(); + } + hashCode() { + return hashCode(this.groupId) ^ hashCode(this.sender.toString()); + } +} +//# sourceMappingURL=sender-key-name.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-name.js.map b/packages/transport/vendor/lib/Signal/Group/sender-key-name.js.map new file mode 100644 index 0000000..8a2eb13 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-name.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-name.js","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-name.ts"],"names":[],"mappings":"AAMA,SAAS,MAAM,CAAC,GAAkB;IACjC,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,CAAA;AAClC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC5B,MAAM,SAAS,GAAG,UAAU,CAAA;IAC5B,MAAM,SAAS,GAAG,CAAC,UAAU,CAAA;IAC7B,IAAI,GAAG,GAAG,SAAS,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;QACxC,OAAO,GAAG,GAAG,UAAU,CAAA;IACxB,CAAC;IAED,OAAO,GAAG,CAAA;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YACvC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,OAAO,aAAa;IAIzB,YAAY,OAAe,EAAE,MAAc;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACrB,CAAC;IAEM,UAAU;QAChB,OAAO,IAAI,CAAC,OAAO,CAAA;IACpB,CAAC;IAEM,SAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAA;IACnB,CAAC;IAEM,SAAS;QACf,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACrE,CAAC;IAEM,QAAQ;QACd,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;IACxB,CAAC;IAEM,MAAM,CAAC,KAA2B;QACxC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QAChC,OAAO,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC5F,CAAC;IAEM,QAAQ;QACd,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjE,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts b/packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts new file mode 100644 index 0000000..ae9d69c --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts @@ -0,0 +1,31 @@ +import { SenderKeyState } from './sender-key-state.js'; +export interface SenderKeyStateStructure { + senderKeyId: number; + senderChainKey: { + iteration: number; + seed: Uint8Array; + }; + senderSigningKey: { + public: Uint8Array; + private?: Uint8Array; + }; + senderMessageKeys: Array<{ + iteration: number; + seed: Uint8Array; + }>; +} +export declare class SenderKeyRecord { + private readonly MAX_STATES; + private readonly senderKeyStates; + constructor(serialized?: SenderKeyStateStructure[]); + isEmpty(): boolean; + getSenderKeyState(keyId?: number): SenderKeyState | undefined; + addSenderKeyState(id: number, iteration: number, chainKey: Uint8Array, signatureKey: Uint8Array): void; + setSenderKeyState(id: number, iteration: number, chainKey: Uint8Array, keyPair: { + public: Uint8Array; + private: Uint8Array; + }): void; + serialize(): SenderKeyStateStructure[]; + static deserialize(data: Uint8Array): SenderKeyRecord; +} +//# sourceMappingURL=sender-key-record.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts.map b/packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts.map new file mode 100644 index 0000000..042268c --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-record.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-record.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-record.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,WAAW,uBAAuB;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,IAAI,EAAE,UAAU,CAAA;KAChB,CAAA;IACD,gBAAgB,EAAE;QACjB,MAAM,EAAE,UAAU,CAAA;QAClB,OAAO,CAAC,EAAE,UAAU,CAAA;KACpB,CAAA;IACD,iBAAiB,EAAE,KAAK,CAAC;QACxB,SAAS,EAAE,MAAM,CAAA;QACjB,IAAI,EAAE,UAAU,CAAA;KAChB,CAAC,CAAA;CACF;AAED,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAI;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;gBAE3C,UAAU,CAAC,EAAE,uBAAuB,EAAE;IAQ3C,OAAO,IAAI,OAAO;IAIlB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAQ7D,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,GAAG,IAAI;IAOtG,iBAAiB,CACvB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,UAAU,CAAA;KAAE,GAClD,IAAI;IAKA,SAAS,IAAI,uBAAuB,EAAE;IAG7C,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe;CAKrD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-record.js b/packages/transport/vendor/lib/Signal/Group/sender-key-record.js new file mode 100644 index 0000000..57d3dd3 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-record.js @@ -0,0 +1,41 @@ +import { BufferJSON } from '../../Utils/generics.js'; +import { SenderKeyState } from './sender-key-state.js'; +export class SenderKeyRecord { + constructor(serialized) { + this.MAX_STATES = 5; + this.senderKeyStates = []; + if (serialized) { + for (const structure of serialized) { + this.senderKeyStates.push(new SenderKeyState(null, null, null, null, null, null, structure)); + } + } + } + isEmpty() { + return this.senderKeyStates.length === 0; + } + getSenderKeyState(keyId) { + if (keyId === undefined && this.senderKeyStates.length) { + return this.senderKeyStates[this.senderKeyStates.length - 1]; + } + return this.senderKeyStates.find(state => state.getKeyId() === keyId); + } + addSenderKeyState(id, iteration, chainKey, signatureKey) { + this.senderKeyStates.push(new SenderKeyState(id, iteration, chainKey, null, signatureKey)); + if (this.senderKeyStates.length > this.MAX_STATES) { + this.senderKeyStates.shift(); + } + } + setSenderKeyState(id, iteration, chainKey, keyPair) { + this.senderKeyStates.length = 0; + this.senderKeyStates.push(new SenderKeyState(id, iteration, chainKey, keyPair)); + } + serialize() { + return this.senderKeyStates.map(state => state.getStructure()); + } + static deserialize(data) { + const str = Buffer.from(data).toString('utf-8'); + const parsed = JSON.parse(str, BufferJSON.reviver); + return new SenderKeyRecord(parsed); + } +} +//# sourceMappingURL=sender-key-record.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-record.js.map b/packages/transport/vendor/lib/Signal/Group/sender-key-record.js.map new file mode 100644 index 0000000..841b1f0 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-record.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-record.js","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAkBnD,MAAM,OAAO,eAAe;IAI3B,YAAY,UAAsC;QAHjC,eAAU,GAAG,CAAC,CAAA;QACd,oBAAe,GAAqB,EAAE,CAAA;QAGtD,IAAI,UAAU,EAAE,CAAC;YAChB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;YAC7F,CAAC;QACF,CAAC;IACF,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAA;IACzC,CAAC;IAEM,iBAAiB,CAAC,KAAc;QACtC,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC7D,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,CAAA;IACtE,CAAC;IAEM,iBAAiB,CAAC,EAAU,EAAE,SAAiB,EAAE,QAAoB,EAAE,YAAwB;QACrG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;QAC1F,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;QAC7B,CAAC;IACF,CAAC;IAEM,iBAAiB,CACvB,EAAU,EACV,SAAiB,EACjB,QAAoB,EACpB,OAAoD;QAEpD,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAChF,CAAC;IAEM,SAAS;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;IAC/D,CAAC;IACD,MAAM,CAAC,WAAW,CAAC,IAAgB;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;QAClD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts b/packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts new file mode 100644 index 0000000..5672c4b --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts @@ -0,0 +1,39 @@ +import { SenderChainKey } from './sender-chain-key.js'; +import { SenderMessageKey } from './sender-message-key.js'; +interface SenderChainKeyStructure { + iteration: number; + seed: Uint8Array; +} +interface SenderSigningKeyStructure { + public: Uint8Array; + private?: Uint8Array; +} +interface SenderMessageKeyStructure { + iteration: number; + seed: Uint8Array; +} +interface SenderKeyStateStructure { + senderKeyId: number; + senderChainKey: SenderChainKeyStructure; + senderSigningKey: SenderSigningKeyStructure; + senderMessageKeys: SenderMessageKeyStructure[]; +} +export declare class SenderKeyState { + private readonly MAX_MESSAGE_KEYS; + private readonly senderKeyStateStructure; + constructor(id?: number | null, iteration?: number | null, chainKey?: Uint8Array | null | string, signatureKeyPair?: { + public: Uint8Array | string; + private: Uint8Array | string; + } | null, signatureKeyPublic?: Uint8Array | string | null, signatureKeyPrivate?: Uint8Array | string | null, senderKeyStateStructure?: SenderKeyStateStructure | null); + getKeyId(): number; + getSenderChainKey(): SenderChainKey; + setSenderChainKey(chainKey: SenderChainKey): void; + getSigningKeyPublic(): Buffer; + getSigningKeyPrivate(): Buffer | undefined; + hasSenderMessageKey(iteration: number): boolean; + addSenderMessageKey(senderMessageKey: SenderMessageKey): void; + removeSenderMessageKey(iteration: number): SenderMessageKey | null; + getStructure(): SenderKeyStateStructure; +} +export {}; +//# sourceMappingURL=sender-key-state.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts.map b/packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts.map new file mode 100644 index 0000000..f3b290e --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-state.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-state.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,UAAU,uBAAuB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;CAChB;AAED,UAAU,yBAAyB;IAClC,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,CAAC,EAAE,UAAU,CAAA;CACpB;AAED,UAAU,yBAAyB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;CAChB;AAED,UAAU,uBAAuB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,uBAAuB,CAAA;IACvC,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,iBAAiB,EAAE,yBAAyB,EAAE,CAAA;CAC9C;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyB;gBAGhE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,EAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,EACrC,gBAAgB,CAAC,EAAE;QAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,EACvF,kBAAkB,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,EAC/C,mBAAmB,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,EAChD,uBAAuB,CAAC,EAAE,uBAAuB,GAAG,IAAI;IA8BlD,QAAQ,IAAI,MAAM;IAIlB,iBAAiB,IAAI,cAAc;IAOnC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAOjD,mBAAmB,IAAI,MAAM;IAa7B,oBAAoB,IAAI,MAAM,GAAG,SAAS;IAM1C,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/C,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAW7D,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAYlE,YAAY,IAAI,uBAAuB;CAG9C"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-state.js b/packages/transport/vendor/lib/Signal/Group/sender-key-state.js new file mode 100644 index 0000000..1c23cca --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-state.js @@ -0,0 +1,84 @@ +import { SenderChainKey } from './sender-chain-key.js'; +import { SenderMessageKey } from './sender-message-key.js'; +export class SenderKeyState { + constructor(id, iteration, chainKey, signatureKeyPair, signatureKeyPublic, signatureKeyPrivate, senderKeyStateStructure) { + this.MAX_MESSAGE_KEYS = 2000; + if (senderKeyStateStructure) { + this.senderKeyStateStructure = { + ...senderKeyStateStructure, + senderMessageKeys: Array.isArray(senderKeyStateStructure.senderMessageKeys) + ? senderKeyStateStructure.senderMessageKeys + : [] + }; + } + else { + if (signatureKeyPair) { + signatureKeyPublic = signatureKeyPair.public; + signatureKeyPrivate = signatureKeyPair.private; + } + this.senderKeyStateStructure = { + senderKeyId: id || 0, + senderChainKey: { + iteration: iteration || 0, + seed: Buffer.from(chainKey || []) + }, + senderSigningKey: { + public: Buffer.from(signatureKeyPublic || []), + private: Buffer.from(signatureKeyPrivate || []) + }, + senderMessageKeys: [] + }; + } + } + getKeyId() { + return this.senderKeyStateStructure.senderKeyId; + } + getSenderChainKey() { + return new SenderChainKey(this.senderKeyStateStructure.senderChainKey.iteration, this.senderKeyStateStructure.senderChainKey.seed); + } + setSenderChainKey(chainKey) { + this.senderKeyStateStructure.senderChainKey = { + iteration: chainKey.getIteration(), + seed: chainKey.getSeed() + }; + } + getSigningKeyPublic() { + const publicKey = Buffer.from(this.senderKeyStateStructure.senderSigningKey.public); + if (publicKey.length === 32) { + const fixed = Buffer.alloc(33); + fixed[0] = 0x05; + publicKey.copy(fixed, 1); + return fixed; + } + return publicKey; + } + getSigningKeyPrivate() { + const privateKey = this.senderKeyStateStructure.senderSigningKey.private; + return Buffer.from(privateKey || []); + } + hasSenderMessageKey(iteration) { + return this.senderKeyStateStructure.senderMessageKeys.some(key => key.iteration === iteration); + } + addSenderMessageKey(senderMessageKey) { + this.senderKeyStateStructure.senderMessageKeys.push({ + iteration: senderMessageKey.getIteration(), + seed: senderMessageKey.getSeed() + }); + if (this.senderKeyStateStructure.senderMessageKeys.length > this.MAX_MESSAGE_KEYS) { + this.senderKeyStateStructure.senderMessageKeys.shift(); + } + } + removeSenderMessageKey(iteration) { + const index = this.senderKeyStateStructure.senderMessageKeys.findIndex(key => key.iteration === iteration); + if (index !== -1) { + const messageKey = this.senderKeyStateStructure.senderMessageKeys[index]; + this.senderKeyStateStructure.senderMessageKeys.splice(index, 1); + return new SenderMessageKey(messageKey.iteration, messageKey.seed); + } + return null; + } + getStructure() { + return this.senderKeyStateStructure; + } +} +//# sourceMappingURL=sender-key-state.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-key-state.js.map b/packages/transport/vendor/lib/Signal/Group/sender-key-state.js.map new file mode 100644 index 0000000..4e047bd --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-key-state.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-key-state.js","sourceRoot":"","sources":["../../../src/Signal/Group/sender-key-state.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts b/packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts new file mode 100644 index 0000000..189c34a --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts @@ -0,0 +1,12 @@ +export declare class SenderMessageKey { + private readonly iteration; + private readonly iv; + private readonly cipherKey; + private readonly seed; + constructor(iteration: number, seed: Uint8Array); + getIteration(): number; + getIv(): Uint8Array; + getCipherKey(): Uint8Array; + getSeed(): Uint8Array; +} +//# sourceMappingURL=sender-message-key.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts.map b/packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts.map new file mode 100644 index 0000000..2bbc0b6 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-message-key.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-message-key.d.ts","sourceRoot":"","sources":["../../../src/Signal/Group/sender-message-key.ts"],"names":[],"mappings":"AAEA,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAErB,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAYxC,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,UAAU;IAInB,YAAY,IAAI,UAAU;IAI1B,OAAO,IAAI,UAAU;CAG5B"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-message-key.js b/packages/transport/vendor/lib/Signal/Group/sender-message-key.js new file mode 100644 index 0000000..d8e5ee9 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-message-key.js @@ -0,0 +1,26 @@ +import { deriveSecrets } from 'libsignal/src/crypto.js'; +export class SenderMessageKey { + constructor(iteration, seed) { + const derivative = deriveSecrets(seed, Buffer.alloc(32), Buffer.from('WhisperGroup')); + const keys = new Uint8Array(32); + keys.set(new Uint8Array(derivative[0].slice(16))); + keys.set(new Uint8Array(derivative[1].slice(0, 16)), 16); + this.iv = Buffer.from(derivative[0].slice(0, 16)); + this.cipherKey = Buffer.from(keys.buffer); + this.iteration = iteration; + this.seed = seed; + } + getIteration() { + return this.iteration; + } + getIv() { + return this.iv; + } + getCipherKey() { + return this.cipherKey; + } + getSeed() { + return this.seed; + } +} +//# sourceMappingURL=sender-message-key.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/Group/sender-message-key.js.map b/packages/transport/vendor/lib/Signal/Group/sender-message-key.js.map new file mode 100644 index 0000000..69274a9 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/Group/sender-message-key.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sender-message-key.js","sourceRoot":"","sources":["../../../src/Signal/Group/sender-message-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,OAAO,gBAAgB;IAM5B,YAAY,SAAiB,EAAE,IAAgB;QAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAA;QACrF,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjD,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAExD,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACjD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,CAAA;IACf,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,IAAI,CAAA;IACjB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/libsignal.d.ts b/packages/transport/vendor/lib/Signal/libsignal.d.ts new file mode 100644 index 0000000..721a2f8 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/libsignal.d.ts @@ -0,0 +1,5 @@ +import type { LIDMapping, SignalAuthState } from '../Types/index.js'; +import type { SignalRepositoryWithLIDStore } from '../Types/Signal.js'; +import type { ILogger } from '../Utils/logger.js'; +export declare function makeLibSignalRepository(auth: SignalAuthState, logger: ILogger, pnToLIDFunc?: (jids: string[]) => Promise): SignalRepositoryWithLIDStore; +//# sourceMappingURL=libsignal.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/libsignal.d.ts.map b/packages/transport/vendor/lib/Signal/libsignal.d.ts.map new file mode 100644 index 0000000..f4480dc --- /dev/null +++ b/packages/transport/vendor/lib/Signal/libsignal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"libsignal.d.ts","sourceRoot":"","sources":["../../src/Signal/libsignal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAiC,MAAM,UAAU,CAAA;AAC1F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAEnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAyC9C,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,GACjE,4BAA4B,CAkW9B"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/libsignal.js b/packages/transport/vendor/lib/Signal/libsignal.js new file mode 100644 index 0000000..beadd06 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/libsignal.js @@ -0,0 +1,431 @@ +// @ts-ignore +import * as libsignal from 'libsignal'; +// @ts-ignore +import { PreKeyWhisperMessage } from 'libsignal/src/protobufs.js'; +import { LRUCache } from 'lru-cache'; +import { generateSignalPubKey } from '../Utils/index.js'; +import { isHostedLidUser, isHostedPnUser, isLidUser, isPnUser, jidDecode, transferDevice, WAJIDDomains } from '../WABinary/index.js'; +import { SenderKeyName } from './Group/sender-key-name.js'; +import { SenderKeyRecord } from './Group/sender-key-record.js'; +import { GroupCipher, GroupSessionBuilder, SenderKeyDistributionMessage } from './Group/index.js'; +import { LIDMappingStore } from './lid-mapping.js'; +/** Extract identity key from PreKeyWhisperMessage for identity change detection */ +function extractIdentityFromPkmsg(ciphertext) { + try { + if (!ciphertext || ciphertext.length < 2) { + return undefined; + } + // Version byte check (version 3) + const version = ciphertext[0]; + if ((version & 0xf) !== 3) { + return undefined; + } + // Parse protobuf (skip version byte) + const preKeyProto = PreKeyWhisperMessage.decode(ciphertext.slice(1)); + if (preKeyProto.identityKey?.length === 33) { + return new Uint8Array(preKeyProto.identityKey); + } + return undefined; + } + catch { + return undefined; + } +} +export function makeLibSignalRepository(auth, logger, pnToLIDFunc) { + const lidMapping = new LIDMappingStore(auth.keys, logger, pnToLIDFunc); + const storage = signalStorage(auth, lidMapping); + const parsedKeys = auth.keys; + const migratedSessionCache = new LRUCache({ + ttl: 3 * 24 * 60 * 60 * 1000, // 7 days + ttlAutopurge: true, + updateAgeOnGet: true + }); + const ensureSenderKeyAndCreateSkdm = async (group, meId) => { + const senderName = jidToSignalSenderKeyName(group, meId); + const senderNameStr = senderName.toString(); + const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr]); + if (!senderKey) { + await storage.storeSenderKey(senderName, new SenderKeyRecord()); + } + const skdm = await new GroupSessionBuilder(storage).create(senderName); + return { senderName, skdm }; + }; + const repository = { + decryptGroupMessage({ group, authorJid, msg }) { + const senderName = jidToSignalSenderKeyName(group, authorJid); + const cipher = new GroupCipher(storage, senderName); + // Use transaction to ensure atomicity + return parsedKeys.transaction(async () => { + return cipher.decrypt(msg); + }, group); + }, + async processSenderKeyDistributionMessage({ item, authorJid }) { + const builder = new GroupSessionBuilder(storage); + if (!item.groupId) { + throw new Error('Group ID is required for sender key distribution message'); + } + const senderName = jidToSignalSenderKeyName(item.groupId, authorJid); + const senderMsg = new SenderKeyDistributionMessage(null, null, null, null, item.axolotlSenderKeyDistributionMessage); + const senderNameStr = senderName.toString(); + const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr]); + if (!senderKey) { + await storage.storeSenderKey(senderName, new SenderKeyRecord()); + } + return parsedKeys.transaction(async () => { + const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr]); + if (!senderKey) { + await storage.storeSenderKey(senderName, new SenderKeyRecord()); + } + await builder.process(senderName, senderMsg); + }, item.groupId); + }, + async decryptMessage({ jid, type, ciphertext }) { + const addr = jidToSignalProtocolAddress(jid); + const session = new libsignal.SessionCipher(storage, addr); + // Extract and save sender's identity key before decryption for identity change detection + if (type === 'pkmsg') { + const identityKey = extractIdentityFromPkmsg(ciphertext); + if (identityKey) { + const addrStr = addr.toString(); + const identityChanged = await storage.saveIdentity(addrStr, identityKey); + if (identityChanged) { + logger.info({ jid, addr: addrStr }, 'identity key changed or new contact, session will be re-established'); + } + } + } + async function doDecrypt() { + let result; + switch (type) { + case 'pkmsg': + result = await session.decryptPreKeyWhisperMessage(ciphertext); + break; + case 'msg': + result = await session.decryptWhisperMessage(ciphertext); + break; + } + return result; + } + // If it's not a sync message, we need to ensure atomicity + // For regular messages, we use a transaction to ensure atomicity + return parsedKeys.transaction(async () => { + return await doDecrypt(); + }, jid); + }, + async encryptMessage({ jid, data }) { + const addr = jidToSignalProtocolAddress(jid); + const cipher = new libsignal.SessionCipher(storage, addr); + // Use transaction to ensure atomicity + return parsedKeys.transaction(async () => { + const { type: sigType, body } = await cipher.encrypt(data); + const type = sigType === 3 ? 'pkmsg' : 'msg'; + return { type, ciphertext: Buffer.from(body, 'binary') }; + }, jid); + }, + async encryptGroupMessage({ group, meId, data }) { + return parsedKeys.transaction(async () => { + const { senderName, skdm } = await ensureSenderKeyAndCreateSkdm(group, meId); + const ciphertext = await new GroupCipher(storage, senderName).encrypt(data); + return { ciphertext, senderKeyDistributionMessage: skdm.serialize() }; + }, group); + }, + async getSenderKeyDistributionMessage({ group, meId }) { + return parsedKeys.transaction(async () => { + const { skdm } = await ensureSenderKeyAndCreateSkdm(group, meId); + return skdm.serialize(); + }, group); + }, + async hasSenderKey({ group, meId }) { + const senderName = jidToSignalSenderKeyName(group, meId).toString(); + const { [senderName]: key } = await auth.keys.get('sender-key', [senderName]); + return !!key; + }, + async getSessionInfo(jid) { + const addr = jidToSignalProtocolAddress(jid).toString(); + const session = (await storage.loadSession(addr)); + if (!session) { + return null; + } + const open = session.getOpenSession?.(); + const baseKey = open?.indexInfo?.baseKey; + const registrationId = open?.registrationId; + if (!baseKey || typeof registrationId !== 'number') { + return null; + } + return { baseKey: new Uint8Array(baseKey), registrationId }; + }, + async injectE2ESession({ jid, session }) { + logger.trace({ jid }, 'injecting E2EE session'); + const cipher = new libsignal.SessionBuilder(storage, jidToSignalProtocolAddress(jid)); + return parsedKeys.transaction(async () => { + // libsignal runtime accepts an absent prekey (initOutgoing checks `device.preKey && ...`) + // but the bundled .d.ts marks it required. + await cipher.initOutgoing(session); + }, jid); + }, + jidToSignalProtocolAddress(jid) { + return jidToSignalProtocolAddress(jid).toString(); + }, + // Optimized direct access to LID mapping store + lidMapping, + async validateSession(jid) { + try { + const addr = jidToSignalProtocolAddress(jid); + const session = await storage.loadSession(addr.toString()); + if (!session) { + return { exists: false, reason: 'no session' }; + } + if (!session.haveOpenSession()) { + return { exists: false, reason: 'no open session' }; + } + return { exists: true }; + } + catch (error) { + return { exists: false, reason: 'validation error' }; + } + }, + async deleteSession(jids) { + if (!jids.length) + return; + // Convert JIDs to signal addresses and prepare for bulk deletion + const sessionUpdates = {}; + jids.forEach(jid => { + const addr = jidToSignalProtocolAddress(jid); + sessionUpdates[addr.toString()] = null; + }); + // Single transaction for all deletions + return parsedKeys.transaction(async () => { + await auth.keys.set({ session: sessionUpdates }); + }, `delete-${jids.length}-sessions`); + }, + close() { + migratedSessionCache.clear(); + lidMapping.close(); + }, + async migrateSession(fromJid, toJid) { + // TODO: use usync to handle this entire mess + if (!fromJid || (!isLidUser(toJid) && !isHostedLidUser(toJid))) + return { migrated: 0, skipped: 0, total: 0 }; + // Only support PN to LID migration + if (!isPnUser(fromJid) && !isHostedPnUser(fromJid)) { + return { migrated: 0, skipped: 0, total: 1 }; + } + const { user } = jidDecode(fromJid); + logger.debug({ fromJid }, 'bulk device migration - loading all user devices'); + // Get user's device list from storage + const { [user]: userDevices } = await parsedKeys.get('device-list', [user]); + if (!userDevices) { + return { migrated: 0, skipped: 0, total: 0 }; + } + const { device: fromDevice } = jidDecode(fromJid); + const fromDeviceStr = fromDevice?.toString() || '0'; + if (!userDevices.includes(fromDeviceStr)) { + userDevices.push(fromDeviceStr); + } + // Filter out cached devices before database fetch + const uncachedDevices = userDevices.filter(device => { + const deviceKey = `${user}.${device}`; + return !migratedSessionCache.has(deviceKey); + }); + // Bulk check session existence only for uncached devices + const deviceSessionKeys = uncachedDevices.map(device => `${user}.${device}`); + const existingSessions = await parsedKeys.get('session', deviceSessionKeys); + // Step 3: Convert existing sessions to JIDs (only migrate sessions that exist) + const deviceJids = []; + for (const [sessionKey, sessionData] of Object.entries(existingSessions)) { + if (sessionData) { + // Session exists in storage + const deviceStr = sessionKey.split('.')[1]; + if (!deviceStr) + continue; + const deviceNum = parseInt(deviceStr); + let jid = deviceNum === 0 ? `${user}@s.whatsapp.net` : `${user}:${deviceNum}@s.whatsapp.net`; + if (deviceNum === 99) { + jid = `${user}:99@hosted`; + } + deviceJids.push(jid); + } + } + logger.debug({ + fromJid, + totalDevices: userDevices.length, + devicesWithSessions: deviceJids.length, + devices: deviceJids + }, 'bulk device migration complete - all user devices processed'); + // Single transaction for all migrations + return parsedKeys.transaction(async () => { + const migrationOps = deviceJids.map(jid => { + const lidWithDevice = transferDevice(jid, toJid); + const fromDecoded = jidDecode(jid); + const toDecoded = jidDecode(lidWithDevice); + return { + fromJid: jid, + toJid: lidWithDevice, + pnUser: fromDecoded.user, + lidUser: toDecoded.user, + deviceId: fromDecoded.device || 0, + fromAddr: jidToSignalProtocolAddress(jid), + toAddr: jidToSignalProtocolAddress(lidWithDevice) + }; + }); + const totalOps = migrationOps.length; + let migratedCount = 0; + // Bulk fetch PN sessions - already exist (verified during device discovery) + const pnAddrStrings = Array.from(new Set(migrationOps.map(op => op.fromAddr.toString()))); + const pnSessions = await parsedKeys.get('session', pnAddrStrings); + // Prepare bulk session updates (PN → LID migration + deletion) + const sessionUpdates = {}; + for (const op of migrationOps) { + const pnAddrStr = op.fromAddr.toString(); + const lidAddrStr = op.toAddr.toString(); + const pnSession = pnSessions[pnAddrStr]; + if (pnSession) { + // Session exists (guaranteed from device discovery) + const fromSession = libsignal.SessionRecord.deserialize(pnSession); + if (fromSession.haveOpenSession()) { + // Queue for bulk update: copy to LID, delete from PN + sessionUpdates[lidAddrStr] = fromSession.serialize(); + sessionUpdates[pnAddrStr] = null; + migratedCount++; + } + } + } + // Single bulk session update for all migrations + if (Object.keys(sessionUpdates).length > 0) { + await parsedKeys.set({ session: sessionUpdates }); + logger.debug({ migratedSessions: migratedCount }, 'bulk session migration complete'); + // Cache device-level migrations + for (const op of migrationOps) { + if (sessionUpdates[op.toAddr.toString()]) { + const deviceKey = `${op.pnUser}.${op.deviceId}`; + migratedSessionCache.set(deviceKey, true); + } + } + } + const skippedCount = totalOps - migratedCount; + return { migrated: migratedCount, skipped: skippedCount, total: totalOps }; + }, `migrate-${deviceJids.length}-sessions-${jidDecode(toJid)?.user}`); + } + }; + return repository; +} +const jidToSignalProtocolAddress = (jid) => { + const decoded = jidDecode(jid); + const { user, device, server, domainType } = decoded; + if (!user) { + throw new Error(`JID decoded but user is empty: "${jid}" -> user: "${user}", server: "${server}", device: ${device}`); + } + const signalUser = domainType !== WAJIDDomains.WHATSAPP ? `${user}_${domainType}` : user; + const finalDevice = device || 0; + if (device === 99 && decoded.server !== 'hosted' && decoded.server !== 'hosted.lid') { + throw new Error('Unexpected non-hosted device JID with device 99. This ID seems invalid. ID:' + jid); + } + return new libsignal.ProtocolAddress(signalUser, finalDevice); +}; +const jidToSignalSenderKeyName = (group, user) => { + return new SenderKeyName(group, jidToSignalProtocolAddress(user)); +}; +function signalStorage({ creds, keys }, lidMapping) { + // Shared function to resolve PN signal address to LID if mapping exists + const resolveLIDSignalAddress = async (id) => { + if (id.includes('.')) { + const [deviceId, device] = id.split('.'); + const [user, domainType_] = deviceId.split('_'); + const domainType = parseInt(domainType_ || '0'); + if (domainType === WAJIDDomains.LID || domainType === WAJIDDomains.HOSTED_LID) + return id; + const pnJid = `${user}${device !== '0' ? `:${device}` : ''}@${domainType === WAJIDDomains.HOSTED ? 'hosted' : 's.whatsapp.net'}`; + const lidForPN = await lidMapping.getLIDForPN(pnJid); + if (lidForPN) { + const lidAddr = jidToSignalProtocolAddress(lidForPN); + return lidAddr.toString(); + } + } + return id; + }; + return { + loadSession: async (id) => { + try { + const wireJid = await resolveLIDSignalAddress(id); + const { [wireJid]: sess } = await keys.get('session', [wireJid]); + if (sess) { + return libsignal.SessionRecord.deserialize(sess); + } + } + catch (e) { + return null; + } + return null; + }, + storeSession: async (id, session) => { + const wireJid = await resolveLIDSignalAddress(id); + await keys.set({ session: { [wireJid]: session.serialize() } }); + }, + isTrustedIdentity: () => { + return true; // TOFU - Trust on First Use (same as WhatsApp Web) + }, + loadIdentityKey: async (id) => { + const wireJid = await resolveLIDSignalAddress(id); + const { [wireJid]: key } = await keys.get('identity-key', [wireJid]); + return key || undefined; + }, + saveIdentity: async (id, identityKey) => { + const wireJid = await resolveLIDSignalAddress(id); + const { [wireJid]: existingKey } = await keys.get('identity-key', [wireJid]); + const keysMatch = existingKey?.length === identityKey.length && existingKey.every((byte, i) => byte === identityKey[i]); + if (existingKey && !keysMatch) { + // Identity changed - clear session and update key + await keys.set({ + session: { [wireJid]: null }, + 'identity-key': { [wireJid]: identityKey } + }); + return true; + } + if (!existingKey) { + // New contact - Trust on First Use (TOFU) + await keys.set({ 'identity-key': { [wireJid]: identityKey } }); + return true; + } + return false; + }, + loadPreKey: async (id) => { + const keyId = id.toString(); + const { [keyId]: key } = await keys.get('pre-key', [keyId]); + if (key) { + return { + privKey: Buffer.from(key.private), + pubKey: Buffer.from(key.public) + }; + } + }, + removePreKey: (id) => keys.set({ 'pre-key': { [id]: null } }), + loadSignedPreKey: () => { + const key = creds.signedPreKey; + return { + privKey: Buffer.from(key.keyPair.private), + pubKey: Buffer.from(key.keyPair.public) + }; + }, + loadSenderKey: async (senderKeyName) => { + const keyId = senderKeyName.toString(); + const { [keyId]: key } = await keys.get('sender-key', [keyId]); + if (key) { + return SenderKeyRecord.deserialize(key); + } + return new SenderKeyRecord(); + }, + storeSenderKey: async (senderKeyName, key) => { + const keyId = senderKeyName.toString(); + const serialized = JSON.stringify(key.serialize()); + await keys.set({ 'sender-key': { [keyId]: Buffer.from(serialized, 'utf-8') } }); + }, + getOurRegistrationId: () => creds.registrationId, + getOurIdentity: () => { + const { signedIdentityKey } = creds; + return { + privKey: Buffer.from(signedIdentityKey.private), + pubKey: Buffer.from(generateSignalPubKey(signedIdentityKey.public)) + }; + } + }; +} +//# sourceMappingURL=libsignal.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/libsignal.js.map b/packages/transport/vendor/lib/Signal/libsignal.js.map new file mode 100644 index 0000000..232ce96 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/libsignal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"libsignal.js","sourceRoot":"","sources":["../../src/Signal/libsignal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/lid-mapping.d.ts b/packages/transport/vendor/lib/Signal/lid-mapping.d.ts new file mode 100644 index 0000000..d038c83 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/lid-mapping.d.ts @@ -0,0 +1,23 @@ +import type { LIDMapping, SignalKeyStoreWithTransaction } from '../Types/index.js'; +import type { ILogger } from '../Utils/logger.js'; +export declare class LIDMappingStore { + private readonly mappingCache; + private readonly keys; + private readonly logger; + private pnToLIDFunc?; + private readonly inflightLIDLookups; + private readonly inflightPNLookups; + constructor(keys: SignalKeyStoreWithTransaction, logger: ILogger, pnToLIDFunc?: (jids: string[]) => Promise); + storeLIDPNMappings(pairs: LIDMapping[]): Promise; + getLIDForPN(pn: string): Promise; + getLIDsForPNs(pns: string[]): Promise; + private _getLIDsForPNsImpl; + getPNForLID(lid: string): Promise; + getPNsForLIDs(lids: string[]): Promise; + private _getPNsForLIDsImpl; + /** + * Close the cache and release resources + */ + close(): void; +} +//# sourceMappingURL=lid-mapping.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/lid-mapping.d.ts.map b/packages/transport/vendor/lib/Signal/lid-mapping.d.ts.map new file mode 100644 index 0000000..cf91b9c --- /dev/null +++ b/packages/transport/vendor/lib/Signal/lid-mapping.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"lid-mapping.d.ts","sourceRoot":"","sources":["../../src/Signal/lid-mapping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAG9C,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAI3B;IACF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,WAAW,CAAC,CAAuD;IAE3E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkD;IACrF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkD;gBAGnF,IAAI,EAAE,6BAA6B,EACnC,MAAM,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC;IAO9D,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8EtD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI/C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;YAsBlD,kBAAkB;IA6G1B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIhD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;YAsBnD,kBAAkB;IA4DhC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGb"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/lid-mapping.js b/packages/transport/vendor/lib/Signal/lid-mapping.js new file mode 100644 index 0000000..c99bdf5 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/lid-mapping.js @@ -0,0 +1,277 @@ +import { LRUCache } from 'lru-cache'; +import { isHostedPnUser, isLidUser, isPnUser, jidDecode, jidNormalizedUser, WAJIDDomains } from '../WABinary/index.js'; +export class LIDMappingStore { + constructor(keys, logger, pnToLIDFunc) { + this.mappingCache = new LRUCache({ + ttl: 3 * 24 * 60 * 60 * 1000, // 7 days + ttlAutopurge: true, + updateAgeOnGet: true + }); + this.inflightLIDLookups = new Map(); + this.inflightPNLookups = new Map(); + this.keys = keys; + this.pnToLIDFunc = pnToLIDFunc; + this.logger = logger; + } + async storeLIDPNMappings(pairs) { + if (pairs.length === 0) + return; + const validatedPairs = []; + for (const { lid, pn } of pairs) { + if (!((isLidUser(lid) && isPnUser(pn)) || (isPnUser(lid) && isLidUser(pn)))) { + this.logger.warn(`Invalid LID-PN mapping: ${lid}, ${pn}`); + continue; + } + const lidDecoded = jidDecode(lid); + const pnDecoded = jidDecode(pn); + if (!lidDecoded || !pnDecoded) + continue; + validatedPairs.push({ pnUser: pnDecoded.user, lidUser: lidDecoded.user }); + } + if (validatedPairs.length === 0) + return; + const cacheMissSet = new Set(); + const existingMappings = new Map(); + for (const { pnUser } of validatedPairs) { + const cached = this.mappingCache.get(`pn:${pnUser}`); + if (cached) { + existingMappings.set(pnUser, cached); + } + else { + cacheMissSet.add(pnUser); + } + } + if (cacheMissSet.size > 0) { + const cacheMisses = [...cacheMissSet]; + this.logger.trace(`Batch fetching ${cacheMisses.length} LID mappings from database`); + const stored = await this.keys.get('lid-mapping', cacheMisses); + for (const pnUser of cacheMisses) { + const existingLidUser = stored[pnUser]; + if (existingLidUser) { + existingMappings.set(pnUser, existingLidUser); + this.mappingCache.set(`pn:${pnUser}`, existingLidUser); + this.mappingCache.set(`lid:${existingLidUser}`, pnUser); + } + } + } + const pairMap = {}; + for (const { pnUser, lidUser } of validatedPairs) { + const existingLidUser = existingMappings.get(pnUser); + if (existingLidUser === lidUser) { + this.logger.debug({ pnUser, lidUser }, 'LID mapping already exists, skipping'); + continue; + } + pairMap[pnUser] = lidUser; + } + if (Object.keys(pairMap).length === 0) + return; + this.logger.trace({ pairMap }, `Storing ${Object.keys(pairMap).length} pn mappings`); + const batchData = {}; + for (const [pnUser, lidUser] of Object.entries(pairMap)) { + batchData[pnUser] = lidUser; + batchData[`${lidUser}_reverse`] = pnUser; + } + await this.keys.transaction(async () => { + await this.keys.set({ 'lid-mapping': batchData }); + }, 'lid-mapping'); + // Update cache after successful DB write + for (const [pnUser, lidUser] of Object.entries(pairMap)) { + this.mappingCache.set(`pn:${pnUser}`, lidUser); + this.mappingCache.set(`lid:${lidUser}`, pnUser); + } + } + async getLIDForPN(pn) { + return (await this.getLIDsForPNs([pn]))?.[0]?.lid || null; + } + async getLIDsForPNs(pns) { + if (pns.length === 0) + return null; + const sortedPns = [...new Set(pns)].sort(); + const cacheKey = sortedPns.join(','); + const inflight = this.inflightLIDLookups.get(cacheKey); + if (inflight) { + this.logger.trace(`Coalescing getLIDsForPNs request for ${sortedPns.length} PNs`); + return inflight; + } + const promise = this._getLIDsForPNsImpl(pns); + this.inflightLIDLookups.set(cacheKey, promise); + try { + return await promise; + } + finally { + this.inflightLIDLookups.delete(cacheKey); + } + } + async _getLIDsForPNsImpl(pns) { + const usyncFetch = {}; + const successfulPairs = {}; + const pending = []; + const addResolvedPair = (pn, decoded, lidUser) => { + const normalizedLidUser = lidUser.toString(); + if (!normalizedLidUser) { + this.logger.warn(`Invalid or empty LID user for PN ${pn}: lidUser = "${lidUser}"`); + return false; + } + // Push the PN device ID to the LID to maintain device separation + const pnDevice = decoded.device !== undefined ? decoded.device : 0; + const deviceSpecificLid = `${normalizedLidUser}${!!pnDevice ? `:${pnDevice}` : ``}@${decoded.server === 'hosted' ? 'hosted.lid' : 'lid'}`; + this.logger.trace(`getLIDForPN: ${pn} → ${deviceSpecificLid} (user mapping with device ${pnDevice})`); + successfulPairs[pn] = { lid: deviceSpecificLid, pn }; + return true; + }; + for (const pn of pns) { + if (!isPnUser(pn) && !isHostedPnUser(pn)) + continue; + const decoded = jidDecode(pn); + if (!decoded) + continue; + const pnUser = decoded.user; + const cached = this.mappingCache.get(`pn:${pnUser}`); + if (cached && typeof cached === 'string') { + if (!addResolvedPair(pn, decoded, cached)) { + this.logger.warn(`Invalid entry for ${pn} (pair not resolved)`); + continue; + } + continue; + } + pending.push({ pn, pnUser, decoded }); + } + if (pending.length) { + const pnUsers = [...new Set(pending.map(item => item.pnUser))]; + const stored = await this.keys.get('lid-mapping', pnUsers); + for (const pnUser of pnUsers) { + const lidUser = stored[pnUser]; + if (lidUser && typeof lidUser === 'string') { + this.mappingCache.set(`pn:${pnUser}`, lidUser); + this.mappingCache.set(`lid:${lidUser}`, pnUser); + } + } + for (const { pn, pnUser, decoded } of pending) { + const cached = this.mappingCache.get(`pn:${pnUser}`); + if (cached && typeof cached === 'string') { + if (!addResolvedPair(pn, decoded, cached)) { + this.logger.warn(`Invalid entry for ${pn} (pair not resolved)`); + continue; + } + } + else { + this.logger.trace(`No LID mapping found for PN user ${pnUser}; batch getting from USync`); + const device = decoded.device || 0; + let normalizedPn = jidNormalizedUser(pn); + if (isHostedPnUser(normalizedPn)) { + normalizedPn = `${pnUser}@s.whatsapp.net`; + } + if (!usyncFetch[normalizedPn]) { + usyncFetch[normalizedPn] = [device]; + } + else { + usyncFetch[normalizedPn]?.push(device); + } + } + } + } + if (Object.keys(usyncFetch).length > 0) { + const result = await this.pnToLIDFunc?.(Object.keys(usyncFetch)); // this function already adds LIDs to mapping + if (result && result.length > 0) { + await this.storeLIDPNMappings(result); + for (const pair of result) { + const pnDecoded = jidDecode(pair.pn); + const pnUser = pnDecoded?.user; + if (!pnUser) + continue; + const lidUser = jidDecode(pair.lid)?.user; + if (!lidUser) + continue; + for (const device of usyncFetch[pair.pn]) { + const deviceSpecificLid = `${lidUser}${!!device ? `:${device}` : ``}@${device === 99 ? 'hosted.lid' : 'lid'}`; + this.logger.trace(`getLIDForPN: USYNC success for ${pair.pn} → ${deviceSpecificLid} (user mapping with device ${device})`); + const deviceSpecificPn = `${pnUser}${!!device ? `:${device}` : ``}@${device === 99 ? 'hosted' : 's.whatsapp.net'}`; + successfulPairs[deviceSpecificPn] = { lid: deviceSpecificLid, pn: deviceSpecificPn }; + } + } + } + else { + this.logger.warn('USync fetch yielded no results for pending PNs'); + } + } + return Object.values(successfulPairs).length > 0 ? Object.values(successfulPairs) : null; + } + async getPNForLID(lid) { + return (await this.getPNsForLIDs([lid]))?.[0]?.pn || null; + } + async getPNsForLIDs(lids) { + if (lids.length === 0) + return null; + const sortedLids = [...new Set(lids)].sort(); + const cacheKey = sortedLids.join(','); + const inflight = this.inflightPNLookups.get(cacheKey); + if (inflight) { + this.logger.trace(`Coalescing getPNsForLIDs request for ${sortedLids.length} LIDs`); + return inflight; + } + const promise = this._getPNsForLIDsImpl(lids); + this.inflightPNLookups.set(cacheKey, promise); + try { + return await promise; + } + finally { + this.inflightPNLookups.delete(cacheKey); + } + } + async _getPNsForLIDsImpl(lids) { + const successfulPairs = {}; + const pending = []; + const addResolvedPair = (lid, decoded, pnUser) => { + if (!pnUser || typeof pnUser !== 'string') { + return false; + } + const lidDevice = decoded.device !== undefined ? decoded.device : 0; + const pnJid = `${pnUser}:${lidDevice}@${decoded.domainType === WAJIDDomains.HOSTED_LID ? 'hosted' : 's.whatsapp.net'}`; + this.logger.trace(`Found reverse mapping: ${lid} → ${pnJid}`); + successfulPairs[lid] = { lid, pn: pnJid }; + return true; + }; + for (const lid of lids) { + if (!isLidUser(lid)) + continue; + const decoded = jidDecode(lid); + if (!decoded) + continue; + const lidUser = decoded.user; + const cached = this.mappingCache.get(`lid:${lidUser}`); + if (cached && typeof cached === 'string') { + addResolvedPair(lid, decoded, cached); + continue; + } + pending.push({ lid, lidUser, decoded }); + } + if (pending.length) { + const reverseKeys = [...new Set(pending.map(item => `${item.lidUser}_reverse`))]; + const stored = await this.keys.get('lid-mapping', reverseKeys); + for (const { lid, lidUser, decoded } of pending) { + let pnUser = this.mappingCache.get(`lid:${lidUser}`); + if (!pnUser || typeof pnUser !== 'string') { + pnUser = stored[`${lidUser}_reverse`]; + if (pnUser && typeof pnUser === 'string') { + this.mappingCache.set(`lid:${lidUser}`, pnUser); + this.mappingCache.set(`pn:${pnUser}`, lidUser); + } + } + if (pnUser && typeof pnUser === 'string') { + addResolvedPair(lid, decoded, pnUser); + } + else { + this.logger.trace(`No reverse mapping found for LID user: ${lidUser}`); + } + } + } + return Object.values(successfulPairs).length ? Object.values(successfulPairs) : null; + } + /** + * Close the cache and release resources + */ + close() { + this.mappingCache.clear(); + } +} +//# sourceMappingURL=lid-mapping.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Signal/lid-mapping.js.map b/packages/transport/vendor/lib/Signal/lid-mapping.js.map new file mode 100644 index 0000000..d354f81 --- /dev/null +++ b/packages/transport/vendor/lib/Signal/lid-mapping.js.map @@ -0,0 +1 @@ +{"version":3,"file":"lid-mapping.js","sourceRoot":"","sources":["../../src/Signal/lid-mapping.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/index.d.ts b/packages/transport/vendor/lib/Socket/Client/index.d.ts new file mode 100644 index 0000000..03dd595 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/index.d.ts @@ -0,0 +1,3 @@ +export * from './types.js'; +export * from './websocket.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/index.d.ts.map b/packages/transport/vendor/lib/Socket/Client/index.d.ts.map new file mode 100644 index 0000000..dd8a2cc --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Socket/Client/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/index.js b/packages/transport/vendor/lib/Socket/Client/index.js new file mode 100644 index 0000000..2145965 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/index.js @@ -0,0 +1,3 @@ +export * from './types.js'; +export * from './websocket.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/index.js.map b/packages/transport/vendor/lib/Socket/Client/index.js.map new file mode 100644 index 0000000..f609300 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Socket/Client/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/types.d.ts b/packages/transport/vendor/lib/Socket/Client/types.d.ts new file mode 100644 index 0000000..b50f892 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/types.d.ts @@ -0,0 +1,16 @@ +import { EventEmitter } from 'events'; +import { URL } from 'url'; +import type { SocketConfig } from '../../Types/index.js'; +export declare abstract class AbstractSocketClient extends EventEmitter { + url: URL; + config: SocketConfig; + abstract get isOpen(): boolean; + abstract get isClosed(): boolean; + abstract get isClosing(): boolean; + abstract get isConnecting(): boolean; + constructor(url: URL, config: SocketConfig); + abstract connect(): void; + abstract close(): void; + abstract send(str: Uint8Array | string, cb?: (err?: Error) => void): boolean; +} +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/types.d.ts.map b/packages/transport/vendor/lib/Socket/Client/types.d.ts.map new file mode 100644 index 0000000..addc24d --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/Socket/Client/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,8BAAsB,oBAAqB,SAAQ,YAAY;IAOtD,GAAG,EAAE,GAAG;IACR,MAAM,EAAE,YAAY;IAP5B,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAA;IAC9B,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAA;IAChC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAA;IACjC,QAAQ,KAAK,YAAY,IAAI,OAAO,CAAA;gBAG5B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,YAAY;IAM5B,QAAQ,CAAC,OAAO,IAAI,IAAI;IACxB,QAAQ,CAAC,KAAK,IAAI,IAAI;IACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO;CAC5E"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/types.js b/packages/transport/vendor/lib/Socket/Client/types.js new file mode 100644 index 0000000..ed888f5 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/types.js @@ -0,0 +1,11 @@ +import { EventEmitter } from 'events'; +import { URL } from 'url'; +export class AbstractSocketClient extends EventEmitter { + constructor(url, config) { + super(); + this.url = url; + this.config = config; + this.setMaxListeners(0); + } +} +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/types.js.map b/packages/transport/vendor/lib/Socket/Client/types.js.map new file mode 100644 index 0000000..2ca71b3 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/Socket/Client/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAGzB,MAAM,OAAgB,oBAAqB,SAAQ,YAAY;IAM9D,YACQ,GAAQ,EACR,MAAoB;QAE3B,KAAK,EAAE,CAAA;QAHA,QAAG,GAAH,GAAG,CAAK;QACR,WAAM,GAAN,MAAM,CAAc;QAG3B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;CAKD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/websocket.d.ts b/packages/transport/vendor/lib/Socket/Client/websocket.d.ts new file mode 100644 index 0000000..a69ab3b --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/websocket.d.ts @@ -0,0 +1,13 @@ +import WebSocket from 'ws'; +import { AbstractSocketClient } from './types.js'; +export declare class WebSocketClient extends AbstractSocketClient { + protected socket: WebSocket | null; + get isOpen(): boolean; + get isClosed(): boolean; + get isClosing(): boolean; + get isConnecting(): boolean; + connect(): void; + close(): Promise; + send(str: string | Uint8Array, cb?: (err?: Error) => void): boolean; +} +//# sourceMappingURL=websocket.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/websocket.d.ts.map b/packages/transport/vendor/lib/Socket/Client/websocket.d.ts.map new file mode 100644 index 0000000..5491264 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/websocket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/Socket/Client/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAE9C,qBAAa,eAAgB,SAAQ,oBAAoB;IACxD,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAO;IAEzC,IAAI,MAAM,IAAI,OAAO,CAEpB;IACD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,OAAO;IAsBD,KAAK;IAeX,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO;CAKnE"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/websocket.js b/packages/transport/vendor/lib/Socket/Client/websocket.js new file mode 100644 index 0000000..311fb3e --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/websocket.js @@ -0,0 +1,54 @@ +import WebSocket from 'ws'; +import { DEFAULT_ORIGIN } from '../../Defaults/index.js'; +import { AbstractSocketClient } from './types.js'; +export class WebSocketClient extends AbstractSocketClient { + constructor() { + super(...arguments); + this.socket = null; + } + get isOpen() { + return this.socket?.readyState === WebSocket.OPEN; + } + get isClosed() { + return this.socket === null || this.socket?.readyState === WebSocket.CLOSED; + } + get isClosing() { + return this.socket === null || this.socket?.readyState === WebSocket.CLOSING; + } + get isConnecting() { + return this.socket?.readyState === WebSocket.CONNECTING; + } + connect() { + if (this.socket) { + return; + } + this.socket = new WebSocket(this.url, { + origin: DEFAULT_ORIGIN, + headers: this.config.options?.headers, + handshakeTimeout: this.config.connectTimeoutMs, + timeout: this.config.connectTimeoutMs, + agent: this.config.agent + }); + this.socket.setMaxListeners(0); + const events = ['close', 'error', 'upgrade', 'message', 'open', 'ping', 'pong', 'unexpected-response']; + for (const event of events) { + this.socket?.on(event, (...args) => this.emit(event, ...args)); + } + } + async close() { + if (!this.socket) { + return; + } + const closePromise = new Promise(resolve => { + this.socket?.once('close', resolve); + }); + this.socket.close(); + await closePromise; + this.socket = null; + } + send(str, cb) { + this.socket?.send(str, cb); + return Boolean(this.socket); + } +} +//# sourceMappingURL=websocket.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/Client/websocket.js.map b/packages/transport/vendor/lib/Socket/Client/websocket.js.map new file mode 100644 index 0000000..f18f4ac --- /dev/null +++ b/packages/transport/vendor/lib/Socket/Client/websocket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/Socket/Client/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,OAAO,eAAgB,SAAQ,oBAAoB;IAAzD;;QACW,WAAM,GAAqB,IAAI,CAAA;IAyD1C,CAAC;IAvDA,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,CAAA;IAClD,CAAC;IACD,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,MAAM,CAAA;IAC5E,CAAC;IACD,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,OAAO,CAAA;IAC7E,CAAC;IACD,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,UAAU,CAAA;IACxD,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAM;QACP,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;YACrC,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAa;YAC3C,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC9C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YACrC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SACxB,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAE9B,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAA;QAEtG,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QACtE,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,OAAM;QACP,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAChD,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QAEnB,MAAM,YAAY,CAAA;QAElB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACnB,CAAC;IACD,IAAI,CAAC,GAAwB,EAAE,EAA0B;QACxD,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAE1B,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/business.d.ts b/packages/transport/vendor/lib/Socket/business.d.ts new file mode 100644 index 0000000..0ad7dbd --- /dev/null +++ b/packages/transport/vendor/lib/Socket/business.d.ts @@ -0,0 +1,217 @@ +import type { GetCatalogOptions, ProductCreate, ProductUpdate, SocketConfig, WAMediaUpload } from '../Types/index.js'; +import type { UpdateBussinesProfileProps } from '../Types/Bussines.js'; +import { type BinaryNode } from '../WABinary/index.js'; +export declare const makeBusinessSocket: (config: SocketConfig) => { + logger: import("../Utils/logger.js").ILogger; + getOrderDetails: (orderId: string, tokenBase64: string) => Promise; + getCatalog: ({ jid, limit, cursor }: GetCatalogOptions) => Promise<{ + products: import("../index.js").Product[]; + nextPageCursor: string | undefined; + }>; + getCollections: (jid?: string, limit?: number) => Promise<{ + collections: import("../index.js").CatalogCollection[]; + }>; + productCreate: (create: ProductCreate) => Promise; + productDelete: (productIds: string[]) => Promise<{ + deleted: number; + }>; + productUpdate: (productId: string, update: ProductUpdate) => Promise; + updateBussinesProfile: (args: UpdateBussinesProfileProps) => Promise; + updateCoverPhoto: (photo: WAMediaUpload) => Promise; + removeCoverPhoto: (id: string) => Promise; + sendMessageAck: (node: BinaryNode, errorCode?: number) => Promise; + sendRetryRequest: (node: BinaryNode, forceIncludeKeys?: boolean) => Promise; + rejectCall: (callId: string, callFrom: string) => Promise; + fetchMessageHistory: (count: number, oldestMsgKey: import("../index.js").WAMessageKey, oldestMsgTimestamp: number | Long) => Promise; + requestPlaceholderResend: (messageKey: import("../index.js").WAMessageKey, msgData?: Partial) => Promise; + messageRetryManager: import("../index.js").MessageRetryManager | null; + userDevicesCache: import("../index.js").PossiblyExtendedCacheStore | import("@cacheable/node-cache").NodeCache; + devicesMutex: { + mutex(code: () => Promise | T): Promise; + }; + issuePrivacyTokens: (jids: string[], timestamp?: number) => Promise; + assertSessions: (jids: string[], force?: boolean) => Promise; + relayMessage: (jid: string, message: import("../index.js").proto.IMessage, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }: import("../index.js").MessageRelayOptions) => Promise; + sendReceipt: (jid: string, participant: string | undefined, messageIds: string[], type: import("../index.js").MessageReceiptType) => Promise; + sendReceipts: (keys: import("../index.js").WAMessageKey[], type: import("../index.js").MessageReceiptType) => Promise; + readMessages: (keys: import("../index.js").WAMessageKey[]) => Promise; + refreshMediaConn: (forceGet?: boolean) => Promise; + getMediaHost: () => string; + waUploadToServer: import("../index.js").WAMediaUploadFunction; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + sendPeerDataOperationMessage: (pdoMessage: import("../index.js").proto.Message.IPeerDataOperationRequestMessage) => Promise; + createParticipantNodes: (recipientJids: string[], message: import("../index.js").proto.IMessage, extraAttrs?: BinaryNode["attrs"], dsmMessage?: import("../index.js").proto.IMessage) => Promise<{ + nodes: BinaryNode[]; + shouldIncludeDeviceIdentity: boolean; + }>; + getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<(import("../index.js").JidWithDevice & { + jid: string; + })[]>; + updateMemberLabel: (jid: string, memberLabel: string) => Promise; + updateMediaMessage: (message: import("../index.js").WAMessage) => Promise; + sendMessage: (jid: string, content: import("../index.js").AnyMessageContent, options?: import("../index.js").MiscMessageGenerationOptions) => Promise; + newsletterCreate: (name: string, description?: string) => Promise; + newsletterUpdate: (jid: string, updates: import("../index.js").NewsletterUpdate) => Promise; + newsletterSubscribers: (jid: string) => Promise<{ + subscribers: number; + }>; + newsletterMetadata: (type: "invite" | "jid", key: string) => Promise; + newsletterFollow: (jid: string) => Promise; + newsletterUnfollow: (jid: string) => Promise; + newsletterMute: (jid: string) => Promise; + newsletterUnmute: (jid: string) => Promise; + newsletterUpdateName: (jid: string, name: string) => Promise; + newsletterUpdateDescription: (jid: string, description: string) => Promise; + newsletterUpdatePicture: (jid: string, content: WAMediaUpload) => Promise; + newsletterRemovePicture: (jid: string) => Promise; + newsletterReactMessage: (jid: string, serverId: string, reaction?: string) => Promise; + newsletterFetchMessages: (jid: string, count: number, since: number, after: number) => Promise; + subscribeNewsletterUpdates: (jid: string) => Promise<{ + duration: string; + } | null>; + newsletterAdminCount: (jid: string) => Promise; + newsletterChangeOwner: (jid: string, newOwnerJid: string) => Promise; + newsletterDemote: (jid: string, userJid: string) => Promise; + newsletterDelete: (jid: string) => Promise; + groupMetadata: (jid: string) => Promise; + groupCreate: (subject: string, participants: string[]) => Promise; + groupLeave: (id: string) => Promise; + groupUpdateSubject: (jid: string, subject: string) => Promise; + groupRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + groupParticipantsUpdate: (jid: string, participants: string[], action: import("../index.js").ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: BinaryNode; + }[]>; + groupUpdateDescription: (jid: string, description?: string) => Promise; + groupInviteCode: (jid: string) => Promise; + groupRevokeInvite: (jid: string) => Promise; + groupAcceptInvite: (code: string) => Promise; + groupRevokeInviteV4: (groupJid: string, invitedJid: string) => Promise; + groupAcceptInviteV4: (key: string | import("../index.js").WAMessageKey, inviteMessage: import("../index.js").proto.Message.IGroupInviteMessage) => Promise; + groupGetInviteInfo: (code: string) => Promise; + groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + groupSettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + groupMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + groupFetchAllParticipating: () => Promise<{ + [_: string]: import("../index.js").GroupMetadata; + }>; + serverProps: { + privacyTokenOn1to1: boolean; + profilePicPrivacyToken: boolean; + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + upsertMessage: (msg: import("../index.js").WAMessage, type: import("../index.js").MessageUpsertType) => Promise; + appPatch: (patchCreate: import("../index.js").WAPatchCreate) => Promise; + sendPresenceUpdate: (type: import("../index.js").WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: import("../index.js").WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: import("../index.js").WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: import("../index.js").WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: import("../index.js").WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: import("../index.js").WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: import("../index.js").ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: import("../index.js").proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: import("../index.js").CacheStore; + addLabel: (jid: string, labels: import("../Types/Label.js").LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: import("../Types/Bussines.js").QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/index.js").WebSocketClient; + ev: import("../index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction
(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../index.js").AuthenticationCreds; + keys: import("../index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../index.js").SignalRepositoryWithLIDStore; + user: import("../index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | import("@hapi/boom").Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: import("../index.js").USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +//# sourceMappingURL=business.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/business.d.ts.map b/packages/transport/vendor/lib/Socket/business.d.ts.map new file mode 100644 index 0000000..ef8ac20 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/business.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"business.d.ts","sourceRoot":"","sources":["../../src/Socket/business.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC5G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAUnE,OAAO,EAAE,KAAK,UAAU,EAAqC,MAAM,aAAa,CAAA;AAIhF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,YAAY;;+BA8Od,MAAM,eAAe,MAAM;yCAjGjB,iBAAiB;;;;2BAmD/B,MAAM;;;4BAkIL,aAAa;gCAwCT,MAAM,EAAE;;;+BA9ET,MAAM,UAAU,aAAa;kCAxR1B,0BAA0B;8BA2E9B,aAAa;2BAoChB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsSurnB,CAAC;;;;;;;;;0DAhXhtnB,GAAG,0BAChB,GAAH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8WF,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/business.js b/packages/transport/vendor/lib/Socket/business.js new file mode 100644 index 0000000..1f0d4d6 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/business.js @@ -0,0 +1,379 @@ +import { getRawMediaUploadData } from '../Utils/index.js'; +import { parseCatalogNode, parseCollectionsNode, parseOrderDetailsNode, parseProductNode, toProductNode, uploadingNecessaryImagesOfProduct } from '../Utils/business.js'; +import { jidNormalizedUser, S_WHATSAPP_NET } from '../WABinary/index.js'; +import { getBinaryNodeChild } from '../WABinary/generic-utils.js'; +import { makeMessagesRecvSocket } from './messages-recv.js'; +export const makeBusinessSocket = (config) => { + const sock = makeMessagesRecvSocket(config); + const { authState, query, waUploadToServer } = sock; + const updateBussinesProfile = async (args) => { + const node = []; + const simpleFields = ['address', 'email', 'description']; + node.push(...simpleFields + .filter(key => args[key] !== undefined && args[key] !== null) + .map(key => ({ + tag: key, + attrs: {}, + content: args[key] + }))); + if (args.websites !== undefined) { + node.push(...args.websites.map(website => ({ + tag: 'website', + attrs: {}, + content: website + }))); + } + if (args.hours !== undefined) { + node.push({ + tag: 'business_hours', + attrs: { timezone: args.hours.timezone }, + content: args.hours.days.map(dayConfig => { + const base = { + tag: 'business_hours_config', + attrs: { + day_of_week: dayConfig.day, + mode: dayConfig.mode + } + }; + if (dayConfig.mode === 'specific_hours') { + return { + ...base, + attrs: { + ...base.attrs, + open_time: dayConfig.openTimeInMinutes, + close_time: dayConfig.closeTimeInMinutes + } + }; + } + return base; + }) + }); + } + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:biz' + }, + content: [ + { + tag: 'business_profile', + attrs: { + v: '3', + mutation_type: 'delta' + }, + content: node + } + ] + }); + return result; + }; + const updateCoverPhoto = async (photo) => { + const { fileSha256, filePath } = await getRawMediaUploadData(photo, 'biz-cover-photo'); + const fileSha256B64 = fileSha256.toString('base64'); + const { meta_hmac, fbid, ts } = await waUploadToServer(filePath, { + fileEncSha256B64: fileSha256B64, + mediaType: 'biz-cover-photo' + }); + await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:biz' + }, + content: [ + { + tag: 'business_profile', + attrs: { + v: '3', + mutation_type: 'delta' + }, + content: [ + { + tag: 'cover_photo', + attrs: { id: String(fbid), op: 'update', token: meta_hmac, ts: String(ts) } + } + ] + } + ] + }); + return fbid; + }; + const removeCoverPhoto = async (id) => { + return await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:biz' + }, + content: [ + { + tag: 'business_profile', + attrs: { + v: '3', + mutation_type: 'delta' + }, + content: [ + { + tag: 'cover_photo', + attrs: { op: 'delete', id } + } + ] + } + ] + }); + }; + const getCatalog = async ({ jid, limit, cursor }) => { + jid = jid || authState.creds.me?.id; + jid = jidNormalizedUser(jid); + const queryParamNodes = [ + { + tag: 'limit', + attrs: {}, + content: Buffer.from((limit || 10).toString()) + }, + { + tag: 'width', + attrs: {}, + content: Buffer.from('100') + }, + { + tag: 'height', + attrs: {}, + content: Buffer.from('100') + } + ]; + if (cursor) { + queryParamNodes.push({ + tag: 'after', + attrs: {}, + content: cursor + }); + } + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'get', + xmlns: 'w:biz:catalog' + }, + content: [ + { + tag: 'product_catalog', + attrs: { + jid, + allow_shop_source: 'true' + }, + content: queryParamNodes + } + ] + }); + return parseCatalogNode(result); + }; + const getCollections = async (jid, limit = 51) => { + jid = jid || authState.creds.me?.id; + jid = jidNormalizedUser(jid); + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'get', + xmlns: 'w:biz:catalog', + smax_id: '35' + }, + content: [ + { + tag: 'collections', + attrs: { + biz_jid: jid + }, + content: [ + { + tag: 'collection_limit', + attrs: {}, + content: Buffer.from(limit.toString()) + }, + { + tag: 'item_limit', + attrs: {}, + content: Buffer.from(limit.toString()) + }, + { + tag: 'width', + attrs: {}, + content: Buffer.from('100') + }, + { + tag: 'height', + attrs: {}, + content: Buffer.from('100') + } + ] + } + ] + }); + return parseCollectionsNode(result); + }; + const getOrderDetails = async (orderId, tokenBase64) => { + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'get', + xmlns: 'fb:thrift_iq', + smax_id: '5' + }, + content: [ + { + tag: 'order', + attrs: { + op: 'get', + id: orderId + }, + content: [ + { + tag: 'image_dimensions', + attrs: {}, + content: [ + { + tag: 'width', + attrs: {}, + content: Buffer.from('100') + }, + { + tag: 'height', + attrs: {}, + content: Buffer.from('100') + } + ] + }, + { + tag: 'token', + attrs: {}, + content: Buffer.from(tokenBase64) + } + ] + } + ] + }); + return parseOrderDetailsNode(result); + }; + const productUpdate = async (productId, update) => { + update = await uploadingNecessaryImagesOfProduct(update, waUploadToServer); + const editNode = toProductNode(productId, update); + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:biz:catalog' + }, + content: [ + { + tag: 'product_catalog_edit', + attrs: { v: '1' }, + content: [ + editNode, + { + tag: 'width', + attrs: {}, + content: '100' + }, + { + tag: 'height', + attrs: {}, + content: '100' + } + ] + } + ] + }); + const productCatalogEditNode = getBinaryNodeChild(result, 'product_catalog_edit'); + const productNode = getBinaryNodeChild(productCatalogEditNode, 'product'); + return parseProductNode(productNode); + }; + const productCreate = async (create) => { + // ensure isHidden is defined + create.isHidden = !!create.isHidden; + create = await uploadingNecessaryImagesOfProduct(create, waUploadToServer); + const createNode = toProductNode(undefined, create); + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:biz:catalog' + }, + content: [ + { + tag: 'product_catalog_add', + attrs: { v: '1' }, + content: [ + createNode, + { + tag: 'width', + attrs: {}, + content: '100' + }, + { + tag: 'height', + attrs: {}, + content: '100' + } + ] + } + ] + }); + const productCatalogAddNode = getBinaryNodeChild(result, 'product_catalog_add'); + const productNode = getBinaryNodeChild(productCatalogAddNode, 'product'); + return parseProductNode(productNode); + }; + const productDelete = async (productIds) => { + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:biz:catalog' + }, + content: [ + { + tag: 'product_catalog_delete', + attrs: { v: '1' }, + content: productIds.map(id => ({ + tag: 'product', + attrs: {}, + content: [ + { + tag: 'id', + attrs: {}, + content: Buffer.from(id) + } + ] + })) + } + ] + }); + const productCatalogDelNode = getBinaryNodeChild(result, 'product_catalog_delete'); + return { + deleted: +(productCatalogDelNode?.attrs.deleted_count || 0) + }; + }; + return { + ...sock, + logger: config.logger, + getOrderDetails, + getCatalog, + getCollections, + productCreate, + productDelete, + productUpdate, + updateBussinesProfile, + updateCoverPhoto, + removeCoverPhoto + }; +}; +//# sourceMappingURL=business.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/business.js.map b/packages/transport/vendor/lib/Socket/business.js.map new file mode 100644 index 0000000..404c409 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/business.js.map @@ -0,0 +1 @@ +{"version":3,"file":"business.js","sourceRoot":"","sources":["../../src/Socket/business.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/chats.d.ts b/packages/transport/vendor/lib/Socket/chats.d.ts new file mode 100644 index 0000000..803ed60 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/chats.d.ts @@ -0,0 +1,124 @@ +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import type { BotListInfo, CacheStore, ChatModification, MessageUpsertType, SocketConfig, WABusinessProfile, WAMediaUpload, WAMessage, WAPatchCreate, WAPresence, WAPrivacyCallValue, WAPrivacyGroupAddValue, WAPrivacyMessagesValue, WAPrivacyOnlineValue, WAPrivacyValue, WAReadReceiptsValue } from '../Types/index.js'; +import type { QuickReplyAction } from '../Types/Bussines.js'; +import type { LabelActionBody } from '../Types/Label.js'; +import { type BinaryNode } from '../WABinary/index.js'; +import { USyncQuery } from '../WAUSync/index.js'; +export declare const makeChatsSocket: (config: SocketConfig) => { + serverProps: { + /** AB prop 10518: gate tctoken on 1:1 messages. Default true (safe: avoids 463). */ + privacyTokenOn1to1: boolean; + /** AB prop 9666: gate tctoken on profile picture IQs. WA Web default: true. */ + profilePicPrivacyToken: boolean; + /** AB prop 14303: issue tctokens to LID instead of PN. WA Web default: false. */ + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + upsertMessage: (msg: WAMessage, type: MessageUpsertType) => Promise; + appPatch: (patchCreate: WAPatchCreate) => Promise; + sendPresenceUpdate: (type: WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: CacheStore; + addLabel: (jid: string, labels: LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/websocket.js").WebSocketClient; + ev: import("../Types/index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../Types/index.js").AuthenticationCreds; + keys: import("../Types/index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../Types/index.js").SignalRepositoryWithLIDStore; + user: import("../Types/index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +//# sourceMappingURL=chats.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/chats.d.ts.map b/packages/transport/vendor/lib/Socket/chats.d.ts.map new file mode 100644 index 0000000..8d18b3d --- /dev/null +++ b/packages/transport/vendor/lib/Socket/chats.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/Socket/chats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,KAAK,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,EAGhB,iBAAiB,EAEjB,YAAY,EAEZ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,aAAa,EAEb,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAqBrD,OAAO,EACN,KAAK,UAAU,EAWf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAA;AAGlD,eAAO,MAAM,eAAe,GAAI,QAAQ,YAAY;;QA8BlD,oFAAoF;;QAEpF,+EAA+E;;QAE/E,iFAAiF;;;2BAqqB9C,OAAO,GAAG,OAAO,UAAU;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,cAAc,MAAM;;;;;;;;;;;;;;;;;;4BA0HnE,aAAa;+BApGV,UAAU,UAAU,MAAM;+BA8C1B,MAAM;6BA5GR,MAAM,SAAQ,SAAS,GAAG,OAAO,cAA0B,MAAM;;2BAjdnE,MAAM,EAAE;yCAaM,MAAM,EAAE;gCAepD,MAAM,WACF,aAAa,eACT;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;gCAmCN,MAAM;kCA0BJ,MAAM;8BAkBV,MAAM;6BAkBP,MAAM,UAAU,OAAO,GAAG,SAAS;2DAmoBX,OAAO;+BAp1B7B,kBAAkB;mCAJd,sBAAsB;mCAQtB,cAAc;iCAIhB,oBAAoB;yCAIZ,cAAc;iCAItB,cAAc;uCAIR,mBAAmB;oCAItB,sBAAsB;8CAIZ,MAAM;8BAqPtB,MAAM,KAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;;sBA2jBxD,gBAAgB,OAAO,MAAM;2BAzgBlB,cAAc,GAAG,QAAQ,kBAAkB,MAAM,GAAG,MAAM;4BA4iB/D,MAAM,WAAW,KAAK,CAAC,eAAe,CAAC,cAAc;yBAYxD,MAAM;;oBAYX,MAAM,UAAU,eAAe;wBAc3B,MAAM,WAAW,MAAM;2BAcpB,MAAM,WAAW,MAAM;2BAcvB,MAAM,aAAa,MAAM,WAAW,MAAM;8BAevC,MAAM,aAAa,MAAM,WAAW,MAAM;gBAhGxD,MAAM,YAAY;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,QAAQ,OAAO;sCA+G7C,gBAAgB;kCAYpB,MAAM;;;;;;0DAvlC5B,GAAG,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAg7C/C,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/chats.js b/packages/transport/vendor/lib/Socket/chats.js new file mode 100644 index 0000000..540c985 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/chats.js @@ -0,0 +1,1192 @@ +import NodeCache from '@cacheable/node-cache'; +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import { DEFAULT_CACHE_TTLS, HISTORY_SYNC_PAUSED_TIMEOUT_MS, PROCESSABLE_HISTORY_TYPES } from '../Defaults/index.js'; +import { ALL_WA_PATCH_NAMES } from '../Types/index.js'; +import { SyncState } from '../Types/State.js'; +import { chatModificationToAppPatch, decodePatches, decodeSyncdSnapshot, encodeSyncdPatch, ensureLTHashStateVersion, extractSyncdPatches, generateProfilePicture, getHistoryMsg, isAppStateSyncIrrecoverable, isMissingKeyError, MAX_SYNC_ATTEMPTS, newLTHashState, processSyncAction } from '../Utils/index.js'; +import { makeMutex } from '../Utils/make-mutex.js'; +import processMessage from '../Utils/process-message.js'; +import { buildTcTokenFromJid } from '../Utils/tc-token-utils.js'; +import { getBinaryNodeChild, getBinaryNodeChildren, isHostedLidUser, isHostedPnUser, isLidUser, isPnUser, jidDecode, jidNormalizedUser, reduceBinaryNodeToDictionary, S_WHATSAPP_NET } from '../WABinary/index.js'; +import { USyncQuery, USyncUser } from '../WAUSync/index.js'; +import { makeSocket } from './socket.js'; +export const makeChatsSocket = (config) => { + const { logger, markOnlineOnConnect, fireInitQueries, appStateMacVerification, shouldIgnoreJid, shouldSyncHistoryMessage, getMessage } = config; + const sock = makeSocket(config); + const { ev, ws, authState, generateMessageTag, sendNode, query, signalRepository, onUnexpectedError, sendUnifiedSession, registerSocketEndHandler } = sock; + const getLIDForPN = signalRepository.lidMapping.getLIDForPN.bind(signalRepository.lidMapping); + let privacySettings; + /** Server-assigned AB props for protocol behavior. */ + const serverProps = { + /** AB prop 10518: gate tctoken on 1:1 messages. Default true (safe: avoids 463). */ + privacyTokenOn1to1: true, + /** AB prop 9666: gate tctoken on profile picture IQs. WA Web default: true. */ + profilePicPrivacyToken: true, + /** AB prop 14303: issue tctokens to LID instead of PN. WA Web default: false. */ + lidTrustedTokenIssueToLid: false + }; + let syncState = SyncState.Connecting; + /** this mutex ensures that messages are processed in order */ + const messageMutex = makeMutex(); + /** this mutex ensures that receipts are processed in order */ + const receiptMutex = makeMutex(); + /** this mutex ensures that app state patches are processed in order */ + const appStatePatchMutex = makeMutex(); + /** this mutex ensures that notifications are processed in order */ + const notificationMutex = makeMutex(); + // Timeout for AwaitingInitialSync state + let awaitingSyncTimeout; + // In-memory history sync completion tracking (resets on reconnection) + const historySyncStatus = { + initialBootstrapComplete: false, + recentSyncComplete: false + }; + let historySyncPausedTimeout; + // Collections blocked on missing app state sync keys (mirrors WA Web's "Blocked" state). + // When a key arrives via APP_STATE_SYNC_KEY_SHARE, these are re-synced. + const blockedCollections = new Set(); + const placeholderResendCache = config.placeholderResendCache || + new NodeCache({ + stdTTL: DEFAULT_CACHE_TTLS.MSG_RETRY, // 1 hour + useClones: false + }); + /** helper function to fetch the given app state sync key */ + const getAppStateSyncKey = async (keyId) => { + const { [keyId]: key } = await authState.keys.get('app-state-sync-key', [keyId]); + return key; + }; + const fetchPrivacySettings = async (force = false) => { + if (!privacySettings || force) { + const { content } = await query({ + tag: 'iq', + attrs: { + xmlns: 'privacy', + to: S_WHATSAPP_NET, + type: 'get' + }, + content: [{ tag: 'privacy', attrs: {} }] + }); + privacySettings = reduceBinaryNodeToDictionary(content?.[0], 'category'); + } + return privacySettings; + }; + /** helper function to run a privacy IQ query */ + const privacyQuery = async (name, value) => { + await query({ + tag: 'iq', + attrs: { + xmlns: 'privacy', + to: S_WHATSAPP_NET, + type: 'set' + }, + content: [ + { + tag: 'privacy', + attrs: {}, + content: [ + { + tag: 'category', + attrs: { name, value } + } + ] + } + ] + }); + }; + const updateMessagesPrivacy = async (value) => { + await privacyQuery('messages', value); + }; + const updateCallPrivacy = async (value) => { + await privacyQuery('calladd', value); + }; + const updateLastSeenPrivacy = async (value) => { + await privacyQuery('last', value); + }; + const updateOnlinePrivacy = async (value) => { + await privacyQuery('online', value); + }; + const updateProfilePicturePrivacy = async (value) => { + await privacyQuery('profile', value); + }; + const updateStatusPrivacy = async (value) => { + await privacyQuery('status', value); + }; + const updateReadReceiptsPrivacy = async (value) => { + await privacyQuery('readreceipts', value); + }; + const updateGroupsAddPrivacy = async (value) => { + await privacyQuery('groupadd', value); + }; + const updateDefaultDisappearingMode = async (duration) => { + await query({ + tag: 'iq', + attrs: { + xmlns: 'disappearing_mode', + to: S_WHATSAPP_NET, + type: 'set' + }, + content: [ + { + tag: 'disappearing_mode', + attrs: { + duration: duration.toString() + } + } + ] + }); + }; + const getBotListV2 = async () => { + const resp = await query({ + tag: 'iq', + attrs: { + xmlns: 'bot', + to: S_WHATSAPP_NET, + type: 'get' + }, + content: [ + { + tag: 'bot', + attrs: { + v: '2' + } + } + ] + }); + const botNode = getBinaryNodeChild(resp, 'bot'); + const botList = []; + for (const section of getBinaryNodeChildren(botNode, 'section')) { + if (section.attrs.type === 'all') { + for (const bot of getBinaryNodeChildren(section, 'bot')) { + botList.push({ + jid: bot.attrs.jid, + personaId: bot.attrs['persona_id'] + }); + } + } + } + return botList; + }; + const fetchStatus = async (...jids) => { + const usyncQuery = new USyncQuery().withStatusProtocol(); + for (const jid of jids) { + usyncQuery.withUser(new USyncUser().withId(jid)); + } + const result = await sock.executeUSyncQuery(usyncQuery); + if (result) { + return result.list; + } + }; + const fetchDisappearingDuration = async (...jids) => { + const usyncQuery = new USyncQuery().withDisappearingModeProtocol(); + for (const jid of jids) { + usyncQuery.withUser(new USyncUser().withId(jid)); + } + const result = await sock.executeUSyncQuery(usyncQuery); + if (result) { + return result.list; + } + }; + /** update the profile picture for yourself or a group */ + const updateProfilePicture = async (jid, content, dimensions) => { + let targetJid; + if (!jid) { + throw new Boom('Illegal no-jid profile update. Please specify either your ID or the ID of the chat you wish to update'); + } + if (jidNormalizedUser(jid) !== jidNormalizedUser(authState.creds.me.id)) { + targetJid = jidNormalizedUser(jid); // in case it is someone other than us + } + else { + targetJid = undefined; + } + const { img } = await generateProfilePicture(content, dimensions); + await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:profile:picture', + ...(targetJid ? { target: targetJid } : {}) + }, + content: [ + { + tag: 'picture', + attrs: { type: 'image' }, + content: img + } + ] + }); + }; + /** remove the profile picture for yourself or a group */ + const removeProfilePicture = async (jid) => { + let targetJid; + if (!jid) { + throw new Boom('Illegal no-jid profile update. Please specify either your ID or the ID of the chat you wish to update'); + } + if (jidNormalizedUser(jid) !== jidNormalizedUser(authState.creds.me.id)) { + targetJid = jidNormalizedUser(jid); // in case it is someone other than us + } + else { + targetJid = undefined; + } + await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:profile:picture', + ...(targetJid ? { target: targetJid } : {}) + } + }); + }; + /** update the profile status for yourself */ + const updateProfileStatus = async (status) => { + await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'status' + }, + content: [ + { + tag: 'status', + attrs: {}, + content: Buffer.from(status, 'utf-8') + } + ] + }); + }; + const updateProfileName = async (name) => { + await chatModify({ pushNameSetting: name }, ''); + }; + const fetchBlocklist = async () => { + const result = await query({ + tag: 'iq', + attrs: { + xmlns: 'blocklist', + to: S_WHATSAPP_NET, + type: 'get' + } + }); + const listNode = getBinaryNodeChild(result, 'list'); + return getBinaryNodeChildren(listNode, 'item').map(n => n.attrs.jid); + }; + const updateBlockStatus = async (jid, action) => { + const normalizedJid = jidNormalizedUser(jid); + let lid; + let pn_jid; + if (isLidUser(normalizedJid) || isHostedLidUser(normalizedJid)) { + lid = normalizedJid; + if (action === 'block') { + const pn = await signalRepository.lidMapping.getPNForLID(normalizedJid); + if (!pn) { + throw new Boom(`Unable to resolve PN JID for LID: ${jid}`, { statusCode: 400 }); + } + pn_jid = jidNormalizedUser(pn); + } + } + else if (isPnUser(normalizedJid) || isHostedPnUser(normalizedJid)) { + const mapped = await signalRepository.lidMapping.getLIDForPN(normalizedJid); + if (!mapped) { + throw new Boom(`Unable to resolve LID for PN JID: ${jid}`, { statusCode: 400 }); + } + lid = mapped; + if (action === 'block') { + pn_jid = jidNormalizedUser(normalizedJid); + } + } + else { + throw new Boom(`Invalid jid: ${jid}`, { statusCode: 400 }); + } + const itemAttrs = { + action, + jid: lid + }; + if (action === 'block') { + if (!pn_jid) { + throw new Boom(`pn_jid required for block: ${jid}`, { statusCode: 400 }); + } + itemAttrs.pn_jid = pn_jid; + } + await query({ + tag: 'iq', + attrs: { + xmlns: 'blocklist', + to: S_WHATSAPP_NET, + type: 'set' + }, + content: [ + { + tag: 'item', + attrs: itemAttrs + } + ] + }); + }; + const getBusinessProfile = async (jid) => { + const results = await query({ + tag: 'iq', + attrs: { + to: 's.whatsapp.net', + xmlns: 'w:biz', + type: 'get' + }, + content: [ + { + tag: 'business_profile', + attrs: { v: '244' }, + content: [ + { + tag: 'profile', + attrs: { jid } + } + ] + } + ] + }); + const profileNode = getBinaryNodeChild(results, 'business_profile'); + const profiles = getBinaryNodeChild(profileNode, 'profile'); + if (profiles) { + const address = getBinaryNodeChild(profiles, 'address'); + const description = getBinaryNodeChild(profiles, 'description'); + const website = getBinaryNodeChild(profiles, 'website'); + const email = getBinaryNodeChild(profiles, 'email'); + const category = getBinaryNodeChild(getBinaryNodeChild(profiles, 'categories'), 'category'); + const businessHours = getBinaryNodeChild(profiles, 'business_hours'); + const businessHoursConfig = businessHours + ? getBinaryNodeChildren(businessHours, 'business_hours_config') + : undefined; + const websiteStr = website?.content?.toString(); + return { + wid: profiles.attrs?.jid, + address: address?.content?.toString(), + description: description?.content?.toString() || '', + website: websiteStr ? [websiteStr] : [], + email: email?.content?.toString(), + category: category?.content?.toString(), + business_hours: { + timezone: businessHours?.attrs?.timezone, + business_config: businessHoursConfig?.map(({ attrs }) => attrs) + } + }; + } + }; + const cleanDirtyBits = async (type, fromTimestamp) => { + logger.info({ fromTimestamp }, 'clean dirty bits ' + type); + await sendNode({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'urn:xmpp:whatsapp:dirty', + id: generateMessageTag() + }, + content: [ + { + tag: 'clean', + attrs: { + type, + ...(fromTimestamp ? { timestamp: fromTimestamp.toString() } : null) + } + } + ] + }); + }; + const newAppStateChunkHandler = (isInitialSync) => { + return { + onMutation(mutation) { + processSyncAction(mutation, ev, authState.creds.me, isInitialSync ? { accountSettings: authState.creds.accountSettings } : undefined, logger); + } + }; + }; + const resyncAppState = ev.createBufferedFunction(async (collections, isInitialSync) => { + const appStateSyncKeyCache = new Map(); + const getCachedAppStateSyncKey = async (keyId) => { + if (appStateSyncKeyCache.has(keyId)) { + return appStateSyncKeyCache.get(keyId) ?? undefined; + } + const key = await getAppStateSyncKey(keyId); + appStateSyncKeyCache.set(keyId, key ?? null); + return key; + }; + // we use this to determine which events to fire + // otherwise when we resync from scratch -- all notifications will fire + const initialVersionMap = {}; + const globalMutationMap = {}; + await authState.keys.transaction(async () => { + const collectionsToHandle = new Set(collections); + // in case something goes wrong -- ensure we don't enter a loop that cannot be exited from + const attemptsMap = {}; + // collections that failed and need a full snapshot on retry + // mirrors WA Web's ErrorFatal -> force snapshot behavior + const forceSnapshotCollections = new Set(); + // keep executing till all collections are done + // sometimes a single patch request will not return all the patches (God knows why) + // so we fetch till they're all done (this is determined by the "has_more_patches" flag) + while (collectionsToHandle.size) { + const states = {}; + const nodes = []; + for (const name of collectionsToHandle) { + const result = await authState.keys.get('app-state-sync-version', [name]); + let state = result[name]; + if (state) { + state = ensureLTHashStateVersion(state); + if (typeof initialVersionMap[name] === 'undefined') { + initialVersionMap[name] = state.version; + } + } + else { + state = newLTHashState(); + } + states[name] = state; + const shouldForceSnapshot = forceSnapshotCollections.has(name); + if (shouldForceSnapshot) { + forceSnapshotCollections.delete(name); + } + logger.info(`resyncing ${name} from v${state.version}${shouldForceSnapshot ? ' (forcing snapshot)' : ''}`); + nodes.push({ + tag: 'collection', + attrs: { + name, + version: state.version.toString(), + // return snapshot if syncing from scratch or forcing after a failed attempt + return_snapshot: (shouldForceSnapshot || !state.version).toString() + } + }); + } + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + xmlns: 'w:sync:app:state', + type: 'set' + }, + content: [ + { + tag: 'sync', + attrs: {}, + content: nodes + } + ] + }); + // extract from binary node + const decoded = await extractSyncdPatches(result, config?.options); + for (const key in decoded) { + const name = key; + const { patches, hasMorePatches, snapshot } = decoded[name]; + try { + if (snapshot) { + const { state: newState, mutationMap } = await decodeSyncdSnapshot(name, snapshot, getCachedAppStateSyncKey, initialVersionMap[name], appStateMacVerification.snapshot, logger); + states[name] = newState; + Object.assign(globalMutationMap, mutationMap); + logger.info(`restored state of ${name} from snapshot to v${newState.version} with mutations`); + await authState.keys.set({ 'app-state-sync-version': { [name]: newState } }); + } + // only process if there are syncd patches + if (patches.length) { + const { state: newState, mutationMap } = await decodePatches(name, patches, states[name], getCachedAppStateSyncKey, config.options, initialVersionMap[name], logger, appStateMacVerification.patch); + await authState.keys.set({ 'app-state-sync-version': { [name]: newState } }); + logger.info(`synced ${name} to v${newState.version}`); + initialVersionMap[name] = newState.version; + Object.assign(globalMutationMap, mutationMap); + } + if (hasMorePatches) { + logger.info(`${name} has more patches...`); + } + else { + // collection is done with sync + collectionsToHandle.delete(name); + } + } + catch (error) { + attemptsMap[name] = (attemptsMap[name] || 0) + 1; + const logData = { + name, + attempt: attemptsMap[name], + version: states[name].version, + statusCode: error.output?.statusCode, + errorType: error.name, + error: error.stack + }; + if (isMissingKeyError(error) && attemptsMap[name] >= MAX_SYNC_ATTEMPTS) { + // WA Web treats missing keys as "Blocked" — park the collection + // until the key arrives via APP_STATE_SYNC_KEY_SHARE. + logger.warn(logData, `${name} blocked on missing key from v${states[name].version}, parking after ${attemptsMap[name]} attempts`); + blockedCollections.add(name); + collectionsToHandle.delete(name); + } + else if (isMissingKeyError(error)) { + // Retry with a snapshot which may use a different key. + logger.info(logData, `${name} blocked on missing key from v${states[name].version}, retrying with snapshot`); + forceSnapshotCollections.add(name); + } + else if (isAppStateSyncIrrecoverable(error, attemptsMap[name])) { + logger.warn(logData, `failed to sync ${name} from v${states[name].version}, giving up`); + collectionsToHandle.delete(name); + } + else { + logger.info(logData, `failed to sync ${name} from v${states[name].version}, forcing snapshot retry`); + // force a full snapshot on retry to recover from + // corrupted local state (e.g. LTHash MAC mismatch) + forceSnapshotCollections.add(name); + } + } + } + } + }, authState?.creds?.me?.id || 'resync-app-state'); + const { onMutation } = newAppStateChunkHandler(isInitialSync); + for (const key in globalMutationMap) { + onMutation(globalMutationMap[key]); + } + }); + /** + * fetch the profile picture of a user/group + * type = "preview" for a low res picture + * type = "image for the high res picture" + */ + const profilePictureUrl = async (jid, type = 'preview', timeoutMs) => { + const baseContent = [{ tag: 'picture', attrs: { type, query: 'url' } }]; + // WA Web only includes tctoken for user JIDs (not groups/newsletters) + // and never for own profile pic (Chat model for self has no tcToken). + // Including tctoken for own JID causes the server to never respond. + const normalizedJid = jidNormalizedUser(jid); + const isUserJid = isPnUser(normalizedJid) || isLidUser(normalizedJid); + const me = authState.creds.me; + const isSelf = me && (normalizedJid === jidNormalizedUser(me.id) || (me.lid && normalizedJid === jidNormalizedUser(me.lid))); + let content = baseContent; + if (serverProps.profilePicPrivacyToken && isUserJid && !isSelf) { + content = await buildTcTokenFromJid({ + authState, + jid: normalizedJid, + baseContent, + getLIDForPN + }); + } + jid = jidNormalizedUser(jid); + const result = await query({ + tag: 'iq', + attrs: { + target: jid, + to: S_WHATSAPP_NET, + type: 'get', + xmlns: 'w:profile:picture' + }, + content + }, timeoutMs); + const child = getBinaryNodeChild(result, 'picture'); + return child?.attrs?.url; + }; + const createCallLink = async (type, event, timeoutMs) => { + const result = await query({ + tag: 'call', + attrs: { + id: generateMessageTag(), + to: '@call' + }, + content: [ + { + tag: 'link_create', + attrs: { media: type }, + content: event ? [{ tag: 'event', attrs: { start_time: String(event.startTime) } }] : undefined + } + ] + }, timeoutMs); + const child = getBinaryNodeChild(result, 'link_create'); + return child?.attrs?.token; + }; + const sendPresenceUpdate = async (type, toJid) => { + const me = authState.creds.me; + const isAvailableType = type === 'available'; + if (isAvailableType || type === 'unavailable') { + if (!me.name) { + logger.warn('no name present, ignoring presence update request...'); + return; + } + ev.emit('connection.update', { isOnline: isAvailableType }); + if (isAvailableType) { + void sendUnifiedSession(); + } + await sendNode({ + tag: 'presence', + attrs: { + name: me.name.replace(/@/g, ''), + type + } + }); + } + else { + const { server } = jidDecode(toJid); + const isLid = server === 'lid'; + await sendNode({ + tag: 'chatstate', + attrs: { + from: isLid ? me.lid : me.id, + to: toJid + }, + content: [ + { + tag: type === 'recording' ? 'composing' : type, + attrs: type === 'recording' ? { media: 'audio' } : {} + } + ] + }); + } + }; + /** + * @param toJid the jid to subscribe to + * @param tcToken token for subscription, use if present + */ + const presenceSubscribe = async (toJid) => { + // Only include tctoken for user JIDs — groups/newsletters don't use tctokens + const normalizedToJid = jidNormalizedUser(toJid); + const isUserJid = isPnUser(normalizedToJid) || isLidUser(normalizedToJid); + const tcTokenContent = isUserJid + ? await buildTcTokenFromJid({ authState, jid: normalizedToJid, getLIDForPN }) + : undefined; + return sendNode({ + tag: 'presence', + attrs: { + to: toJid, + id: generateMessageTag(), + type: 'subscribe' + }, + content: tcTokenContent + }); + }; + const handlePresenceUpdate = ({ tag, attrs, content }) => { + let presence; + const jid = attrs.from; + const participant = attrs.participant || attrs.from; + if (shouldIgnoreJid(jid) && jid !== S_WHATSAPP_NET) { + return; + } + if (tag === 'presence') { + presence = { + lastKnownPresence: attrs.type === 'unavailable' ? 'unavailable' : 'available', + lastSeen: attrs.last && attrs.last !== 'deny' ? +attrs.last : undefined + }; + } + else if (Array.isArray(content)) { + const [firstChild] = content; + let type = firstChild.tag; + if (type === 'paused') { + type = 'available'; + } + if (firstChild.attrs?.media === 'audio') { + type = 'recording'; + } + presence = { lastKnownPresence: type }; + } + else { + logger.error({ tag, attrs, content }, 'recv invalid presence node'); + } + if (presence) { + ev.emit('presence.update', { id: jid, presences: { [participant]: presence } }); + } + }; + const appPatch = async (patchCreate) => { + const name = patchCreate.type; + const myAppStateKeyId = authState.creds.myAppStateKeyId; + if (!myAppStateKeyId) { + throw new Boom('App state key not present!', { statusCode: 400 }); + } + let initial; + let encodeResult; + await appStatePatchMutex.mutex(async () => { + await authState.keys.transaction(async () => { + logger.debug({ patch: patchCreate }, 'applying app patch'); + await resyncAppState([name], false); + const { [name]: currentSyncVersion } = await authState.keys.get('app-state-sync-version', [name]); + initial = currentSyncVersion ? ensureLTHashStateVersion(currentSyncVersion) : newLTHashState(); + encodeResult = await encodeSyncdPatch(patchCreate, myAppStateKeyId, initial, getAppStateSyncKey); + const { patch, state } = encodeResult; + const node = { + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'w:sync:app:state' + }, + content: [ + { + tag: 'sync', + attrs: {}, + content: [ + { + tag: 'collection', + attrs: { + name, + version: (state.version - 1).toString(), + return_snapshot: 'false' + }, + content: [ + { + tag: 'patch', + attrs: {}, + content: proto.SyncdPatch.encode(patch).finish() + } + ] + } + ] + } + ] + }; + await query(node); + await authState.keys.set({ 'app-state-sync-version': { [name]: state } }); + }, authState?.creds?.me?.id || 'app-patch'); + }); + if (config.emitOwnEvents) { + const { onMutation } = newAppStateChunkHandler(false); + const { mutationMap } = await decodePatches(name, [{ ...encodeResult.patch, version: { version: encodeResult.state.version } }], initial, getAppStateSyncKey, config.options, undefined, logger); + for (const key in mutationMap) { + onMutation(mutationMap[key]); + } + } + }; + /** fetch AB props */ + const fetchProps = async () => { + const resultNode = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + xmlns: 'abt', + type: 'get' + }, + content: [ + { + tag: 'props', + attrs: { + protocol: '1', + ...(authState?.creds?.lastPropHash ? { hash: authState.creds.lastPropHash } : {}) + } + } + ] + }); + const propsNode = getBinaryNodeChild(resultNode, 'props'); + let props = {}; + if (propsNode) { + if (propsNode.attrs?.hash) { + // on some clients, the hash is returning as undefined + authState.creds.lastPropHash = propsNode?.attrs?.hash; + ev.emit('creds.update', authState.creds); + } + props = reduceBinaryNodeToDictionary(propsNode, 'prop'); + } + // Extract protocol-relevant AB props (only the ones we need) + const privacyTokenProp = props['10518'] ?? props['privacy_token_sending_on_all_1_on_1_messages']; + if (privacyTokenProp !== undefined) { + serverProps.privacyTokenOn1to1 = privacyTokenProp === 'true' || privacyTokenProp === '1'; + } + const profilePicProp = props['9666'] ?? props['profile_scraping_privacy_token_in_photo_iq']; + if (profilePicProp !== undefined) { + serverProps.profilePicPrivacyToken = profilePicProp === 'true' || profilePicProp === '1'; + } + const lidIssueProp = props['14303'] ?? props['lid_trusted_token_issue_to_lid']; + if (lidIssueProp !== undefined) { + serverProps.lidTrustedTokenIssueToLid = lidIssueProp === 'true' || lidIssueProp === '1'; + } + logger.debug({ serverProps }, 'fetched props'); + return props; + }; + /** + * modify a chat -- mark unread, read etc. + * lastMessages must be sorted in reverse chronologically + * requires the last messages till the last message received; required for archive & unread + */ + const chatModify = (mod, jid) => { + const patch = chatModificationToAppPatch(mod, jid); + return appPatch(patch); + }; + /** + * Enable/Disable link preview privacy, not related to baileys link preview generation + */ + const updateDisableLinkPreviewsPrivacy = (isPreviewsDisabled) => { + return chatModify({ + disableLinkPreviews: { isPreviewsDisabled } + }, ''); + }; + /** + * Star or Unstar a message + */ + const star = (jid, messages, star) => { + return chatModify({ + star: { + messages, + star + } + }, jid); + }; + /** + * Add or Edit Contact + */ + const addOrEditContact = (jid, contact) => { + return chatModify({ + contact + }, jid); + }; + /** + * Remove Contact + */ + const removeContact = (jid) => { + return chatModify({ + contact: null + }, jid); + }; + /** + * Adds label + */ + const addLabel = (jid, labels) => { + return chatModify({ + addLabel: { + ...labels + } + }, jid); + }; + /** + * Adds label for the chats + */ + const addChatLabel = (jid, labelId) => { + return chatModify({ + addChatLabel: { + labelId + } + }, jid); + }; + /** + * Removes label for the chat + */ + const removeChatLabel = (jid, labelId) => { + return chatModify({ + removeChatLabel: { + labelId + } + }, jid); + }; + /** + * Adds label for the message + */ + const addMessageLabel = (jid, messageId, labelId) => { + return chatModify({ + addMessageLabel: { + messageId, + labelId + } + }, jid); + }; + /** + * Removes label for the message + */ + const removeMessageLabel = (jid, messageId, labelId) => { + return chatModify({ + removeMessageLabel: { + messageId, + labelId + } + }, jid); + }; + /** + * Add or Edit Quick Reply + */ + const addOrEditQuickReply = (quickReply) => { + return chatModify({ + quickReply + }, ''); + }; + /** + * Remove Quick Reply + */ + const removeQuickReply = (timestamp) => { + return chatModify({ + quickReply: { timestamp, deleted: true } + }, ''); + }; + /** + * queries need to be fired on connection open + * help ensure parity with WA Web + * */ + const executeInitQueries = async () => { + await Promise.all([fetchProps(), fetchBlocklist(), fetchPrivacySettings()]); + }; + const upsertMessage = ev.createBufferedFunction(async (msg, type) => { + ev.emit('messages.upsert', { messages: [msg], type }); + if (!!msg.pushName) { + let jid = msg.key.fromMe ? authState.creds.me.id : msg.key.participant || msg.key.remoteJid; + jid = jidNormalizedUser(jid); + if (!msg.key.fromMe) { + ev.emit('contacts.update', [{ id: jid, notify: msg.pushName, verifiedName: msg.verifiedBizName }]); + } + // update our pushname too + if (msg.key.fromMe && msg.pushName && authState.creds.me?.name !== msg.pushName) { + ev.emit('creds.update', { me: { ...authState.creds.me, name: msg.pushName } }); + } + } + const historyMsg = getHistoryMsg(msg.message); + const shouldProcessHistoryMsg = historyMsg + ? shouldSyncHistoryMessage(historyMsg) && + PROCESSABLE_HISTORY_TYPES.includes(historyMsg.syncType) + : false; + if (historyMsg && shouldProcessHistoryMsg) { + const syncType = historyMsg.syncType; + // INITIAL_BOOTSTRAP — fire immediately, no progress check (same as WA Web K function) + if (syncType === proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP && + !historySyncStatus.initialBootstrapComplete) { + historySyncStatus.initialBootstrapComplete = true; + ev.emit('messaging-history.status', { + syncType, + status: 'complete', + explicit: true + }); + } + // RECENT with progress === 100 — explicit completion + if (syncType === proto.HistorySync.HistorySyncType.RECENT && + historyMsg.progress === 100 && + !historySyncStatus.recentSyncComplete) { + historySyncStatus.recentSyncComplete = true; + clearTimeout(historySyncPausedTimeout); + historySyncPausedTimeout = undefined; + ev.emit('messaging-history.status', { + syncType, + status: 'complete', + explicit: true + }); + } + // Reset 120s paused timeout on any RECENT chunk (like WA Web's handleChunkProgress) + if (syncType === proto.HistorySync.HistorySyncType.RECENT && !historySyncStatus.recentSyncComplete) { + clearTimeout(historySyncPausedTimeout); + historySyncPausedTimeout = setTimeout(() => { + if (!historySyncStatus.recentSyncComplete) { + historySyncStatus.recentSyncComplete = true; + ev.emit('messaging-history.status', { + syncType: proto.HistorySync.HistorySyncType.RECENT, + status: 'paused', + explicit: false + }); + } + historySyncPausedTimeout = undefined; + }, HISTORY_SYNC_PAUSED_TIMEOUT_MS); + } + } + // State machine: decide on sync and flush + if (historyMsg && syncState === SyncState.AwaitingInitialSync) { + if (awaitingSyncTimeout) { + clearTimeout(awaitingSyncTimeout); + awaitingSyncTimeout = undefined; + } + if (shouldProcessHistoryMsg) { + syncState = SyncState.Syncing; + logger.info('Transitioned to Syncing state'); + // Let doAppStateSync handle the final flush after it's done + } + else { + syncState = SyncState.Online; + logger.info('History sync skipped, transitioning to Online state and flushing buffer'); + ev.flush(); + } + } + const doAppStateSync = async () => { + if (syncState === SyncState.Syncing) { + // All collections will be synced, so clear any blocked ones + blockedCollections.clear(); + logger.info('Doing app state sync'); + await resyncAppState(ALL_WA_PATCH_NAMES, true); + // Sync is complete, go online and flush everything + syncState = SyncState.Online; + logger.info('App state sync complete, transitioning to Online state and flushing buffer'); + ev.flush(); + const accountSyncCounter = (authState.creds.accountSyncCounter || 0) + 1; + ev.emit('creds.update', { accountSyncCounter }); + } + }; + await Promise.all([ + (async () => { + if (shouldProcessHistoryMsg) { + await doAppStateSync(); + } + })(), + processMessage(msg, { + signalRepository, + shouldProcessHistoryMsg, + placeholderResendCache, + ev, + creds: authState.creds, + keyStore: authState.keys, + logger, + options: config.options, + getMessage + }) + ]); + // If the app state key arrives and we are waiting to sync, trigger the sync now. + if (msg.message?.protocolMessage?.appStateSyncKeyShare && syncState === SyncState.Syncing) { + logger.info('App state sync key arrived, triggering app state sync'); + await doAppStateSync(); + } + }); + ws.on('CB:presence', handlePresenceUpdate); + ws.on('CB:chatstate', handlePresenceUpdate); + ws.on('CB:ib,,dirty', async (node) => { + const { attrs } = getBinaryNodeChild(node, 'dirty'); + const type = attrs.type; + switch (type) { + case 'account_sync': + if (attrs.timestamp) { + let { lastAccountSyncTimestamp } = authState.creds; + if (lastAccountSyncTimestamp) { + await cleanDirtyBits('account_sync', lastAccountSyncTimestamp); + } + lastAccountSyncTimestamp = +attrs.timestamp; + ev.emit('creds.update', { lastAccountSyncTimestamp }); + } + break; + case 'groups': + // handled in groups.ts + break; + default: + logger.info({ node }, 'received unknown sync'); + break; + } + }); + ev.on('connection.update', ({ connection, receivedPendingNotifications }) => { + if (connection === 'close') { + blockedCollections.clear(); + clearTimeout(historySyncPausedTimeout); + historySyncPausedTimeout = undefined; + } + if (connection === 'open') { + if (fireInitQueries) { + executeInitQueries().catch(error => onUnexpectedError(error, 'init queries')); + } + sendPresenceUpdate(markOnlineOnConnect ? 'available' : 'unavailable').catch(error => onUnexpectedError(error, 'presence update requests')); + } + if (!receivedPendingNotifications || syncState !== SyncState.Connecting) { + return; + } + historySyncStatus.initialBootstrapComplete = false; + historySyncStatus.recentSyncComplete = false; + clearTimeout(historySyncPausedTimeout); + historySyncPausedTimeout = undefined; + syncState = SyncState.AwaitingInitialSync; + logger.info('Connection is now AwaitingInitialSync, buffering events'); + ev.buffer(); + const willSyncHistory = shouldSyncHistoryMessage(proto.Message.HistorySyncNotification.create({ + syncType: proto.HistorySync.HistorySyncType.RECENT + })); + if (!willSyncHistory) { + logger.info('History sync is disabled by config, not waiting for notification. Transitioning to Online.'); + syncState = SyncState.Online; + setTimeout(() => ev.flush(), 0); + return; + } + // On reconnection (accountSyncCounter > 0), the server does not push + // history sync notifications — the device already has its data. + // Skip the 20s wait and go online immediately. + if (authState.creds.accountSyncCounter > 0) { + logger.info('Reconnection with existing sync data, skipping history sync wait. Transitioning to Online.'); + syncState = SyncState.Online; + setTimeout(() => ev.flush(), 0); + return; + } + logger.info('First connection, awaiting history sync notification with a 20s timeout.'); + if (awaitingSyncTimeout) { + clearTimeout(awaitingSyncTimeout); + } + awaitingSyncTimeout = setTimeout(() => { + if (syncState === SyncState.AwaitingInitialSync) { + logger.warn('Timeout in AwaitingInitialSync, forcing state to Online and flushing buffer'); + syncState = SyncState.Online; + ev.flush(); + // Increment so subsequent reconnections skip the 20s wait. + // Late-arriving history is still processed via processMessage + // regardless of the state machine phase. + const accountSyncCounter = (authState.creds.accountSyncCounter || 0) + 1; + ev.emit('creds.update', { accountSyncCounter }); + } + }, 20000); + }); + // When an app state sync key arrives (myAppStateKeyId is set) and there are + // collections blocked on a missing key, trigger a re-sync for just those collections. + // This mirrors WA Web's Blocked → retry-on-key-arrival behavior. + ev.on('creds.update', ({ myAppStateKeyId }) => { + if (!myAppStateKeyId || blockedCollections.size === 0) { + return; + } + // If we're in the middle of a full sync, doAppStateSync handles all collections + if (syncState === SyncState.Syncing) { + blockedCollections.clear(); + return; + } + const collections = [...blockedCollections]; + blockedCollections.clear(); + logger.info({ collections }, 'app state sync key arrived, re-syncing blocked collections'); + resyncAppState(collections, false).catch(error => onUnexpectedError(error, 'blocked collections resync')); + }); + ev.on('lid-mapping.update', async ({ lid, pn }) => { + try { + await signalRepository.lidMapping.storeLIDPNMappings([{ lid, pn }]); + } + catch (error) { + logger.warn({ lid, pn, error }, 'Failed to store LID-PN mapping'); + } + }); + registerSocketEndHandler(() => { + if (awaitingSyncTimeout) { + clearTimeout(awaitingSyncTimeout); + awaitingSyncTimeout = undefined; + } + if (!config.placeholderResendCache && placeholderResendCache.close) { + placeholderResendCache.close(); + } + syncState = SyncState.Connecting; + privacySettings = undefined; + }); + return { + ...sock, + serverProps, + createCallLink, + getBotListV2, + messageMutex, + receiptMutex, + appStatePatchMutex, + notificationMutex, + fetchPrivacySettings, + upsertMessage, + appPatch, + sendPresenceUpdate, + presenceSubscribe, + profilePictureUrl, + fetchBlocklist, + fetchStatus, + fetchDisappearingDuration, + updateProfilePicture, + removeProfilePicture, + updateProfileStatus, + updateProfileName, + updateBlockStatus, + updateDisableLinkPreviewsPrivacy, + updateCallPrivacy, + updateMessagesPrivacy, + updateLastSeenPrivacy, + updateOnlinePrivacy, + updateProfilePicturePrivacy, + updateStatusPrivacy, + updateReadReceiptsPrivacy, + updateGroupsAddPrivacy, + updateDefaultDisappearingMode, + getBusinessProfile, + resyncAppState, + chatModify, + cleanDirtyBits, + addOrEditContact, + removeContact, + placeholderResendCache, + addLabel, + addChatLabel, + removeChatLabel, + addMessageLabel, + removeMessageLabel, + star, + addOrEditQuickReply, + removeQuickReply + }; +}; +//# sourceMappingURL=chats.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/chats.js.map b/packages/transport/vendor/lib/Socket/chats.js.map new file mode 100644 index 0000000..69adf6c --- /dev/null +++ b/packages/transport/vendor/lib/Socket/chats.js.map @@ -0,0 +1 @@ +{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/Socket/chats.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/communities.d.ts b/packages/transport/vendor/lib/Socket/communities.d.ts new file mode 100644 index 0000000..3dbe53d --- /dev/null +++ b/packages/transport/vendor/lib/Socket/communities.d.ts @@ -0,0 +1,273 @@ +import { proto } from '../../WAProto/index.js'; +import { type GroupMetadata, type ParticipantAction, type SocketConfig, type WAMessageKey } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +export declare const makeCommunitiesSocket: (config: SocketConfig) => { + communityMetadata: (jid: string) => Promise; + communityCreate: (subject: string, body: string) => Promise; + communityCreateGroup: (subject: string, participants: string[], parentCommunityJid: string) => Promise; + communityLeave: (id: string) => Promise; + communityUpdateSubject: (jid: string, subject: string) => Promise; + communityLinkGroup: (groupJid: string, parentCommunityJid: string) => Promise; + communityUnlinkGroup: (groupJid: string, parentCommunityJid: string) => Promise; + communityFetchLinkedGroups: (jid: string) => Promise<{ + communityJid: string; + isCommunity: boolean; + linkedGroups: { + id: string | undefined; + subject: string; + creation: number | undefined; + owner: string | undefined; + size: number | undefined; + }[]; + }>; + communityRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + communityRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + communityParticipantsUpdate: (jid: string, participants: string[], action: ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: BinaryNode; + }[]>; + communityUpdateDescription: (jid: string, description?: string) => Promise; + communityInviteCode: (jid: string) => Promise; + communityRevokeInvite: (jid: string) => Promise; + communityAcceptInvite: (code: string) => Promise; + /** + * revoke a v4 invite for someone + * @param communityJid community jid + * @param invitedJid jid of person you invited + * @returns true if successful + */ + communityRevokeInviteV4: (communityJid: string, invitedJid: string) => Promise; + /** + * accept a CommunityInviteMessage + * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite + * @param inviteMessage the message to accept + */ + communityAcceptInviteV4: (key: string | WAMessageKey, inviteMessage: proto.Message.IGroupInviteMessage) => Promise; + communityGetInviteInfo: (code: string) => Promise; + communityToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + communitySettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + communityMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + communityJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + communityFetchAllParticipating: () => Promise<{ + [_: string]: GroupMetadata; + }>; + logger: import("../Utils/logger.js").ILogger; + getOrderDetails: (orderId: string, tokenBase64: string) => Promise; + getCatalog: ({ jid, limit, cursor }: import("../Types/index.js").GetCatalogOptions) => Promise<{ + products: import("../Types/index.js").Product[]; + nextPageCursor: string | undefined; + }>; + getCollections: (jid?: string, limit?: number) => Promise<{ + collections: import("../Types/index.js").CatalogCollection[]; + }>; + productCreate: (create: import("../Types/index.js").ProductCreate) => Promise; + productDelete: (productIds: string[]) => Promise<{ + deleted: number; + }>; + productUpdate: (productId: string, update: import("../Types/index.js").ProductUpdate) => Promise; + updateBussinesProfile: (args: import("../Types/Bussines.js").UpdateBussinesProfileProps) => Promise; + updateCoverPhoto: (photo: import("../Types/index.js").WAMediaUpload) => Promise; + removeCoverPhoto: (id: string) => Promise; + sendMessageAck: (node: BinaryNode, errorCode?: number) => Promise; + sendRetryRequest: (node: BinaryNode, forceIncludeKeys?: boolean) => Promise; + rejectCall: (callId: string, callFrom: string) => Promise; + fetchMessageHistory: (count: number, oldestMsgKey: WAMessageKey, oldestMsgTimestamp: number | Long) => Promise; + requestPlaceholderResend: (messageKey: WAMessageKey, msgData?: Partial) => Promise; + messageRetryManager: import("../Utils/index.js").MessageRetryManager | null; + userDevicesCache: import("../Types/index.js").PossiblyExtendedCacheStore | import("@cacheable/node-cache").NodeCache; + devicesMutex: { + mutex(code: () => Promise | T): Promise; + }; + issuePrivacyTokens: (jids: string[], timestamp?: number) => Promise; + assertSessions: (jids: string[], force?: boolean) => Promise; + relayMessage: (jid: string, message: proto.IMessage, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }: import("../Types/index.js").MessageRelayOptions) => Promise; + sendReceipt: (jid: string, participant: string | undefined, messageIds: string[], type: import("../Types/index.js").MessageReceiptType) => Promise; + sendReceipts: (keys: WAMessageKey[], type: import("../Types/index.js").MessageReceiptType) => Promise; + readMessages: (keys: WAMessageKey[]) => Promise; + refreshMediaConn: (forceGet?: boolean) => Promise; + getMediaHost: () => string; + waUploadToServer: import("../Types/index.js").WAMediaUploadFunction; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + sendPeerDataOperationMessage: (pdoMessage: proto.Message.IPeerDataOperationRequestMessage) => Promise; + createParticipantNodes: (recipientJids: string[], message: proto.IMessage, extraAttrs?: BinaryNode["attrs"], dsmMessage?: proto.IMessage) => Promise<{ + nodes: BinaryNode[]; + shouldIncludeDeviceIdentity: boolean; + }>; + getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<(import("../WABinary/index.js").JidWithDevice & { + jid: string; + })[]>; + updateMemberLabel: (jid: string, memberLabel: string) => Promise; + updateMediaMessage: (message: import("../Types/index.js").WAMessage) => Promise; + sendMessage: (jid: string, content: import("../Types/index.js").AnyMessageContent, options?: import("../Types/index.js").MiscMessageGenerationOptions) => Promise; + newsletterCreate: (name: string, description?: string) => Promise; + newsletterUpdate: (jid: string, updates: import("../Types/index.js").NewsletterUpdate) => Promise; + newsletterSubscribers: (jid: string) => Promise<{ + subscribers: number; + }>; + newsletterMetadata: (type: "invite" | "jid", key: string) => Promise; + newsletterFollow: (jid: string) => Promise; + newsletterUnfollow: (jid: string) => Promise; + newsletterMute: (jid: string) => Promise; + newsletterUnmute: (jid: string) => Promise; + newsletterUpdateName: (jid: string, name: string) => Promise; + newsletterUpdateDescription: (jid: string, description: string) => Promise; + newsletterUpdatePicture: (jid: string, content: import("../Types/index.js").WAMediaUpload) => Promise; + newsletterRemovePicture: (jid: string) => Promise; + newsletterReactMessage: (jid: string, serverId: string, reaction?: string) => Promise; + newsletterFetchMessages: (jid: string, count: number, since: number, after: number) => Promise; + subscribeNewsletterUpdates: (jid: string) => Promise<{ + duration: string; + } | null>; + newsletterAdminCount: (jid: string) => Promise; + newsletterChangeOwner: (jid: string, newOwnerJid: string) => Promise; + newsletterDemote: (jid: string, userJid: string) => Promise; + newsletterDelete: (jid: string) => Promise; + groupMetadata: (jid: string) => Promise; + groupCreate: (subject: string, participants: string[]) => Promise; + groupLeave: (id: string) => Promise; + groupUpdateSubject: (jid: string, subject: string) => Promise; + groupRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + groupParticipantsUpdate: (jid: string, participants: string[], action: ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: BinaryNode; + }[]>; + groupUpdateDescription: (jid: string, description?: string) => Promise; + groupInviteCode: (jid: string) => Promise; + groupRevokeInvite: (jid: string) => Promise; + groupAcceptInvite: (code: string) => Promise; + groupRevokeInviteV4: (groupJid: string, invitedJid: string) => Promise; + groupAcceptInviteV4: (key: string | WAMessageKey, inviteMessage: proto.Message.IGroupInviteMessage) => Promise; + groupGetInviteInfo: (code: string) => Promise; + groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + groupSettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + groupMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + groupFetchAllParticipating: () => Promise<{ + [_: string]: GroupMetadata; + }>; + serverProps: { + privacyTokenOn1to1: boolean; + profilePicPrivacyToken: boolean; + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + upsertMessage: (msg: import("../Types/index.js").WAMessage, type: import("../Types/index.js").MessageUpsertType) => Promise; + appPatch: (patchCreate: import("../Types/index.js").WAPatchCreate) => Promise; + sendPresenceUpdate: (type: import("../Types/index.js").WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: import("../Types/index.js").WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: import("../Types/index.js").WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: import("../Types/index.js").WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: import("../Types/index.js").WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: import("../Types/index.js").WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: import("../Types/index.js").WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: import("../Types/index.js").ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: import("../Types/index.js").CacheStore; + addLabel: (jid: string, labels: import("../Types/Label.js").LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: import("../Types/Bussines.js").QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/websocket.js").WebSocketClient; + ev: import("../Types/index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../Types/index.js").AuthenticationCreds; + keys: import("../Types/index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../Types/index.js").SignalRepositoryWithLIDStore; + user: import("../Types/index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | import("@hapi/boom").Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: import("../index.js").USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +export declare const extractCommunityMetadata: (result: BinaryNode) => GroupMetadata; +//# sourceMappingURL=communities.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/communities.d.ts.map b/packages/transport/vendor/lib/Socket/communities.d.ts.map new file mode 100644 index 0000000..a0f8291 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/communities.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"communities.d.ts","sourceRoot":"","sources":["../../src/Socket/communities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EACN,KAAK,aAAa,EAElB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EAEjB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,KAAK,UAAU,EAMf,MAAM,aAAa,CAAA;AAGpB,eAAO,MAAM,qBAAqB,GAAI,QAAQ,YAAY;6BAenB,MAAM;+BA8EV,MAAM,QAAQ,MAAM;oCAqCf,MAAM,gBAAgB,MAAM,EAAE,sBAAsB,MAAM;yBAoBrE,MAAM;kCASG,MAAM,WAAW,MAAM;mCAStB,MAAM,sBAAsB,MAAM;qCAehC,MAAM,sBAAsB,MAAM;sCASjC,MAAM;;;;;;;;;;;4CAsCA,MAAM;;;8CAWJ,MAAM,gBAAgB,MAAM,EAAE,UAAU,SAAS,GAAG,QAAQ;;;;uCAwBnE,MAAM,gBAAgB,MAAM,EAAE,UAAU,iBAAiB;;;;;sCAiB1D,MAAM,gBAAgB,MAAM;+BAenC,MAAM;iCAKJ,MAAM;kCAKL,MAAM;IAM1C;;;;;OAKG;4CAC2C,MAAM,cAAc,MAAM;IAOxE;;;;OAIG;;mCAsDkC,MAAM;oCAIL,MAAM,uBAAuB,MAAM;kCAOnE,MAAM,WACF,cAAc,GAAG,kBAAkB,GAAG,QAAQ,GAAG,UAAU;kCAIjC,MAAM,QAAQ,WAAW,GAAG,gBAAgB;qCAGzC,MAAM,QAAQ,IAAI,GAAG,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqD+lb,CAAC;;;;;;;;;0DA7Z9ob,GAAG,0BACpB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8WN,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,QAAQ,UAAU,kBA2C1D,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/communities.js b/packages/transport/vendor/lib/Socket/communities.js new file mode 100644 index 0000000..f437586 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/communities.js @@ -0,0 +1,431 @@ +import { proto } from '../../WAProto/index.js'; +import { WAMessageStubType } from '../Types/index.js'; +import { generateMessageID, generateMessageIDV2, unixTimestampSeconds } from '../Utils/index.js'; +import logger from '../Utils/logger.js'; +import { getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString, jidEncode, jidNormalizedUser } from '../WABinary/index.js'; +import { makeBusinessSocket } from './business.js'; +export const makeCommunitiesSocket = (config) => { + const sock = makeBusinessSocket(config); + const { authState, ev, query, upsertMessage } = sock; + const communityQuery = async (jid, type, content) => query({ + tag: 'iq', + attrs: { + type, + xmlns: 'w:g2', + to: jid + }, + content + }); + const communityMetadata = async (jid) => { + const result = await communityQuery(jid, 'get', [{ tag: 'query', attrs: { request: 'interactive' } }]); + return extractCommunityMetadata(result); + }; + const communityFetchAllParticipating = async () => { + const result = await query({ + tag: 'iq', + attrs: { + to: '@g.us', + xmlns: 'w:g2', + type: 'get' + }, + content: [ + { + tag: 'participating', + attrs: {}, + content: [ + { tag: 'participants', attrs: {} }, + { tag: 'description', attrs: {} } + ] + } + ] + }); + const data = {}; + const communitiesChild = getBinaryNodeChild(result, 'communities'); + if (communitiesChild) { + const communities = getBinaryNodeChildren(communitiesChild, 'community'); + for (const communityNode of communities) { + const meta = extractCommunityMetadata({ + tag: 'result', + attrs: {}, + content: [communityNode] + }); + data[meta.id] = meta; + } + } + sock.ev.emit('groups.update', Object.values(data)); + return data; + }; + async function parseGroupResult(node) { + logger.info({ node }, 'parseGroupResult'); + const groupNode = getBinaryNodeChild(node, 'group'); + if (groupNode) { + try { + logger.info({ groupNode }, 'groupNode'); + const metadata = await sock.groupMetadata(`${groupNode.attrs.id}@g.us`); + return metadata ? metadata : Optional.empty(); + } + catch (error) { + console.error('Error parsing group metadata:', error); + return Optional.empty(); + } + } + return Optional.empty(); + } + const Optional = { + empty: () => null, + of: (value) => (value !== null ? { value } : null) + }; + sock.ws.on('CB:ib,,dirty', async (node) => { + const { attrs } = getBinaryNodeChild(node, 'dirty'); + if (attrs.type !== 'communities') { + return; + } + await communityFetchAllParticipating(); + await sock.cleanDirtyBits('groups'); + }); + return { + ...sock, + communityMetadata, + communityCreate: async (subject, body) => { + const descriptionId = generateMessageID().substring(0, 12); + const result = await communityQuery('@g.us', 'set', [ + { + tag: 'create', + attrs: { subject }, + content: [ + { + tag: 'description', + attrs: { id: descriptionId }, + content: [ + { + tag: 'body', + attrs: {}, + content: Buffer.from(body || '', 'utf-8') + } + ] + }, + { + tag: 'parent', + attrs: { default_membership_approval_mode: 'request_required' } + }, + { + tag: 'allow_non_admin_sub_group_creation', + attrs: {} + }, + { + tag: 'create_general_chat', + attrs: {} + } + ] + } + ]); + return await parseGroupResult(result); + }, + communityCreateGroup: async (subject, participants, parentCommunityJid) => { + const key = generateMessageIDV2(); + const result = await communityQuery('@g.us', 'set', [ + { + tag: 'create', + attrs: { + subject, + key + }, + content: [ + ...participants.map(jid => ({ + tag: 'participant', + attrs: { jid } + })), + { tag: 'linked_parent', attrs: { jid: parentCommunityJid } } + ] + } + ]); + return await parseGroupResult(result); + }, + communityLeave: async (id) => { + await communityQuery('@g.us', 'set', [ + { + tag: 'leave', + attrs: {}, + content: [{ tag: 'community', attrs: { id } }] + } + ]); + }, + communityUpdateSubject: async (jid, subject) => { + await communityQuery(jid, 'set', [ + { + tag: 'subject', + attrs: {}, + content: Buffer.from(subject, 'utf-8') + } + ]); + }, + communityLinkGroup: async (groupJid, parentCommunityJid) => { + await communityQuery(parentCommunityJid, 'set', [ + { + tag: 'links', + attrs: {}, + content: [ + { + tag: 'link', + attrs: { link_type: 'sub_group' }, + content: [{ tag: 'group', attrs: { jid: groupJid } }] + } + ] + } + ]); + }, + communityUnlinkGroup: async (groupJid, parentCommunityJid) => { + await communityQuery(parentCommunityJid, 'set', [ + { + tag: 'unlink', + attrs: { unlink_type: 'sub_group' }, + content: [{ tag: 'group', attrs: { jid: groupJid } }] + } + ]); + }, + communityFetchLinkedGroups: async (jid) => { + let communityJid = jid; + let isCommunity = false; + // Try to determine if it is a subgroup or a community + const metadata = await sock.groupMetadata(jid); + if (metadata.linkedParent) { + // It is a subgroup, get the community jid + communityJid = metadata.linkedParent; + } + else { + // It is a community + isCommunity = true; + } + // Fetch all subgroups of the community + const result = await communityQuery(communityJid, 'get', [{ tag: 'sub_groups', attrs: {} }]); + const linkedGroupsData = []; + const subGroupsNode = getBinaryNodeChild(result, 'sub_groups'); + if (subGroupsNode) { + const groupNodes = getBinaryNodeChildren(subGroupsNode, 'group'); + for (const groupNode of groupNodes) { + linkedGroupsData.push({ + id: groupNode.attrs.id ? jidEncode(groupNode.attrs.id, 'g.us') : undefined, + subject: groupNode.attrs.subject || '', + creation: groupNode.attrs.creation ? Number(groupNode.attrs.creation) : undefined, + owner: groupNode.attrs.creator ? jidNormalizedUser(groupNode.attrs.creator) : undefined, + size: groupNode.attrs.size ? Number(groupNode.attrs.size) : undefined + }); + } + } + return { + communityJid, + isCommunity, + linkedGroups: linkedGroupsData + }; + }, + communityRequestParticipantsList: async (jid) => { + const result = await communityQuery(jid, 'get', [ + { + tag: 'membership_approval_requests', + attrs: {} + } + ]); + const node = getBinaryNodeChild(result, 'membership_approval_requests'); + const participants = getBinaryNodeChildren(node, 'membership_approval_request'); + return participants.map(v => v.attrs); + }, + communityRequestParticipantsUpdate: async (jid, participants, action) => { + const result = await communityQuery(jid, 'set', [ + { + tag: 'membership_requests_action', + attrs: {}, + content: [ + { + tag: action, + attrs: {}, + content: participants.map(jid => ({ + tag: 'participant', + attrs: { jid } + })) + } + ] + } + ]); + const node = getBinaryNodeChild(result, 'membership_requests_action'); + const nodeAction = getBinaryNodeChild(node, action); + const participantsAffected = getBinaryNodeChildren(nodeAction, 'participant'); + return participantsAffected.map(p => { + return { status: p.attrs.error || '200', jid: p.attrs.jid }; + }); + }, + communityParticipantsUpdate: async (jid, participants, action) => { + const result = await communityQuery(jid, 'set', [ + { + tag: action, + attrs: action === 'remove' ? { linked_groups: 'true' } : {}, + content: participants.map(jid => ({ + tag: 'participant', + attrs: { jid } + })) + } + ]); + const node = getBinaryNodeChild(result, action); + const participantsAffected = getBinaryNodeChildren(node, 'participant'); + return participantsAffected.map(p => { + return { status: p.attrs.error || '200', jid: p.attrs.jid, content: p }; + }); + }, + communityUpdateDescription: async (jid, description) => { + const metadata = await communityMetadata(jid); + const prev = metadata.descId ?? null; + await communityQuery(jid, 'set', [ + { + tag: 'description', + attrs: { + ...(description ? { id: generateMessageID() } : { delete: 'true' }), + ...(prev ? { prev } : {}) + }, + content: description ? [{ tag: 'body', attrs: {}, content: Buffer.from(description, 'utf-8') }] : undefined + } + ]); + }, + communityInviteCode: async (jid) => { + const result = await communityQuery(jid, 'get', [{ tag: 'invite', attrs: {} }]); + const inviteNode = getBinaryNodeChild(result, 'invite'); + return inviteNode?.attrs.code; + }, + communityRevokeInvite: async (jid) => { + const result = await communityQuery(jid, 'set', [{ tag: 'invite', attrs: {} }]); + const inviteNode = getBinaryNodeChild(result, 'invite'); + return inviteNode?.attrs.code; + }, + communityAcceptInvite: async (code) => { + const results = await communityQuery('@g.us', 'set', [{ tag: 'invite', attrs: { code } }]); + const result = getBinaryNodeChild(results, 'community'); + return result?.attrs.jid; + }, + /** + * revoke a v4 invite for someone + * @param communityJid community jid + * @param invitedJid jid of person you invited + * @returns true if successful + */ + communityRevokeInviteV4: async (communityJid, invitedJid) => { + const result = await communityQuery(communityJid, 'set', [ + { tag: 'revoke', attrs: {}, content: [{ tag: 'participant', attrs: { jid: invitedJid } }] } + ]); + return !!result; + }, + /** + * accept a CommunityInviteMessage + * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite + * @param inviteMessage the message to accept + */ + communityAcceptInviteV4: ev.createBufferedFunction(async (key, inviteMessage) => { + key = typeof key === 'string' ? { remoteJid: key } : key; + const results = await communityQuery(inviteMessage.groupJid, 'set', [ + { + tag: 'accept', + attrs: { + code: inviteMessage.inviteCode, + expiration: inviteMessage.inviteExpiration.toString(), + admin: key.remoteJid + } + } + ]); + // if we have the full message key + // update the invite message to be expired + if (key.id) { + // create new invite message that is expired + inviteMessage = proto.Message.GroupInviteMessage.fromObject(inviteMessage); + inviteMessage.inviteExpiration = 0; + inviteMessage.inviteCode = ''; + ev.emit('messages.update', [ + { + key, + update: { + message: { + groupInviteMessage: inviteMessage + } + } + } + ]); + } + // generate the community add message + await upsertMessage({ + key: { + remoteJid: inviteMessage.groupJid, + id: generateMessageIDV2(sock.user?.id), + fromMe: false, + participant: key.remoteJid // TODO: investigate if this makes any sense at all + }, + messageStubType: WAMessageStubType.GROUP_PARTICIPANT_ADD, + messageStubParameters: [JSON.stringify(authState.creds.me)], + participant: key.remoteJid, + messageTimestamp: unixTimestampSeconds() + }, 'notify'); + return results.attrs.from; + }), + communityGetInviteInfo: async (code) => { + const results = await communityQuery('@g.us', 'get', [{ tag: 'invite', attrs: { code } }]); + return extractCommunityMetadata(results); + }, + communityToggleEphemeral: async (jid, ephemeralExpiration) => { + const content = ephemeralExpiration + ? { tag: 'ephemeral', attrs: { expiration: ephemeralExpiration.toString() } } + : { tag: 'not_ephemeral', attrs: {} }; + await communityQuery(jid, 'set', [content]); + }, + communitySettingUpdate: async (jid, setting) => { + await communityQuery(jid, 'set', [{ tag: setting, attrs: {} }]); + }, + communityMemberAddMode: async (jid, mode) => { + await communityQuery(jid, 'set', [{ tag: 'member_add_mode', attrs: {}, content: mode }]); + }, + communityJoinApprovalMode: async (jid, mode) => { + await communityQuery(jid, 'set', [ + { tag: 'membership_approval_mode', attrs: {}, content: [{ tag: 'community_join', attrs: { state: mode } }] } + ]); + }, + communityFetchAllParticipating + }; +}; +export const extractCommunityMetadata = (result) => { + const community = getBinaryNodeChild(result, 'community'); + const descChild = getBinaryNodeChild(community, 'description'); + let desc; + let descId; + if (descChild) { + desc = getBinaryNodeChildString(descChild, 'body'); + descId = descChild.attrs.id; + } + const communityId = community.attrs.id?.includes('@') + ? community.attrs.id + : jidEncode(community.attrs.id || '', 'g.us'); + const eph = getBinaryNodeChild(community, 'ephemeral')?.attrs.expiration; + const memberAddMode = getBinaryNodeChildString(community, 'member_add_mode') === 'all_member_add'; + const metadata = { + id: communityId, + subject: community.attrs.subject || '', + subjectOwner: community.attrs.s_o, + subjectTime: Number(community.attrs.s_t || 0), + size: getBinaryNodeChildren(community, 'participant').length, + creation: Number(community.attrs.creation || 0), + owner: community.attrs.creator ? jidNormalizedUser(community.attrs.creator) : undefined, + desc, + descId, + linkedParent: getBinaryNodeChild(community, 'linked_parent')?.attrs.jid || undefined, + restrict: !!getBinaryNodeChild(community, 'locked'), + announce: !!getBinaryNodeChild(community, 'announcement'), + isCommunity: !!getBinaryNodeChild(community, 'parent'), + isCommunityAnnounce: !!getBinaryNodeChild(community, 'default_sub_community'), + joinApprovalMode: !!getBinaryNodeChild(community, 'membership_approval_mode'), + memberAddMode, + participants: getBinaryNodeChildren(community, 'participant').map(({ attrs }) => { + return { + // TODO: IMPLEMENT THE PN/LID FIELDS HERE!! + id: attrs.jid, + admin: (attrs.type || null) + }; + }), + ephemeralDuration: eph ? +eph : undefined, + addressingMode: getBinaryNodeChildString(community, 'addressing_mode') + }; + return metadata; +}; +//# sourceMappingURL=communities.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/communities.js.map b/packages/transport/vendor/lib/Socket/communities.js.map new file mode 100644 index 0000000..fbbec69 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/communities.js.map @@ -0,0 +1 @@ +{"version":3,"file":"communities.js","sourceRoot":"","sources":["../../src/Socket/communities.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/groups.d.ts b/packages/transport/vendor/lib/Socket/groups.d.ts new file mode 100644 index 0000000..c397257 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/groups.d.ts @@ -0,0 +1,161 @@ +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import type { GroupMetadata, ParticipantAction, SocketConfig, WAMessageKey } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +export declare const makeGroupsSocket: (config: SocketConfig) => { + groupMetadata: (jid: string) => Promise; + groupCreate: (subject: string, participants: string[]) => Promise; + groupLeave: (id: string) => Promise; + groupUpdateSubject: (jid: string, subject: string) => Promise; + groupRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + groupParticipantsUpdate: (jid: string, participants: string[], action: ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: BinaryNode; + }[]>; + groupUpdateDescription: (jid: string, description?: string) => Promise; + groupInviteCode: (jid: string) => Promise; + groupRevokeInvite: (jid: string) => Promise; + groupAcceptInvite: (code: string) => Promise; + /** + * revoke a v4 invite for someone + * @param groupJid group jid + * @param invitedJid jid of person you invited + * @returns true if successful + */ + groupRevokeInviteV4: (groupJid: string, invitedJid: string) => Promise; + /** + * accept a GroupInviteMessage + * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite + * @param inviteMessage the message to accept + */ + groupAcceptInviteV4: (key: string | WAMessageKey, inviteMessage: proto.Message.IGroupInviteMessage) => Promise; + groupGetInviteInfo: (code: string) => Promise; + groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + groupSettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + groupMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + groupFetchAllParticipating: () => Promise<{ + [_: string]: GroupMetadata; + }>; + serverProps: { + privacyTokenOn1to1: boolean; + profilePicPrivacyToken: boolean; + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + upsertMessage: (msg: import("../Types/index.js").WAMessage, type: import("../Types/index.js").MessageUpsertType) => Promise; + appPatch: (patchCreate: import("../Types/index.js").WAPatchCreate) => Promise; + sendPresenceUpdate: (type: import("../Types/index.js").WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: import("../Types/index.js").WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: import("../Types/index.js").WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: import("../Types/index.js").WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: import("../Types/index.js").WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: import("../Types/index.js").WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: import("../Types/index.js").WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: import("../Types/index.js").ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: import("../Types/index.js").CacheStore; + addLabel: (jid: string, labels: import("../Types/Label.js").LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: import("../Types/Bussines.js").QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/websocket.js").WebSocketClient; + ev: import("../Types/index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../Types/index.js").AuthenticationCreds; + keys: import("../Types/index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../Types/index.js").SignalRepositoryWithLIDStore; + user: import("../Types/index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: import("../index.js").USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +export declare const extractGroupMetadata: (result: BinaryNode) => GroupMetadata; +export type GroupsSocket = ReturnType; +//# sourceMappingURL=groups.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/groups.d.ts.map b/packages/transport/vendor/lib/Socket/groups.d.ts.map new file mode 100644 index 0000000..38dbf0a --- /dev/null +++ b/packages/transport/vendor/lib/Socket/groups.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/Socket/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAoB,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG9G,OAAO,EACN,KAAK,UAAU,EAQf,MAAM,aAAa,CAAA;AAGpB,eAAO,MAAM,gBAAgB,GAAI,QAAQ,YAAY;yBAelB,MAAM;2BAyDV,MAAM,gBAAgB,MAAM,EAAE;qBAiBpC,MAAM;8BASG,MAAM,WAAW,MAAM;wCASb,MAAM;;;0CAWJ,MAAM,gBAAgB,MAAM,EAAE,UAAU,SAAS,GAAG,QAAQ;;;;mCAwBnE,MAAM,gBAAgB,MAAM,EAAE,UAAU,iBAAiB;;;;;kCAiB1D,MAAM,gBAAgB,MAAM;2BAenC,MAAM;6BAKJ,MAAM;8BAKL,MAAM;IAMtC;;;;;OAKG;oCACmC,MAAM,cAAc,MAAM;IAOhE;;;;OAIG;;+BAsD8B,MAAM;gCAIL,MAAM,uBAAuB,MAAM;8BAMrC,MAAM,WAAW,cAAc,GAAG,kBAAkB,GAAG,QAAQ,GAAG,UAAU;8BAG5E,MAAM,QAAQ,WAAW,GAAG,gBAAgB;iCAGzC,MAAM,QAAQ,IAAI,GAAG,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA0Fgrf,CAAC;;;;;;;;;0DAnU3tf,GAAG,0BACd,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+OZ,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,UAAU,kBA8EtD,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/groups.js b/packages/transport/vendor/lib/Socket/groups.js new file mode 100644 index 0000000..df19870 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/groups.js @@ -0,0 +1,347 @@ +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import { WAMessageAddressingMode, WAMessageStubType } from '../Types/index.js'; +import { generateMessageIDV2, unixTimestampSeconds } from '../Utils/index.js'; +import { getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString, isLidUser, isPnUser, jidEncode, jidNormalizedUser } from '../WABinary/index.js'; +import { makeChatsSocket } from './chats.js'; +export const makeGroupsSocket = (config) => { + const sock = makeChatsSocket(config); + const { authState, ev, query, upsertMessage } = sock; + const groupQuery = async (jid, type, content) => query({ + tag: 'iq', + attrs: { + type, + xmlns: 'w:g2', + to: jid + }, + content + }); + const groupMetadata = async (jid) => { + const result = await groupQuery(jid, 'get', [{ tag: 'query', attrs: { request: 'interactive' } }]); + return extractGroupMetadata(result); + }; + const groupFetchAllParticipating = async () => { + const result = await query({ + tag: 'iq', + attrs: { + to: '@g.us', + xmlns: 'w:g2', + type: 'get' + }, + content: [ + { + tag: 'participating', + attrs: {}, + content: [ + { tag: 'participants', attrs: {} }, + { tag: 'description', attrs: {} } + ] + } + ] + }); + const data = {}; + const groupsChild = getBinaryNodeChild(result, 'groups'); + if (groupsChild) { + const groups = getBinaryNodeChildren(groupsChild, 'group'); + for (const groupNode of groups) { + const meta = extractGroupMetadata({ + tag: 'result', + attrs: {}, + content: [groupNode] + }); + data[meta.id] = meta; + } + } + // TODO: properly parse LID / PN DATA + sock.ev.emit('groups.update', Object.values(data)); + return data; + }; + sock.ws.on('CB:ib,,dirty', async (node) => { + const { attrs } = getBinaryNodeChild(node, 'dirty'); + if (attrs.type !== 'groups') { + return; + } + await groupFetchAllParticipating(); + await sock.cleanDirtyBits('groups'); + }); + return { + ...sock, + groupMetadata, + groupCreate: async (subject, participants) => { + const key = generateMessageIDV2(); + const result = await groupQuery('@g.us', 'set', [ + { + tag: 'create', + attrs: { + subject, + key + }, + content: participants.map(jid => ({ + tag: 'participant', + attrs: { jid } + })) + } + ]); + return extractGroupMetadata(result); + }, + groupLeave: async (id) => { + await groupQuery('@g.us', 'set', [ + { + tag: 'leave', + attrs: {}, + content: [{ tag: 'group', attrs: { id } }] + } + ]); + }, + groupUpdateSubject: async (jid, subject) => { + await groupQuery(jid, 'set', [ + { + tag: 'subject', + attrs: {}, + content: Buffer.from(subject, 'utf-8') + } + ]); + }, + groupRequestParticipantsList: async (jid) => { + const result = await groupQuery(jid, 'get', [ + { + tag: 'membership_approval_requests', + attrs: {} + } + ]); + const node = getBinaryNodeChild(result, 'membership_approval_requests'); + const participants = getBinaryNodeChildren(node, 'membership_approval_request'); + return participants.map(v => v.attrs); + }, + groupRequestParticipantsUpdate: async (jid, participants, action) => { + const result = await groupQuery(jid, 'set', [ + { + tag: 'membership_requests_action', + attrs: {}, + content: [ + { + tag: action, + attrs: {}, + content: participants.map(jid => ({ + tag: 'participant', + attrs: { jid } + })) + } + ] + } + ]); + const node = getBinaryNodeChild(result, 'membership_requests_action'); + const nodeAction = getBinaryNodeChild(node, action); + const participantsAffected = getBinaryNodeChildren(nodeAction, 'participant'); + return participantsAffected.map(p => { + return { status: p.attrs.error || '200', jid: p.attrs.jid }; + }); + }, + groupParticipantsUpdate: async (jid, participants, action) => { + const result = await groupQuery(jid, 'set', [ + { + tag: action, + attrs: {}, + content: participants.map(jid => ({ + tag: 'participant', + attrs: { jid } + })) + } + ]); + const node = getBinaryNodeChild(result, action); + const participantsAffected = getBinaryNodeChildren(node, 'participant'); + return participantsAffected.map(p => { + return { status: p.attrs.error || '200', jid: p.attrs.jid, content: p }; + }); + }, + groupUpdateDescription: async (jid, description) => { + const metadata = await groupMetadata(jid); + const prev = metadata.descId ?? null; + await groupQuery(jid, 'set', [ + { + tag: 'description', + attrs: { + ...(description ? { id: generateMessageIDV2() } : { delete: 'true' }), + ...(prev ? { prev } : {}) + }, + content: description ? [{ tag: 'body', attrs: {}, content: Buffer.from(description, 'utf-8') }] : undefined + } + ]); + }, + groupInviteCode: async (jid) => { + const result = await groupQuery(jid, 'get', [{ tag: 'invite', attrs: {} }]); + const inviteNode = getBinaryNodeChild(result, 'invite'); + return inviteNode?.attrs.code; + }, + groupRevokeInvite: async (jid) => { + const result = await groupQuery(jid, 'set', [{ tag: 'invite', attrs: {} }]); + const inviteNode = getBinaryNodeChild(result, 'invite'); + return inviteNode?.attrs.code; + }, + groupAcceptInvite: async (code) => { + const results = await groupQuery('@g.us', 'set', [{ tag: 'invite', attrs: { code } }]); + const result = getBinaryNodeChild(results, 'group'); + return result?.attrs.jid; + }, + /** + * revoke a v4 invite for someone + * @param groupJid group jid + * @param invitedJid jid of person you invited + * @returns true if successful + */ + groupRevokeInviteV4: async (groupJid, invitedJid) => { + const result = await groupQuery(groupJid, 'set', [ + { tag: 'revoke', attrs: {}, content: [{ tag: 'participant', attrs: { jid: invitedJid } }] } + ]); + return !!result; + }, + /** + * accept a GroupInviteMessage + * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite + * @param inviteMessage the message to accept + */ + groupAcceptInviteV4: ev.createBufferedFunction(async (key, inviteMessage) => { + key = typeof key === 'string' ? { remoteJid: key } : key; + const results = await groupQuery(inviteMessage.groupJid, 'set', [ + { + tag: 'accept', + attrs: { + code: inviteMessage.inviteCode, + expiration: inviteMessage.inviteExpiration.toString(), + admin: key.remoteJid + } + } + ]); + // if we have the full message key + // update the invite message to be expired + if (key.id) { + // create new invite message that is expired + inviteMessage = proto.Message.GroupInviteMessage.fromObject(inviteMessage); + inviteMessage.inviteExpiration = 0; + inviteMessage.inviteCode = ''; + ev.emit('messages.update', [ + { + key, + update: { + message: { + groupInviteMessage: inviteMessage + } + } + } + ]); + } + // generate the group add message + await upsertMessage({ + key: { + remoteJid: inviteMessage.groupJid, + id: generateMessageIDV2(sock.user?.id), + fromMe: false, + participant: key.remoteJid + }, + messageStubType: WAMessageStubType.GROUP_PARTICIPANT_ADD, + messageStubParameters: [JSON.stringify(authState.creds.me)], + participant: key.remoteJid, + messageTimestamp: unixTimestampSeconds() + }, 'notify'); + return results.attrs.from; + }), + groupGetInviteInfo: async (code) => { + const results = await groupQuery('@g.us', 'get', [{ tag: 'invite', attrs: { code } }]); + return extractGroupMetadata(results); + }, + groupToggleEphemeral: async (jid, ephemeralExpiration) => { + const content = ephemeralExpiration + ? { tag: 'ephemeral', attrs: { expiration: ephemeralExpiration.toString() } } + : { tag: 'not_ephemeral', attrs: {} }; + await groupQuery(jid, 'set', [content]); + }, + groupSettingUpdate: async (jid, setting) => { + await groupQuery(jid, 'set', [{ tag: setting, attrs: {} }]); + }, + groupMemberAddMode: async (jid, mode) => { + await groupQuery(jid, 'set', [{ tag: 'member_add_mode', attrs: {}, content: mode }]); + }, + groupJoinApprovalMode: async (jid, mode) => { + await groupQuery(jid, 'set', [ + { tag: 'membership_approval_mode', attrs: {}, content: [{ tag: 'group_join', attrs: { state: mode } }] } + ]); + }, + groupFetchAllParticipating + }; +}; +export const extractGroupMetadata = (result) => { + const group = getBinaryNodeChild(result, 'group'); + if (!group) { + // Mirror WAWeb: surface server/client errors with their code+text instead of crashing. + const errorNode = getBinaryNodeChild(result, 'error'); + if (errorNode) { + const code = errorNode.attrs.code ? +errorNode.attrs.code : 500; + const text = errorNode.attrs.text || 'group metadata query failed'; + throw new Boom(text, { statusCode: code, data: errorNode }); + } + throw new Boom('Invalid group metadata response: missing node', { data: result }); + } + if (!group.attrs.id) { + throw new Boom('Invalid group metadata response: missing group id', { data: group }); + } + const descChild = getBinaryNodeChild(group, 'description'); + let desc; + let descId; + let descOwner; + let descOwnerPn; + let descOwnerUsername; + let descTime; + if (descChild) { + desc = getBinaryNodeChildString(descChild, 'body'); + descOwner = descChild.attrs.participant ? jidNormalizedUser(descChild.attrs.participant) : undefined; + descOwnerPn = descChild.attrs.participant_pn ? jidNormalizedUser(descChild.attrs.participant_pn) : undefined; + descOwnerUsername = descChild.attrs.participant_username || undefined; + descTime = +descChild.attrs.t; + descId = descChild.attrs.id; + } + const groupId = group.attrs.id.includes('@') ? group.attrs.id : jidEncode(group.attrs.id, 'g.us'); + const eph = getBinaryNodeChild(group, 'ephemeral')?.attrs.expiration; + const memberAddMode = getBinaryNodeChildString(group, 'member_add_mode') === 'all_member_add'; + const metadata = { + id: groupId, + notify: group.attrs.notify, + addressingMode: group.attrs.addressing_mode === 'lid' ? WAMessageAddressingMode.LID : WAMessageAddressingMode.PN, + subject: group.attrs.subject, + subjectOwner: group.attrs.s_o, + subjectOwnerPn: group.attrs.s_o_pn, + subjectOwnerUsername: group.attrs.s_o_username, + subjectTime: +group.attrs.s_t, + size: group.attrs.size ? +group.attrs.size : getBinaryNodeChildren(group, 'participant').length, + creation: +group.attrs.creation, + owner: group.attrs.creator ? jidNormalizedUser(group.attrs.creator) : undefined, + ownerPn: group.attrs.creator_pn ? jidNormalizedUser(group.attrs.creator_pn) : undefined, + ownerUsername: group.attrs.creator_username || undefined, + owner_country_code: group.attrs.creator_country_code, + desc, + descId, + descOwner, + descOwnerPn, + descOwnerUsername, + descTime, + linkedParent: getBinaryNodeChild(group, 'linked_parent')?.attrs.jid || undefined, + restrict: !!getBinaryNodeChild(group, 'locked'), + announce: !!getBinaryNodeChild(group, 'announcement'), + isCommunity: !!getBinaryNodeChild(group, 'parent'), + isCommunityAnnounce: !!getBinaryNodeChild(group, 'default_sub_group'), + joinApprovalMode: !!getBinaryNodeChild(group, 'membership_approval_mode'), + memberAddMode, + participants: getBinaryNodeChildren(group, 'participant').map(({ attrs }) => { + // TODO: Store LID MAPPINGS + return { + id: attrs.jid, + phoneNumber: isLidUser(attrs.jid) && isPnUser(attrs.phone_number) ? attrs.phone_number : undefined, + lid: isPnUser(attrs.jid) && isLidUser(attrs.lid) ? attrs.lid : undefined, + username: attrs.participant_username || attrs.username || undefined, + admin: (attrs.type || null) + }; + }), + ephemeralDuration: eph ? +eph : undefined + }; + return metadata; +}; +//# sourceMappingURL=groups.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/groups.js.map b/packages/transport/vendor/lib/Socket/groups.js.map new file mode 100644 index 0000000..60378c2 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/groups.js.map @@ -0,0 +1 @@ +{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/Socket/groups.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/index.d.ts b/packages/transport/vendor/lib/Socket/index.d.ts new file mode 100644 index 0000000..5069809 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/index.d.ts @@ -0,0 +1,260 @@ +import type { UserFacingSocketConfig } from '../Types/index.js'; +declare const makeWASocket: (config: UserFacingSocketConfig) => { + communityMetadata: (jid: string) => Promise; + communityCreate: (subject: string, body: string) => Promise; + communityCreateGroup: (subject: string, participants: string[], parentCommunityJid: string) => Promise; + communityLeave: (id: string) => Promise; + communityUpdateSubject: (jid: string, subject: string) => Promise; + communityLinkGroup: (groupJid: string, parentCommunityJid: string) => Promise; + communityUnlinkGroup: (groupJid: string, parentCommunityJid: string) => Promise; + communityFetchLinkedGroups: (jid: string) => Promise<{ + communityJid: string; + isCommunity: boolean; + linkedGroups: { + id: string | undefined; + subject: string; + creation: number | undefined; + owner: string | undefined; + size: number | undefined; + }[]; + }>; + communityRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + communityRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + communityParticipantsUpdate: (jid: string, participants: string[], action: import("../index.js").ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: import("../index.js").BinaryNode; + }[]>; + communityUpdateDescription: (jid: string, description?: string) => Promise; + communityInviteCode: (jid: string) => Promise; + communityRevokeInvite: (jid: string) => Promise; + communityAcceptInvite: (code: string) => Promise; + communityRevokeInviteV4: (communityJid: string, invitedJid: string) => Promise; + communityAcceptInviteV4: (key: string | import("../index.js").WAMessageKey, inviteMessage: import("../index.js").proto.Message.IGroupInviteMessage) => Promise; + communityGetInviteInfo: (code: string) => Promise; + communityToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + communitySettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + communityMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + communityJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + communityFetchAllParticipating: () => Promise<{ + [_: string]: import("../index.js").GroupMetadata; + }>; + logger: import("../Utils/logger.js").ILogger; + getOrderDetails: (orderId: string, tokenBase64: string) => Promise; + getCatalog: ({ jid, limit, cursor }: import("../index.js").GetCatalogOptions) => Promise<{ + products: import("../index.js").Product[]; + nextPageCursor: string | undefined; + }>; + getCollections: (jid?: string, limit?: number) => Promise<{ + collections: import("../index.js").CatalogCollection[]; + }>; + productCreate: (create: import("../index.js").ProductCreate) => Promise; + productDelete: (productIds: string[]) => Promise<{ + deleted: number; + }>; + productUpdate: (productId: string, update: import("../index.js").ProductUpdate) => Promise; + updateBussinesProfile: (args: import("../Types/Bussines.js").UpdateBussinesProfileProps) => Promise; + updateCoverPhoto: (photo: import("../index.js").WAMediaUpload) => Promise; + removeCoverPhoto: (id: string) => Promise; + sendMessageAck: (node: import("../index.js").BinaryNode, errorCode?: number) => Promise; + sendRetryRequest: (node: import("../index.js").BinaryNode, forceIncludeKeys?: boolean) => Promise; + rejectCall: (callId: string, callFrom: string) => Promise; + fetchMessageHistory: (count: number, oldestMsgKey: import("../index.js").WAMessageKey, oldestMsgTimestamp: number | Long) => Promise; + requestPlaceholderResend: (messageKey: import("../index.js").WAMessageKey, msgData?: Partial) => Promise; + messageRetryManager: import("../index.js").MessageRetryManager | null; + userDevicesCache: import("../index.js").PossiblyExtendedCacheStore | import("@cacheable/node-cache").NodeCache; + devicesMutex: { + mutex(code: () => Promise | T): Promise; + }; + issuePrivacyTokens: (jids: string[], timestamp?: number) => Promise; + assertSessions: (jids: string[], force?: boolean) => Promise; + relayMessage: (jid: string, message: import("../index.js").proto.IMessage, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }: import("../index.js").MessageRelayOptions) => Promise; + sendReceipt: (jid: string, participant: string | undefined, messageIds: string[], type: import("../index.js").MessageReceiptType) => Promise; + sendReceipts: (keys: import("../index.js").WAMessageKey[], type: import("../index.js").MessageReceiptType) => Promise; + readMessages: (keys: import("../index.js").WAMessageKey[]) => Promise; + refreshMediaConn: (forceGet?: boolean) => Promise; + getMediaHost: () => string; + waUploadToServer: import("../index.js").WAMediaUploadFunction; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + sendPeerDataOperationMessage: (pdoMessage: import("../index.js").proto.Message.IPeerDataOperationRequestMessage) => Promise; + createParticipantNodes: (recipientJids: string[], message: import("../index.js").proto.IMessage, extraAttrs?: import("../index.js").BinaryNode["attrs"], dsmMessage?: import("../index.js").proto.IMessage) => Promise<{ + nodes: import("../index.js").BinaryNode[]; + shouldIncludeDeviceIdentity: boolean; + }>; + getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<(import("../index.js").JidWithDevice & { + jid: string; + })[]>; + updateMemberLabel: (jid: string, memberLabel: string) => Promise; + updateMediaMessage: (message: import("../index.js").WAMessage) => Promise; + sendMessage: (jid: string, content: import("../index.js").AnyMessageContent, options?: import("../index.js").MiscMessageGenerationOptions) => Promise; + newsletterCreate: (name: string, description?: string) => Promise; + newsletterUpdate: (jid: string, updates: import("../index.js").NewsletterUpdate) => Promise; + newsletterSubscribers: (jid: string) => Promise<{ + subscribers: number; + }>; + newsletterMetadata: (type: "invite" | "jid", key: string) => Promise; + newsletterFollow: (jid: string) => Promise; + newsletterUnfollow: (jid: string) => Promise; + newsletterMute: (jid: string) => Promise; + newsletterUnmute: (jid: string) => Promise; + newsletterUpdateName: (jid: string, name: string) => Promise; + newsletterUpdateDescription: (jid: string, description: string) => Promise; + newsletterUpdatePicture: (jid: string, content: import("../index.js").WAMediaUpload) => Promise; + newsletterRemovePicture: (jid: string) => Promise; + newsletterReactMessage: (jid: string, serverId: string, reaction?: string) => Promise; + newsletterFetchMessages: (jid: string, count: number, since: number, after: number) => Promise; + subscribeNewsletterUpdates: (jid: string) => Promise<{ + duration: string; + } | null>; + newsletterAdminCount: (jid: string) => Promise; + newsletterChangeOwner: (jid: string, newOwnerJid: string) => Promise; + newsletterDemote: (jid: string, userJid: string) => Promise; + newsletterDelete: (jid: string) => Promise; + groupMetadata: (jid: string) => Promise; + groupCreate: (subject: string, participants: string[]) => Promise; + groupLeave: (id: string) => Promise; + groupUpdateSubject: (jid: string, subject: string) => Promise; + groupRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + groupParticipantsUpdate: (jid: string, participants: string[], action: import("../index.js").ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: import("../index.js").BinaryNode; + }[]>; + groupUpdateDescription: (jid: string, description?: string) => Promise; + groupInviteCode: (jid: string) => Promise; + groupRevokeInvite: (jid: string) => Promise; + groupAcceptInvite: (code: string) => Promise; + groupRevokeInviteV4: (groupJid: string, invitedJid: string) => Promise; + groupAcceptInviteV4: (key: string | import("../index.js").WAMessageKey, inviteMessage: import("../index.js").proto.Message.IGroupInviteMessage) => Promise; + groupGetInviteInfo: (code: string) => Promise; + groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + groupSettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + groupMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + groupFetchAllParticipating: () => Promise<{ + [_: string]: import("../index.js").GroupMetadata; + }>; + serverProps: { + privacyTokenOn1to1: boolean; + profilePicPrivacyToken: boolean; + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + upsertMessage: (msg: import("../index.js").WAMessage, type: import("../index.js").MessageUpsertType) => Promise; + appPatch: (patchCreate: import("../index.js").WAPatchCreate) => Promise; + sendPresenceUpdate: (type: import("../index.js").WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: import("../index.js").WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: import("../index.js").WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: import("../index.js").WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: import("../index.js").WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: import("../index.js").WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: import("../index.js").WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: import("../index.js").ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: import("../index.js").proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: import("../index.js").CacheStore; + addLabel: (jid: string, labels: import("../Types/Label.js").LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: import("../Types/Bussines.js").QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/index.js").WebSocketClient; + ev: import("../index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../index.js").AuthenticationCreds; + keys: import("../index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../index.js").SignalRepositoryWithLIDStore; + user: import("../index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: import("../index.js").BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: import("../index.js").BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | import("@hapi/boom").Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: import("../index.js").BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: import("../index.js").USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +export default makeWASocket; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/index.d.ts.map b/packages/transport/vendor/lib/Socket/index.d.ts.map new file mode 100644 index 0000000..adde8c8 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Socket/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAItD,QAAA,MAAM,YAAY,GAAI,QAAQ,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAU0k3B,CAAC;;;;;;;;;0DAA/30B,GAAG,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAH/xC,CAAA;AAED,eAAe,YAAY,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/index.js b/packages/transport/vendor/lib/Socket/index.js new file mode 100644 index 0000000..60b74e5 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/index.js @@ -0,0 +1,12 @@ +import { DEFAULT_CONNECTION_CONFIG } from '../Defaults/index.js'; +import { makeCommunitiesSocket } from './communities.js'; +// export the last socket layer +const makeWASocket = (config) => { + const newConfig = { + ...DEFAULT_CONNECTION_CONFIG, + ...config + }; + return makeCommunitiesSocket(newConfig); +}; +export default makeWASocket; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/index.js.map b/packages/transport/vendor/lib/Socket/index.js.map new file mode 100644 index 0000000..64f2a9a --- /dev/null +++ b/packages/transport/vendor/lib/Socket/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Socket/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,+BAA+B;AAC/B,MAAM,YAAY,GAAG,CAAC,MAA8B,EAAE,EAAE;IACvD,MAAM,SAAS,GAAG;QACjB,GAAG,yBAAyB;QAC5B,GAAG,MAAM;KACT,CAAA;IAED,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAA;AACxC,CAAC,CAAA;AAED,eAAe,YAAY,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/messages-recv.d.ts b/packages/transport/vendor/lib/Socket/messages-recv.d.ts new file mode 100644 index 0000000..fcc4edd --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-recv.d.ts @@ -0,0 +1,203 @@ +import NodeCache from '@cacheable/node-cache'; +import { Boom } from '@hapi/boom'; +import Long from 'long'; +import { proto } from '../../WAProto/index.js'; +import type { MessageReceiptType, MessageRelayOptions, NewChatMessageCapInfo, SocketConfig, WAMessage, WAMessageKey } from '../Types/index.js'; +import { type BinaryNode, type JidWithDevice } from '../WABinary/index.js'; +export declare const makeMessagesRecvSocket: (config: SocketConfig) => { + sendMessageAck: (node: BinaryNode, errorCode?: number) => Promise; + sendRetryRequest: (node: BinaryNode, forceIncludeKeys?: boolean) => Promise; + rejectCall: (callId: string, callFrom: string) => Promise; + fetchMessageHistory: (count: number, oldestMsgKey: WAMessageKey, oldestMsgTimestamp: number | Long) => Promise; + requestPlaceholderResend: (messageKey: WAMessageKey, msgData?: Partial) => Promise; + messageRetryManager: import("../Utils/index.js").MessageRetryManager | null; + userDevicesCache: import("../Types/index.js").PossiblyExtendedCacheStore | NodeCache; + devicesMutex: { + mutex(code: () => Promise | T): Promise; + }; + issuePrivacyTokens: (jids: string[], timestamp?: number) => Promise; + assertSessions: (jids: string[], force?: boolean) => Promise; + relayMessage: (jid: string, message: proto.IMessage, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }: MessageRelayOptions) => Promise; + sendReceipt: (jid: string, participant: string | undefined, messageIds: string[], type: MessageReceiptType) => Promise; + sendReceipts: (keys: WAMessageKey[], type: MessageReceiptType) => Promise; + readMessages: (keys: WAMessageKey[]) => Promise; + refreshMediaConn: (forceGet?: boolean) => Promise; + getMediaHost: () => string; + waUploadToServer: import("../Types/index.js").WAMediaUploadFunction; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + sendPeerDataOperationMessage: (pdoMessage: proto.Message.IPeerDataOperationRequestMessage) => Promise; + createParticipantNodes: (recipientJids: string[], message: proto.IMessage, extraAttrs?: BinaryNode["attrs"], dsmMessage?: proto.IMessage) => Promise<{ + nodes: BinaryNode[]; + shouldIncludeDeviceIdentity: boolean; + }>; + getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<(JidWithDevice & { + jid: string; + })[]>; + updateMemberLabel: (jid: string, memberLabel: string) => Promise; + updateMediaMessage: (message: WAMessage) => Promise; + sendMessage: (jid: string, content: import("../Types/index.js").AnyMessageContent, options?: import("../Types/index.js").MiscMessageGenerationOptions) => Promise; + newsletterCreate: (name: string, description?: string) => Promise; + newsletterUpdate: (jid: string, updates: import("../Types/index.js").NewsletterUpdate) => Promise; + newsletterSubscribers: (jid: string) => Promise<{ + subscribers: number; + }>; + newsletterMetadata: (type: "invite" | "jid", key: string) => Promise; + newsletterFollow: (jid: string) => Promise; + newsletterUnfollow: (jid: string) => Promise; + newsletterMute: (jid: string) => Promise; + newsletterUnmute: (jid: string) => Promise; + newsletterUpdateName: (jid: string, name: string) => Promise; + newsletterUpdateDescription: (jid: string, description: string) => Promise; + newsletterUpdatePicture: (jid: string, content: import("../Types/index.js").WAMediaUpload) => Promise; + newsletterRemovePicture: (jid: string) => Promise; + newsletterReactMessage: (jid: string, serverId: string, reaction?: string) => Promise; + newsletterFetchMessages: (jid: string, count: number, since: number, after: number) => Promise; + subscribeNewsletterUpdates: (jid: string) => Promise<{ + duration: string; + } | null>; + newsletterAdminCount: (jid: string) => Promise; + newsletterChangeOwner: (jid: string, newOwnerJid: string) => Promise; + newsletterDemote: (jid: string, userJid: string) => Promise; + newsletterDelete: (jid: string) => Promise; + groupMetadata: (jid: string) => Promise; + groupCreate: (subject: string, participants: string[]) => Promise; + groupLeave: (id: string) => Promise; + groupUpdateSubject: (jid: string, subject: string) => Promise; + groupRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + groupParticipantsUpdate: (jid: string, participants: string[], action: import("../Types/index.js").ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: BinaryNode; + }[]>; + groupUpdateDescription: (jid: string, description?: string) => Promise; + groupInviteCode: (jid: string) => Promise; + groupRevokeInvite: (jid: string) => Promise; + groupAcceptInvite: (code: string) => Promise; + groupRevokeInviteV4: (groupJid: string, invitedJid: string) => Promise; + groupAcceptInviteV4: (key: string | WAMessageKey, inviteMessage: proto.Message.IGroupInviteMessage) => Promise; + groupGetInviteInfo: (code: string) => Promise; + groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + groupSettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + groupMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + groupFetchAllParticipating: () => Promise<{ + [_: string]: import("../Types/index.js").GroupMetadata; + }>; + serverProps: { + privacyTokenOn1to1: boolean; + profilePicPrivacyToken: boolean; + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + upsertMessage: (msg: WAMessage, type: import("../Types/index.js").MessageUpsertType) => Promise; + appPatch: (patchCreate: import("../Types/index.js").WAPatchCreate) => Promise; + sendPresenceUpdate: (type: import("../Types/index.js").WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: import("../Types/index.js").WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: import("../Types/index.js").WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: import("../Types/index.js").WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: import("../Types/index.js").WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: import("../Types/index.js").WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: import("../Types/index.js").WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: import("../Types/index.js").ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: import("../Types/index.js").CacheStore; + addLabel: (jid: string, labels: import("../Types/Label.js").LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: import("../Types/Bussines.js").QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/websocket.js").WebSocketClient; + ev: import("../Types/index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../Types/index.js").AuthenticationCreds; + keys: import("../Types/index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../Types/index.js").SignalRepositoryWithLIDStore; + user: import("../Types/index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: import("../index.js").USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +//# sourceMappingURL=messages-recv.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/messages-recv.d.ts.map b/packages/transport/vendor/lib/Socket/messages-recv.d.ts.map new file mode 100644 index 0000000..c398db7 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-recv.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages-recv.d.ts","sourceRoot":"","sources":["../../src/Socket/messages-recv.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAQ9C,OAAO,KAAK,EAEX,kBAAkB,EAClB,mBAAmB,EAEnB,qBAAqB,EACrB,YAAY,EAEZ,SAAS,EACT,YAAY,EAEZ,MAAM,UAAU,CAAA;AA4CjB,OAAO,EAEN,KAAK,UAAU,EAef,KAAK,aAAa,EAElB,MAAM,aAAa,CAAA;AAuBpB,eAAO,MAAM,sBAAsB,GAAI,QAAQ,YAAY;2BAobtB,UAAU,cAAc,MAAM;6BA4B5B,UAAU;yBAtBd,MAAM,YAAY,MAAM;iCAnYlD,MAAM,gBACC,YAAY,sBACN,MAAM,GAAG,IAAI,KAC/B,OAAO,CAAC,MAAM,CAAC;2CAoBL,YAAY,YACd,OAAO,CAAC,SAAS,CAAC,KAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmvBsC,CAAC;;;;;;;;;0DAz2BpE,GAAG,0BACD,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqjEN,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/messages-recv.js b/packages/transport/vendor/lib/Socket/messages-recv.js new file mode 100644 index 0000000..f2003ac --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-recv.js @@ -0,0 +1,1772 @@ +import NodeCache from '@cacheable/node-cache'; +import { Boom } from '@hapi/boom'; +import { randomBytes } from 'crypto'; +import Long from 'long'; +import { proto } from '../../WAProto/index.js'; +import { DEFAULT_CACHE_TTLS, KEY_BUNDLE_TYPE, MIN_PREKEY_COUNT, PLACEHOLDER_MAX_AGE_SECONDS, STATUS_EXPIRY_SECONDS } from '../Defaults/index.js'; +import { ReachoutTimelockEnforcementType, WAMessageStatus, WAMessageStubType } from '../Types/index.js'; +import { ACCOUNT_RESTRICTED_TEXT, aesDecryptCTR, aesEncryptGCM, cleanMessage, Curve, decodeMediaRetryNode, decodeMessageNode, decryptMessageNode, delay, derivePairingCodeKey, encodeBigEndian, encodeSignedDeviceIdentity, extractAddressingContext, extractE2ESessionFromRetryReceipt, getCallStatusFromNode, getHistoryMsg, getNextPreKeys, getStatusFromReceiptType, handleIdentityChange, hkdf, MISSING_KEYS_ERROR_TEXT, NACK_REASONS, NO_MESSAGE_FOUND_ERROR_TEXT, SERVER_ERROR_CODES, toNumber, unixTimestampSeconds, xmppPreKey, xmppSignedPreKey } from '../Utils/index.js'; +import { makeMutex } from '../Utils/make-mutex.js'; +import { makeOfflineNodeProcessor } from '../Utils/offline-node-processor.js'; +import { buildAckStanza } from '../Utils/stanza-ack.js'; +import { buildMergedTcTokenIndexWrite, isTcTokenExpired, readTcTokenIndex, resolveIssuanceJid, resolveTcTokenJid, storeTcTokensFromIqResult, TC_TOKEN_INDEX_KEY } from '../Utils/tc-token-utils.js'; +import { areJidsSameUser, binaryNodeToString, getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildBuffer, getBinaryNodeChildren, getBinaryNodeChildString, getBinaryNodeChildUInt, isJidGroup, isJidNewsletter, isJidStatusBroadcast, isLidUser, isPnUser, jidDecode, jidNormalizedUser, S_WHATSAPP_NET } from '../WABinary/index.js'; +import { extractGroupMetadata } from './groups.js'; +import { makeMessagesSocket } from './messages-send.js'; +const ENFORCEMENT_TYPE_VALUES = new Set(Object.values(ReachoutTimelockEnforcementType)); +function isValidEnforcementType(value) { + return typeof value === 'string' && ENFORCEMENT_TYPE_VALUES.has(value); +} +export const makeMessagesRecvSocket = (config) => { + const { logger, retryRequestDelayMs, maxMsgRetryCount, getMessage, shouldIgnoreJid, enableAutoSessionRecreation } = config; + const sock = makeMessagesSocket(config); + const { userDevicesCache, devicesMutex, ev, authState, ws, messageMutex, notificationMutex, receiptMutex, signalRepository, query, upsertMessage, resyncAppState, onUnexpectedError, assertSessions, sendNode, relayMessage, sendReceipt, uploadPreKeys, sendPeerDataOperationMessage, messageRetryManager, registerSocketEndHandler, issuePrivacyTokens, fetchAccountReachoutTimelock, placeholderResendCache } = sock; + const getLIDForPN = signalRepository.lidMapping.getLIDForPN.bind(signalRepository.lidMapping); + /** this mutex ensures that each retryRequest will wait for the previous one to finish */ + const retryMutex = makeMutex(); + const msgRetryCache = config.msgRetryCounterCache || + new NodeCache({ + stdTTL: DEFAULT_CACHE_TTLS.MSG_RETRY, // 1 hour + useClones: false + }); + const callOfferCache = config.callOfferCache || + new NodeCache({ + stdTTL: DEFAULT_CACHE_TTLS.CALL_OFFER, // 5 mins + useClones: false + }); + // Debounce identity-change session refreshes per JID to avoid bursts + const identityAssertDebounce = new NodeCache({ stdTTL: 5, useClones: false }); + let sendActiveReceipts = false; + const fetchMessageHistory = async (count, oldestMsgKey, oldestMsgTimestamp) => { + if (!authState.creds.me?.id) { + throw new Boom('Not authenticated'); + } + const pdoMessage = { + historySyncOnDemandRequest: { + chatJid: oldestMsgKey.remoteJid, + oldestMsgFromMe: oldestMsgKey.fromMe, + oldestMsgId: oldestMsgKey.id, + oldestMsgTimestampMs: oldestMsgTimestamp, + onDemandMsgCount: count + }, + peerDataOperationRequestType: proto.Message.PeerDataOperationRequestType.HISTORY_SYNC_ON_DEMAND + }; + return sendPeerDataOperationMessage(pdoMessage); + }; + const requestPlaceholderResend = async (messageKey, msgData) => { + if (!authState.creds.me?.id) { + throw new Boom('Not authenticated'); + } + if (await placeholderResendCache.get(messageKey?.id)) { + logger.debug({ messageKey }, 'already requested resend'); + return; + } + else { + // Store original message data so PDO response handler can preserve + // metadata (LID details, timestamps, etc.) that the phone may omit + await placeholderResendCache.set(messageKey?.id, msgData || true); + } + await delay(2000); + if (!(await placeholderResendCache.get(messageKey?.id))) { + logger.debug({ messageKey }, 'message received while resend requested'); + return 'RESOLVED'; + } + const pdoMessage = { + placeholderMessageResendRequest: [ + { + messageKey + } + ], + peerDataOperationRequestType: proto.Message.PeerDataOperationRequestType.PLACEHOLDER_MESSAGE_RESEND + }; + setTimeout(async () => { + if (await placeholderResendCache.get(messageKey?.id)) { + logger.debug({ messageKey }, 'PDO message without response after 8 seconds. Phone possibly offline'); + await placeholderResendCache.del(messageKey?.id); + } + }, 8000); + return sendPeerDataOperationMessage(pdoMessage); + }; + const handleMexNotification = async (node) => { + const updateNode = getBinaryNodeChild(node, 'update'); + if (updateNode) { + const opName = updateNode.attrs?.op_name; + if (!opName) { + logger.warn({ node: binaryNodeToString(node) }, 'mex notification missing op_name, fallback to legacy'); + await handleLegacyMexNewsletterNotification(node); + return; + } + let mexResponse; + try { + mexResponse = JSON.parse(updateNode.content.toString()); + } + catch (error) { + logger.error({ err: error, opName }, 'failed to parse mex notification JSON'); + return; + } + if (mexResponse.errors?.length) { + logger.warn({ errors: mexResponse.errors, opName }, 'mex notification has GQL errors'); + return; + } + const data = mexResponse.data; + if (!data) { + logger.warn({ opName }, 'mex notification has null data'); + return; + } + logger.debug({ opName }, 'processing mex notification'); + switch (opName) { + case 'NotificationUserReachoutTimelockUpdate': + handleReachoutTimelockNotification(data); + break; + case 'MessageCappingInfoNotification': + handleMessageCappingNotification(data); + break; + // newsletter ops still use the legacy child structure + case 'NotificationNewsletterUpdate': + case 'NotificationLinkedProfilesUpdates': + case 'NotificationNewsletterAdminPromote': + case 'NotificationNewsletterAdminDemote': + case 'NotificationNewsletterUserSettingChange': + case 'NotificationNewsletterJoin': + case 'NotificationNewsletterLeave': + case 'NotificationNewsletterStateChange': + case 'NotificationNewsletterAdminMetadataUpdate': + case 'NotificationNewsletterOwnerUpdate': + case 'NotificationNewsletterAdminInviteRevoke': + case 'NotificationNewsletterWamoSubStatusChange': + case 'NotificationNewsletterBlockUser': + case 'NotificationNewsletterPaidPartnership': + case 'NotificationNewsletterMilestone': + case 'NewsletterResponseStateUpdate': + await handleLegacyMexNewsletterNotification(node); + break; + default: + logger.debug({ opName }, 'unhandled mex notification'); + break; + } + return; + } + await handleLegacyMexNewsletterNotification(node); + }; + const handleReachoutTimelockNotification = (data) => { + const payload = data.xwa2_notify_account_reachout_timelock; + if (!payload) { + logger.warn('reachout timelock notification missing payload'); + return; + } + if (!payload.is_active) { + logger.info('reachout timelock restriction lifted'); + ev.emit('connection.update', { + reachoutTimeLock: { + isActive: false, + enforcementType: ReachoutTimelockEnforcementType.DEFAULT + } + }); + return; + } + // WA Web defaults to now+60s when the server omits the expiry + const timeEnforcementEnds = payload.time_enforcement_ends + ? new Date(parseInt(payload.time_enforcement_ends, 10) * 1000) + : new Date(Date.now() + 60000); + const enforcementType = isValidEnforcementType(payload.enforcement_type) + ? payload.enforcement_type + : ReachoutTimelockEnforcementType.DEFAULT; + logger.info({ enforcementType, timeEnforcementEnds }, 'reachout timelock restriction set'); + ev.emit('connection.update', { + reachoutTimeLock: { + isActive: true, + timeEnforcementEnds, + enforcementType + } + }); + }; + const handleMessageCappingNotification = (data) => { + const payload = data.xwa2_notify_new_chat_messages_capping_info_update; + if (!payload) { + logger.warn('message capping notification missing payload'); + return; + } + logger.info({ payload }, 'received message capping update'); + ev.emit('message-capping.update', payload); + }; + const handleLegacyMexNewsletterNotification = async (node) => { + const mexNode = getBinaryNodeChild(node, 'mex'); + const updateNode = mexNode?.content ? null : getBinaryNodeChild(node, 'update') || getAllBinaryNodeChildren(node)[0]; + const payloadNode = mexNode?.content ? mexNode : updateNode; + if (!payloadNode?.content) { + logger.warn({ node: binaryNodeToString(node) }, 'invalid mex newsletter notification'); + return; + } + let data; + try { + const payloadContent = payloadNode.content; + if (Array.isArray(payloadContent)) { + logger.warn({ payloadNode }, 'invalid mex newsletter notification payload format'); + return; + } + const contentBuf = typeof payloadContent === 'string' ? Buffer.from(payloadContent, 'binary') : Buffer.from(payloadContent); + data = JSON.parse(contentBuf.toString()); + } + catch (error) { + logger.error({ err: error, node: binaryNodeToString(node) }, 'failed to parse mex newsletter notification'); + return; + } + const operation = data?.operation ?? payloadNode?.attrs?.op_name; + let updates = data?.updates; + if (!updates) { + const linkedProfiles = data?.data?.xwa2_notify_linked_profiles; + if (linkedProfiles) { + updates = [linkedProfiles]; + } + } + if (!updates || !operation) { + logger.warn({ data }, 'invalid mex newsletter notification content'); + return; + } + logger.info({ operation, updates }, 'got mex newsletter notification'); + switch (operation) { + case 'NotificationNewsletterUpdate': + for (const update of updates) { + if (update.jid && update.settings && Object.keys(update.settings).length > 0) { + ev.emit('newsletter-settings.update', { + id: update.jid, + update: update.settings + }); + } + } + break; + case 'NotificationNewsletterAdminPromote': + for (const update of updates) { + if (update.jid && update.user) { + ev.emit('newsletter-participants.update', { + id: update.jid, + author: node.attrs.from, + user: update.user, + new_role: 'ADMIN', + action: 'promote' + }); + } + } + break; + case 'NotificationLinkedProfilesUpdates': + for (const update of updates) { + const lid = update?.jid; + const addedProfiles = Array.isArray(update?.added_profiles) ? update.added_profiles : []; + const mappings = []; + for (const profile of addedProfiles) { + const pn = typeof profile === 'string' ? profile : (profile?.pn ?? profile?.jid ?? null); + if (lid && pn) { + const mapping = { lid, pn }; + ev.emit('lid-mapping.update', mapping); + mappings.push(mapping); + } + } + await signalRepository.lidMapping.storeLIDPNMappings(mappings); + } + break; + default: + logger.info({ operation, data }, 'unhandled mex newsletter notification'); + break; + } + }; + // Handles newsletter notifications + const handleNewsletterNotification = async (node) => { + const from = node.attrs.from; + const children = getAllBinaryNodeChildren(node); + const author = node.attrs.participant; + for (const child of children) { + logger.debug({ from, child }, 'got newsletter notification'); + switch (child.tag) { + case 'reaction': { + const reactionUpdate = { + id: from, + server_id: child.attrs.message_id, + reaction: { + code: getBinaryNodeChildString(child, 'reaction'), + count: 1 + } + }; + ev.emit('newsletter.reaction', reactionUpdate); + break; + } + case 'view': { + const viewUpdate = { + id: from, + server_id: child.attrs.message_id, + count: parseInt(child.content?.toString() || '0', 10) + }; + ev.emit('newsletter.view', viewUpdate); + break; + } + case 'participant': { + const participantUpdate = { + id: from, + author, + user: child.attrs.jid, + action: child.attrs.action, + new_role: child.attrs.role + }; + ev.emit('newsletter-participants.update', participantUpdate); + break; + } + case 'update': { + const settingsNode = getBinaryNodeChild(child, 'settings'); + if (settingsNode) { + const update = {}; + const nameNode = getBinaryNodeChild(settingsNode, 'name'); + if (nameNode?.content) + update.name = nameNode.content.toString(); + const descriptionNode = getBinaryNodeChild(settingsNode, 'description'); + if (descriptionNode?.content) + update.description = descriptionNode.content.toString(); + ev.emit('newsletter-settings.update', { + id: from, + update + }); + } + break; + } + case 'message': { + const plaintextNode = getBinaryNodeChild(child, 'plaintext'); + if (plaintextNode?.content) { + try { + const contentBuf = typeof plaintextNode.content === 'string' + ? Buffer.from(plaintextNode.content, 'binary') + : Buffer.from(plaintextNode.content); + const messageProto = proto.Message.decode(contentBuf).toJSON(); + const fullMessage = proto.WebMessageInfo.fromObject({ + key: { + remoteJid: from, + id: child.attrs.message_id || child.attrs.server_id, + fromMe: false // TODO: is this really true though + }, + message: messageProto, + messageTimestamp: +child.attrs.t + }).toJSON(); + await upsertMessage(fullMessage, 'append'); + logger.debug('Processed plaintext newsletter message'); + } + catch (error) { + logger.error({ error }, 'Failed to decode plaintext newsletter message'); + } + } + break; + } + default: + logger.warn({ node, child }, 'Unknown newsletter notification child'); + break; + } + } + }; + const sendMessageAck = async (node, errorCode) => { + const stanza = buildAckStanza(node, errorCode, authState.creds.me.id); + logger.debug({ recv: { tag: node.tag, attrs: node.attrs }, sent: stanza.attrs }, 'sent ack'); + await sendNode(stanza); + }; + const rejectCall = async (callId, callFrom) => { + const stanza = { + tag: 'call', + attrs: { + from: authState.creds.me.id, + to: callFrom + }, + content: [ + { + tag: 'reject', + attrs: { + 'call-id': callId, + 'call-creator': callFrom, + count: '0' + }, + content: undefined + } + ] + }; + await query(stanza); + }; + const sendRetryRequest = async (node, forceIncludeKeys = false) => { + const { fullMessage } = decodeMessageNode(node, authState.creds.me.id, authState.creds.me.lid || ''); + const { key: msgKey } = fullMessage; + const msgId = msgKey.id; + if (messageRetryManager) { + // Check if we've exceeded max retries using the new system + if (messageRetryManager.hasExceededMaxRetries(msgId)) { + logger.debug({ msgId }, 'reached retry limit with new retry manager, clearing'); + messageRetryManager.markRetryFailed(msgId); + return; + } + // Increment retry count using new system + const retryCount = messageRetryManager.incrementRetryCount(msgId); + // Use the new retry count for the rest of the logic + const key = `${msgId}:${msgKey?.participant}`; + await msgRetryCache.set(key, retryCount); + } + else { + // Fallback to old system + const key = `${msgId}:${msgKey?.participant}`; + let retryCount = (await msgRetryCache.get(key)) || 0; + if (retryCount >= maxMsgRetryCount) { + logger.debug({ retryCount, msgId }, 'reached retry limit, clearing'); + await msgRetryCache.del(key); + return; + } + retryCount += 1; + await msgRetryCache.set(key, retryCount); + } + const key = `${msgId}:${msgKey?.participant}`; + const retryCount = (await msgRetryCache.get(key)) || 1; + const { account, signedPreKey, signedIdentityKey: identityKey } = authState.creds; + const fromJid = node.attrs.from; + // Check if we should recreate the session + let shouldRecreateSession = false; + let recreateReason = ''; + if (enableAutoSessionRecreation && messageRetryManager && retryCount > 1) { + try { + // Check if we have a session with this JID + const sessionId = signalRepository.jidToSignalProtocolAddress(fromJid); + const hasSession = await signalRepository.validateSession(fromJid); + const result = messageRetryManager.shouldRecreateSession(fromJid, hasSession.exists); + shouldRecreateSession = result.recreate; + recreateReason = result.reason; + if (shouldRecreateSession) { + logger.debug({ fromJid, retryCount, reason: recreateReason }, 'recreating session for retry'); + // Delete existing session to force recreation + await authState.keys.set({ session: { [sessionId]: null } }); + forceIncludeKeys = true; + } + } + catch (error) { + logger.warn({ error, fromJid }, 'failed to check session recreation'); + } + } + if (retryCount <= 2) { + // Use new retry manager for phone requests if available + if (messageRetryManager) { + // Schedule phone request with delay (like whatsmeow) + messageRetryManager.schedulePhoneRequest(msgId, async () => { + try { + const requestId = await requestPlaceholderResend(msgKey); + logger.debug(`sendRetryRequest: requested placeholder resend (${requestId}) for message ${msgId} (scheduled)`); + } + catch (error) { + logger.warn({ error, msgId }, 'failed to send scheduled phone request'); + } + }); + } + else { + // Fallback to immediate request + const msgId = await requestPlaceholderResend(msgKey); + logger.debug(`sendRetryRequest: requested placeholder resend for message ${msgId}`); + } + } + const deviceIdentity = encodeSignedDeviceIdentity(account, true); + await authState.keys.transaction(async () => { + const receipt = { + tag: 'receipt', + attrs: { + id: msgId, + type: 'retry', + to: node.attrs.from + }, + content: [ + { + tag: 'retry', + attrs: { + count: retryCount.toString(), + id: node.attrs.id, + t: node.attrs.t, + v: '1', + // ADD ERROR FIELD + error: '0' + } + }, + { + tag: 'registration', + attrs: {}, + content: encodeBigEndian(authState.creds.registrationId) + } + ] + }; + if (node.attrs.recipient) { + receipt.attrs.recipient = node.attrs.recipient; + } + if (node.attrs.participant) { + receipt.attrs.participant = node.attrs.participant; + } + if (retryCount > 1 || forceIncludeKeys || shouldRecreateSession) { + const { update, preKeys } = await getNextPreKeys(authState, 1); + const [keyId] = Object.keys(preKeys); + const key = preKeys[+keyId]; + const content = receipt.content; + content.push({ + tag: 'keys', + attrs: {}, + content: [ + { tag: 'type', attrs: {}, content: Buffer.from(KEY_BUNDLE_TYPE) }, + { tag: 'identity', attrs: {}, content: identityKey.public }, + xmppPreKey(key, +keyId), + xmppSignedPreKey(signedPreKey), + { tag: 'device-identity', attrs: {}, content: deviceIdentity } + ] + }); + ev.emit('creds.update', update); + } + await sendNode(receipt); + logger.info({ msgAttrs: node.attrs, retryCount }, 'sent retry receipt'); + }, authState?.creds?.me?.id || 'sendRetryRequest'); + }; + // Mirrors WAWeb/Handle/PreKeyLow.js: skip a re-issued notification with the same stanza id. + const inFlightPreKeyLow = new Set(); + /** + * Fire-and-forget tctoken re-issuance after a peer's device identity changed. + * Mirrors WAWebSendTcTokenWhenDeviceIdentityChange — runs in parallel with + * the session refresh (not after it). + */ + const reissueTcTokenAfterIdentityChange = (from) => { + void (async () => { + const normalizedJid = jidNormalizedUser(from); + const tcJid = await resolveTcTokenJid(normalizedJid, getLIDForPN); + const tcTokenData = await authState.keys.get('tctoken', [tcJid]); + const senderTs = tcTokenData?.[tcJid]?.senderTimestamp; + if (senderTs === null || senderTs === undefined || isTcTokenExpired(senderTs)) { + return; + } + logger.debug({ jid: normalizedJid, senderTimestamp: senderTs }, 'identity changed, re-issuing tctoken'); + const getPNForLID = signalRepository.lidMapping.getPNForLID.bind(signalRepository.lidMapping); + const issueJid = await resolveIssuanceJid(normalizedJid, sock.serverProps.lidTrustedTokenIssueToLid, getLIDForPN, getPNForLID); + const result = await issuePrivacyTokens([issueJid], senderTs); + await storeTcTokensFromIqResult({ + result, + fallbackJid: tcJid, + keys: authState.keys, + getLIDForPN, + onNewJidStored: trackTcTokenJid + }); + })().catch(err => { + logger.debug({ jid: from, err: err?.message }, 'failed to re-issue tctoken after identity change'); + }); + }; + const handleEncryptNotification = async (node) => { + const from = node.attrs.from; + if (from === S_WHATSAPP_NET) { + const stanzaId = node.attrs.id; + if (stanzaId && inFlightPreKeyLow.has(stanzaId)) { + return; + } + const countChild = getBinaryNodeChild(node, 'count'); + const count = +countChild.attrs.value; + const shouldUploadMorePreKeys = count < MIN_PREKEY_COUNT; + logger.debug({ count, shouldUploadMorePreKeys }, 'recv pre-key count'); + if (shouldUploadMorePreKeys) { + if (stanzaId) + inFlightPreKeyLow.add(stanzaId); + try { + await uploadPreKeys(); + } + finally { + if (stanzaId) + inFlightPreKeyLow.delete(stanzaId); + } + } + } + else { + const result = await handleIdentityChange(node, { + meId: authState.creds.me?.id, + meLid: authState.creds.me?.lid, + validateSession: signalRepository.validateSession, + assertSessions, + debounceCache: identityAssertDebounce, + logger, + onBeforeSessionRefresh: reissueTcTokenAfterIdentityChange + }); + if (result.action === 'no_identity_node') { + logger.info({ node }, 'unknown encrypt notification'); + } + } + }; + const handleGroupNotification = (fullNode, child, msg) => { + // TODO: Support PN/LID (Here is only LID now) + const actingParticipantLid = fullNode.attrs.participant; + const actingParticipantPn = fullNode.attrs.participant_pn; + const actingParticipantUsername = fullNode.attrs.participant_username; + const affectedParticipantLid = getBinaryNodeChild(child, 'participant')?.attrs?.jid || actingParticipantLid; + const affectedParticipantPn = getBinaryNodeChild(child, 'participant')?.attrs?.phone_number || actingParticipantPn; + switch (child?.tag) { + case 'create': + const metadata = extractGroupMetadata(child); + msg.messageStubType = WAMessageStubType.GROUP_CREATE; + msg.messageStubParameters = [metadata.subject]; + msg.key = { participant: metadata.owner, participantAlt: metadata.ownerPn }; + ev.emit('chats.upsert', [ + { + id: metadata.id, + name: metadata.subject, + conversationTimestamp: metadata.creation + } + ]); + ev.emit('groups.upsert', [ + { + ...metadata, + author: actingParticipantLid, + authorPn: actingParticipantPn, + authorUsername: actingParticipantUsername + } + ]); + break; + case 'ephemeral': + case 'not_ephemeral': + msg.message = { + protocolMessage: { + type: proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING, + ephemeralExpiration: +(child.attrs.expiration || 0) + } + }; + break; + case 'modify': + const oldNumber = getBinaryNodeChildren(child, 'participant').map(p => p.attrs.jid); + msg.messageStubParameters = oldNumber || []; + msg.messageStubType = WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER; + break; + case 'promote': + case 'demote': + case 'remove': + case 'add': + case 'leave': + const stubType = `GROUP_PARTICIPANT_${child.tag.toUpperCase()}`; + msg.messageStubType = WAMessageStubType[stubType]; + const participants = getBinaryNodeChildren(child, 'participant').map(({ attrs }) => { + // TODO: Store LID MAPPINGS + return { + id: attrs.jid, + phoneNumber: isLidUser(attrs.jid) && isPnUser(attrs.phone_number) ? attrs.phone_number : undefined, + lid: isPnUser(attrs.jid) && isLidUser(attrs.lid) ? attrs.lid : undefined, + username: attrs.participant_username || attrs.username || undefined, + admin: (attrs.type || null) + }; + }); + if (participants.length === 1 && + // if recv. "remove" message and sender removed themselves + // mark as left + (areJidsSameUser(participants[0].id, actingParticipantLid) || + areJidsSameUser(participants[0].id, actingParticipantPn)) && + child.tag === 'remove') { + msg.messageStubType = WAMessageStubType.GROUP_PARTICIPANT_LEAVE; + } + msg.messageStubParameters = participants.map(a => JSON.stringify(a)); + break; + case 'subject': + msg.messageStubType = WAMessageStubType.GROUP_CHANGE_SUBJECT; + msg.messageStubParameters = [child.attrs.subject]; + break; + case 'description': + const description = getBinaryNodeChild(child, 'body')?.content?.toString(); + msg.messageStubType = WAMessageStubType.GROUP_CHANGE_DESCRIPTION; + msg.messageStubParameters = description ? [description] : undefined; + break; + case 'announcement': + case 'not_announcement': + msg.messageStubType = WAMessageStubType.GROUP_CHANGE_ANNOUNCE; + msg.messageStubParameters = [child.tag === 'announcement' ? 'on' : 'off']; + break; + case 'locked': + case 'unlocked': + msg.messageStubType = WAMessageStubType.GROUP_CHANGE_RESTRICT; + msg.messageStubParameters = [child.tag === 'locked' ? 'on' : 'off']; + break; + case 'invite': + msg.messageStubType = WAMessageStubType.GROUP_CHANGE_INVITE_LINK; + msg.messageStubParameters = [child.attrs.code]; + break; + case 'member_add_mode': + const addMode = child.content; + if (addMode) { + msg.messageStubType = WAMessageStubType.GROUP_MEMBER_ADD_MODE; + msg.messageStubParameters = [addMode.toString()]; + } + break; + case 'membership_approval_mode': + const approvalMode = getBinaryNodeChild(child, 'group_join'); + if (approvalMode) { + msg.messageStubType = WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE; + msg.messageStubParameters = [approvalMode.attrs.state]; + } + break; + case 'created_membership_requests': + msg.messageStubType = WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD; + msg.messageStubParameters = [ + JSON.stringify({ lid: affectedParticipantLid, pn: affectedParticipantPn }), + 'created', + child.attrs.request_method + ]; + break; + case 'revoked_membership_requests': + const isDenied = areJidsSameUser(affectedParticipantLid, actingParticipantLid); + // TODO: LIDMAPPING SUPPORT + msg.messageStubType = WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD; + msg.messageStubParameters = [ + JSON.stringify({ lid: affectedParticipantLid, pn: affectedParticipantPn }), + isDenied ? 'revoked' : 'rejected' + ]; + break; + } + }; + const handleDevicesNotification = async (node) => { + const [child] = getAllBinaryNodeChildren(node); + const from = jidNormalizedUser(node.attrs.from); + if (!child) { + logger.debug({ from }, 'devices notification missing child, skipping'); + return; + } + const tag = child.tag; + const deviceHash = child.attrs.device_hash; + const devices = getBinaryNodeChildren(child, 'device'); + if (areJidsSameUser(from, authState.creds.me.id) || areJidsSameUser(from, authState.creds.me.lid)) { + const deviceJids = devices.map(d => d.attrs.jid); + logger.info({ deviceJids }, 'got my own devices'); + } + if (!devices.length) { + logger.debug({ from, tag }, 'no devices in notification, skipping'); + return; + } + const decoded = []; + for (const d of devices) { + const jid = d.attrs.jid; + if (!jid) + continue; + const parts = jidDecode(jid); + if (!parts) { + logger.debug({ jid }, 'failed to decode device jid, skipping'); + continue; + } + decoded.push({ jid, user: parts.user, server: parts.server, device: parts.device }); + } + if (!decoded.length) + return; + await devicesMutex.mutex(async () => { + const byUser = new Map(); + for (const d of decoded) { + const list = byUser.get(d.user) || []; + list.push(d); + byUser.set(d.user, list); + } + for (const [user, entries] of byUser) { + if (tag === 'update') { + logger.debug({ user }, `${user}'s device list updated, dropping cached devices`); + await userDevicesCache?.del(user); + continue; + } + if (tag === 'remove') { + await signalRepository.deleteSession(entries.map(e => e.jid)); + } + const existingCache = (await userDevicesCache?.get(user)) || []; + if (!existingCache.length) { + // No baseline yet; skip applying the delta so getUSyncDevices can + // later fetch the full device list. Caching just the notification + // entries would make a partial list look authoritative. + logger.debug({ user, tag }, 'device list not cached, deferring to USync refresh'); + continue; + } + const affected = new Set(entries.map(e => e.device)); + let updatedDevices; + switch (tag) { + case 'add': + logger.info({ deviceHash, count: entries.length }, 'devices added'); + updatedDevices = [ + ...existingCache.filter(d => !affected.has(d.device)), + ...entries.map(e => ({ user: e.user, server: e.server, device: e.device })) + ]; + break; + case 'remove': + logger.info({ deviceHash, count: entries.length }, 'devices removed'); + updatedDevices = existingCache.filter(d => !affected.has(d.device)); + break; + default: + logger.debug({ tag }, 'Unknown device list change tag'); + continue; + } + if (updatedDevices.length === 0) { + await userDevicesCache?.del(user); + } + else { + await userDevicesCache?.set(user, updatedDevices); + } + } + }); + }; + const processNotification = async (node) => { + const result = {}; + const [child] = getAllBinaryNodeChildren(node); + const nodeType = node.attrs.type; + const from = jidNormalizedUser(node.attrs.from); + switch (nodeType) { + case 'newsletter': + await handleNewsletterNotification(node); + break; + case 'mex': + await handleMexNotification(node); + break; + case 'w:gp2': + // TODO: HANDLE PARTICIPANT_PN + handleGroupNotification(node, child, result); + break; + case 'mediaretry': + const event = decodeMediaRetryNode(node); + ev.emit('messages.media-update', [event]); + break; + case 'encrypt': + await handleEncryptNotification(node); + break; + case 'devices': + try { + await handleDevicesNotification(node); + } + catch (error) { + logger.error({ error, node }, 'failed to handle devices notification'); + } + break; + case 'server_sync': + const update = getBinaryNodeChild(node, 'collection'); + if (update) { + const name = update.attrs.name; + await resyncAppState([name], false); + } + break; + case 'picture': + const setPicture = getBinaryNodeChild(node, 'set'); + const delPicture = getBinaryNodeChild(node, 'delete'); + // TODO: WAJIDHASH stuff proper support inhouse + ev.emit('contacts.update', [ + { + id: jidNormalizedUser(node?.attrs?.from) || (setPicture || delPicture)?.attrs?.hash || '', + imgUrl: setPicture ? 'changed' : 'removed' + } + ]); + if (isJidGroup(from)) { + const node = setPicture || delPicture; + result.messageStubType = WAMessageStubType.GROUP_CHANGE_ICON; + if (setPicture) { + result.messageStubParameters = [setPicture.attrs.id]; + } + result.participant = node?.attrs.author; + result.key = { + ...(result.key || {}), + participant: setPicture?.attrs.author + }; + } + break; + case 'account_sync': + if (child.tag === 'disappearing_mode') { + const newDuration = +child.attrs.duration; + const timestamp = +child.attrs.t; + logger.info({ newDuration }, 'updated account disappearing mode'); + ev.emit('creds.update', { + accountSettings: { + ...authState.creds.accountSettings, + defaultDisappearingMode: { + ephemeralExpiration: newDuration, + ephemeralSettingTimestamp: timestamp + } + } + }); + } + else if (child.tag === 'blocklist') { + const blocklists = getBinaryNodeChildren(child, 'item'); + for (const { attrs } of blocklists) { + const blocklist = [attrs.jid]; + const type = attrs.action === 'block' ? 'add' : 'remove'; + ev.emit('blocklist.update', { blocklist, type }); + } + } + break; + case 'link_code_companion_reg': + const linkCodeCompanionReg = getBinaryNodeChild(node, 'link_code_companion_reg'); + const ref = toRequiredBuffer(getBinaryNodeChildBuffer(linkCodeCompanionReg, 'link_code_pairing_ref')); + const primaryIdentityPublicKey = toRequiredBuffer(getBinaryNodeChildBuffer(linkCodeCompanionReg, 'primary_identity_pub')); + const primaryEphemeralPublicKeyWrapped = toRequiredBuffer(getBinaryNodeChildBuffer(linkCodeCompanionReg, 'link_code_pairing_wrapped_primary_ephemeral_pub')); + const codePairingPublicKey = await decipherLinkPublicKey(primaryEphemeralPublicKeyWrapped); + const companionSharedKey = Curve.sharedKey(authState.creds.pairingEphemeralKeyPair.private, codePairingPublicKey); + const random = randomBytes(32); + const linkCodeSalt = randomBytes(32); + const linkCodePairingExpanded = hkdf(companionSharedKey, 32, { + salt: linkCodeSalt, + info: 'link_code_pairing_key_bundle_encryption_key' + }); + const encryptPayload = Buffer.concat([ + Buffer.from(authState.creds.signedIdentityKey.public), + primaryIdentityPublicKey, + random + ]); + const encryptIv = randomBytes(12); + const encrypted = aesEncryptGCM(encryptPayload, linkCodePairingExpanded, encryptIv, Buffer.alloc(0)); + const encryptedPayload = Buffer.concat([linkCodeSalt, encryptIv, encrypted]); + const identitySharedKey = Curve.sharedKey(authState.creds.signedIdentityKey.private, primaryIdentityPublicKey); + const identityPayload = Buffer.concat([companionSharedKey, identitySharedKey, random]); + authState.creds.advSecretKey = Buffer.from(hkdf(identityPayload, 32, { info: 'adv_secret' })).toString('base64'); + await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + id: sock.generateMessageTag(), + xmlns: 'md' + }, + content: [ + { + tag: 'link_code_companion_reg', + attrs: { + jid: authState.creds.me.id, + stage: 'companion_finish' + }, + content: [ + { + tag: 'link_code_pairing_wrapped_key_bundle', + attrs: {}, + content: encryptedPayload + }, + { + tag: 'companion_identity_public', + attrs: {}, + content: authState.creds.signedIdentityKey.public + }, + { + tag: 'link_code_pairing_ref', + attrs: {}, + content: ref + } + ] + } + ] + }); + authState.creds.registered = true; + ev.emit('creds.update', authState.creds); + break; + case 'privacy_token': + await handlePrivacyTokenNotification(node); + break; + } + if (Object.keys(result).length) { + return result; + } + }; + /** + * In-memory cache of storage JIDs with stored tctokens, seeded from the persisted index. + * Used to coalesce writes during a session; pruning always re-reads the persisted index + * to cover writes made by other layers (e.g. history sync). + */ + const tcTokenKnownJids = new Set(); + const tcTokenIndexLoaded = (async () => { + try { + const jids = await readTcTokenIndex(authState.keys); + for (const jid of jids) + tcTokenKnownJids.add(jid); + logger.debug({ count: tcTokenKnownJids.size }, 'loaded tctoken index'); + } + catch (err) { + logger.warn({ err: err?.message }, 'failed to load tctoken index'); + } + })(); + let tcTokenIndexTimer; + async function flushTcTokenIndex() { + if (tcTokenIndexTimer) { + clearTimeout(tcTokenIndexTimer); + tcTokenIndexTimer = undefined; + } + // Merge with whatever is already persisted so we don't clobber writes from other + // paths (history sync, concurrent sessions on the same store). + const write = await buildMergedTcTokenIndexWrite(authState.keys, tcTokenKnownJids); + return authState.keys.set({ tctoken: write }); + } + function scheduleTcTokenIndexSave() { + if (tcTokenIndexTimer) { + clearTimeout(tcTokenIndexTimer); + } + tcTokenIndexTimer = setTimeout(() => { + tcTokenIndexTimer = undefined; + flushTcTokenIndex().catch(err => { + logger.warn({ err: err?.message }, 'failed to save tctoken index'); + }); + }, 5000); + } + function trackTcTokenJid(jid) { + if (jid && jid !== TC_TOKEN_INDEX_KEY && !tcTokenKnownJids.has(jid)) { + tcTokenKnownJids.add(jid); + scheduleTcTokenIndexSave(); + } + } + const handlePrivacyTokenNotification = async (node) => { + const tokensNode = getBinaryNodeChild(node, 'tokens'); + if (!tokensNode) + return; + const from = jidNormalizedUser(node.attrs.from); + // WA Web uses: senderLid ?? toLid(from) for the storage key + // The sender_lid attribute provides the LID directly when available + const senderLid = node.attrs.sender_lid && isLidUser(jidNormalizedUser(node.attrs.sender_lid)) + ? jidNormalizedUser(node.attrs.sender_lid) + : undefined; + const fallbackJid = senderLid ?? (await resolveTcTokenJid(from, getLIDForPN)); + logger.debug({ from, storageJid: fallbackJid }, 'processing privacy token notification'); + await storeTcTokensFromIqResult({ + result: node, + fallbackJid, + keys: authState.keys, + getLIDForPN, + onNewJidStored: trackTcTokenJid + }); + }; + async function decipherLinkPublicKey(data) { + const buffer = toRequiredBuffer(data); + const salt = buffer.slice(0, 32); + const secretKey = await derivePairingCodeKey(authState.creds.pairingCode, salt); + const iv = buffer.slice(32, 48); + const payload = buffer.slice(48, 80); + return aesDecryptCTR(payload, secretKey, iv); + } + function toRequiredBuffer(data) { + if (data === undefined) { + throw new Boom('Invalid buffer', { statusCode: 400 }); + } + return data instanceof Buffer ? data : Buffer.from(data); + } + const willSendMessageAgain = async (id, participant) => { + const key = `${id}:${participant}`; + const retryCount = (await msgRetryCache.get(key)) || 0; + return retryCount < maxMsgRetryCount; + }; + const updateSendMessageAgainCount = async (id, participant) => { + const key = `${id}:${participant}`; + const newValue = ((await msgRetryCache.get(key)) || 0) + 1; + await msgRetryCache.set(key, newValue); + }; + const sendMessagesAgain = async (key, ids, retryNode, receiptNode) => { + const remoteJid = key.remoteJid; + const participant = key.participant || remoteJid; + const retryCount = +retryNode.attrs.count || 1; + const msgId = ids[0]; + // Try to get messages from cache first, then fallback to getMessage + const msgs = []; + for (const id of ids) { + let msg; + // Try to get from retry cache first if enabled + if (messageRetryManager) { + const cachedMsg = messageRetryManager.getRecentMessage(remoteJid, id); + if (cachedMsg) { + msg = cachedMsg.message; + logger.debug({ jid: remoteJid, id }, 'found message in retry cache'); + // Mark retry as successful since we found the message + messageRetryManager.markRetrySuccess(id); + } + } + // Fallback to getMessage if not found in cache + if (!msg) { + msg = await getMessage({ ...key, id }); + if (msg) { + logger.debug({ jid: remoteJid, id }, 'found message via getMessage'); + // Also mark as successful if found via getMessage + if (messageRetryManager) { + messageRetryManager.markRetrySuccess(id); + } + } + } + msgs.push(msg); + } + // if it's the primary jid sending the request + // just re-send the message to everyone + // prevents the first message decryption failure + const sendToAll = !jidDecode(participant)?.device; + const sessionId = signalRepository.jidToSignalProtocolAddress(participant); + let injectedFromBundle = false; + const bundle = extractE2ESessionFromRetryReceipt(receiptNode); + if (bundle) { + try { + await signalRepository.injectE2ESession({ jid: participant, session: bundle }); + injectedFromBundle = true; + logger.debug({ participant, retryCount }, 'injected session from retry receipt key bundle'); + } + catch (error) { + logger.warn({ error, participant }, 'failed to inject session from retry receipt'); + } + } + if (!injectedFromBundle) { + const receivedRegId = getBinaryNodeChildUInt(receiptNode, 'registration', 4); + if (typeof receivedRegId === 'number' && Number.isInteger(receivedRegId)) { + const info = await signalRepository.getSessionInfo(participant); + if (info && info.registrationId !== 0 && info.registrationId !== receivedRegId) { + logger.info({ participant, stored: info.registrationId, received: receivedRegId }, 'reg id mismatch on retry without bundle, deleting session'); + await authState.keys.set({ session: { [sessionId]: null } }); + } + } + } + const BASE_KEY_CHECK_RETRY = 2; + if (msgId && messageRetryManager) { + const info = await signalRepository.getSessionInfo(participant); + if (info) { + if (retryCount === BASE_KEY_CHECK_RETRY) { + messageRetryManager.saveBaseKey(sessionId, msgId, info.baseKey); + } + else if (retryCount > BASE_KEY_CHECK_RETRY) { + if (messageRetryManager.hasSameBaseKey(sessionId, msgId, info.baseKey)) { + logger.warn({ participant, retryCount }, 'base key collision on retry, forcing fresh session'); + await authState.keys.set({ session: { [sessionId]: null } }); + } + messageRetryManager.deleteBaseKey(sessionId, msgId); + } + } + } + let shouldRecreateSession = false; + let recreateReason = ''; + if (enableAutoSessionRecreation && messageRetryManager && retryCount > 1 && !injectedFromBundle) { + try { + const hasSession = await signalRepository.validateSession(participant); + const result = messageRetryManager.shouldRecreateSession(participant, hasSession.exists); + shouldRecreateSession = result.recreate; + recreateReason = result.reason; + if (shouldRecreateSession) { + logger.debug({ participant, retryCount, reason: recreateReason }, 'recreating session for outgoing retry'); + await authState.keys.set({ session: { [sessionId]: null } }); + } + } + catch (error) { + logger.warn({ error, participant }, 'failed to check session recreation for outgoing retry'); + } + } + if (!injectedFromBundle) { + await assertSessions([participant], true); + } + if (isJidGroup(remoteJid)) { + await authState.keys.set({ 'sender-key-memory': { [remoteJid]: null } }); + } + logger.debug({ participant, sendToAll, shouldRecreateSession, recreateReason, injectedFromBundle }, 'prepared session for retry resend'); + for (const [i, msg] of msgs.entries()) { + if (!ids[i]) + continue; + if (msg && (await willSendMessageAgain(ids[i], participant))) { + await updateSendMessageAgainCount(ids[i], participant); + const msgRelayOpts = { messageId: ids[i] }; + if (sendToAll) { + msgRelayOpts.useUserDevicesCache = false; + } + else { + msgRelayOpts.participant = { + jid: participant, + count: +retryNode.attrs.count + }; + } + await relayMessage(key.remoteJid, msg, msgRelayOpts); + } + else { + logger.debug({ jid: key.remoteJid, id: ids[i] }, 'recv retry request, but message not available'); + } + } + }; + const handleReceipt = async (node) => { + const { attrs, content } = node; + const isLid = attrs.from.includes('lid'); + const isNodeFromMe = areJidsSameUser(attrs.participant || attrs.from, isLid ? authState.creds.me?.lid : authState.creds.me?.id); + const remoteJid = !isNodeFromMe || isJidGroup(attrs.from) ? attrs.from : attrs.recipient; + const fromMe = !attrs.recipient || ((attrs.type === 'retry' || attrs.type === 'sender') && isNodeFromMe); + const key = { + remoteJid, + id: '', + fromMe, + participant: attrs.participant + }; + const ids = [attrs.id]; + if (Array.isArray(content)) { + const items = getBinaryNodeChildren(content[0], 'item'); + ids.push(...items.map(i => i.attrs.id)); + } + try { + await Promise.all([ + receiptMutex.mutex(async () => { + const status = getStatusFromReceiptType(attrs.type); + if (typeof status !== 'undefined' && + // basically, we only want to know when a message from us has been delivered to/read by the other person + // or another device of ours has read some messages + (status >= proto.WebMessageInfo.Status.SERVER_ACK || !isNodeFromMe)) { + if (isJidGroup(remoteJid) || isJidStatusBroadcast(remoteJid)) { + if (attrs.participant) { + const updateKey = status === proto.WebMessageInfo.Status.DELIVERY_ACK ? 'receiptTimestamp' : 'readTimestamp'; + ev.emit('message-receipt.update', ids.map(id => ({ + key: { ...key, id }, + receipt: { + userJid: jidNormalizedUser(attrs.participant), + [updateKey]: +attrs.t + } + }))); + } + } + else { + ev.emit('messages.update', ids.map(id => ({ + key: { ...key, id }, + update: { status, messageTimestamp: toNumber(+(attrs.t ?? 0)) } + }))); + } + } + if (attrs.type === 'retry') { + // correctly set who is asking for the retry + key.participant = key.participant || attrs.from; + const retryNode = getBinaryNodeChild(node, 'retry'); + if (ids[0] && key.participant && (await willSendMessageAgain(ids[0], key.participant))) { + if (key.fromMe) { + try { + await updateSendMessageAgainCount(ids[0], key.participant); + logger.debug({ attrs, key }, 'recv retry request'); + await sendMessagesAgain(key, ids, retryNode, node); + } + catch (error) { + logger.error({ key, ids, trace: error instanceof Error ? error.stack : 'Unknown error' }, 'error in sending message again'); + } + } + else { + logger.info({ attrs, key }, 'recv retry for not fromMe message'); + } + } + else { + logger.info({ attrs, key }, 'will not send message again, as sent too many times'); + } + } + }) + ]); + } + finally { + await sendMessageAck(node).catch(ackErr => logger.error({ ackErr }, 'failed to ack receipt')); + } + }; + const handleNotification = async (node) => { + const remoteJid = node.attrs.from; + try { + await Promise.all([ + notificationMutex.mutex(async () => { + const msg = await processNotification(node); + if (msg) { + const fromMe = areJidsSameUser(node.attrs.participant || remoteJid, authState.creds.me.id); + const { senderAlt: participantAlt, addressingMode } = extractAddressingContext(node); + msg.key = { + remoteJid, + fromMe, + participant: node.attrs.participant, + participantAlt, + participantUsername: node.attrs.participant_username, + addressingMode, + id: node.attrs.id, + ...(msg.key || {}) + }; + msg.participant ?? (msg.participant = node.attrs.participant); + msg.messageTimestamp = +node.attrs.t; + const fullMsg = proto.WebMessageInfo.fromObject(msg); + await upsertMessage(fullMsg, 'append'); + } + }) + ]); + } + finally { + await sendMessageAck(node).catch(ackErr => logger.error({ ackErr }, 'failed to ack notification')); + } + }; + const handleMessage = async (node) => { + const encNode = getBinaryNodeChild(node, 'enc'); + // TODO: temporary fix for crashes and issues resulting of failed msmsg decryption + if (encNode?.attrs.type === 'msmsg') { + logger.debug({ key: node.attrs.key }, 'ignored msmsg'); + await sendMessageAck(node, NACK_REASONS.MissingMessageSecret); + return; + } + let acked = false; + try { + const { fullMessage: msg, category, author, decrypt } = decryptMessageNode(node, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, logger); + const alt = msg.key.participantAlt || msg.key.remoteJidAlt; + // store new mappings we didn't have before + if (!!alt) { + const altServer = jidDecode(alt)?.server; + const primaryJid = msg.key.participant || msg.key.remoteJid; + if (altServer === 'lid') { + if (!(await signalRepository.lidMapping.getPNForLID(alt))) { + await signalRepository.lidMapping.storeLIDPNMappings([{ lid: alt, pn: primaryJid }]); + await signalRepository.migrateSession(primaryJid, alt); + } + } + else { + await signalRepository.lidMapping.storeLIDPNMappings([{ lid: primaryJid, pn: alt }]); + await signalRepository.migrateSession(alt, primaryJid); + } + } + await messageMutex.mutex(async () => { + await decrypt(); + if (msg.key?.remoteJid && msg.key?.id && msg.message && messageRetryManager) { + messageRetryManager.addRecentMessage(msg.key.remoteJid, msg.key.id, msg.message); + } + // message failed to decrypt + if (msg.messageStubType === proto.WebMessageInfo.StubType.CIPHERTEXT && msg.category !== 'peer') { + if (msg?.messageStubParameters?.[0] === MISSING_KEYS_ERROR_TEXT) { + acked = true; + return sendMessageAck(node, NACK_REASONS.ParsingError); + } + if (msg.messageStubParameters?.[0] === NO_MESSAGE_FOUND_ERROR_TEXT) { + // Message arrived without encryption (e.g. CTWA ads messages). + // Check if this is eligible for placeholder resend (matching WA Web filters). + const unavailableNode = getBinaryNodeChild(node, 'unavailable'); + const unavailableType = unavailableNode?.attrs?.type; + if (unavailableType === 'bot_unavailable_fanout' || + unavailableType === 'hosted_unavailable_fanout' || + unavailableType === 'view_once_unavailable_fanout') { + logger.debug({ msgId: msg.key.id, unavailableType }, 'skipping placeholder resend for excluded unavailable type'); + acked = true; + return sendMessageAck(node); + } + const messageAge = unixTimestampSeconds() - toNumber(msg.messageTimestamp); + if (messageAge > PLACEHOLDER_MAX_AGE_SECONDS) { + logger.debug({ msgId: msg.key.id, messageAge }, 'skipping placeholder resend for old message'); + acked = true; + return sendMessageAck(node); + } + // Request the real content from the phone via placeholder resend PDO. + // Upsert the CIPHERTEXT stub as a placeholder (like WA Web's processPlaceholderMsg), + // and store the requestId in stubParameters[1] so users can correlate + // with the incoming PDO response event. + const cleanKey = { + remoteJid: msg.key.remoteJid, + fromMe: msg.key.fromMe, + id: msg.key.id, + participant: msg.key.participant + }; + // Cache the original message metadata so the PDO response handler + // can preserve key fields (LID details etc.) that the phone may omit + const msgData = { + key: msg.key, + messageTimestamp: msg.messageTimestamp, + pushName: msg.pushName, + participant: msg.participant, + verifiedBizName: msg.verifiedBizName + }; + requestPlaceholderResend(cleanKey, msgData) + .then(requestId => { + if (requestId && requestId !== 'RESOLVED') { + logger.debug({ msgId: msg.key.id, requestId }, 'requested placeholder resend for unavailable message'); + ev.emit('messages.update', [ + { + key: msg.key, + update: { messageStubParameters: [NO_MESSAGE_FOUND_ERROR_TEXT, requestId] } + } + ]); + } + }) + .catch(err => { + logger.warn({ err, msgId: msg.key.id }, 'failed to request placeholder resend for unavailable message'); + }); + acked = true; + await sendMessageAck(node); + // Don't return — fall through to upsertMessage so the stub is emitted + } + else { + // Skip retry for expired status messages (>24h old) + if (isJidStatusBroadcast(msg.key.remoteJid)) { + const messageAge = unixTimestampSeconds() - toNumber(msg.messageTimestamp); + if (messageAge > STATUS_EXPIRY_SECONDS) { + logger.debug({ msgId: msg.key.id, messageAge, remoteJid: msg.key.remoteJid }, 'skipping retry for expired status message'); + acked = true; + return sendMessageAck(node); + } + } + logger.debug('[handleMessage] Attempting retry request for failed decryption'); + // WAWeb only retry-receipts here; server emits PreKeyLow if prekeys run low. + await retryMutex.mutex(async () => { + try { + if (!ws.isOpen) { + logger.debug({ node }, 'Connection closed, skipping retry'); + return; + } + const encNode = getBinaryNodeChild(node, 'enc'); + await sendRetryRequest(node, !encNode); + if (retryRequestDelayMs) { + await delay(retryRequestDelayMs); + } + } + catch (err) { + logger.error({ err }, 'Failed to send retry'); + } + acked = true; + await sendMessageAck(node, NACK_REASONS.UnhandledError); + }); + } + } + else { + if (messageRetryManager && msg.key.id) { + messageRetryManager.cancelPendingPhoneRequest(msg.key.id); + } + const isNewsletter = isJidNewsletter(msg.key.remoteJid); + if (!isNewsletter) { + // no type in the receipt => message delivered + let type = undefined; + let participant = msg.key.participant; + if (category === 'peer') { + // special peer message + type = 'peer_msg'; + } + else if (msg.key.fromMe) { + // message was sent by us from a different device + type = 'sender'; + // need to specially handle this case + if (isLidUser(msg.key.remoteJid) || isLidUser(msg.key.remoteJidAlt)) { + participant = author; // TODO: investigate sending receipts to LIDs and not PNs + } + } + else if (!sendActiveReceipts) { + type = 'inactive'; + } + acked = true; + await sendReceipt(msg.key.remoteJid, participant, [msg.key.id], type); + // send ack for history message + const isAnyHistoryMsg = getHistoryMsg(msg.message); + if (isAnyHistoryMsg) { + const jid = jidNormalizedUser(msg.key.remoteJid); + await sendReceipt(jid, undefined, [msg.key.id], 'hist_sync'); // TODO: investigate + } + } + else { + acked = true; + await sendMessageAck(node); + logger.debug({ key: msg.key }, 'processed newsletter message without receipts'); + } + } + cleanMessage(msg, authState.creds.me.id, authState.creds.me.lid); + await upsertMessage(msg, node.attrs.offline ? 'append' : 'notify'); + }); + } + catch (error) { + logger.error({ error, node: binaryNodeToString(node) }, 'error in handling message'); + if (!acked) { + await sendMessageAck(node, NACK_REASONS.UnhandledError).catch(ackErr => logger.error({ ackErr }, 'failed to ack message after error')); + } + } + }; + const handleCall = async (node) => { + try { + const { attrs } = node; + const [infoChild] = getAllBinaryNodeChildren(node); + if (!infoChild) { + throw new Boom('Missing call info in call node'); + } + const status = getCallStatusFromNode(infoChild); + const callId = infoChild.attrs['call-id']; + const from = infoChild.attrs.from || infoChild.attrs['call-creator']; + const call = { + chatId: attrs.from, + from, + callerPn: infoChild.attrs['caller_pn'], + id: callId, + date: new Date(+attrs.t * 1000), + offline: !!attrs.offline, + status + }; + if (status === 'relaylatency') { + const latencyValue = infoChild.attrs.latency || infoChild.attrs['latency_ms'] || infoChild.attrs['latency-ms']; + const latencyMs = latencyValue ? Number(latencyValue) : undefined; + if (Number.isFinite(latencyMs)) { + call.latencyMs = latencyMs; + } + } + if (status === 'offer') { + call.isVideo = !!getBinaryNodeChild(infoChild, 'video'); + call.isGroup = infoChild.attrs.type === 'group' || !!infoChild.attrs['group-jid']; + call.groupJid = infoChild.attrs['group-jid']; + await callOfferCache.set(call.id, call); + } + const existingCall = await callOfferCache.get(call.id); + // use existing call info to populate this event + if (existingCall) { + call.isVideo = existingCall.isVideo; + call.isGroup = existingCall.isGroup; + call.callerPn = call.callerPn || existingCall.callerPn; + } + // delete data once call has ended + if (status === 'reject' || status === 'accept' || status === 'timeout' || status === 'terminate') { + await callOfferCache.del(call.id); + } + ev.emit('call', [call]); + } + catch (error) { + logger.error({ error, node: binaryNodeToString(node) }, 'error in handling call'); + } + finally { + await sendMessageAck(node).catch(ackErr => logger.error({ ackErr }, 'failed to ack call')); + } + }; + const handleBadAck = async ({ attrs }) => { + const key = { remoteJid: attrs.from, fromMe: true, id: attrs.id }; + // WARNING: REFRAIN FROM ENABLING THIS FOR NOW. IT WILL CAUSE A LOOP + // // current hypothesis is that if pash is sent in the ack + // // it means -- the message hasn't reached all devices yet + // // we'll retry sending the message here + // if(attrs.phash) { + // logger.info({ attrs }, 'received phash in ack, resending message...') + // const msg = await getMessage(key) + // if(msg) { + // await relayMessage(key.remoteJid!, msg, { messageId: key.id!, useUserDevicesCache: false }) + // } else { + // logger.warn({ attrs }, 'could not send message again, as it was not found') + // } + // } + // error in acknowledgement, + // device could not display the message + if (attrs.error) { + const isReachoutTimelocked = attrs.error === String(NACK_REASONS.SenderReachoutTimelocked); + if (attrs.error === SERVER_ERROR_CODES.MessageAccountRestriction) { + // 463 = 1:1 message missing privacy token (tctoken). Usually means the + // account is restricted: WhatsApp blocks starting new chats but preserves + // existing ones, since established chats already carry a tctoken. + // WA Web prevents this client-side (disables the compose bar). + // No retry — retrying counts as another "reach out" and worsens the restriction. + logger.warn({ msgId: attrs.id, from: attrs.from }, 'error 463: account restricted or missing tctoken for contact'); + const ackFrom = attrs.from; + if (ackFrom && !inFlight463Recoveries.has(ackFrom)) { + inFlight463Recoveries.add(ackFrom); + void (async () => { + try { + const getPNForLID = signalRepository.lidMapping.getPNForLID.bind(signalRepository.lidMapping); + const tcStorageJid = await resolveTcTokenJid(ackFrom, getLIDForPN); + const issueJid = await resolveIssuanceJid(ackFrom, sock.serverProps.lidTrustedTokenIssueToLid, getLIDForPN, getPNForLID); + const result = await issuePrivacyTokens([issueJid], unixTimestampSeconds()); + await storeTcTokensFromIqResult({ + result, + fallbackJid: tcStorageJid, + keys: authState.keys, + getLIDForPN, + onNewJidStored: trackTcTokenJid + }); + logger.debug({ from: ackFrom }, 'completed 463 token recovery issuance'); + } + catch (err) { + logger.debug({ from: ackFrom, err: err?.message }, 'failed 463 token recovery issuance'); + } + finally { + inFlight463Recoveries.delete(ackFrom); + } + })(); + } + } + else if (attrs.error === SERVER_ERROR_CODES.SmaxInvalid) { + logger.warn({ msgId: attrs.id, from: attrs.from }, 'smax-invalid (479): stanza rejected by server — likely stale device session or malformed addressing'); + } + else if (isReachoutTimelocked) { + // user is temporarily restricted, fetch current restriction details + await fetchAccountReachoutTimelock().catch(err => logger.warn({ err }, 'failed to fetch reachout timelock')); + logger.warn({ attrs }, 'received error in ack'); + } + else { + logger.warn({ attrs }, 'received error in ack'); + } + ev.emit('messages.update', [ + { + key, + update: { + status: WAMessageStatus.ERROR, + messageStubParameters: isReachoutTimelocked ? [attrs.error, ACCOUNT_RESTRICTED_TEXT] : [attrs.error] + } + } + ]); + } + }; + /// processes a node with the given function + /// and adds the task to the existing buffer if we're buffering events + const processNodeWithBuffer = async (node, identifier, exec) => { + ev.buffer(); + await execTask(); + ev.flush(); + function execTask() { + return exec(node, false).catch(err => onUnexpectedError(err, identifier)); + } + }; + const offlineNodeProcessor = makeOfflineNodeProcessor(new Map([ + ['message', handleMessage], + ['call', handleCall], + ['receipt', handleReceipt], + ['notification', handleNotification] + ]), { + isWsOpen: () => ws.isOpen, + onUnexpectedError, + yieldToEventLoop: () => new Promise(resolve => setImmediate(resolve)) + }); + const processNode = async (type, node, identifier, exec) => { + // Fast path: ack and drop ignored JIDs before entering the buffer/queue + const from = node.attrs.from; + let ignoreJid = from; + if (type === 'receipt' && from) { + const attrs = node.attrs; + const isLid = attrs.from.includes('lid'); + const isNodeFromMe = areJidsSameUser(attrs.participant || attrs.from, isLid ? authState.creds.me?.lid : authState.creds.me?.id); + ignoreJid = !isNodeFromMe || isJidGroup(attrs.from) ? attrs.from : attrs.recipient; + } + if (ignoreJid && ignoreJid !== S_WHATSAPP_NET && shouldIgnoreJid(ignoreJid)) { + await sendMessageAck(node, type === 'message' ? NACK_REASONS.UnhandledError : undefined); + return; + } + const isOffline = !!node.attrs.offline; + if (isOffline) { + offlineNodeProcessor.enqueue(type, node); + } + else { + await processNodeWithBuffer(node, identifier, exec); + } + }; + // recv a message + ws.on('CB:message', async (node) => { + await processNode('message', node, 'processing message', handleMessage); + }); + ws.on('CB:call', async (node) => { + await processNode('call', node, 'handling call', handleCall); + }); + ws.on('CB:receipt', async (node) => { + await processNode('receipt', node, 'handling receipt', handleReceipt); + }); + ws.on('CB:notification', async (node) => { + await processNode('notification', node, 'handling notification', handleNotification); + }); + ws.on('CB:ack,class:message', (node) => { + handleBadAck(node).catch(error => onUnexpectedError(error, 'handling bad ack')); + }); + ev.on('call', async ([call]) => { + if (!call) { + return; + } + // missed call + group call notification message generation + if (call.status === 'timeout' || (call.status === 'offer' && call.isGroup)) { + const msg = { + key: { + remoteJid: call.chatId, + id: call.id, + fromMe: false + }, + messageTimestamp: unixTimestampSeconds(call.date) + }; + if (call.status === 'timeout') { + if (call.isGroup) { + msg.messageStubType = call.isVideo + ? WAMessageStubType.CALL_MISSED_GROUP_VIDEO + : WAMessageStubType.CALL_MISSED_GROUP_VOICE; + } + else { + msg.messageStubType = call.isVideo ? WAMessageStubType.CALL_MISSED_VIDEO : WAMessageStubType.CALL_MISSED_VOICE; + } + } + else { + msg.message = { call: { callKey: Buffer.from(call.id) } }; + } + const protoMsg = proto.WebMessageInfo.fromObject(msg); + await upsertMessage(protoMsg, call.offline ? 'append' : 'notify'); + } + }); + /** timestamp of last tctoken prune run — throttles to once per 24h */ + let lastTcTokenPruneTs = 0; + /** dedupe in-flight 463 recovery token issuance by target JID */ + const inFlight463Recoveries = new Set(); + ev.on('connection.update', ({ isOnline, connection }) => { + if (typeof isOnline !== 'undefined') { + sendActiveReceipts = isOnline; + logger.trace(`sendActiveReceipts set to "${sendActiveReceipts}"`); + } + // Flush pending tctoken index save on disconnect to avoid writing after close + if (connection === 'close' && tcTokenIndexTimer) { + clearTimeout(tcTokenIndexTimer); + tcTokenIndexTimer = undefined; + // Best-effort flush — may fail if store is already closed + try { + void Promise.resolve(flushTcTokenIndex()).catch(() => { }); + } + catch { + /* ignore sync errors */ + } + } + // Prune expired tctokens when coming online, at most once per 24 hours + // Matches WA Web's CLEAN_TC_TOKENS task + // Note: don't gate on tcTokenKnownJids.size — the index may still be loading + if (isOnline) { + const now = Date.now(); + const DAY_MS = 24 * 60 * 60 * 1000; + if (now - lastTcTokenPruneTs >= DAY_MS) { + lastTcTokenPruneTs = now; + void pruneExpiredTcTokens(); + } + } + }); + registerSocketEndHandler(() => { + if (!config.msgRetryCounterCache && msgRetryCache.close) { + msgRetryCache.close(); + } + if (!config.callOfferCache && callOfferCache.close) { + callOfferCache.close(); + } + identityAssertDebounce.close(); + sendActiveReceipts = false; + }); + async function pruneExpiredTcTokens() { + try { + await tcTokenIndexLoaded; + // Union with the persisted index picks up JIDs added by other layers + // (history sync) without needing inter-module wiring. + const persisted = await readTcTokenIndex(authState.keys); + const allJids = new Set(tcTokenKnownJids); + for (const jid of persisted) + allJids.add(jid); + if (!allJids.size) + return; + const jids = [...allJids]; + const allTokens = await authState.keys.get('tctoken', jids); + const writes = {}; + const survivors = new Set(); + let mutated = 0; + for (const jid of jids) { + const entry = allTokens[jid]; + if (!entry) { + // Tracked but nothing in store — drop from index. + mutated++; + continue; + } + const hasPeerToken = !!entry.token?.length; + const peerTokenExpired = hasPeerToken && isTcTokenExpired(entry.timestamp); + const hasSenderTs = entry.senderTimestamp !== undefined; + const senderTsExpired = hasSenderTs && isTcTokenExpired(entry.senderTimestamp); + const keepPeerToken = hasPeerToken && !peerTokenExpired; + const keepSenderTs = hasSenderTs && !senderTsExpired; + if (!keepPeerToken && !keepSenderTs) { + writes[jid] = null; + mutated++; + } + else if (peerTokenExpired && keepSenderTs) { + writes[jid] = { token: Buffer.alloc(0), senderTimestamp: entry.senderTimestamp }; + survivors.add(jid); + mutated++; + } + else { + survivors.add(jid); + } + } + if (mutated === 0) + return; + await authState.keys.set({ + tctoken: { + ...writes, + [TC_TOKEN_INDEX_KEY]: { + token: Buffer.from(JSON.stringify([...survivors])) + } + } + }); + tcTokenKnownJids.clear(); + for (const jid of survivors) + tcTokenKnownJids.add(jid); + logger.debug({ mutated, remaining: survivors.size }, 'pruned expired tctokens'); + } + catch (err) { + logger.warn({ err: err?.message }, 'failed to prune expired tctokens'); + } + } + return { + ...sock, + sendMessageAck, + sendRetryRequest, + rejectCall, + fetchMessageHistory, + requestPlaceholderResend, + messageRetryManager + }; +}; +//# sourceMappingURL=messages-recv.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/messages-recv.js.map b/packages/transport/vendor/lib/Socket/messages-recv.js.map new file mode 100644 index 0000000..323ff3f --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-recv.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages-recv.js","sourceRoot":"","sources":["../../src/Socket/messages-recv.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/messages-send.d.ts b/packages/transport/vendor/lib/Socket/messages-send.d.ts new file mode 100644 index 0000000..2e3ade1 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-send.d.ts @@ -0,0 +1,199 @@ +import NodeCache from '@cacheable/node-cache'; +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import type { AnyMessageContent, MediaConnInfo, MessageReceiptType, MessageRelayOptions, MiscMessageGenerationOptions, SocketConfig, WAMessage, WAMessageKey } from '../Types/index.js'; +import { MessageRetryManager } from '../Utils/index.js'; +import { type BinaryNode, type JidWithDevice } from '../WABinary/index.js'; +import { USyncQuery } from '../WAUSync/index.js'; +export declare const makeMessagesSocket: (config: SocketConfig) => { + userDevicesCache: import("../Types/index.js").PossiblyExtendedCacheStore | NodeCache; + devicesMutex: { + mutex(code: () => Promise | T): Promise; + }; + issuePrivacyTokens: (jids: string[], timestamp?: number) => Promise; + assertSessions: (jids: string[], force?: boolean) => Promise; + relayMessage: (jid: string, message: proto.IMessage, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }: MessageRelayOptions) => Promise; + sendReceipt: (jid: string, participant: string | undefined, messageIds: string[], type: MessageReceiptType) => Promise; + sendReceipts: (keys: WAMessageKey[], type: MessageReceiptType) => Promise; + readMessages: (keys: WAMessageKey[]) => Promise; + refreshMediaConn: (forceGet?: boolean) => Promise; + getMediaHost: () => string; + waUploadToServer: import("../Types/index.js").WAMediaUploadFunction; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + sendPeerDataOperationMessage: (pdoMessage: proto.Message.IPeerDataOperationRequestMessage) => Promise; + createParticipantNodes: (recipientJids: string[], message: proto.IMessage, extraAttrs?: BinaryNode["attrs"], dsmMessage?: proto.IMessage) => Promise<{ + nodes: BinaryNode[]; + shouldIncludeDeviceIdentity: boolean; + }>; + getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<(JidWithDevice & { + jid: string; + })[]>; + messageRetryManager: MessageRetryManager | null; + updateMemberLabel: (jid: string, memberLabel: string) => Promise; + updateMediaMessage: (message: WAMessage) => Promise; + sendMessage: (jid: string, content: AnyMessageContent, options?: MiscMessageGenerationOptions) => Promise; + newsletterCreate: (name: string, description?: string) => Promise; + newsletterUpdate: (jid: string, updates: import("../Types/index.js").NewsletterUpdate) => Promise; + newsletterSubscribers: (jid: string) => Promise<{ + subscribers: number; + }>; + newsletterMetadata: (type: "invite" | "jid", key: string) => Promise; + newsletterFollow: (jid: string) => Promise; + newsletterUnfollow: (jid: string) => Promise; + newsletterMute: (jid: string) => Promise; + newsletterUnmute: (jid: string) => Promise; + newsletterUpdateName: (jid: string, name: string) => Promise; + newsletterUpdateDescription: (jid: string, description: string) => Promise; + newsletterUpdatePicture: (jid: string, content: import("../Types/index.js").WAMediaUpload) => Promise; + newsletterRemovePicture: (jid: string) => Promise; + newsletterReactMessage: (jid: string, serverId: string, reaction?: string) => Promise; + newsletterFetchMessages: (jid: string, count: number, since: number, after: number) => Promise; + subscribeNewsletterUpdates: (jid: string) => Promise<{ + duration: string; + } | null>; + newsletterAdminCount: (jid: string) => Promise; + newsletterChangeOwner: (jid: string, newOwnerJid: string) => Promise; + newsletterDemote: (jid: string, userJid: string) => Promise; + newsletterDelete: (jid: string) => Promise; + groupMetadata: (jid: string) => Promise; + groupCreate: (subject: string, participants: string[]) => Promise; + groupLeave: (id: string) => Promise; + groupUpdateSubject: (jid: string, subject: string) => Promise; + groupRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + groupParticipantsUpdate: (jid: string, participants: string[], action: import("../Types/index.js").ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: BinaryNode; + }[]>; + groupUpdateDescription: (jid: string, description?: string) => Promise; + groupInviteCode: (jid: string) => Promise; + groupRevokeInvite: (jid: string) => Promise; + groupAcceptInvite: (code: string) => Promise; + groupRevokeInviteV4: (groupJid: string, invitedJid: string) => Promise; + groupAcceptInviteV4: (key: string | WAMessageKey, inviteMessage: proto.Message.IGroupInviteMessage) => Promise; + groupGetInviteInfo: (code: string) => Promise; + groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + groupSettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + groupMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + groupFetchAllParticipating: () => Promise<{ + [_: string]: import("../Types/index.js").GroupMetadata; + }>; + serverProps: { + privacyTokenOn1to1: boolean; + profilePicPrivacyToken: boolean; + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + upsertMessage: (msg: WAMessage, type: import("../Types/index.js").MessageUpsertType) => Promise; + appPatch: (patchCreate: import("../Types/index.js").WAPatchCreate) => Promise; + sendPresenceUpdate: (type: import("../Types/index.js").WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: import("../Types/index.js").WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: import("../Types/index.js").WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: import("../Types/index.js").WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: import("../Types/index.js").WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: import("../Types/index.js").WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: import("../Types/index.js").WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: import("../Types/index.js").WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: import("../Types/index.js").ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: import("../Types/index.js").CacheStore; + addLabel: (jid: string, labels: import("../Types/Label.js").LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: import("../Types/Bussines.js").QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/websocket.js").WebSocketClient; + ev: import("../Types/index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../Types/index.js").AuthenticationCreds; + keys: import("../Types/index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../Types/index.js").SignalRepositoryWithLIDStore; + user: import("../Types/index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +//# sourceMappingURL=messages-send.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/messages-send.d.ts.map b/packages/transport/vendor/lib/Socket/messages-send.d.ts.map new file mode 100644 index 0000000..abda807 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-send.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages-send.d.ts","sourceRoot":"","sources":["../../src/Socket/messages-send.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,KAAK,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC5B,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EAkBN,mBAAmB,EAInB,MAAM,UAAU,CAAA;AAYjB,OAAO,EAEN,KAAK,UAAU,EAef,KAAK,aAAa,EAGlB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAA;AAGlD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,YAAY;;;;;+BAynCd,MAAM,EAAE,cAAc,MAAM;2BArwBhC,MAAM,EAAE,UAAU,OAAO;wBA4KvD,MAAM,WACF,KAAK,CAAC,QAAQ,wIASpB,mBAAmB;uBA5cjB,MAAM,eACE,MAAM,GAAG,SAAS,cACnB,MAAM,EAAE,QACd,kBAAkB;yBAkDS,YAAY,EAAE,QAAQ,kBAAkB;yBAQxC,YAAY,EAAE;8CAtGG,OAAO,CAAC,aAAa,CAAC;;;;;;+CAwX5D,KAAK,CAAC,OAAO,CAAC,gCAAgC,KACxD,OAAO,CAAC,MAAM,CAAC;4CAiCF,MAAM,EAAE,WACd,KAAK,CAAC,QAAQ,eACV,UAAU,CAAC,OAAO,CAAC,eACnB,KAAK,CAAC,QAAQ;eAGJ,UAAU,EAAE;;;4BA5S7B,MAAM,EAAE,YACJ,OAAO,qBACE,OAAO,KACxB,OAAO,CAAC;aARL,MAAM;QAQc,CAAC;;6BA6KK,MAAM,eAAe,MAAM;kCA+1BtB,SAAS;uBA+CpB,MAAM,WAAW,iBAAiB,YAAW,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA1VxF,CAAC;;;;;;;;;0DAh5BiC,GAAG,0BACzB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAo0C1B,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/messages-send.js b/packages/transport/vendor/lib/Socket/messages-send.js new file mode 100644 index 0000000..be06e37 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-send.js @@ -0,0 +1,1172 @@ +import NodeCache from '@cacheable/node-cache'; +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import { DEFAULT_CACHE_TTLS, WA_DEFAULT_EPHEMERAL } from '../Defaults/index.js'; +import { aggregateMessageKeysNotFromMe, assertMediaContent, assertMeId, bindWaitForEvent, decryptMediaRetryData, DEF_MEDIA_HOST, encodeNewsletterMessage, encodeSignedDeviceIdentity, encodeWAMessage, encryptMediaRetryRequest, extractDeviceJids, generateMessageIDV2, generateParticipantHashV2, generateWAMessage, getStatusCodeForMediaRetry, getUrlFromDirectPath, getWAUploadToServer, MessageRetryManager, normalizeMessageContent, parseAndInjectE2ESessions, unixTimestampSeconds } from '../Utils/index.js'; +import { getUrlInfo } from '../Utils/link-preview.js'; +import { makeKeyedMutex, makeMutex } from '../Utils/make-mutex.js'; +import { getMessageReportingToken, shouldIncludeReportingToken } from '../Utils/reporting-utils.js'; +import { buildMergedTcTokenIndexWrite, isTcTokenExpired, resolveIssuanceJid, resolveTcTokenJid, shouldSendNewTcToken, storeTcTokensFromIqResult } from '../Utils/tc-token-utils.js'; +import { areJidsSameUser, getBinaryNodeChild, getBinaryNodeChildren, isHostedLidUser, isHostedPnUser, isJidBot, isJidGroup, isJidMetaAI, isLidUser, isPnUser, jidDecode, jidEncode, jidNormalizedUser, PSA_WID, S_WHATSAPP_NET } from '../WABinary/index.js'; +import { USyncQuery, USyncUser } from '../WAUSync/index.js'; +import { makeNewsletterSocket } from './newsletter.js'; +const BIZ_BOT_SUPPORT_PAYLOAD = '{}'; +export const makeMessagesSocket = (config) => { + const { logger, linkPreviewImageThumbnailWidth, generateHighQualityLinkPreview, options: httpRequestOptions, patchMessageBeforeSending, cachedGroupMetadata, enableRecentMessageCache, maxMsgRetryCount } = config; + const sock = makeNewsletterSocket(config); + const { ev, authState, messageMutex, signalRepository, upsertMessage, query, fetchPrivacySettings, sendNode, groupMetadata, groupToggleEphemeral, registerSocketEndHandler } = sock; + const getLIDForPN = signalRepository.lidMapping.getLIDForPN.bind(signalRepository.lidMapping); + /** + * Set of tctoken storage JIDs with a fire-and-forget `issuePrivacyTokens` IQ in flight. + * Prevents duplicate IQs from rapid back-to-back sends before `senderTimestamp` persists. + * Entries are always removed in `.finally()`, so the set is bounded by concurrency. + */ + const inFlightTcTokenIssuance = new Set(); + const userDevicesCache = config.userDevicesCache || + new NodeCache({ + stdTTL: DEFAULT_CACHE_TTLS.USER_DEVICES, // 5 minutes + useClones: false + }); + /** Serializes writes to userDevicesCache across USync refresh and device-notification handling. */ + const devicesMutex = makeMutex(); + // Initialize message retry manager if enabled + const messageRetryManager = enableRecentMessageCache ? new MessageRetryManager(logger, maxMsgRetryCount) : null; + // Prevent race conditions in Signal session encryption by user + const encryptionMutex = makeKeyedMutex(); + let mediaConn; + /** Per-socket media host; updated whenever media_conn is fetched. Defaults to the public WhatsApp host. */ + let mediaHost = DEF_MEDIA_HOST; + const refreshMediaConn = async (forceGet = false) => { + const media = await mediaConn; + if (!media || forceGet || new Date().getTime() - media.fetchDate.getTime() > media.ttl * 1000) { + mediaConn = (async () => { + const result = await query({ + tag: 'iq', + attrs: { + type: 'set', + xmlns: 'w:m', + to: S_WHATSAPP_NET + }, + content: [{ tag: 'media_conn', attrs: {} }] + }); + const mediaConnNode = getBinaryNodeChild(result, 'media_conn'); + // TODO: explore full length of data that whatsapp provides + const node = { + hosts: getBinaryNodeChildren(mediaConnNode, 'host').map(({ attrs }) => ({ + hostname: attrs.hostname, + maxContentLengthBytes: +attrs.maxContentLengthBytes + })), + auth: mediaConnNode.attrs.auth, + ttl: +mediaConnNode.attrs.ttl, + fetchDate: new Date() + }; + logger.debug('fetched media conn'); + if (node.hosts[0]) { + mediaHost = node.hosts[0].hostname; + } + return node; + })(); + } + return mediaConn; + }; + /** + * generic send receipt function + * used for receipts of phone call, read, delivery etc. + * */ + const sendReceipt = async (jid, participant, messageIds, type) => { + if (!messageIds || messageIds.length === 0) { + throw new Boom('missing ids in receipt'); + } + const node = { + tag: 'receipt', + attrs: { + id: messageIds[0] + } + }; + const isReadReceipt = type === 'read' || type === 'read-self'; + if (isReadReceipt) { + node.attrs.t = unixTimestampSeconds().toString(); + } + if (type === 'sender' && (isPnUser(jid) || isLidUser(jid))) { + node.attrs.recipient = jid; + node.attrs.to = participant; + } + else { + node.attrs.to = jid; + if (participant) { + node.attrs.participant = participant; + } + } + if (type) { + node.attrs.type = type; + } + const remainingMessageIds = messageIds.slice(1); + if (remainingMessageIds.length) { + node.content = [ + { + tag: 'list', + attrs: {}, + content: remainingMessageIds.map(id => ({ + tag: 'item', + attrs: { id } + })) + } + ]; + } + logger.debug({ attrs: node.attrs, messageIds }, 'sending receipt for messages'); + await sendNode(node); + }; + /** Correctly bulk send receipts to multiple chats, participants */ + const sendReceipts = async (keys, type) => { + const recps = aggregateMessageKeysNotFromMe(keys); + for (const { jid, participant, messageIds } of recps) { + await sendReceipt(jid, participant, messageIds, type); + } + }; + /** Bulk read messages. Keys can be from different chats & participants */ + const readMessages = async (keys) => { + const privacySettings = await fetchPrivacySettings(); + // based on privacy settings, we have to change the read type + const readType = privacySettings.readreceipts === 'all' ? 'read' : 'read-self'; + await sendReceipts(keys, readType); + }; + /** Fetch all the devices we've to send a message to */ + const getUSyncDevices = async (jids, useCache, ignoreZeroDevices) => { + const deviceResults = []; + if (!useCache) { + logger.debug('not using cache for devices'); + } + const toFetch = []; + const jidsWithUser = jids + .map(jid => { + const decoded = jidDecode(jid); + const user = decoded?.user; + const device = decoded?.device; + const isExplicitDevice = typeof device === 'number' && device >= 0; + if (isExplicitDevice && user) { + deviceResults.push({ + user, + device, + jid + }); + return null; + } + jid = jidNormalizedUser(jid); + return { jid, user }; + }) + .filter(jid => jid !== null); + let mgetDevices; + if (useCache && userDevicesCache.mget) { + const usersToFetch = jidsWithUser.map(j => j?.user).filter(Boolean); + mgetDevices = await userDevicesCache.mget(usersToFetch); + } + for (const { jid, user } of jidsWithUser) { + if (useCache) { + const devices = mgetDevices?.[user] || + (userDevicesCache.mget ? undefined : (await userDevicesCache.get(user))); + if (devices) { + const devicesWithJid = devices.map(d => ({ + ...d, + jid: jidEncode(d.user, d.server, d.device) + })); + deviceResults.push(...devicesWithJid); + logger.trace({ user }, 'using cache for devices'); + } + else { + toFetch.push(jid); + } + } + else { + toFetch.push(jid); + } + } + if (!toFetch.length) { + return deviceResults; + } + const requestedLidUsers = new Set(); + for (const jid of toFetch) { + if (isLidUser(jid) || isHostedLidUser(jid)) { + const user = jidDecode(jid)?.user; + if (user) + requestedLidUsers.add(user); + } + } + const query = new USyncQuery().withContext('message').withDeviceProtocol().withLIDProtocol(); + for (const jid of toFetch) { + query.withUser(new USyncUser().withId(jid)); // todo: investigate - the idea here is that should have an inline lid field with the lid being the pn equivalent + } + const result = await sock.executeUSyncQuery(query); + if (result) { + // TODO: LID MAP this stuff (lid protocol will now return lid with devices) + const lidResults = result.list.filter(a => !!a.lid); + if (lidResults.length > 0) { + logger.trace('Storing LID maps from device call'); + await signalRepository.lidMapping.storeLIDPNMappings(lidResults.map(a => ({ lid: a.lid, pn: a.id }))); + // Force-refresh sessions for newly mapped LIDs to align identity addressing + try { + const lids = lidResults.map(a => a.lid); + if (lids.length) { + await assertSessions(lids, true); + } + } + catch (e) { + logger.warn({ e, count: lidResults.length }, 'failed to assert sessions for newly mapped LIDs'); + } + } + const extracted = extractDeviceJids(result?.list, authState.creds.me.id, authState.creds.me.lid, ignoreZeroDevices); + const deviceMap = {}; + for (const item of extracted) { + deviceMap[item.user] = deviceMap[item.user] || []; + deviceMap[item.user]?.push(item); + } + // Process each user's devices as a group for bulk LID migration + for (const [user, userDevices] of Object.entries(deviceMap)) { + const isLidUser = requestedLidUsers.has(user); + // Process all devices for this user + for (const item of userDevices) { + const finalJid = isLidUser + ? jidEncode(user, item.server, item.device) + : jidEncode(item.user, item.server, item.device); + deviceResults.push({ + ...item, + jid: finalJid + }); + logger.debug({ + user: item.user, + device: item.device, + finalJid, + usedLid: isLidUser + }, 'Processed device with LID priority'); + } + } + await devicesMutex.mutex(async () => { + if (userDevicesCache.mset) { + // if the cache supports mset, we can set all devices in one go + await userDevicesCache.mset(Object.entries(deviceMap).map(([key, value]) => ({ key, value }))); + } + else { + for (const key in deviceMap) { + if (deviceMap[key]) + await userDevicesCache.set(key, deviceMap[key]); + } + } + }); + const userDeviceUpdates = {}; + for (const [userId, devices] of Object.entries(deviceMap)) { + if (devices && devices.length > 0) { + userDeviceUpdates[userId] = devices.map(d => d.device?.toString() || '0'); + } + } + if (Object.keys(userDeviceUpdates).length > 0) { + try { + await authState.keys.set({ 'device-list': userDeviceUpdates }); + logger.debug({ userCount: Object.keys(userDeviceUpdates).length }, 'stored user device lists for bulk migration'); + } + catch (error) { + logger.warn({ error }, 'failed to store user device lists'); + } + } + } + return deviceResults; + }; + /** + * Update Member Label + */ + const updateMemberLabel = (jid, memberLabel) => { + return relayMessage(jid, { + protocolMessage: { + type: proto.Message.ProtocolMessage.Type.GROUP_MEMBER_LABEL_CHANGE, + memberLabel: { + label: memberLabel?.slice(0, 30), + labelTimestamp: unixTimestampSeconds() + } + } + }, { + additionalNodes: [ + { + tag: 'meta', + attrs: { + tag_reason: 'user_update', + appdata: 'member_tag' + }, + content: undefined + } + ] + }); + }; + const assertSessions = async (jids, force) => { + let didFetchNewSession = false; + const uniqueJids = [...new Set(jids)]; + const jidsRequiringFetch = []; + logger.debug({ jids }, 'assertSessions call with jids'); + for (const jid of uniqueJids) { + if (!force) { + const sessionValidation = await signalRepository.validateSession(jid); + if (sessionValidation.exists) { + continue; + } + } + jidsRequiringFetch.push(jid); + } + if (jidsRequiringFetch.length) { + // LID if mapped, otherwise original + const wireJids = [ + ...jidsRequiringFetch.filter(jid => !!isLidUser(jid) || !!isHostedLidUser(jid)), + ...((await signalRepository.lidMapping.getLIDsForPNs(jidsRequiringFetch.filter(jid => !!isPnUser(jid) || !!isHostedPnUser(jid)))) || []).map(a => a.lid) + ]; + logger.debug({ jidsRequiringFetch, wireJids }, 'fetching sessions'); + const result = await query({ + tag: 'iq', + attrs: { + xmlns: 'encrypt', + type: 'get', + to: S_WHATSAPP_NET + }, + content: [ + { + tag: 'key', + attrs: {}, + content: wireJids.map(jid => { + const attrs = { jid }; + if (force) + attrs.reason = 'identity'; + return { tag: 'user', attrs }; + }) + } + ] + }); + await parseAndInjectE2ESessions(result, signalRepository); + didFetchNewSession = true; + } + return didFetchNewSession; + }; + const sendPeerDataOperationMessage = async (pdoMessage) => { + //TODO: for later, abstract the logic to send a Peer Message instead of just PDO - useful for App State Key Resync with phone + if (!authState.creds.me?.id) { + throw new Boom('Not authenticated'); + } + const protocolMessage = { + protocolMessage: { + peerDataOperationRequestMessage: pdoMessage, + type: proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE + } + }; + const meJid = jidNormalizedUser(authState.creds.me.id); + const msgId = await relayMessage(meJid, protocolMessage, { + additionalAttributes: { + category: 'peer', + push_priority: 'high_force' + }, + additionalNodes: [ + { + tag: 'meta', + attrs: { appdata: 'default' } + } + ] + }); + return msgId; + }; + const createParticipantNodes = async (recipientJids, message, extraAttrs, dsmMessage) => { + if (!recipientJids.length) { + return { nodes: [], shouldIncludeDeviceIdentity: false }; + } + const patched = await patchMessageBeforeSending(message, recipientJids); + const patchedMessages = Array.isArray(patched) + ? patched + : recipientJids.map(jid => ({ recipientJid: jid, message: patched })); + let shouldIncludeDeviceIdentity = false; + const meId = authState.creds.me.id; + const meLid = authState.creds.me?.lid; + const meLidUser = meLid ? jidDecode(meLid)?.user : null; + const encryptionPromises = patchedMessages.map(async ({ recipientJid: jid, message: patchedMessage }) => { + try { + if (!jid) + return null; + let msgToEncrypt = patchedMessage; + if (dsmMessage) { + const { user: targetUser } = jidDecode(jid); + const { user: ownPnUser } = jidDecode(meId); + const ownLidUser = meLidUser; + const isOwnUser = targetUser === ownPnUser || (ownLidUser && targetUser === ownLidUser); + const isExactSenderDevice = jid === meId || (meLid && jid === meLid); + if (isOwnUser && !isExactSenderDevice) { + msgToEncrypt = dsmMessage; + logger.debug({ jid, targetUser }, 'Using DSM for own device'); + } + } + const bytes = encodeWAMessage(msgToEncrypt); + const mutexKey = jid; + const node = await encryptionMutex.mutex(mutexKey, async () => { + const { type, ciphertext } = await signalRepository.encryptMessage({ jid, data: bytes }); + if (type === 'pkmsg') { + shouldIncludeDeviceIdentity = true; + } + return { + tag: 'to', + attrs: { jid }, + content: [ + { + tag: 'enc', + attrs: { v: '2', type, ...(extraAttrs || {}) }, + content: ciphertext + } + ] + }; + }); + return node; + } + catch (err) { + logger.error({ jid, err }, 'Failed to encrypt for recipient'); + return null; + } + }); + const nodes = (await Promise.all(encryptionPromises)).filter(node => node !== null); + if (recipientJids.length > 0 && nodes.length === 0) { + throw new Boom('All encryptions failed', { statusCode: 500 }); + } + return { nodes, shouldIncludeDeviceIdentity }; + }; + const relayMessage = async (jid, message, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }) => { + const meId = assertMeId(authState.creds); + const meLid = authState.creds.me?.lid; + const isRetryResend = Boolean(participant?.jid); + let shouldIncludeDeviceIdentity = isRetryResend; + const statusJid = 'status@broadcast'; + const { user, server } = jidDecode(jid); + const isGroup = server === 'g.us'; + const isStatus = jid === statusJid; + const isLid = server === 'lid'; + const isNewsletter = server === 'newsletter'; + const isGroupOrStatus = isGroup || isStatus; + const finalJid = jid; + msgId = msgId || generateMessageIDV2(meId); + useUserDevicesCache = useUserDevicesCache !== false; + useCachedGroupMetadata = useCachedGroupMetadata !== false && !isStatus; + const participants = []; + const destinationJid = !isStatus ? finalJid : statusJid; + const binaryNodeContent = []; + const devices = []; + let reportingMessage; + const meMsg = { + deviceSentMessage: { + destinationJid, + message + }, + messageContextInfo: message.messageContextInfo + }; + const extraAttrs = {}; + if (participant) { + if (!isGroup && !isStatus) { + additionalAttributes = { ...additionalAttributes, device_fanout: 'false' }; + } + const { user, device } = jidDecode(participant.jid); + devices.push({ + user, + device, + jid: participant.jid + }); + } + await authState.keys.transaction(async () => { + const mediaType = getMediaType(message); + if (mediaType) { + extraAttrs['mediatype'] = mediaType; + } + if (isNewsletter) { + const patched = patchMessageBeforeSending ? await patchMessageBeforeSending(message, []) : message; + const bytes = encodeNewsletterMessage(patched); + binaryNodeContent.push({ + tag: 'plaintext', + attrs: {}, + content: bytes + }); + const stanza = { + tag: 'message', + attrs: { + to: jid, + id: msgId, + type: getMessageType(message), + ...(additionalAttributes || {}) + }, + content: binaryNodeContent + }; + logger.debug({ msgId }, `sending newsletter message to ${jid}`); + await sendNode(stanza); + return; + } + if (normalizeMessageContent(message)?.pinInChatMessage || normalizeMessageContent(message)?.reactionMessage) { + extraAttrs['decrypt-fail'] = 'hide'; // todo: expand for reactions and other types + } + if (isGroupOrStatus && !isRetryResend) { + const [groupData, senderKeyMap] = await Promise.all([ + (async () => { + let groupData = useCachedGroupMetadata && cachedGroupMetadata ? await cachedGroupMetadata(jid) : undefined; // todo: should we rely on the cache specially if the cache is outdated and the metadata has new fields? + if (groupData && Array.isArray(groupData?.participants)) { + logger.trace({ jid, participants: groupData.participants.length }, 'using cached group metadata'); + } + else if (!isStatus) { + groupData = await groupMetadata(jid); // TODO: start storing group participant list + addr mode in Signal & stop relying on this + } + return groupData; + })(), + (async () => { + if (!participant && !isStatus) { + // what if sender memory is less accurate than the cached metadata + // on participant change in group, we should do sender memory manipulation + const result = await authState.keys.get('sender-key-memory', [jid]); // TODO: check out what if the sender key memory doesn't include the LID stuff now? + return result[jid] || {}; + } + return {}; + })() + ]); + const participantsList = groupData ? groupData.participants.map(p => p.id) : []; + if (groupData?.ephemeralDuration && groupData.ephemeralDuration > 0) { + additionalAttributes = { + ...additionalAttributes, + expiration: groupData.ephemeralDuration.toString() + }; + } + if (isStatus && statusJidList) { + participantsList.push(...statusJidList); + } + const additionalDevices = await getUSyncDevices(participantsList, !!useUserDevicesCache, false); + devices.push(...additionalDevices); + if (isGroup) { + additionalAttributes = { + ...additionalAttributes, + addressing_mode: groupData?.addressingMode || 'lid' + }; + } + const patched = await patchMessageBeforeSending(message); + if (Array.isArray(patched)) { + throw new Boom('Per-jid patching is not supported in groups'); + } + const bytes = encodeWAMessage(patched); + reportingMessage = patched; + const groupAddressingMode = additionalAttributes?.['addressing_mode'] || groupData?.addressingMode || 'lid'; + const groupSenderIdentity = groupAddressingMode === 'lid' && meLid ? meLid : meId; + const { ciphertext, senderKeyDistributionMessage } = await signalRepository.encryptGroupMessage({ + group: destinationJid, + data: bytes, + meId: groupSenderIdentity + }); + const senderKeyRecipients = []; + for (const device of devices) { + const deviceJid = device.jid; + const hasKey = !!senderKeyMap[deviceJid]; + if ((!hasKey || !!participant) && + !isHostedLidUser(deviceJid) && + !isHostedPnUser(deviceJid) && + device.device !== 99) { + //todo: revamp all this logic + // the goal is to follow with what I said above for each group, and instead of a true false map of ids, we can set an array full of those the app has already sent pkmsgs + senderKeyRecipients.push(deviceJid); + senderKeyMap[deviceJid] = true; + } + } + if (senderKeyRecipients.length) { + logger.debug({ senderKeyJids: senderKeyRecipients }, 'sending new sender key'); + const senderKeyMsg = { + senderKeyDistributionMessage: { + axolotlSenderKeyDistributionMessage: senderKeyDistributionMessage, + groupId: destinationJid + } + }; + const senderKeySessionTargets = senderKeyRecipients; + await assertSessions(senderKeySessionTargets); + const result = await createParticipantNodes(senderKeyRecipients, senderKeyMsg, extraAttrs); + shouldIncludeDeviceIdentity = shouldIncludeDeviceIdentity || result.shouldIncludeDeviceIdentity; + participants.push(...result.nodes); + } + binaryNodeContent.push({ + tag: 'enc', + attrs: { v: '2', type: 'skmsg', ...extraAttrs }, + content: ciphertext + }); + await authState.keys.set({ 'sender-key-memory': { [jid]: senderKeyMap } }); + } + else { + // ADDRESSING CONSISTENCY: Match own identity to conversation context + // TODO: investigate if this is true + let ownId = meId; + if (isLid && meLid) { + ownId = meLid; + logger.debug({ to: jid, ownId }, 'Using LID identity for @lid conversation'); + } + else { + logger.debug({ to: jid, ownId }, 'Using PN identity for @s.whatsapp.net conversation'); + } + const { user: ownUser } = jidDecode(ownId); + if (!participant) { + const patchedForReporting = await patchMessageBeforeSending(message, [jid]); + reportingMessage = Array.isArray(patchedForReporting) + ? patchedForReporting.find(item => item.recipientJid === jid) || patchedForReporting[0] + : patchedForReporting; + } + if (!isRetryResend) { + const targetUserServer = isLid ? 'lid' : 's.whatsapp.net'; + devices.push({ + user, + device: 0, + jid: jidEncode(user, targetUserServer, 0) // rajeh, todo: this entire logic is convoluted and weird. + }); + if (user !== ownUser) { + const ownUserServer = isLid ? 'lid' : 's.whatsapp.net'; + const ownUserForAddressing = isLid && meLid ? jidDecode(meLid).user : jidDecode(meId).user; + devices.push({ + user: ownUserForAddressing, + device: 0, + jid: jidEncode(ownUserForAddressing, ownUserServer, 0) + }); + } + if (additionalAttributes?.['category'] !== 'peer') { + // Clear placeholders and enumerate actual devices + devices.length = 0; + // Use conversation-appropriate sender identity + const senderIdentity = isLid && meLid + ? jidEncode(jidDecode(meLid)?.user, 'lid', undefined) + : jidEncode(jidDecode(meId)?.user, 's.whatsapp.net', undefined); + // Enumerate devices for sender and target with consistent addressing + const sessionDevices = await getUSyncDevices([senderIdentity, jid], true, false); + devices.push(...sessionDevices); + logger.debug({ + deviceCount: devices.length, + devices: devices.map(d => `${d.user}:${d.device}@${jidDecode(d.jid)?.server}`) + }, 'Device enumeration complete with unified addressing'); + } + } + const allRecipients = []; + const meRecipients = []; + const otherRecipients = []; + const { user: mePnUser } = jidDecode(meId); + const { user: meLidUser } = meLid ? jidDecode(meLid) : { user: null }; + for (const { user, jid } of devices) { + const isExactSenderDevice = jid === meId || (meLid && jid === meLid); + if (isExactSenderDevice) { + logger.debug({ jid, meId, meLid }, 'Skipping exact sender device (whatsmeow pattern)'); + continue; + } + // Check if this is our device (could match either PN or LID user) + const isMe = user === mePnUser || user === meLidUser; + if (isMe) { + meRecipients.push(jid); + } + else { + otherRecipients.push(jid); + } + allRecipients.push(jid); + } + await assertSessions(allRecipients); + const [{ nodes: meNodes, shouldIncludeDeviceIdentity: s1 }, { nodes: otherNodes, shouldIncludeDeviceIdentity: s2 }] = await Promise.all([ + // For own devices: use DSM if available (1:1 chats only) + createParticipantNodes(meRecipients, meMsg || message, extraAttrs), + createParticipantNodes(otherRecipients, message, extraAttrs, meMsg) + ]); + participants.push(...meNodes); + participants.push(...otherNodes); + if (meRecipients.length > 0 || otherRecipients.length > 0) { + extraAttrs['phash'] = generateParticipantHashV2([...meRecipients, ...otherRecipients]); + } + shouldIncludeDeviceIdentity = shouldIncludeDeviceIdentity || s1 || s2; + } + if (isRetryResend) { + const isParticipantLid = isLidUser(participant.jid); + const isMe = areJidsSameUser(participant.jid, isParticipantLid ? meLid : meId); + let messageToSend = message; + if (isGroupOrStatus) { + let groupSenderIdentity; + if (meLid && (await signalRepository.hasSenderKey({ group: destinationJid, meId: meLid }))) { + groupSenderIdentity = meLid; + } + else if (await signalRepository.hasSenderKey({ group: destinationJid, meId })) { + groupSenderIdentity = meId; + } + if (groupSenderIdentity) { + try { + const skdm = await signalRepository.getSenderKeyDistributionMessage({ + group: destinationJid, + meId: groupSenderIdentity + }); + messageToSend = { + ...message, + senderKeyDistributionMessage: { + groupId: destinationJid, + axolotlSenderKeyDistributionMessage: skdm + } + }; + } + catch (err) { + logger.warn({ err, jid: destinationJid }, 'failed to build SKDM for retry, sending without it'); + } + } + } + const encodedMessageToSend = isMe + ? encodeWAMessage({ + deviceSentMessage: { + destinationJid, + message: messageToSend + } + }) + : encodeWAMessage(messageToSend); + const { type, ciphertext: encryptedContent } = await signalRepository.encryptMessage({ + data: encodedMessageToSend, + jid: participant.jid + }); + binaryNodeContent.push({ + tag: 'enc', + attrs: { + v: '2', + type, + count: participant.count.toString() + }, + content: encryptedContent + }); + } + if (participants.length) { + if (additionalAttributes?.['category'] === 'peer') { + const peerNode = participants[0]?.content?.[0]; + if (peerNode) { + binaryNodeContent.push(peerNode); // push only enc + } + } + else { + binaryNodeContent.push({ + tag: 'participants', + attrs: {}, + content: participants + }); + } + } + const stanza = { + tag: 'message', + attrs: { + id: msgId, + to: destinationJid, + type: getMessageType(message), + ...(additionalAttributes || {}) + }, + content: binaryNodeContent + }; + // if the participant to send to is explicitly specified (generally retry recp) + // ensure the message is only sent to that person + // if a retry receipt is sent to everyone -- it'll fail decryption for everyone else who received the msg + if (participant) { + if (isJidGroup(destinationJid)) { + stanza.attrs.to = destinationJid; + stanza.attrs.participant = participant.jid; + } + else if (areJidsSameUser(participant.jid, meId)) { + stanza.attrs.to = participant.jid; + stanza.attrs.recipient = destinationJid; + } + else { + stanza.attrs.to = participant.jid; + } + } + else { + stanza.attrs.to = destinationJid; + } + if (shouldIncludeDeviceIdentity) { + ; + stanza.content.push({ + tag: 'device-identity', + attrs: {}, + content: encodeSignedDeviceIdentity(authState.creds.account, true) + }); + logger.debug({ jid }, 'adding device identity'); + } + if (!isNewsletter && + !isRetryResend && + reportingMessage?.messageContextInfo?.messageSecret && + shouldIncludeReportingToken(reportingMessage)) { + try { + const encoded = encodeWAMessage(reportingMessage); + const reportingKey = { + id: msgId, + fromMe: true, + remoteJid: destinationJid, + participant: participant?.jid + }; + const reportingNode = await getMessageReportingToken(encoded, reportingMessage, reportingKey); + if (reportingNode) { + ; + stanza.content.push(reportingNode); + logger.trace({ jid }, 'added reporting token to message'); + } + } + catch (error) { + logger.warn({ jid, trace: error?.stack }, 'failed to attach reporting token'); + } + } + // WA Web never attaches tctoken to peer (AppStateSync) messages — server rejects with 479 + const isPeerMessage = additionalAttributes?.['category'] === 'peer'; + const is1on1Send = !isGroup && !isRetryResend && !isStatus && !isNewsletter && !isPeerMessage; + // Resolve destination to LID for tctoken storage — matches Signal session key pattern + const tcTokenJid = is1on1Send ? await resolveTcTokenJid(destinationJid, getLIDForPN) : destinationJid; + const contactTcTokenData = is1on1Send ? await authState.keys.get('tctoken', [tcTokenJid]) : {}; + const existingTokenEntry = contactTcTokenData[tcTokenJid]; + let tcTokenBuffer = existingTokenEntry?.token; + // Treat expired tokens the same as missing — clear from cache + if (tcTokenBuffer?.length && isTcTokenExpired(existingTokenEntry?.timestamp)) { + logger.debug({ jid: destinationJid, timestamp: existingTokenEntry?.timestamp }, 'tctoken expired, clearing'); + tcTokenBuffer = undefined; + // Preserve senderTimestamp so the fire-and-forget issuance dedupe survives cleanup. + const cleared = existingTokenEntry?.senderTimestamp !== undefined + ? { token: Buffer.alloc(0), senderTimestamp: existingTokenEntry.senderTimestamp } + : null; + try { + await authState.keys.set({ tctoken: { [tcTokenJid]: cleared } }); + } + catch (err) { + logger.debug({ jid: destinationJid, err: err?.message }, 'failed to persist tctoken expiry cleanup'); + } + } + if (tcTokenBuffer?.length && sock.serverProps.privacyTokenOn1to1) { + ; + stanza.content.push({ + tag: 'tctoken', + attrs: {}, + content: tcTokenBuffer + }); + } + if (additionalNodes && additionalNodes.length > 0) { + ; + stanza.content.push(...additionalNodes); + } + logger.debug({ msgId }, `sending message to ${participants.length} devices`); + await sendNode(stanza); + // Fire-and-forget: issue our token to the contact AFTER message send. + // WA Web skips protocol messages and PSA/bot contacts (TcTokenChatAction: isRegularUser) + const isProtocolMsg = !!normalizeMessageContent(message)?.protocolMessage; + const isBotOrPSA = destinationJid === PSA_WID || isJidBot(destinationJid) || isJidMetaAI(destinationJid); + if (is1on1Send && + !isProtocolMsg && + !isBotOrPSA && + shouldSendNewTcToken(existingTokenEntry?.senderTimestamp) && + !inFlightTcTokenIssuance.has(tcTokenJid)) { + inFlightTcTokenIssuance.add(tcTokenJid); + const issueTimestamp = unixTimestampSeconds(); + const getPNForLID = signalRepository.lidMapping.getPNForLID.bind(signalRepository.lidMapping); + resolveIssuanceJid(destinationJid, sock.serverProps.lidTrustedTokenIssueToLid, getLIDForPN, getPNForLID) + .then(issueJid => issuePrivacyTokens([issueJid], issueTimestamp)) + .then(async (result) => { + await storeTcTokensFromIqResult({ + result, + fallbackJid: tcTokenJid, + keys: authState.keys, + getLIDForPN + }); + const currentData = await authState.keys.get('tctoken', [tcTokenJid]); + const currentEntry = currentData[tcTokenJid]; + const indexWrite = await buildMergedTcTokenIndexWrite(authState.keys, [tcTokenJid]); + await authState.keys.set({ + tctoken: { + [tcTokenJid]: { + token: Buffer.alloc(0), + ...currentEntry, + senderTimestamp: issueTimestamp + }, + ...indexWrite + } + }); + }) + .catch(err => { + logger.debug({ jid: destinationJid, err: err?.message }, 'fire-and-forget tctoken issuance failed'); + }) + .finally(() => { + inFlightTcTokenIssuance.delete(tcTokenJid); + }); + } + // Add message to retry cache if enabled + if (messageRetryManager && !participant) { + messageRetryManager.addRecentMessage(destinationJid, msgId, message); + } + }, meId); + return msgId; + }; + const getMessageType = (message) => { + const normalizedMessage = normalizeMessageContent(message); + if (!normalizedMessage) + return 'text'; + if (normalizedMessage.reactionMessage || normalizedMessage.encReactionMessage) { + return 'reaction'; + } + if (normalizedMessage.pollCreationMessage || + normalizedMessage.pollCreationMessageV2 || + normalizedMessage.pollCreationMessageV3 || + normalizedMessage.pollUpdateMessage) { + return 'poll'; + } + if (normalizedMessage.eventMessage) { + return 'event'; + } + if (getMediaType(normalizedMessage) !== '') { + return 'media'; + } + return 'text'; + }; + const getMediaType = (message) => { + if (message.imageMessage) { + return 'image'; + } + else if (message.videoMessage) { + return message.videoMessage.gifPlayback ? 'gif' : 'video'; + } + else if (message.audioMessage) { + return message.audioMessage.ptt ? 'ptt' : 'audio'; + } + else if (message.contactMessage) { + return 'vcard'; + } + else if (message.documentMessage) { + return 'document'; + } + else if (message.contactsArrayMessage) { + return 'contact_array'; + } + else if (message.liveLocationMessage) { + return 'livelocation'; + } + else if (message.stickerMessage) { + return 'sticker'; + } + else if (message.listMessage) { + return 'list'; + } + else if (message.listResponseMessage) { + return 'list_response'; + } + else if (message.buttonsResponseMessage) { + return 'buttons_response'; + } + else if (message.orderMessage) { + return 'order'; + } + else if (message.productMessage) { + return 'product'; + } + else if (message.interactiveResponseMessage) { + return 'native_flow_response'; + } + else if (message.groupInviteMessage) { + return 'url'; + } + return ''; + }; + const issuePrivacyTokens = async (jids, timestamp) => { + const t = (timestamp ?? unixTimestampSeconds()).toString(); + const result = await query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + xmlns: 'privacy' + }, + content: [ + { + tag: 'tokens', + attrs: {}, + content: jids.map(jid => ({ + tag: 'token', + attrs: { + jid: jidNormalizedUser(jid), + t, + type: 'trusted_contact' + } + })) + } + ] + }); + return result; + }; + const waUploadToServer = getWAUploadToServer(config, refreshMediaConn); + const waitForMsgMediaUpdate = bindWaitForEvent(ev, 'messages.media-update'); + registerSocketEndHandler(() => { + if (!config.userDevicesCache && userDevicesCache.close) { + userDevicesCache.close(); + } + mediaConn = undefined; + if (messageRetryManager) { + messageRetryManager.clear(); + } + }); + return { + ...sock, + userDevicesCache, + devicesMutex, + issuePrivacyTokens, + assertSessions, + relayMessage, + sendReceipt, + sendReceipts, + readMessages, + refreshMediaConn, + // Function (not getter) so the spread in chats.ts preserves the live closure binding. + getMediaHost: () => mediaHost, + waUploadToServer, + fetchPrivacySettings, + sendPeerDataOperationMessage, + createParticipantNodes, + getUSyncDevices, + messageRetryManager, + updateMemberLabel, + updateMediaMessage: async (message) => { + const content = assertMediaContent(message.message); + const mediaKey = content.mediaKey; + const meId = authState.creds.me.id; + const node = encryptMediaRetryRequest(message.key, mediaKey, meId); + let error = undefined; + await Promise.all([ + sendNode(node), + waitForMsgMediaUpdate(async (update) => { + const result = update.find(c => c.key.id === message.key.id); + if (result) { + if (result.error) { + error = result.error; + } + else { + try { + const media = decryptMediaRetryData(result.media, mediaKey, result.key.id); + if (media.result !== proto.MediaRetryNotification.ResultType.SUCCESS) { + const resultStr = proto.MediaRetryNotification.ResultType[media.result]; + throw new Boom(`Media re-upload failed by device (${resultStr})`, { + data: media, + statusCode: getStatusCodeForMediaRetry(media.result) || 404 + }); + } + content.directPath = media.directPath; + content.url = getUrlFromDirectPath(content.directPath, mediaHost); + logger.debug({ directPath: media.directPath, key: result.key }, 'media update successful'); + } + catch (err) { + error = err; + } + } + return true; + } + }) + ]); + if (error) { + throw error; + } + ev.emit('messages.update', [{ key: message.key, update: { message: message.message } }]); + return message; + }, + sendMessage: async (jid, content, options = {}) => { + const userJid = authState.creds.me.id; + if (typeof content === 'object' && + 'disappearingMessagesInChat' in content && + typeof content['disappearingMessagesInChat'] !== 'undefined' && + isJidGroup(jid)) { + const { disappearingMessagesInChat } = content; + const value = typeof disappearingMessagesInChat === 'boolean' + ? disappearingMessagesInChat + ? WA_DEFAULT_EPHEMERAL + : 0 + : disappearingMessagesInChat; + await groupToggleEphemeral(jid, value); + } + else { + const messageContent = typeof content === 'object' && content + ? { ...content } + : content; + const isAiMsg = typeof messageContent === 'object' + && !!messageContent + && 'ai' in messageContent + && !!messageContent.ai; + if (isAiMsg) { + delete messageContent.ai; + } + const fullMsg = await generateWAMessage(jid, messageContent, { + logger, + userJid, + getUrlInfo: text => getUrlInfo(text, { + thumbnailWidth: linkPreviewImageThumbnailWidth, + fetchOpts: { + timeout: 3000, + ...(httpRequestOptions || {}) + }, + logger, + uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined + }), + //TODO: CACHE + getProfilePicUrl: sock.profilePictureUrl, + getCallLink: sock.createCallLink, + upload: waUploadToServer, + mediaCache: config.mediaCache, + options: config.options, + messageId: generateMessageIDV2(sock.user?.id), + ...options + }); + const isEventMsg = typeof messageContent === 'object' && !!messageContent && 'event' in messageContent && !!messageContent.event; + const isDeleteMsg = typeof messageContent === 'object' && !!messageContent && 'delete' in messageContent && !!messageContent.delete; + const isEditMsg = typeof messageContent === 'object' && !!messageContent && 'edit' in messageContent && !!messageContent.edit; + const isPinMsg = typeof messageContent === 'object' && !!messageContent && 'pin' in messageContent && !!messageContent.pin; + const isPollMessage = typeof messageContent === 'object' && !!messageContent && 'poll' in messageContent && !!messageContent.poll; + const additionalAttributes = {}; + const additionalNodes = []; + // required for delete + if (isDeleteMsg) { + // if the chat is a group, and I am not the author, then delete the message as an admin + if (isJidGroup(messageContent.delete?.remoteJid) && !messageContent.delete?.fromMe) { + additionalAttributes.edit = '8'; + } + else { + additionalAttributes.edit = '7'; + } + } + else if (isEditMsg) { + additionalAttributes.edit = '1'; + } + else if (isPinMsg) { + additionalAttributes.edit = '2'; + } + else if (isPollMessage) { + additionalNodes.push({ + tag: 'meta', + attrs: { + polltype: 'creation' + } + }); + } + else if (isEventMsg) { + additionalNodes.push({ + tag: 'meta', + attrs: { + event_type: 'creation' + } + }); + } + else if (isAiMsg) { + if (!(isPnUser(jid) || isLidUser(jid))) { + throw new Boom('AI labeled messages are only allowed in private chat', { + statusCode: 400 + }); + } + fullMsg.message.messageContextInfo ||= {}; + fullMsg.message.messageContextInfo.supportPayload = BIZ_BOT_SUPPORT_PAYLOAD; + additionalNodes.push({ + tag: 'bot', + attrs: { + biz_bot: '1' + }, + content: undefined + }); + } + await relayMessage(jid, fullMsg.message, { + messageId: fullMsg.key.id, + useCachedGroupMetadata: options.useCachedGroupMetadata, + additionalAttributes, + statusJidList: options.statusJidList, + additionalNodes + }); + if (config.emitOwnEvents) { + process.nextTick(async () => { + await messageMutex.mutex(() => upsertMessage(fullMsg, 'append')); + }); + } + return fullMsg; + } + } + }; +}; +//# sourceMappingURL=messages-send.js.map diff --git a/packages/transport/vendor/lib/Socket/messages-send.js.map b/packages/transport/vendor/lib/Socket/messages-send.js.map new file mode 100644 index 0000000..f9a79f5 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/messages-send.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages-send.js","sourceRoot":"","sources":["../../src/Socket/messages-send.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/mex.d.ts b/packages/transport/vendor/lib/Socket/mex.d.ts new file mode 100644 index 0000000..907b25f --- /dev/null +++ b/packages/transport/vendor/lib/Socket/mex.d.ts @@ -0,0 +1,3 @@ +import type { BinaryNode } from '../WABinary/index.js'; +export declare const executeWMexQuery: (variables: Record, queryId: string, dataPath: string, query: (node: BinaryNode) => Promise, generateMessageTag: () => string) => Promise; +//# sourceMappingURL=mex.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/mex.d.ts.map b/packages/transport/vendor/lib/Socket/mex.d.ts.map new file mode 100644 index 0000000..45ed69e --- /dev/null +++ b/packages/transport/vendor/lib/Socket/mex.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"mex.d.ts","sourceRoot":"","sources":["../../src/Socket/mex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA2B7C,eAAO,MAAM,gBAAgB,GAAU,CAAC,EACvC,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,OAAO,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,EAChD,oBAAoB,MAAM,MAAM,KAC9B,OAAO,CAAC,CAAC,CAuBX,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/mex.js b/packages/transport/vendor/lib/Socket/mex.js new file mode 100644 index 0000000..8fe1b99 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/mex.js @@ -0,0 +1,42 @@ +import { Boom } from '@hapi/boom'; +import { getBinaryNodeChild, S_WHATSAPP_NET } from '../WABinary/index.js'; +const wMexQuery = (variables, queryId, query, generateMessageTag) => { + return query({ + tag: 'iq', + attrs: { + id: generateMessageTag(), + type: 'get', + to: S_WHATSAPP_NET, + xmlns: 'w:mex' + }, + content: [ + { + tag: 'query', + attrs: { query_id: queryId }, + content: Buffer.from(JSON.stringify({ variables }), 'utf-8') + } + ] + }); +}; +export const executeWMexQuery = async (variables, queryId, dataPath, query, generateMessageTag) => { + const result = await wMexQuery(variables, queryId, query, generateMessageTag); + const child = getBinaryNodeChild(result, 'result'); + if (child?.content) { + const data = JSON.parse(child.content.toString()); + if (data.errors && data.errors.length > 0) { + const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', '); + const firstError = data.errors[0]; + const errorCode = firstError.extensions?.error_code || 400; + throw new Boom(`GraphQL server error: ${errorMessages}`, { statusCode: errorCode, data: firstError }); + } + const response = dataPath ? data?.data?.[dataPath] : data?.data; + if (typeof response !== 'undefined') { + return response; + } + } + const action = (dataPath || '').startsWith('xwa2_') + ? dataPath.substring(5).replace(/_/g, ' ') + : dataPath?.replace(/_/g, ' '); + throw new Boom(`Failed to ${action}, unexpected response structure.`, { statusCode: 400, data: result }); +}; +//# sourceMappingURL=mex.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/mex.js.map b/packages/transport/vendor/lib/Socket/mex.js.map new file mode 100644 index 0000000..f5b373e --- /dev/null +++ b/packages/transport/vendor/lib/Socket/mex.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mex.js","sourceRoot":"","sources":["../../src/Socket/mex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEhE,MAAM,SAAS,GAAG,CACjB,SAAkC,EAClC,OAAe,EACf,KAAgD,EAChD,kBAAgC,EAC/B,EAAE;IACH,OAAO,KAAK,CAAC;QACZ,GAAG,EAAE,IAAI;QACT,KAAK,EAAE;YACN,EAAE,EAAE,kBAAkB,EAAE;YACxB,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,OAAO;SACd;QACD,OAAO,EAAE;YACR;gBACC,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;gBAC5B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC;aAC5D;SACD;KACD,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACpC,SAAkC,EAClC,OAAe,EACf,QAAgB,EAChB,KAAgD,EAChD,kBAAgC,EACnB,EAAE;IACf,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAA;IAC7E,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClD,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAEjD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChG,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,UAAU,IAAI,GAAG,CAAA;YAC1D,MAAM,IAAI,IAAI,CAAC,yBAAyB,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QACtG,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAA;QAC/D,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACrC,OAAO,QAAa,CAAA;QACrB,CAAC;IACF,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;QAClD,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1C,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,MAAM,IAAI,IAAI,CAAC,aAAa,MAAM,kCAAkC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AACzG,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/newsletter.d.ts b/packages/transport/vendor/lib/Socket/newsletter.d.ts new file mode 100644 index 0000000..1aa54fb --- /dev/null +++ b/packages/transport/vendor/lib/Socket/newsletter.d.ts @@ -0,0 +1,170 @@ +import type { SocketConfig, WAMediaUpload } from '../Types/index.js'; +import type { NewsletterMetadata, NewsletterUpdate } from '../Types/index.js'; +export declare const makeNewsletterSocket: (config: SocketConfig) => { + newsletterCreate: (name: string, description?: string) => Promise; + newsletterUpdate: (jid: string, updates: NewsletterUpdate) => Promise; + newsletterSubscribers: (jid: string) => Promise<{ + subscribers: number; + }>; + newsletterMetadata: (type: "invite" | "jid", key: string) => Promise; + newsletterFollow: (jid: string) => Promise; + newsletterUnfollow: (jid: string) => Promise; + newsletterMute: (jid: string) => Promise; + newsletterUnmute: (jid: string) => Promise; + newsletterUpdateName: (jid: string, name: string) => Promise; + newsletterUpdateDescription: (jid: string, description: string) => Promise; + newsletterUpdatePicture: (jid: string, content: WAMediaUpload) => Promise; + newsletterRemovePicture: (jid: string) => Promise; + newsletterReactMessage: (jid: string, serverId: string, reaction?: string) => Promise; + newsletterFetchMessages: (jid: string, count: number, since: number, after: number) => Promise; + subscribeNewsletterUpdates: (jid: string) => Promise<{ + duration: string; + } | null>; + newsletterAdminCount: (jid: string) => Promise; + newsletterChangeOwner: (jid: string, newOwnerJid: string) => Promise; + newsletterDemote: (jid: string, userJid: string) => Promise; + newsletterDelete: (jid: string) => Promise; + groupMetadata: (jid: string) => Promise; + groupCreate: (subject: string, participants: string[]) => Promise; + groupLeave: (id: string) => Promise; + groupUpdateSubject: (jid: string, subject: string) => Promise; + groupRequestParticipantsList: (jid: string) => Promise<{ + [key: string]: string; + }[]>; + groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "approve" | "reject") => Promise<{ + status: string; + jid: string | undefined; + }[]>; + groupParticipantsUpdate: (jid: string, participants: string[], action: import("../index.js").ParticipantAction) => Promise<{ + status: string; + jid: string | undefined; + content: import("../index.js").BinaryNode; + }[]>; + groupUpdateDescription: (jid: string, description?: string) => Promise; + groupInviteCode: (jid: string) => Promise; + groupRevokeInvite: (jid: string) => Promise; + groupAcceptInvite: (code: string) => Promise; + groupRevokeInviteV4: (groupJid: string, invitedJid: string) => Promise; + groupAcceptInviteV4: (key: string | import("../index.js").WAMessageKey, inviteMessage: import("../index.js").proto.Message.IGroupInviteMessage) => Promise; + groupGetInviteInfo: (code: string) => Promise; + groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise; + groupSettingUpdate: (jid: string, setting: "announcement" | "not_announcement" | "locked" | "unlocked") => Promise; + groupMemberAddMode: (jid: string, mode: "admin_add" | "all_member_add") => Promise; + groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise; + groupFetchAllParticipating: () => Promise<{ + [_: string]: import("../index.js").GroupMetadata; + }>; + serverProps: { + privacyTokenOn1to1: boolean; + profilePicPrivacyToken: boolean; + lidTrustedTokenIssueToLid: boolean; + }; + createCallLink: (type: "audio" | "video", event?: { + startTime: number; + }, timeoutMs?: number) => Promise; + getBotListV2: () => Promise; + messageMutex: { + mutex(code: () => Promise | T): Promise; + }; + receiptMutex: { + mutex(code: () => Promise | T): Promise; + }; + appStatePatchMutex: { + mutex(code: () => Promise | T): Promise; + }; + notificationMutex: { + mutex(code: () => Promise | T): Promise; + }; + fetchPrivacySettings: (force?: boolean) => Promise<{ + [_: string]: string; + }>; + upsertMessage: (msg: import("../index.js").WAMessage, type: import("../index.js").MessageUpsertType) => Promise; + appPatch: (patchCreate: import("../index.js").WAPatchCreate) => Promise; + sendPresenceUpdate: (type: import("../index.js").WAPresence, toJid?: string) => Promise; + presenceSubscribe: (toJid: string) => Promise; + profilePictureUrl: (jid: string, type?: "preview" | "image", timeoutMs?: number) => Promise; + fetchBlocklist: () => Promise<(string | undefined)[]>; + fetchStatus: (...jids: string[]) => Promise; + fetchDisappearingDuration: (...jids: string[]) => Promise; + updateProfilePicture: (jid: string, content: WAMediaUpload, dimensions?: { + width: number; + height: number; + }) => Promise; + removeProfilePicture: (jid: string) => Promise; + updateProfileStatus: (status: string) => Promise; + updateProfileName: (name: string) => Promise; + updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise; + updateDisableLinkPreviewsPrivacy: (isPreviewsDisabled: boolean) => Promise; + updateCallPrivacy: (value: import("../index.js").WAPrivacyCallValue) => Promise; + updateMessagesPrivacy: (value: import("../index.js").WAPrivacyMessagesValue) => Promise; + updateLastSeenPrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateOnlinePrivacy: (value: import("../index.js").WAPrivacyOnlineValue) => Promise; + updateProfilePicturePrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateStatusPrivacy: (value: import("../index.js").WAPrivacyValue) => Promise; + updateReadReceiptsPrivacy: (value: import("../index.js").WAReadReceiptsValue) => Promise; + updateGroupsAddPrivacy: (value: import("../index.js").WAPrivacyGroupAddValue) => Promise; + updateDefaultDisappearingMode: (duration: number) => Promise; + getBusinessProfile: (jid: string) => Promise; + resyncAppState: (collections: readonly ("critical_unblock_low" | "regular_high" | "regular_low" | "critical_block" | "regular")[], isInitialSync: boolean) => Promise; + chatModify: (mod: import("../index.js").ChatModification, jid: string) => Promise; + cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: number | string) => Promise; + addOrEditContact: (jid: string, contact: import("../index.js").proto.SyncActionValue.IContactAction) => Promise; + removeContact: (jid: string) => Promise; + placeholderResendCache: import("../index.js").CacheStore; + addLabel: (jid: string, labels: import("../Types/Label.js").LabelActionBody) => Promise; + addChatLabel: (jid: string, labelId: string) => Promise; + removeChatLabel: (jid: string, labelId: string) => Promise; + addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise; + star: (jid: string, messages: { + id: string; + fromMe?: boolean; + }[], star: boolean) => Promise; + addOrEditQuickReply: (quickReply: import("../Types/Bussines.js").QuickReplyAction) => Promise; + removeQuickReply: (timestamp: string) => Promise; + type: "md"; + ws: import("./Client/index.js").WebSocketClient; + ev: import("../index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../index.js").AuthenticationCreds; + keys: import("../index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../index.js").SignalRepositoryWithLIDStore; + user: import("../index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: import("../index.js").BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: import("../index.js").BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | import("@hapi/boom").Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: import("../index.js").BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: import("../index.js").BinaryInfo; + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: import("../index.js").USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +export type NewsletterSocket = ReturnType; +//# sourceMappingURL=newsletter.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/newsletter.d.ts.map b/packages/transport/vendor/lib/Socket/newsletter.d.ts.map new file mode 100644 index 0000000..1df55be --- /dev/null +++ b/packages/transport/vendor/lib/Socket/newsletter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"newsletter.d.ts","sourceRoot":"","sources":["../../src/Socket/newsletter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AA0CpE,eAAO,MAAM,oBAAoB,GAAI,QAAQ,YAAY;6BAqBxB,MAAM,gBAAgB,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAAC;4BAbrD,MAAM,WAAW,gBAAgB;iCA8BlC,MAAM;qBACD,MAAM;;+BAOb,QAAQ,GAAG,KAAK,OAAO,MAAM;4BActC,MAAM;8BAIJ,MAAM;0BAIV,MAAM;4BAIJ,MAAM;gCAII,MAAM,QAAQ,MAAM;uCAIb,MAAM,eAAe,MAAM;mCAI/B,MAAM,WAAW,aAAa;mCAK9B,MAAM;kCAIP,MAAM,YAAY,MAAM,aAAa,MAAM;mCAmB1C,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM;sCA8BhD,MAAM,KAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;gCAgBnD,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;iCASvB,MAAM,eAAe,MAAM;4BAQhC,MAAM,WAAW,MAAM;4BAIvB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAOs3qB,CAAC;;;;;;;;;0DAtLvzqB,GAAE,0BAC5F,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkLd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/newsletter.js b/packages/transport/vendor/lib/Socket/newsletter.js new file mode 100644 index 0000000..95f575e --- /dev/null +++ b/packages/transport/vendor/lib/Socket/newsletter.js @@ -0,0 +1,181 @@ +import { QueryIds, XWAPaths } from '../Types/index.js'; +import { generateProfilePicture } from '../Utils/messages-media.js'; +import { getBinaryNodeChild } from '../WABinary/index.js'; +import { makeGroupsSocket } from './groups.js'; +import { executeWMexQuery as genericExecuteWMexQuery } from './mex.js'; +const parseNewsletterCreateResponse = (response) => { + const { id, thread_metadata: thread, viewer_metadata: viewer } = response; + return { + id: id, + owner: undefined, + name: thread.name.text, + creation_time: parseInt(thread.creation_time, 10), + description: thread.description.text, + invite: thread.invite, + subscribers: parseInt(thread.subscribers_count, 10), + verification: thread.verification, + picture: { + id: thread.picture.id, + directPath: thread.picture.direct_path + }, + mute_state: viewer.mute + }; +}; +const parseNewsletterMetadata = (result) => { + if (typeof result !== 'object' || result === null) { + return null; + } + if ('id' in result && typeof result.id === 'string') { + return result; + } + if ('result' in result && typeof result.result === 'object' && result.result !== null && 'id' in result.result) { + return result.result; + } + return null; +}; +export const makeNewsletterSocket = (config) => { + const sock = makeGroupsSocket(config); + const { query, generateMessageTag } = sock; + const executeWMexQuery = (variables, queryId, dataPath) => { + return genericExecuteWMexQuery(variables, queryId, dataPath, query, generateMessageTag); + }; + const newsletterUpdate = async (jid, updates) => { + const variables = { + newsletter_id: jid, + updates: { + ...updates, + settings: null + } + }; + return executeWMexQuery(variables, QueryIds.UPDATE_METADATA, 'xwa2_newsletter_update'); + }; + return { + ...sock, + newsletterCreate: async (name, description) => { + const variables = { + input: { + name, + description: description ?? null + } + }; + const rawResponse = await executeWMexQuery(variables, QueryIds.CREATE, XWAPaths.xwa2_newsletter_create); + return parseNewsletterCreateResponse(rawResponse); + }, + newsletterUpdate, + newsletterSubscribers: async (jid) => { + return executeWMexQuery({ newsletter_id: jid }, QueryIds.SUBSCRIBERS, XWAPaths.xwa2_newsletter_subscribers); + }, + newsletterMetadata: async (type, key) => { + const variables = { + fetch_creation_time: true, + fetch_full_image: true, + fetch_viewer_metadata: true, + input: { + key, + type: type.toUpperCase() + } + }; + const result = await executeWMexQuery(variables, QueryIds.METADATA, XWAPaths.xwa2_newsletter_metadata); + return parseNewsletterMetadata(result); + }, + newsletterFollow: (jid) => { + return executeWMexQuery({ newsletter_id: jid }, QueryIds.FOLLOW, XWAPaths.xwa2_newsletter_join_v2); + }, + newsletterUnfollow: (jid) => { + return executeWMexQuery({ newsletter_id: jid }, QueryIds.UNFOLLOW, XWAPaths.xwa2_newsletter_leave_v2); + }, + newsletterMute: (jid) => { + return executeWMexQuery({ newsletter_id: jid }, QueryIds.MUTE, XWAPaths.xwa2_newsletter_mute_v2); + }, + newsletterUnmute: (jid) => { + return executeWMexQuery({ newsletter_id: jid }, QueryIds.UNMUTE, XWAPaths.xwa2_newsletter_unmute_v2); + }, + newsletterUpdateName: async (jid, name) => { + return await newsletterUpdate(jid, { name }); + }, + newsletterUpdateDescription: async (jid, description) => { + return await newsletterUpdate(jid, { description }); + }, + newsletterUpdatePicture: async (jid, content) => { + const { img } = await generateProfilePicture(content); + return await newsletterUpdate(jid, { picture: img.toString('base64') }); + }, + newsletterRemovePicture: async (jid) => { + return await newsletterUpdate(jid, { picture: '' }); + }, + newsletterReactMessage: async (jid, serverId, reaction) => { + await query({ + tag: 'message', + attrs: { + to: jid, + ...(reaction ? {} : { edit: '7' }), + type: 'reaction', + server_id: serverId, + id: generateMessageTag() + }, + content: [ + { + tag: 'reaction', + attrs: reaction ? { code: reaction } : {} + } + ] + }); + }, + newsletterFetchMessages: async (jid, count, since, after) => { + const messageUpdateAttrs = { + count: count.toString() + }; + if (typeof since === 'number') { + messageUpdateAttrs.since = since.toString(); + } + if (after) { + messageUpdateAttrs.after = after.toString(); + } + const result = await query({ + tag: 'iq', + attrs: { + id: generateMessageTag(), + type: 'get', + xmlns: 'newsletter', + to: jid + }, + content: [ + { + tag: 'message_updates', + attrs: messageUpdateAttrs + } + ] + }); + return result; + }, + subscribeNewsletterUpdates: async (jid) => { + const result = await query({ + tag: 'iq', + attrs: { + id: generateMessageTag(), + type: 'set', + xmlns: 'newsletter', + to: jid + }, + content: [{ tag: 'live_updates', attrs: {}, content: [] }] + }); + const liveUpdatesNode = getBinaryNodeChild(result, 'live_updates'); + const duration = liveUpdatesNode?.attrs?.duration; + return duration ? { duration: duration } : null; + }, + newsletterAdminCount: async (jid) => { + const response = await executeWMexQuery({ newsletter_id: jid }, QueryIds.ADMIN_COUNT, XWAPaths.xwa2_newsletter_admin_count); + return response.admin_count; + }, + newsletterChangeOwner: async (jid, newOwnerJid) => { + await executeWMexQuery({ newsletter_id: jid, user_id: newOwnerJid }, QueryIds.CHANGE_OWNER, XWAPaths.xwa2_newsletter_change_owner); + }, + newsletterDemote: async (jid, userJid) => { + await executeWMexQuery({ newsletter_id: jid, user_id: userJid }, QueryIds.DEMOTE, XWAPaths.xwa2_newsletter_demote); + }, + newsletterDelete: async (jid) => { + await executeWMexQuery({ newsletter_id: jid }, QueryIds.DELETE, XWAPaths.xwa2_newsletter_delete_v2); + } + }; +}; +//# sourceMappingURL=newsletter.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/newsletter.js.map b/packages/transport/vendor/lib/Socket/newsletter.js.map new file mode 100644 index 0000000..e99827c --- /dev/null +++ b/packages/transport/vendor/lib/Socket/newsletter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"newsletter.js","sourceRoot":"","sources":["../../src/Socket/newsletter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/socket.d.ts b/packages/transport/vendor/lib/Socket/socket.d.ts new file mode 100644 index 0000000..bd4bb8d --- /dev/null +++ b/packages/transport/vendor/lib/Socket/socket.d.ts @@ -0,0 +1,59 @@ +import { Boom } from '@hapi/boom'; +import { type NewChatMessageCapInfo, type ReachoutTimelockState, type SocketConfig } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +import { BinaryInfo } from '../WAM/BinaryInfo.js'; +import { USyncQuery } from '../WAUSync/index.js'; +import { WebSocketClient } from './Client/index.js'; +/** + * Connects to WA servers and performs: + * - simple queries (no retry mechanism, wait for connection establishment) + * - listen to messages and emit events + * - query phone connection + */ +export declare const makeSocket: (config: SocketConfig) => { + type: "md"; + ws: WebSocketClient; + ev: import("../Types/index.js").BaileysEventEmitter & { + process(handler: (events: Partial) => void | Promise): () => void; + buffer(): void; + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + flush(): boolean; + isBuffering(): boolean; + destroy(): void; + }; + authState: { + creds: import("../Types/index.js").AuthenticationCreds; + keys: import("../Types/index.js").SignalKeyStoreWithTransaction; + }; + signalRepository: import("../Types/index.js").SignalRepositoryWithLIDStore; + readonly user: import("../Types/index.js").Contact | undefined; + generateMessageTag: () => string; + query: (node: BinaryNode, timeoutMs?: number) => Promise; + waitForMessage: (msgId: string, timeoutMs?: number | undefined) => Promise; + waitForSocketOpen: () => Promise; + sendRawMessage: (data: Uint8Array | Buffer) => Promise; + sendNode: (frame: BinaryNode) => Promise; + logout: (msg?: string) => Promise; + end: (error: Error | undefined) => Promise; + registerSocketEndHandler: (handler: (error: Error | undefined) => void | Promise) => void; + onUnexpectedError: (err: Error | Boom, msg: string) => void; + uploadPreKeys: (count?: number) => Promise; + uploadPreKeysToServerIfRequired: () => Promise; + digestKeyBundle: () => Promise; + rotateSignedPreKey: () => Promise; + requestPairingCode: (phoneNumber: string, customPairingCode?: string) => Promise; + updateServerTimeOffset: ({ attrs }: BinaryNode) => void; + sendUnifiedSession: () => Promise; + wamBuffer: BinaryInfo; + /** Waits for the connection to WA to reach a state */ + waitForConnectionUpdate: (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; + sendWAMBuffer: (wamBuffer: Buffer) => Promise; + executeUSyncQuery: (usyncQuery: USyncQuery) => Promise; + onWhatsApp: (...phoneNumber: string[]) => Promise<{ + jid: string; + exists: boolean; + }[] | undefined>; + fetchAccountReachoutTimelock: () => Promise; + fetchNewChatMessageCap: () => Promise; +}; +//# sourceMappingURL=socket.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/socket.d.ts.map b/packages/transport/vendor/lib/Socket/socket.d.ts.map new file mode 100644 index 0000000..7c943fc --- /dev/null +++ b/packages/transport/vendor/lib/Socket/socket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/Socket/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAejC,OAAO,EAEN,KAAK,qBAAqB,EAG1B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,MAAM,UAAU,CAAA;AAwBjB,OAAO,EAEN,KAAK,UAAU,EAUf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG1C;;;;;GAKG;AAEH,eAAO,MAAM,UAAU,GAAI,QAAQ,YAAY;UAsjC/B,IAAI;;;;;0DAtjCO,GAAG,0BAC5B,GAAG;;;;;;;;;;;;kBAyIuB,UAAU,cAAc,MAAM;qBA3C3B,CAAC,SAAS,MAAM;;2BA/BV,UAAU,GAAG,MAAM;sBAiB9B,UAAU;mBAmkBP,MAAM;iBA/GR,KAAK,GAAG,SAAS;wCAweA,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;6BA7sB7D,KAAK,GAAG,IAAI,OAAO,MAAM;;;2BAhKvB,OAAO,CAAC,IAAI,CAAC;8BAcV,OAAO,CAAC,IAAI,CAAC;sCAggBH,MAAM,sBAAsB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;wCA+SxD,UAAU;;;IAmHpD,sDAAsD;;+BA1VrB,MAAM;oCAtjBK,UAAU;iCAyDb,MAAM,EAAE;;gBA0BqD,OAAO;;;;CAq0B9G,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/socket.js b/packages/transport/vendor/lib/Socket/socket.js new file mode 100644 index 0000000..6357f9e --- /dev/null +++ b/packages/transport/vendor/lib/Socket/socket.js @@ -0,0 +1,967 @@ +import { Boom } from '@hapi/boom'; +import { randomBytes } from 'crypto'; +import { URL } from 'url'; +import { promisify } from 'util'; +import { proto } from '../../WAProto/index.js'; +import { DEF_CALLBACK_PREFIX, DEF_TAG_PREFIX, INITIAL_PREKEY_COUNT, MIN_PREKEY_COUNT, NOISE_WA_HEADER, PROCESSABLE_HISTORY_TYPES, TimeMs, UPLOAD_TIMEOUT } from '../Defaults/index.js'; +import { QueryIds, ReachoutTimelockEnforcementType } from '../Types/index.js'; +import { DisconnectReason, XWAPaths } from '../Types/index.js'; +import { addTransactionCapability, aesEncryptCTR, bindWaitForConnectionUpdate, buildPairingQRData, bytesToCrockford, configureSuccessfulPairing, Curve, derivePairingCodeKey, generateLoginNode, generateMdTagPrefix, generateRegistrationNode, getCodeFromWSError, getCompanionPlatformId, getErrorCodeFromStreamError, getNextPreKeysNode, makeEventBuffer, makeNoiseHandler, promiseTimeout, signedKeyPair, xmppSignedPreKey } from '../Utils/index.js'; +import { assertNodeErrorFree, binaryNodeToString, encodeBinaryNode, getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildren, isLidUser, jidDecode, jidEncode, S_WHATSAPP_NET } from '../WABinary/index.js'; +import { BinaryInfo } from '../WAM/BinaryInfo.js'; +import { USyncQuery, USyncUser } from '../WAUSync/index.js'; +import { WebSocketClient } from './Client/index.js'; +import { executeWMexQuery } from './mex.js'; +/** + * Connects to WA servers and performs: + * - simple queries (no retry mechanism, wait for connection establishment) + * - listen to messages and emit events + * - query phone connection + */ +export const makeSocket = (config) => { + const { waWebSocketUrl, connectTimeoutMs, logger, keepAliveIntervalMs, browser, auth: authState, printQRInTerminal, defaultQueryTimeoutMs, transactionOpts, qrTimeout, makeSignalRepository } = config; + const publicWAMBuffer = new BinaryInfo(); + let serverTimeOffsetMs = 0; + const uqTagId = generateMdTagPrefix(); + const generateMessageTag = () => `${uqTagId}${epoch++}`; + if (printQRInTerminal) { + logger.warn({}, '⚠️ The printQRInTerminal option has been deprecated. You will no longer receive QR codes in the terminal automatically. Please listen to the connection.update event yourself and handle the QR your way. You can remove this message by removing this opttion. This message will be removed in a future version.'); + } + const syncDisabled = PROCESSABLE_HISTORY_TYPES.map(syncType => config.shouldSyncHistoryMessage({ syncType })).filter(x => x === false) + .length === PROCESSABLE_HISTORY_TYPES.length; + if (syncDisabled) { + logger.warn('⚠️ DANGER: DISABLING ALL SYNC BY shouldSyncHistoryMsg PREVENTS BAILEYS FROM ACCESSING INITIAL LID MAPPINGS, LEADING TO INSTABILIY AND SESSION ERRORS'); + } + const url = typeof waWebSocketUrl === 'string' ? new URL(waWebSocketUrl) : waWebSocketUrl; + if (config.mobile || url.protocol === 'tcp:') { + throw new Boom('Mobile API is not supported anymore', { statusCode: DisconnectReason.loggedOut }); + } + if (url.protocol === 'wss' && authState?.creds?.routingInfo) { + url.searchParams.append('ED', authState.creds.routingInfo.toString('base64url')); + } + /** ephemeral key pair used to encrypt/decrypt communication. Unique for each connection */ + const ephemeralKeyPair = Curve.generateKeyPair(); + /** WA noise protocol wrapper */ + const noise = makeNoiseHandler({ + keyPair: ephemeralKeyPair, + NOISE_HEADER: NOISE_WA_HEADER, + logger, + routingInfo: authState?.creds?.routingInfo + }); + const ws = new WebSocketClient(url, config); + ws.connect(); + const sendPromise = promisify(ws.send); + /** send a raw buffer */ + const sendRawMessage = async (data) => { + if (!ws.isOpen) { + throw new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed }); + } + const bytes = noise.encodeFrame(data); + await promiseTimeout(connectTimeoutMs, async (resolve, reject) => { + try { + await sendPromise.call(ws, bytes); + resolve(); + } + catch (error) { + reject(error); + } + }); + }; + /** send a binary node */ + const sendNode = (frame) => { + if (logger.level === 'trace') { + logger.trace({ xml: binaryNodeToString(frame), msg: 'xml send' }); + } + const buff = encodeBinaryNode(frame); + return sendRawMessage(buff); + }; + /** + * Wait for a message with a certain tag to be received + * @param msgId the message tag to await + * @param timeoutMs timeout after which the promise will reject + */ + const waitForMessage = async (msgId, timeoutMs = defaultQueryTimeoutMs) => { + let onRecv; + let onErr; + try { + const result = await promiseTimeout(timeoutMs, (resolve, reject) => { + onRecv = data => { + resolve(data); + }; + onErr = err => { + reject(err || + new Boom('Connection Closed', { + statusCode: DisconnectReason.connectionClosed + })); + }; + ws.on(`TAG:${msgId}`, onRecv); + ws.on('close', onErr); + ws.on('error', onErr); + return () => reject(new Boom('Query Cancelled')); + }); + return result; + } + catch (error) { + // Catch timeout and return undefined instead of throwing + if (error instanceof Boom && error.output?.statusCode === DisconnectReason.timedOut) { + logger?.warn?.({ msgId }, 'timed out waiting for message'); + return undefined; + } + throw error; + } + finally { + if (onRecv) + ws.off(`TAG:${msgId}`, onRecv); + if (onErr) { + ws.off('close', onErr); + ws.off('error', onErr); + } + } + }; + /** send a query, and wait for its response. auto-generates message ID if not provided */ + const query = async (node, timeoutMs) => { + if (!node.attrs.id) { + node.attrs.id = generateMessageTag(); + } + const msgId = node.attrs.id; + const result = await promiseTimeout(timeoutMs, async (resolve, reject) => { + const result = waitForMessage(msgId, timeoutMs).catch(reject); + sendNode(node) + .then(async () => resolve(await result)) + .catch(reject); + }); + if (result && 'tag' in result) { + assertNodeErrorFree(result); + } + return result; + }; + // Validate current key-bundle on server; on failure, trigger pre-key upload and rethrow + const digestKeyBundle = async () => { + const res = await query({ + tag: 'iq', + attrs: { to: S_WHATSAPP_NET, type: 'get', xmlns: 'encrypt' }, + content: [{ tag: 'digest', attrs: {} }] + }); + const digestNode = getBinaryNodeChild(res, 'digest'); + if (!digestNode) { + await uploadPreKeys(); + throw new Error('encrypt/get digest returned no digest node'); + } + }; + // Rotate our signed pre-key on server; on failure, run digest as fallback and rethrow + const rotateSignedPreKey = async () => { + const newId = (creds.signedPreKey.keyId || 0) + 1; + const skey = await signedKeyPair(creds.signedIdentityKey, newId); + await query({ + tag: 'iq', + attrs: { to: S_WHATSAPP_NET, type: 'set', xmlns: 'encrypt' }, + content: [ + { + tag: 'rotate', + attrs: {}, + content: [xmppSignedPreKey(skey)] + } + ] + }); + // Persist new signed pre-key in creds + ev.emit('creds.update', { signedPreKey: skey }); + }; + const executeUSyncQuery = async (usyncQuery) => { + if (usyncQuery.protocols.length === 0) { + throw new Boom('USyncQuery must have at least one protocol'); + } + // todo: validate users, throw WARNING on no valid users + // variable below has only validated users + const validUsers = usyncQuery.users; + const userNodes = validUsers.map(user => { + return { + tag: 'user', + attrs: { + jid: !user.phone ? user.id : undefined + }, + content: usyncQuery.protocols.map(a => a.getUserElement(user)).filter(a => a !== null) + }; + }); + const listNode = { + tag: 'list', + attrs: {}, + content: userNodes + }; + const queryNode = { + tag: 'query', + attrs: {}, + content: usyncQuery.protocols.map(a => a.getQueryElement()) + }; + const iq = { + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'get', + xmlns: 'usync' + }, + content: [ + { + tag: 'usync', + attrs: { + context: usyncQuery.context, + mode: usyncQuery.mode, + sid: generateMessageTag(), + last: 'true', + index: '0' + }, + content: [queryNode, listNode] + } + ] + }; + const result = await query(iq); + return usyncQuery.parseUSyncQueryResult(result); + }; + const onWhatsApp = async (...phoneNumber) => { + let usyncQuery = new USyncQuery(); + let contactEnabled = false; + for (const jid of phoneNumber) { + if (isLidUser(jid)) { + logger?.warn('LIDs are not supported with onWhatsApp'); + continue; + } + else { + if (!contactEnabled) { + contactEnabled = true; + usyncQuery = usyncQuery.withContactProtocol(); + } + const phone = `+${jid.replace('+', '').split('@')[0]?.split(':')[0]}`; + usyncQuery.withUser(new USyncUser().withPhone(phone)); + } + } + if (usyncQuery.users.length === 0) { + return []; // return early without forcing an empty query + } + const results = await executeUSyncQuery(usyncQuery); + if (results) { + return results.list.filter(a => !!a.contact).map(({ contact, id }) => ({ jid: id, exists: contact })); + } + }; + const pnFromLIDUSync = async (jids) => { + const usyncQuery = new USyncQuery().withLIDProtocol().withContext('background'); + for (const jid of jids) { + if (isLidUser(jid)) { + logger?.warn('LID user found in LID fetch call'); + continue; + } + else { + usyncQuery.withUser(new USyncUser().withId(jid)); + } + } + if (usyncQuery.users.length === 0) { + return []; // return early without forcing an empty query + } + const results = await executeUSyncQuery(usyncQuery); + if (results) { + return results.list.filter(a => !!a.lid).map(({ lid, id }) => ({ pn: id, lid: lid })); + } + return []; + }; + const ev = makeEventBuffer(logger); + const { creds } = authState; + // add transaction capability + const keys = addTransactionCapability(authState.keys, logger, transactionOpts); + const signalRepository = makeSignalRepository({ creds, keys }, logger, pnFromLIDUSync); + let lastDateRecv; + let epoch = 1; + let keepAliveReq; + let qrTimer; + let closed = false; + const socketEndHandlers = []; + /** log & process any unexpected errors */ + const onUnexpectedError = (err, msg) => { + logger.error({ err }, `unexpected error in '${msg}'`); + }; + /** await the next incoming message */ + const awaitNextMessage = async (sendMsg) => { + if (!ws.isOpen) { + throw new Boom('Connection Closed', { + statusCode: DisconnectReason.connectionClosed + }); + } + let onOpen; + let onClose; + const result = promiseTimeout(connectTimeoutMs, (resolve, reject) => { + onOpen = resolve; + onClose = mapWebSocketError(reject); + ws.on('frame', onOpen); + ws.on('close', onClose); + ws.on('error', onClose); + }).finally(() => { + ws.off('frame', onOpen); + ws.off('close', onClose); + ws.off('error', onClose); + }); + if (sendMsg) { + sendRawMessage(sendMsg).catch(onClose); + } + return result; + }; + /** connection handshake */ + const validateConnection = async () => { + let helloMsg = { + clientHello: { ephemeral: ephemeralKeyPair.public } + }; + helloMsg = proto.HandshakeMessage.fromObject(helloMsg); + logger.info({ browser, helloMsg }, 'connected to WA'); + const init = proto.HandshakeMessage.encode(helloMsg).finish(); + const result = await awaitNextMessage(init); + const handshake = proto.HandshakeMessage.decode(result); + logger.trace({ handshake }, 'handshake recv from WA'); + const keyEnc = noise.processHandshake(handshake, creds.noiseKey); + let node; + if (!creds.me) { + node = generateRegistrationNode(creds, config); + logger.info({ node }, 'not logged in, attempting registration...'); + } + else { + node = generateLoginNode(creds.me.id, config); + logger.info({ node }, 'logging in...'); + } + const payloadEnc = noise.encrypt(proto.ClientPayload.encode(node).finish()); + await sendRawMessage(proto.HandshakeMessage.encode({ + clientFinish: { + static: keyEnc, + payload: payloadEnc + } + }).finish()); + await noise.finishInit(); + startKeepAliveRequest(); + }; + const getAvailablePreKeysOnServer = async () => { + const result = await query({ + tag: 'iq', + attrs: { + id: generateMessageTag(), + xmlns: 'encrypt', + type: 'get', + to: S_WHATSAPP_NET + }, + content: [{ tag: 'count', attrs: {} }] + }); + const countChild = getBinaryNodeChild(result, 'count'); + return +countChild.attrs.value; + }; + // WAWeb has no time throttle here; the server drives uploads via PreKeyLow notifications. + let uploadPreKeysPromise = null; + /** generates and uploads a set of pre-keys to the server */ + const uploadPreKeys = async (count = MIN_PREKEY_COUNT) => { + if (uploadPreKeysPromise) { + logger.debug('Pre-key upload already in progress, waiting for completion'); + await uploadPreKeysPromise; + return; + } + const uploadLogic = async (retryCount) => { + logger.info({ count, retryCount }, 'uploading pre-keys'); + // Generate and save pre-keys atomically (prevents ID collisions on retry) + const node = await keys.transaction(async () => { + logger.debug({ requestedCount: count }, 'generating pre-keys with requested count'); + const { update, node } = await getNextPreKeysNode({ creds, keys }, count); + // Update credentials immediately to prevent duplicate IDs on retry + ev.emit('creds.update', update); + return node; + }, creds?.me?.id || 'upload-pre-keys'); + // Upload to server (outside transaction, can fail without affecting local keys) + try { + await query(node); + logger.info({ count }, 'uploaded pre-keys successfully'); + } + catch (uploadError) { + logger.error({ uploadError: uploadError.toString(), count }, 'Failed to upload pre-keys to server'); + // Recurse into uploadLogic; calling uploadPreKeys would await its own in-flight promise. + if (retryCount < 3) { + const backoffDelay = Math.min(1000 * Math.pow(2, retryCount), 10000); + logger.info(`Retrying pre-key upload in ${backoffDelay}ms`); + await new Promise(resolve => setTimeout(resolve, backoffDelay)); + return uploadLogic(retryCount + 1); + } + throw uploadError; + } + }; + // Add timeout protection + uploadPreKeysPromise = Promise.race([ + uploadLogic(0), + new Promise((_, reject) => setTimeout(() => reject(new Boom('Pre-key upload timeout', { statusCode: 408 })), UPLOAD_TIMEOUT)) + ]); + try { + await uploadPreKeysPromise; + } + finally { + uploadPreKeysPromise = null; + } + }; + const verifyCurrentPreKeyExists = async () => { + const currentPreKeyId = creds.nextPreKeyId - 1; + if (currentPreKeyId <= 0) { + return { exists: false, currentPreKeyId: 0 }; + } + const preKeys = await keys.get('pre-key', [currentPreKeyId.toString()]); + const exists = !!preKeys[currentPreKeyId.toString()]; + return { exists, currentPreKeyId }; + }; + const uploadPreKeysToServerIfRequired = async () => { + try { + let count = 0; + const preKeyCount = await getAvailablePreKeysOnServer(); + if (preKeyCount === 0) + count = INITIAL_PREKEY_COUNT; + else + count = MIN_PREKEY_COUNT; + const { exists: currentPreKeyExists, currentPreKeyId } = await verifyCurrentPreKeyExists(); + logger.info(`${preKeyCount} pre-keys found on server`); + logger.info(`Current prekey ID: ${currentPreKeyId}, exists in storage: ${currentPreKeyExists}`); + const lowServerCount = preKeyCount <= count; + const missingCurrentPreKey = !currentPreKeyExists && currentPreKeyId > 0; + const shouldUpload = lowServerCount || missingCurrentPreKey; + if (shouldUpload) { + const reasons = []; + if (lowServerCount) + reasons.push(`server count low (${preKeyCount})`); + if (missingCurrentPreKey) + reasons.push(`current prekey ${currentPreKeyId} missing from storage`); + logger.info(`Uploading PreKeys due to: ${reasons.join(', ')}`); + await uploadPreKeys(count); + } + else { + logger.info(`PreKey validation passed - Server: ${preKeyCount}, Current prekey ${currentPreKeyId} exists`); + } + } + catch (error) { + logger.error({ error }, 'Failed to check/upload pre-keys during initialization'); + // Don't throw - allow connection to continue even if pre-key check fails + } + }; + const onMessageReceived = async (data) => { + await noise.decodeFrame(data, frame => { + // reset ping timeout + lastDateRecv = new Date(); + let anyTriggered = false; + anyTriggered = ws.emit('frame', frame); + // if it's a binary node + if (!(frame instanceof Uint8Array)) { + const msgId = frame.attrs.id; + if (logger.level === 'trace') { + logger.trace({ xml: binaryNodeToString(frame), msg: 'recv xml' }); + } + /* Check if this is a response to a message we sent */ + anyTriggered = ws.emit(`${DEF_TAG_PREFIX}${msgId}`, frame) || anyTriggered; + /* Check if this is a response to a message we are expecting */ + const l0 = frame.tag; + const l1 = frame.attrs || {}; + const l2 = Array.isArray(frame.content) ? frame.content[0]?.tag : ''; + for (const key of Object.keys(l1)) { + anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},${key}:${l1[key]},${l2}`, frame) || anyTriggered; + anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},${key}:${l1[key]}`, frame) || anyTriggered; + anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},${key}`, frame) || anyTriggered; + } + anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0},,${l2}`, frame) || anyTriggered; + anyTriggered = ws.emit(`${DEF_CALLBACK_PREFIX}${l0}`, frame) || anyTriggered; + if (!anyTriggered && logger.level === 'debug') { + logger.debug({ unhandled: true, msgId, fromMe: false, frame }, 'communication recv'); + } + } + }); + }; + const end = async (error) => { + if (closed) { + logger.trace({ trace: error?.stack }, 'connection already closed'); + return; + } + closed = true; + logger.info({ trace: error?.stack }, error ? 'connection errored' : 'connection closed'); + clearInterval(keepAliveReq); + clearTimeout(qrTimer); + ws.removeAllListeners('close'); + ws.removeAllListeners('open'); + ws.removeAllListeners('message'); + signalRepository.close?.(); + if (!ws.isClosed && !ws.isClosing) { + try { + await ws.close(); + } + catch { } + } + for (const handler of socketEndHandlers) { + try { + await handler(error); + } + catch (err) { + logger.error({ err }, 'error in socket end handler'); + } + } + ev.emit('connection.update', { + connection: 'close', + lastDisconnect: { + error, + date: new Date() + } + }); + ev.removeAllListeners('connection.update'); + ev.destroy(); + }; + const waitForSocketOpen = async () => { + if (ws.isOpen) { + return; + } + if (ws.isClosed || ws.isClosing) { + throw new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed }); + } + let onOpen; + let onClose; + await new Promise((resolve, reject) => { + onOpen = () => resolve(undefined); + onClose = mapWebSocketError(reject); + ws.on('open', onOpen); + ws.on('close', onClose); + ws.on('error', onClose); + }).finally(() => { + ws.off('open', onOpen); + ws.off('close', onClose); + ws.off('error', onClose); + }); + }; + const startKeepAliveRequest = () => (keepAliveReq = setInterval(() => { + if (!lastDateRecv) { + lastDateRecv = new Date(); + } + const diff = Date.now() - lastDateRecv.getTime(); + /* + check if it's been a suspicious amount of time since the server responded with our last seen + it could be that the network is down + */ + if (diff > keepAliveIntervalMs + 5000) { + void end(new Boom('Connection was lost', { statusCode: DisconnectReason.connectionLost })); + } + else if (ws.isOpen) { + // if its all good, send a keep alive request + query({ + tag: 'iq', + attrs: { + id: generateMessageTag(), + to: S_WHATSAPP_NET, + type: 'get', + xmlns: 'w:p' + }, + content: [{ tag: 'ping', attrs: {} }] + }).catch(err => { + logger.error({ trace: err.stack }, 'error in sending keep alive'); + }); + } + else { + logger.warn('keep alive called when WS not open'); + } + }, keepAliveIntervalMs)); + /** i have no idea why this exists. pls enlighten me */ + const sendPassiveIq = (tag) => query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + xmlns: 'passive', + type: 'set' + }, + content: [{ tag, attrs: {} }] + }); + /** logout & invalidate connection */ + const logout = async (msg) => { + const jid = authState.creds.me?.id; + if (jid) { + await sendNode({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + id: generateMessageTag(), + xmlns: 'md' + }, + content: [ + { + tag: 'remove-companion-device', + attrs: { + jid, + reason: 'user_initiated' + } + } + ] + }); + } + void end(new Boom(msg || 'Intentional Logout', { statusCode: DisconnectReason.loggedOut })); + }; + const requestPairingCode = async (phoneNumber, customPairingCode) => { + const pairingCode = customPairingCode ?? bytesToCrockford(randomBytes(5)); + if (customPairingCode && customPairingCode?.length !== 8) { + throw new Error('Custom pairing code must be exactly 8 chars'); + } + authState.creds.pairingCode = pairingCode; + authState.creds.me = { + id: jidEncode(phoneNumber, 's.whatsapp.net'), + name: '~' + }; + ev.emit('creds.update', authState.creds); + await sendNode({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'set', + id: generateMessageTag(), + xmlns: 'md' + }, + content: [ + { + tag: 'link_code_companion_reg', + attrs: { + jid: authState.creds.me.id, + stage: 'companion_hello', + should_show_push_notification: 'true' + }, + content: [ + { + tag: 'link_code_pairing_wrapped_companion_ephemeral_pub', + attrs: {}, + content: await generatePairingKey() + }, + { + tag: 'companion_server_auth_key_pub', + attrs: {}, + content: authState.creds.noiseKey.public + }, + { + tag: 'companion_platform_id', + attrs: {}, + content: getCompanionPlatformId(browser) + }, + { + tag: 'companion_platform_display', + attrs: {}, + content: `${browser[1]} (${browser[0]})` + }, + { + tag: 'link_code_pairing_nonce', + attrs: {}, + content: '0' + } + ] + } + ] + }); + return authState.creds.pairingCode; + }; + async function generatePairingKey() { + const salt = randomBytes(32); + const randomIv = randomBytes(16); + const key = await derivePairingCodeKey(authState.creds.pairingCode, salt); + const ciphered = aesEncryptCTR(authState.creds.pairingEphemeralKeyPair.public, key, randomIv); + return Buffer.concat([salt, randomIv, ciphered]); + } + const sendWAMBuffer = (wamBuffer) => { + return query({ + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + id: generateMessageTag(), + xmlns: 'w:stats' + }, + content: [ + { + tag: 'add', + attrs: { t: Math.round(Date.now() / 1000) + '' }, + content: wamBuffer + } + ] + }); + }; + ws.on('message', onMessageReceived); + ws.on('open', async () => { + try { + await validateConnection(); + } + catch (err) { + logger.error({ err }, 'error in validating connection'); + void end(err); + } + }); + ws.on('error', mapWebSocketError(end)); + ws.on('close', () => void end(new Boom('Connection Terminated', { statusCode: DisconnectReason.connectionClosed }))); + // the server terminated the connection + ws.on('CB:xmlstreamend', () => void end(new Boom('Connection Terminated by Server', { statusCode: DisconnectReason.connectionClosed }))); + // QR gen + ws.on('CB:iq,type:set,pair-device', async (stanza) => { + const iq = { + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'result', + id: stanza.attrs.id + } + }; + await sendNode(iq); + const pairDeviceNode = getBinaryNodeChild(stanza, 'pair-device'); + const refNodes = getBinaryNodeChildren(pairDeviceNode, 'ref'); + const noiseKeyB64 = Buffer.from(creds.noiseKey.public).toString('base64'); + const identityKeyB64 = Buffer.from(creds.signedIdentityKey.public).toString('base64'); + const advB64 = creds.advSecretKey; + let qrMs = qrTimeout || 60000; // time to let a QR live + const genPairQR = () => { + if (!ws.isOpen) { + return; + } + const refNode = refNodes.shift(); + if (!refNode) { + void end(new Boom('QR refs attempts ended', { statusCode: DisconnectReason.timedOut })); + return; + } + const ref = refNode.content.toString('utf-8'); + const qr = buildPairingQRData(ref, noiseKeyB64, identityKeyB64, advB64, browser); + ev.emit('connection.update', { qr }); + qrTimer = setTimeout(genPairQR, qrMs); + qrMs = qrTimeout || 20000; // shorter subsequent qrs + }; + genPairQR(); + }); + // device paired for the first time + // if device pairs successfully, the server asks to restart the connection + ws.on('CB:iq,,pair-success', async (stanza) => { + logger.debug('pair success recv'); + try { + updateServerTimeOffset(stanza); + const { reply, creds: updatedCreds } = configureSuccessfulPairing(stanza, creds); + logger.info({ me: updatedCreds.me, platform: updatedCreds.platform }, 'pairing configured successfully, expect to restart the connection...'); + ev.emit('creds.update', updatedCreds); + ev.emit('connection.update', { isNewLogin: true, qr: undefined }); + await sendNode(reply); + void sendUnifiedSession(); + } + catch (error) { + logger.info({ trace: error.stack }, 'error in pairing'); + void end(error); + } + }); + // login complete + ws.on('CB:success', async (node) => { + try { + updateServerTimeOffset(node); + await uploadPreKeysToServerIfRequired(); + await sendPassiveIq('active'); + // After successful login, validate our key-bundle against server + try { + await digestKeyBundle(); + } + catch (e) { + logger.warn({ e }, 'failed to run digest after login'); + } + } + catch (err) { + logger.warn({ err }, 'failed to send initial passive iq'); + } + logger.info('opened connection to WA'); + clearTimeout(qrTimer); // will never happen in all likelyhood -- but just in case WA sends success on first try + ev.emit('creds.update', { me: { ...authState.creds.me, lid: node.attrs.lid } }); + ev.emit('connection.update', { connection: 'open' }); + void sendUnifiedSession(); + if (node.attrs.lid && authState.creds.me?.id) { + const myLID = node.attrs.lid; + process.nextTick(async () => { + try { + const myPN = authState.creds.me.id; + // Store our own LID-PN mapping + await signalRepository.lidMapping.storeLIDPNMappings([{ lid: myLID, pn: myPN }]); + // Create device list for our own user (needed for bulk migration) + const { user, device } = jidDecode(myPN); + await authState.keys.set({ + 'device-list': { + [user]: [device?.toString() || '0'] + } + }); + // migrate our own session + await signalRepository.migrateSession(myPN, myLID); + logger.info({ myPN, myLID }, 'Own LID session created successfully'); + } + catch (error) { + logger.error({ error, lid: myLID }, 'Failed to create own LID session'); + } + }); + } + }); + ws.on('CB:stream:error', (node) => { + const [reasonNode] = getAllBinaryNodeChildren(node); + logger.error({ reasonNode, fullErrorNode: node }, 'stream errored out'); + const { reason, statusCode } = getErrorCodeFromStreamError(node); + void end(new Boom(`Stream Errored (${reason})`, { statusCode, data: reasonNode || node })); + }); + // stream fail, possible logout + ws.on('CB:failure', (node) => { + const reason = +(node.attrs.reason || 500); + void end(new Boom('Connection Failure', { statusCode: reason, data: node.attrs })); + }); + ws.on('CB:ib,,downgrade_webclient', () => { + void end(new Boom('Multi-device beta not joined', { statusCode: DisconnectReason.multideviceMismatch })); + }); + ws.on('CB:ib,,offline_preview', async (node) => { + logger.info('offline preview received', JSON.stringify(node)); + await sendNode({ + tag: 'ib', + attrs: {}, + content: [{ tag: 'offline_batch', attrs: { count: '100' } }] + }); + }); + ws.on('CB:ib,,edge_routing', (node) => { + const edgeRoutingNode = getBinaryNodeChild(node, 'edge_routing'); + const routingInfo = getBinaryNodeChild(edgeRoutingNode, 'routing_info'); + if (routingInfo?.content) { + authState.creds.routingInfo = Buffer.from(routingInfo?.content); + ev.emit('creds.update', authState.creds); + } + }); + let didStartBuffer = false; + process.nextTick(() => { + if (creds.me?.id) { + // start buffering important events + // if we're logged in + ev.buffer(); + didStartBuffer = true; + } + ev.emit('connection.update', { connection: 'connecting', receivedPendingNotifications: false, qr: undefined }); + }); + // called when all offline notifs are handled + ws.on('CB:ib,,offline', (node) => { + const child = getBinaryNodeChild(node, 'offline'); + const offlineNotifs = +(child?.attrs.count || 0); + logger.info(`handled ${offlineNotifs} offline messages/notifications`); + if (didStartBuffer) { + ev.flush(); + logger.trace('flushed events for initial buffer'); + } + ev.emit('connection.update', { receivedPendingNotifications: true }); + }); + // update credentials when required + ev.on('creds.update', update => { + const name = update.me?.name; + // if name has just been received + if (creds.me?.name !== name) { + logger.debug({ name }, 'updated pushName'); + sendNode({ + tag: 'presence', + attrs: { name: name } + }).catch(err => { + logger.warn({ trace: err.stack }, 'error in sending presence update on name change'); + }); + } + Object.assign(creds, update); + }); + const updateServerTimeOffset = ({ attrs }) => { + const tValue = attrs?.t; + if (!tValue) { + return; + } + const parsed = Number(tValue); + if (Number.isNaN(parsed) || parsed <= 0) { + return; + } + const localMs = Date.now(); + serverTimeOffsetMs = parsed * 1000 - localMs; + logger.debug({ offset: serverTimeOffsetMs }, 'calculated server time offset'); + }; + const getUnifiedSessionId = () => { + const offsetMs = 3 * TimeMs.Day; + const now = Date.now() + serverTimeOffsetMs; + const id = (now + offsetMs) % TimeMs.Week; + return id.toString(); + }; + const sendUnifiedSession = async () => { + if (!ws.isOpen) { + return; + } + const node = { + tag: 'ib', + attrs: {}, + content: [ + { + tag: 'unified_session', + attrs: { + id: getUnifiedSessionId() + } + } + ] + }; + try { + await sendNode(node); + } + catch (error) { + logger.debug({ error }, 'failed to send unified_session telemetry'); + } + }; + const registerSocketEndHandler = (handler) => { + socketEndHandlers.push(handler); + }; + /** + * Fetches your account's standing when it comes to restrictions. + * @returns Returns the state of the restrictions. + */ + const fetchAccountReachoutTimelock = async () => { + const queryResult = await executeWMexQuery({}, QueryIds.REACHOUT_TIMELOCK, XWAPaths.xwa2_fetch_account_reachout_timelock, query, generateMessageTag); + const result = { + isActive: !!queryResult?.is_active, + timeEnforcementEnds: queryResult?.time_enforcement_ends && queryResult?.time_enforcement_ends !== '0' + ? new Date(parseInt(queryResult.time_enforcement_ends, 10) * 1000) + : undefined, + enforcementType: queryResult?.enforcement_type ?? ReachoutTimelockEnforcementType.DEFAULT + }; + ev.emit('connection.update', { reachoutTimeLock: result }); + return result; + }; + /** + * Fetches your account's new chat limits. + * @returns Returns the quota and the usage. + */ + const fetchNewChatMessageCap = async () => { + return executeWMexQuery({ input: { type: 'INDIVIDUAL_NEW_CHAT_MSG' } }, QueryIds.MESSAGE_CAPPING_INFO, XWAPaths.xwa2_message_capping_info, query, generateMessageTag); + }; + return { + type: 'md', + ws, + ev, + authState: { creds, keys }, + signalRepository, + get user() { + return authState.creds.me; + }, + generateMessageTag, + query, + waitForMessage, + waitForSocketOpen, + sendRawMessage, + sendNode, + logout, + end, + registerSocketEndHandler, + onUnexpectedError, + uploadPreKeys, + uploadPreKeysToServerIfRequired, + digestKeyBundle, + rotateSignedPreKey, + requestPairingCode, + updateServerTimeOffset, + sendUnifiedSession, + wamBuffer: publicWAMBuffer, + /** Waits for the connection to WA to reach a state */ + waitForConnectionUpdate: bindWaitForConnectionUpdate(ev), + sendWAMBuffer, + executeUSyncQuery, + onWhatsApp, + fetchAccountReachoutTimelock, + fetchNewChatMessageCap + }; +}; +/** + * map the websocket error to the right type + * so it can be retried by the caller + * */ +function mapWebSocketError(handler) { + return (error) => { + handler(new Boom(`WebSocket Error (${error?.message})`, { statusCode: getCodeFromWSError(error), data: error })); + }; +} +//# sourceMappingURL=socket.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Socket/socket.js.map b/packages/transport/vendor/lib/Socket/socket.js.map new file mode 100644 index 0000000..c3d3355 --- /dev/null +++ b/packages/transport/vendor/lib/Socket/socket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/Socket/socket.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Auth.d.ts b/packages/transport/vendor/lib/Types/Auth.d.ts new file mode 100644 index 0000000..035bd00 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Auth.d.ts @@ -0,0 +1,117 @@ +import type { proto } from '../../WAProto/index.js'; +import type { Contact } from './Contact.js'; +import type { MinimalMessage } from './Message.js'; +export type KeyPair = { + public: Uint8Array; + private: Uint8Array; +}; +export type SignedKeyPair = { + keyPair: KeyPair; + signature: Uint8Array; + keyId: number; + timestampS?: number; +}; +export type ProtocolAddress = { + name: string; + deviceId: number; +}; +export type SignalIdentity = { + identifier: ProtocolAddress; + identifierKey: Uint8Array; +}; +export type LIDMapping = { + pn: string; + lid: string; +}; +export type LTHashState = { + version: number; + hash: Buffer; + indexValueMap: { + [indexMacBase64: string]: { + valueMac: Uint8Array | Buffer; + }; + }; +}; +export type SignalCreds = { + readonly signedIdentityKey: KeyPair; + readonly signedPreKey: SignedKeyPair; + readonly registrationId: number; +}; +export type AccountSettings = { + /** unarchive chats when a new message is received */ + unarchiveChats: boolean; + /** the default mode to start new conversations with */ + defaultDisappearingMode?: Pick; +}; +export type AuthenticationCreds = SignalCreds & { + readonly noiseKey: KeyPair; + readonly pairingEphemeralKeyPair: KeyPair; + advSecretKey: string; + me?: Contact; + account?: proto.IADVSignedDeviceIdentity; + signalIdentities?: SignalIdentity[]; + myAppStateKeyId?: string; + firstUnuploadedPreKeyId: number; + nextPreKeyId: number; + lastAccountSyncTimestamp?: number; + platform?: string; + processedHistoryMessages: MinimalMessage[]; + /** number of times history & app state has been synced */ + accountSyncCounter: number; + accountSettings: AccountSettings; + registered: boolean; + pairingCode: string | undefined; + lastPropHash: string | undefined; + routingInfo: Buffer | undefined; + additionalData?: any | undefined; +}; +export type SignalDataTypeMap = { + 'pre-key': KeyPair; + session: Uint8Array; + 'sender-key': Uint8Array; + 'sender-key-memory': { + [jid: string]: boolean; + }; + 'app-state-sync-key': proto.Message.IAppStateSyncKeyData; + 'app-state-sync-version': LTHashState; + 'lid-mapping': string; + 'device-list': string[]; + tctoken: { + token: Buffer; + timestamp?: string; + senderTimestamp?: number; + }; + 'identity-key': Uint8Array; +}; +export type SignalDataSet = { + [T in keyof SignalDataTypeMap]?: { + [id: string]: SignalDataTypeMap[T] | null; + }; +}; +type Awaitable = T | Promise; +export type SignalKeyStore = { + get(type: T, ids: string[]): Awaitable<{ + [id: string]: SignalDataTypeMap[T]; + }>; + set(data: SignalDataSet): Awaitable; + /** clear all the data in the store */ + clear?(): Awaitable; +}; +export type SignalKeyStoreWithTransaction = SignalKeyStore & { + isInTransaction: () => boolean; + transaction(exec: () => Promise, key: string): Promise; +}; +export type TransactionCapabilityOptions = { + maxCommitRetries: number; + delayBetweenTriesMs: number; +}; +export type SignalAuthState = { + creds: SignalCreds; + keys: SignalKeyStore | SignalKeyStoreWithTransaction; +}; +export type AuthenticationState = { + creds: AuthenticationCreds; + keys: SignalKeyStore; +}; +export {}; +//# sourceMappingURL=Auth.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Auth.d.ts.map b/packages/transport/vendor/lib/Types/Auth.d.ts.map new file mode 100644 index 0000000..a237a53 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Auth.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../src/Types/Auth.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Auth.js b/packages/transport/vendor/lib/Types/Auth.js new file mode 100644 index 0000000..e621fa6 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Auth.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=Auth.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Auth.js.map b/packages/transport/vendor/lib/Types/Auth.js.map new file mode 100644 index 0000000..43b6fec --- /dev/null +++ b/packages/transport/vendor/lib/Types/Auth.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../src/Types/Auth.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Bussines.d.ts b/packages/transport/vendor/lib/Types/Bussines.d.ts new file mode 100644 index 0000000..f42bd1b --- /dev/null +++ b/packages/transport/vendor/lib/Types/Bussines.d.ts @@ -0,0 +1,25 @@ +import type { proto } from '../../WAProto'; +export type DayOfWeekBussines = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'; +export type HoursDay = { + day: DayOfWeekBussines; + mode: 'specific_hours'; + openTimeInMinutes: string; + closeTimeInMinutes: string; +} | { + day: DayOfWeekBussines; + mode: 'open_24h' | 'appointment_only'; +}; +export type UpdateBussinesProfileProps = { + address?: string; + websites?: string[]; + email?: string; + description?: string; + hours?: { + timezone: string; + days: HoursDay[]; + }; +}; +export type QuickReplyAction = proto.SyncActionValue.IQuickReplyAction & { + timestamp?: string; +}; +//# sourceMappingURL=Bussines.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Bussines.d.ts.map b/packages/transport/vendor/lib/Types/Bussines.d.ts.map new file mode 100644 index 0000000..c213bf5 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Bussines.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Bussines.d.ts","sourceRoot":"","sources":["../../src/Types/Bussines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;AAErF,MAAM,MAAM,QAAQ,GACjB;IAAE,GAAG,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,GAAG,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,CAAA;CAAE,CAAA;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,QAAQ,EAAE,CAAA;KAChB,CAAA;CACD,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe,CAAC,iBAAiB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Bussines.js b/packages/transport/vendor/lib/Types/Bussines.js new file mode 100644 index 0000000..2edfc94 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Bussines.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=Bussines.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Bussines.js.map b/packages/transport/vendor/lib/Types/Bussines.js.map new file mode 100644 index 0000000..75f3a83 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Bussines.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Bussines.js","sourceRoot":"","sources":["../../src/Types/Bussines.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Call.d.ts b/packages/transport/vendor/lib/Types/Call.d.ts new file mode 100644 index 0000000..6450d1e --- /dev/null +++ b/packages/transport/vendor/lib/Types/Call.d.ts @@ -0,0 +1,15 @@ +export type WACallUpdateType = 'offer' | 'ringing' | 'preaccept' | 'transport' | 'relaylatency' | 'timeout' | 'reject' | 'accept' | 'terminate'; +export type WACallEvent = { + chatId: string; + from: string; + callerPn?: string; + isGroup?: boolean; + groupJid?: string; + id: string; + date: Date; + isVideo?: boolean; + status: WACallUpdateType; + offline: boolean; + latencyMs?: number; +}; +//# sourceMappingURL=Call.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Call.d.ts.map b/packages/transport/vendor/lib/Types/Call.d.ts.map new file mode 100644 index 0000000..d519f64 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Call.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Call.d.ts","sourceRoot":"","sources":["../../src/Types/Call.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACzB,OAAO,GACP,SAAS,GACT,WAAW,GACX,WAAW,GACX,cAAc,GACd,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,WAAW,CAAA;AAEd,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Call.js b/packages/transport/vendor/lib/Types/Call.js new file mode 100644 index 0000000..74edbfb --- /dev/null +++ b/packages/transport/vendor/lib/Types/Call.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=Call.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Call.js.map b/packages/transport/vendor/lib/Types/Call.js.map new file mode 100644 index 0000000..55a4de0 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Call.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Call.js","sourceRoot":"","sources":["../../src/Types/Call.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Chat.d.ts b/packages/transport/vendor/lib/Types/Chat.d.ts new file mode 100644 index 0000000..dbdd6df --- /dev/null +++ b/packages/transport/vendor/lib/Types/Chat.d.ts @@ -0,0 +1,123 @@ +import type { proto } from '../../WAProto/index.js'; +import type { AccountSettings } from './Auth.js'; +import type { QuickReplyAction } from './Bussines.js'; +import type { BufferedEventData } from './Events.js'; +import type { LabelActionBody } from './Label.js'; +import type { ChatLabelAssociationActionBody } from './LabelAssociation.js'; +import type { MessageLabelAssociationActionBody } from './LabelAssociation.js'; +import type { MinimalMessage, WAMessageKey } from './Message.js'; +/** privacy settings in WhatsApp Web */ +export type WAPrivacyValue = 'all' | 'contacts' | 'contact_blacklist' | 'none'; +export type WAPrivacyOnlineValue = 'all' | 'match_last_seen'; +export type WAPrivacyGroupAddValue = 'all' | 'contacts' | 'contact_blacklist'; +export type WAReadReceiptsValue = 'all' | 'none'; +export type WAPrivacyCallValue = 'all' | 'known'; +export type WAPrivacyMessagesValue = 'all' | 'contacts'; +/** set of statuses visible to other people; see updatePresence() in WhatsAppWeb.Send */ +export type WAPresence = 'unavailable' | 'available' | 'composing' | 'recording' | 'paused'; +export declare const ALL_WA_PATCH_NAMES: readonly ["critical_block", "critical_unblock_low", "regular_high", "regular_low", "regular"]; +export type WAPatchName = (typeof ALL_WA_PATCH_NAMES)[number]; +export interface PresenceData { + lastKnownPresence: WAPresence; + lastSeen?: number; +} +export type BotListInfo = { + jid: string; + personaId: string; +}; +export type ChatMutation = { + syncAction: proto.ISyncActionData; + index: string[]; +}; +export type WAPatchCreate = { + syncAction: proto.ISyncActionValue; + index: string[]; + type: WAPatchName; + apiVersion: number; + operation: proto.SyncdMutation.SyncdOperation; +}; +export type Chat = proto.IConversation & { + /** unix timestamp of when the last message was received in the chat */ + lastMessageRecvTimestamp?: number; +}; +export type ChatUpdate = Partial boolean | undefined; + /** last update time */ + timestamp?: number; +}>; +/** + * the last messages in a chat, sorted reverse-chronologically. That is, the latest message should be first in the chat + * for MD modifications, the last message in the array (i.e. the earlist message) must be the last message recv in the chat + * */ +export type LastMessageList = MinimalMessage[] | proto.SyncActionValue.ISyncActionMessageRange; +export type ChatModification = { + archive: boolean; + lastMessages: LastMessageList; +} | { + pushNameSetting: string; +} | { + pin: boolean; +} | { + /** mute for duration, or provide timestamp of mute to remove*/ + mute: number | null; +} | { + clear: boolean; + lastMessages: LastMessageList; +} | { + deleteForMe: { + deleteMedia: boolean; + key: WAMessageKey; + timestamp: number; + }; +} | { + star: { + messages: { + id: string; + fromMe?: boolean; + }[]; + star: boolean; + }; +} | { + markRead: boolean; + lastMessages: LastMessageList; +} | { + delete: true; + lastMessages: LastMessageList; +} | { + contact: proto.SyncActionValue.IContactAction | null; +} | { + disableLinkPreviews: proto.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction; +} | { + addLabel: LabelActionBody; +} | { + addChatLabel: ChatLabelAssociationActionBody; +} | { + removeChatLabel: ChatLabelAssociationActionBody; +} | { + addMessageLabel: MessageLabelAssociationActionBody; +} | { + removeMessageLabel: MessageLabelAssociationActionBody; +} | { + quickReply: QuickReplyAction; +}; +export type InitialReceivedChatsState = { + [jid: string]: { + /** the last message received from the other party */ + lastMsgRecvTimestamp?: number; + /** the absolute last message in the chat */ + lastMsgTimestamp: number; + }; +}; +export type InitialAppStateSyncOptions = { + accountSettings: AccountSettings; +}; +//# sourceMappingURL=Chat.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Chat.d.ts.map b/packages/transport/vendor/lib/Types/Chat.d.ts.map new file mode 100644 index 0000000..c3abe07 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Chat.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../src/Types/Chat.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Chat.js b/packages/transport/vendor/lib/Types/Chat.js new file mode 100644 index 0000000..040b5f2 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Chat.js @@ -0,0 +1,8 @@ +export const ALL_WA_PATCH_NAMES = [ + 'critical_block', + 'critical_unblock_low', + 'regular_high', + 'regular_low', + 'regular' +]; +//# sourceMappingURL=Chat.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Chat.js.map b/packages/transport/vendor/lib/Types/Chat.js.map new file mode 100644 index 0000000..9e1205a --- /dev/null +++ b/packages/transport/vendor/lib/Types/Chat.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../src/Types/Chat.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,gBAAgB;IAChB,sBAAsB;IACtB,cAAc;IACd,aAAa;IACb,SAAS;CACA,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Contact.d.ts b/packages/transport/vendor/lib/Types/Contact.d.ts new file mode 100644 index 0000000..c127304 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Contact.d.ts @@ -0,0 +1,26 @@ +export interface Contact { + /** ID either in lid or jid format (preferred) **/ + id: string; + /** ID in LID format (@lid) **/ + lid?: string; + /** ID in PN format (@s.whatsapp.net) **/ + phoneNumber?: string; + /** name of the contact, you have saved on your WA */ + name?: string; + /** name of the contact, the contact has set on their own on WA */ + notify?: string; + /** username associated with this contact, when provided by WA */ + username?: string; + /** I have no idea */ + verifiedName?: string; + /** + * Url of the profile picture of the contact + * + * 'changed' => if the profile picture has changed + * null => if the profile picture has not been set (default profile picture) + * any other string => url of the profile picture + */ + imgUrl?: string | null; + status?: string; +} +//# sourceMappingURL=Contact.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Contact.d.ts.map b/packages/transport/vendor/lib/Types/Contact.d.ts.map new file mode 100644 index 0000000..2f2773d --- /dev/null +++ b/packages/transport/vendor/lib/Types/Contact.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Contact.d.ts","sourceRoot":"","sources":["../../src/Types/Contact.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACvB,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAA;IACV,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;CACf"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Contact.js b/packages/transport/vendor/lib/Types/Contact.js new file mode 100644 index 0000000..29a7092 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Contact.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=Contact.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Contact.js.map b/packages/transport/vendor/lib/Types/Contact.js.map new file mode 100644 index 0000000..d4e304a --- /dev/null +++ b/packages/transport/vendor/lib/Types/Contact.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Contact.js","sourceRoot":"","sources":["../../src/Types/Contact.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Events.d.ts b/packages/transport/vendor/lib/Types/Events.d.ts new file mode 100644 index 0000000..f55c4c3 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Events.d.ts @@ -0,0 +1,256 @@ +import type { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import type { AuthenticationCreds, LIDMapping } from './Auth.js'; +import type { WACallEvent } from './Call.js'; +import type { Chat, ChatUpdate, PresenceData } from './Chat.js'; +import type { Contact } from './Contact.js'; +import type { GroupMetadata, GroupParticipant, ParticipantAction, RequestJoinAction, RequestJoinMethod } from './GroupMetadata.js'; +import type { Label } from './Label.js'; +import type { LabelAssociation } from './LabelAssociation.js'; +import type { MessageUpsertType, MessageUserReceiptUpdate, WAMessage, WAMessageKey, WAMessageUpdate } from './Message.js'; +import type { ConnectionState, NewChatMessageCapInfo } from './State.js'; +export type BaileysEventMap = { + /** connection state has been updated -- WS closed, opened, connecting etc. */ + 'connection.update': Partial; + /** credentials updated -- some metadata, keys or something */ + 'creds.update': Partial; + /** set chats (history sync), everything is reverse chronologically sorted */ + 'messaging-history.set': { + chats: Chat[]; + contacts: Contact[]; + messages: WAMessage[]; + lidPnMappings?: LIDMapping[]; + isLatest?: boolean; + progress?: number | null; + syncType?: proto.HistorySync.HistorySyncType | null; + pastParticipants?: proto.IPastParticipants[] | null; + chunkOrder?: number | null; + peerDataRequestSessionId?: string | null; + }; + /** signals history sync milestones (completion or stall) per sync type */ + 'messaging-history.status': { + /** which sync phase this status refers to */ + syncType: proto.HistorySync.HistorySyncType; + /** the status of this sync phase */ + status: 'complete' | 'paused'; + /** + * progress === 100 was received from the server. + * when false, completion was inferred via timeout (no more chunks arriving). + */ + explicit: boolean; + }; + /** upsert chats */ + 'chats.upsert': Chat[]; + /** update the given chats */ + 'chats.update': ChatUpdate[]; + 'lid-mapping.update': LIDMapping; + /** delete chats with given ID */ + 'chats.delete': string[]; + /** presence of contact in a chat updated */ + 'presence.update': { + id: string; + presences: { + [participant: string]: PresenceData; + }; + }; + 'contacts.upsert': Contact[]; + 'contacts.update': Partial[]; + 'messages.delete': { + keys: WAMessageKey[]; + } | { + jid: string; + all: true; + }; + 'messages.update': WAMessageUpdate[]; + 'messages.media-update': { + key: WAMessageKey; + media?: { + ciphertext: Uint8Array; + iv: Uint8Array; + }; + error?: Boom; + }[]; + /** + * add/update the given messages. If they were received while the connection was online, + * the update will have type: "notify" + * if requestId is provided, then the messages was received from the phone due to it being unavailable + * */ + 'messages.upsert': { + messages: WAMessage[]; + type: MessageUpsertType; + requestId?: string; + }; + /** message was reacted to. If reaction was removed -- then "reaction.text" will be falsey */ + 'messages.reaction': { + key: WAMessageKey; + reaction: proto.IReaction; + }[]; + 'message-receipt.update': MessageUserReceiptUpdate[]; + 'groups.upsert': GroupMetadata[]; + 'groups.update': Partial[]; + /** apply an action to participants in a group */ + 'group-participants.update': { + id: string; + author: string; + authorPn?: string; + authorUsername?: string; + participants: GroupParticipant[]; + action: ParticipantAction; + }; + 'group.join-request': { + id: string; + author: string; + authorPn?: string; + authorUsername?: string; + participant: string; + participantPn?: string; + action: RequestJoinAction; + method: RequestJoinMethod; + }; + 'group.member-tag.update': { + groupId: string; + participant: string; + participantAlt?: string; + label: string; + messageTimestamp?: number; + }; + 'blocklist.set': { + blocklist: string[]; + }; + 'blocklist.update': { + blocklist: string[]; + type: 'add' | 'remove'; + }; + /** Receive an update on a call, including when the call was received, rejected, accepted */ + call: WACallEvent[]; + 'labels.edit': Label; + 'labels.association': { + association: LabelAssociation; + type: 'add' | 'remove'; + }; + /** Newsletter-related events */ + 'newsletter.reaction': { + id: string; + server_id: string; + reaction: { + code?: string; + count?: number; + removed?: boolean; + }; + }; + 'newsletter.view': { + id: string; + server_id: string; + count: number; + }; + 'newsletter-participants.update': { + id: string; + author: string; + user: string; + new_role: string; + action: string; + }; + 'newsletter-settings.update': { + id: string; + update: any; + }; + 'message-capping.update': NewChatMessageCapInfo; + /** Settings and actions sync events */ + 'chats.lock': { + id: string; + locked: boolean; + }; + 'settings.update': { + setting: 'unarchiveChats'; + value: boolean; + } | { + setting: 'locale'; + value: string; + } | { + setting: 'disableLinkPreviews'; + value: proto.SyncActionValue.IPrivacySettingDisableLinkPreviewsAction; + } | { + setting: 'timeFormat'; + value: proto.SyncActionValue.ITimeFormatAction; + } | { + setting: 'privacySettingRelayAllCalls'; + value: proto.SyncActionValue.IPrivacySettingRelayAllCalls; + } | { + setting: 'statusPrivacy'; + value: proto.SyncActionValue.IStatusPrivacyAction; + } | { + setting: 'notificationActivitySetting'; + value: proto.SyncActionValue.NotificationActivitySettingAction.NotificationActivitySetting; + } | { + setting: 'channelsPersonalisedRecommendation'; + value: proto.SyncActionValue.IPrivacySettingChannelsPersonalisedRecommendationAction; + }; +}; +export type BufferedEventData = { + historySets: { + chats: { + [jid: string]: Chat; + }; + contacts: { + [jid: string]: Contact; + }; + messages: { + [uqId: string]: WAMessage; + }; + empty: boolean; + isLatest: boolean; + progress?: number | null; + syncType?: proto.HistorySync.HistorySyncType; + pastParticipants?: proto.IPastParticipants[]; + chunkOrder?: number | null; + peerDataRequestSessionId?: string; + }; + chatUpserts: { + [jid: string]: Chat; + }; + chatUpdates: { + [jid: string]: ChatUpdate; + }; + chatDeletes: Set; + contactUpserts: { + [jid: string]: Contact; + }; + contactUpdates: { + [jid: string]: Partial; + }; + messageUpserts: { + [key: string]: { + type: MessageUpsertType; + message: WAMessage; + }; + }; + messageUpdates: { + [key: string]: WAMessageUpdate; + }; + messageDeletes: { + [key: string]: WAMessageKey; + }; + messageReactions: { + [key: string]: { + key: WAMessageKey; + reactions: proto.IReaction[]; + }; + }; + messageReceipts: { + [key: string]: { + key: WAMessageKey; + userReceipt: proto.IUserReceipt[]; + }; + }; + groupUpdates: { + [jid: string]: Partial; + }; +}; +export type BaileysEvent = keyof BaileysEventMap; +export interface BaileysEventEmitter { + on(event: T, listener: (arg: BaileysEventMap[T]) => void): void; + off(event: T, listener: (arg: BaileysEventMap[T]) => void): void; + removeAllListeners(event: T): void; + emit(event: T, arg: BaileysEventMap[T]): boolean; +} +//# sourceMappingURL=Events.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Events.d.ts.map b/packages/transport/vendor/lib/Types/Events.d.ts.map new file mode 100644 index 0000000..8cb0afb --- /dev/null +++ b/packages/transport/vendor/lib/Types/Events.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/Types/Events.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Events.js b/packages/transport/vendor/lib/Types/Events.js new file mode 100644 index 0000000..87972ad --- /dev/null +++ b/packages/transport/vendor/lib/Types/Events.js @@ -0,0 +1,2 @@ +import { proto } from '../../WAProto/index.js'; +//# sourceMappingURL=Events.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Events.js.map b/packages/transport/vendor/lib/Types/Events.js.map new file mode 100644 index 0000000..d622f04 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Events.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Events.js","sourceRoot":"","sources":["../../src/Types/Events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/GroupMetadata.d.ts b/packages/transport/vendor/lib/Types/GroupMetadata.d.ts new file mode 100644 index 0000000..9e589d7 --- /dev/null +++ b/packages/transport/vendor/lib/Types/GroupMetadata.d.ts @@ -0,0 +1,71 @@ +import type { Contact } from './Contact.js'; +import type { WAMessageAddressingMode } from './Message.js'; +export type GroupParticipant = Contact & { + isAdmin?: boolean; + isSuperAdmin?: boolean; + admin?: 'admin' | 'superadmin' | null; +}; +export type ParticipantAction = 'add' | 'remove' | 'promote' | 'demote' | 'modify'; +export type RequestJoinAction = 'created' | 'revoked' | 'rejected'; +export type RequestJoinMethod = 'invite_link' | 'linked_group_join' | 'non_admin_add' | undefined; +export interface GroupMetadata { + id: string; + notify?: string; + /** group uses 'lid' or 'pn' to send messages */ + addressingMode?: WAMessageAddressingMode; + owner: string | undefined; + ownerPn?: string | undefined; + ownerUsername?: string | undefined; + owner_country_code?: string | undefined; + subject: string; + /** group subject owner */ + subjectOwner?: string; + subjectOwnerPn?: string; + subjectOwnerUsername?: string; + /** group subject modification date */ + subjectTime?: number; + creation?: number; + desc?: string; + descOwner?: string; + descOwnerPn?: string; + descOwnerUsername?: string; + descId?: string; + descTime?: number; + /** if this group is part of a community, it returns the jid of the community to which it belongs */ + linkedParent?: string; + /** is set when the group only allows admins to change group settings */ + restrict?: boolean; + /** is set when the group only allows admins to write messages */ + announce?: boolean; + /** is set when the group also allows members to add participants */ + memberAddMode?: boolean; + /** Request approval to join the group */ + joinApprovalMode?: boolean; + /** is this a community */ + isCommunity?: boolean; + /** is this the announce of a community */ + isCommunityAnnounce?: boolean; + /** number of group participants */ + size?: number; + participants: GroupParticipant[]; + ephemeralDuration?: number; + inviteCode?: string; + /** the person who added you to group or changed some setting in group */ + author?: string; + authorPn?: string; + authorUsername?: string; +} +export interface WAGroupCreateResponse { + status: number; + gid?: string; + participants?: [{ + [key: string]: {}; + }]; +} +export interface GroupModificationResponse { + status: number; + participants?: { + [key: string]: {}; + }; +} +//# sourceMappingURL=GroupMetadata.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/GroupMetadata.d.ts.map b/packages/transport/vendor/lib/Types/GroupMetadata.d.ts.map new file mode 100644 index 0000000..0a5c2f4 --- /dev/null +++ b/packages/transport/vendor/lib/Types/GroupMetadata.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"GroupMetadata.d.ts","sourceRoot":"","sources":["../../src/Types/GroupMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAExD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG;IACxC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAElF,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;AAElE,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,mBAAmB,GAAG,eAAe,GAAG,SAAS,CAAA;AAEjG,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gDAAgD;IAChD,cAAc,CAAC,EAAE,uBAAuB,CAAA;IACxC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oGAAoG;IACpG,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,oEAAoE;IACpE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0CAA0C;IAC1C,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,YAAY,EAAE,gBAAgB,EAAE,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAA;KAAE,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAA;KAAE,CAAA;CACpC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/GroupMetadata.js b/packages/transport/vendor/lib/Types/GroupMetadata.js new file mode 100644 index 0000000..50cbfff --- /dev/null +++ b/packages/transport/vendor/lib/Types/GroupMetadata.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=GroupMetadata.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/GroupMetadata.js.map b/packages/transport/vendor/lib/Types/GroupMetadata.js.map new file mode 100644 index 0000000..b56339a --- /dev/null +++ b/packages/transport/vendor/lib/Types/GroupMetadata.js.map @@ -0,0 +1 @@ +{"version":3,"file":"GroupMetadata.js","sourceRoot":"","sources":["../../src/Types/GroupMetadata.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Label.d.ts b/packages/transport/vendor/lib/Types/Label.d.ts new file mode 100644 index 0000000..89e1c21 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Label.d.ts @@ -0,0 +1,47 @@ +export interface Label { + /** Label uniq ID */ + id: string; + /** Label name */ + name: string; + /** Label color ID */ + color: number; + /** Is label has been deleted */ + deleted: boolean; + /** WhatsApp has 5 predefined labels (New customer, New order & etc) */ + predefinedId?: string; +} +export interface LabelActionBody { + id: string; + /** Label name */ + name?: string; + /** Label color ID */ + color?: number; + /** Is label has been deleted */ + deleted?: boolean; + /** WhatsApp has 5 predefined labels (New customer, New order & etc) */ + predefinedId?: number; +} +/** WhatsApp has 20 predefined colors */ +export declare enum LabelColor { + Color1 = 0, + Color2 = 1, + Color3 = 2, + Color4 = 3, + Color5 = 4, + Color6 = 5, + Color7 = 6, + Color8 = 7, + Color9 = 8, + Color10 = 9, + Color11 = 10, + Color12 = 11, + Color13 = 12, + Color14 = 13, + Color15 = 14, + Color16 = 15, + Color17 = 16, + Color18 = 17, + Color19 = 18, + Color20 = 19 +} +//# sourceMappingURL=Label.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Label.d.ts.map b/packages/transport/vendor/lib/Types/Label.d.ts.map new file mode 100644 index 0000000..c69cc96 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Label.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../src/Types/Label.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACrB,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wCAAwC;AACxC,oBAAY,UAAU;IACrB,MAAM,IAAI;IACV,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,OAAO,IAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;IACP,OAAO,KAAA;CACP"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Label.js b/packages/transport/vendor/lib/Types/Label.js new file mode 100644 index 0000000..ec5ddbd --- /dev/null +++ b/packages/transport/vendor/lib/Types/Label.js @@ -0,0 +1,25 @@ +/** WhatsApp has 20 predefined colors */ +export var LabelColor; +(function (LabelColor) { + LabelColor[LabelColor["Color1"] = 0] = "Color1"; + LabelColor[LabelColor["Color2"] = 1] = "Color2"; + LabelColor[LabelColor["Color3"] = 2] = "Color3"; + LabelColor[LabelColor["Color4"] = 3] = "Color4"; + LabelColor[LabelColor["Color5"] = 4] = "Color5"; + LabelColor[LabelColor["Color6"] = 5] = "Color6"; + LabelColor[LabelColor["Color7"] = 6] = "Color7"; + LabelColor[LabelColor["Color8"] = 7] = "Color8"; + LabelColor[LabelColor["Color9"] = 8] = "Color9"; + LabelColor[LabelColor["Color10"] = 9] = "Color10"; + LabelColor[LabelColor["Color11"] = 10] = "Color11"; + LabelColor[LabelColor["Color12"] = 11] = "Color12"; + LabelColor[LabelColor["Color13"] = 12] = "Color13"; + LabelColor[LabelColor["Color14"] = 13] = "Color14"; + LabelColor[LabelColor["Color15"] = 14] = "Color15"; + LabelColor[LabelColor["Color16"] = 15] = "Color16"; + LabelColor[LabelColor["Color17"] = 16] = "Color17"; + LabelColor[LabelColor["Color18"] = 17] = "Color18"; + LabelColor[LabelColor["Color19"] = 18] = "Color19"; + LabelColor[LabelColor["Color20"] = 19] = "Color20"; +})(LabelColor || (LabelColor = {})); +//# sourceMappingURL=Label.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Label.js.map b/packages/transport/vendor/lib/Types/Label.js.map new file mode 100644 index 0000000..0008d62 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Label.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Label.js","sourceRoot":"","sources":["../../src/Types/Label.ts"],"names":[],"mappings":"AAyBA,wCAAwC;AACxC,MAAM,CAAN,IAAY,UAqBX;AArBD,WAAY,UAAU;IACrB,+CAAU,CAAA;IACV,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,iDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;IACP,kDAAO,CAAA;AACR,CAAC,EArBW,UAAU,KAAV,UAAU,QAqBrB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/LabelAssociation.d.ts b/packages/transport/vendor/lib/Types/LabelAssociation.d.ts new file mode 100644 index 0000000..1550476 --- /dev/null +++ b/packages/transport/vendor/lib/Types/LabelAssociation.d.ts @@ -0,0 +1,30 @@ +/** Association type */ +export declare enum LabelAssociationType { + Chat = "label_jid", + Message = "label_message" +} +export type LabelAssociationTypes = `${LabelAssociationType}`; +/** Association for chat */ +export interface ChatLabelAssociation { + type: LabelAssociationType.Chat; + chatId: string; + labelId: string; +} +/** Association for message */ +export interface MessageLabelAssociation { + type: LabelAssociationType.Message; + chatId: string; + messageId: string; + labelId: string; +} +export type LabelAssociation = ChatLabelAssociation | MessageLabelAssociation; +/** Body for add/remove chat label association action */ +export interface ChatLabelAssociationActionBody { + labelId: string; +} +/** body for add/remove message label association action */ +export interface MessageLabelAssociationActionBody { + labelId: string; + messageId: string; +} +//# sourceMappingURL=LabelAssociation.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/LabelAssociation.d.ts.map b/packages/transport/vendor/lib/Types/LabelAssociation.d.ts.map new file mode 100644 index 0000000..35b5fd9 --- /dev/null +++ b/packages/transport/vendor/lib/Types/LabelAssociation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LabelAssociation.d.ts","sourceRoot":"","sources":["../../src/Types/LabelAssociation.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,oBAAY,oBAAoB;IAC/B,IAAI,cAAc;IAClB,OAAO,kBAAkB;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,GAAG,oBAAoB,EAAE,CAAA;AAE7D,2BAA2B;AAC3B,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CACf;AAED,8BAA8B;AAC9B,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAA;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,uBAAuB,CAAA;AAE7E,wDAAwD;AACxD,MAAM,WAAW,8BAA8B;IAC9C,OAAO,EAAE,MAAM,CAAA;CACf;AAED,2DAA2D;AAC3D,MAAM,WAAW,iCAAiC;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CACjB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/LabelAssociation.js b/packages/transport/vendor/lib/Types/LabelAssociation.js new file mode 100644 index 0000000..fa18219 --- /dev/null +++ b/packages/transport/vendor/lib/Types/LabelAssociation.js @@ -0,0 +1,7 @@ +/** Association type */ +export var LabelAssociationType; +(function (LabelAssociationType) { + LabelAssociationType["Chat"] = "label_jid"; + LabelAssociationType["Message"] = "label_message"; +})(LabelAssociationType || (LabelAssociationType = {})); +//# sourceMappingURL=LabelAssociation.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/LabelAssociation.js.map b/packages/transport/vendor/lib/Types/LabelAssociation.js.map new file mode 100644 index 0000000..bc26ea6 --- /dev/null +++ b/packages/transport/vendor/lib/Types/LabelAssociation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"LabelAssociation.js","sourceRoot":"","sources":["../../src/Types/LabelAssociation.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC/B,0CAAkB,CAAA;IAClB,iDAAyB,CAAA;AAC1B,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Message.d.ts b/packages/transport/vendor/lib/Types/Message.d.ts new file mode 100644 index 0000000..b4bad61 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Message.d.ts @@ -0,0 +1,322 @@ +import type { Readable } from 'stream'; +import type { URL } from 'url'; +import { proto } from '../../WAProto/index.js'; +import type { MediaType } from '../Defaults/index.js'; +import type { BinaryNode } from '../WABinary/index.js'; +import type { GroupMetadata } from './GroupMetadata.js'; +import type { CacheStore } from './Socket.js'; +export { proto as WAProto }; +export type WAMessage = proto.IWebMessageInfo & { + key: WAMessageKey; + messageStubParameters?: any; + category?: string; + retryCount?: number; +}; +export type WAMessageContent = proto.IMessage; +export type WAContactMessage = proto.Message.IContactMessage; +export type WAContactsArrayMessage = proto.Message.IContactsArrayMessage; +export type WAMessageKey = proto.IMessageKey & { + remoteJidAlt?: string; + remoteJidUsername?: string; + participantAlt?: string; + participantUsername?: string; + server_id?: string; + addressingMode?: string; + isViewOnce?: boolean; +}; +export type WATextMessage = proto.Message.IExtendedTextMessage; +export type WAContextInfo = proto.IContextInfo; +export type WALocationMessage = proto.Message.ILocationMessage; +export type WAGenericMediaMessage = proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage; +export declare const WAMessageStubType: typeof proto.WebMessageInfo.StubType; +export declare const WAMessageStatus: typeof proto.WebMessageInfo.Status; +import type { ILogger } from '../Utils/logger.js'; +export type WAMediaPayloadURL = { + url: URL | string; +}; +export type WAMediaPayloadStream = { + stream: Readable; +}; +export type WAMediaUpload = Buffer | WAMediaPayloadStream | WAMediaPayloadURL; +/** Set of message types that are supported by the library */ +export type MessageType = keyof proto.Message; +export declare enum WAMessageAddressingMode { + PN = "pn", + LID = "lid" +} +export type MessageWithContextInfo = 'imageMessage' | 'contactMessage' | 'locationMessage' | 'extendedTextMessage' | 'documentMessage' | 'audioMessage' | 'videoMessage' | 'call' | 'contactsArrayMessage' | 'liveLocationMessage' | 'templateMessage' | 'stickerMessage' | 'groupInviteMessage' | 'templateButtonReplyMessage' | 'productMessage' | 'listMessage' | 'orderMessage' | 'listResponseMessage' | 'buttonsMessage' | 'buttonsResponseMessage' | 'interactiveMessage' | 'interactiveResponseMessage' | 'pollCreationMessage' | 'requestPhoneNumberMessage' | 'messageHistoryBundle' | 'eventMessage' | 'newsletterAdminInviteMessage' | 'albumMessage' | 'stickerPackMessage' | 'pollResultSnapshotMessage' | 'messageHistoryNotice'; +export type DownloadableMessage = { + mediaKey?: Uint8Array | null; + directPath?: string | null; + url?: string | null; +}; +export type MessageReceiptType = 'read' | 'read-self' | 'hist_sync' | 'peer_msg' | 'sender' | 'inactive' | 'played' | undefined; +export type MediaConnInfo = { + auth: string; + ttl: number; + hosts: { + hostname: string; + maxContentLengthBytes: number; + }[]; + fetchDate: Date; +}; +export interface WAUrlInfo { + 'canonical-url': string; + 'matched-text': string; + title: string; + description?: string; + jpegThumbnail?: Buffer; + highQualityThumbnail?: proto.Message.IImageMessage; + originalThumbnailUrl?: string; +} +type Mentionable = { + /** list of jids that are mentioned in the accompanying text */ + mentions?: string[]; + /** mention all */ + mentionAll?: boolean; +}; +type Contextable = { + /** add contextInfo to the message */ + contextInfo?: proto.IContextInfo; +}; +type ViewOnce = { + viewOnce?: boolean; +}; +type Editable = { + edit?: WAMessageKey; +}; +type WithDimensions = { + width?: number; + height?: number; +}; +export type PollMessageOptions = { + name: string; + selectableCount?: number; + values: string[]; + /** 32 byte message secret to encrypt poll selections */ + messageSecret?: Uint8Array; + toAnnouncementGroup?: boolean; +}; +export type EventMessageOptions = { + name: string; + description?: string; + startDate: Date; + endDate?: Date; + location?: WALocationMessage; + call?: 'audio' | 'video'; + isCancelled?: boolean; + isScheduleCall?: boolean; + extraGuestsAllowed?: boolean; + messageSecret?: Uint8Array; +}; +export type AlbumMessageOptions = { + /** Number of images expected in the album */ + expectedImageCount?: number; + /** Number of videos expected in the album */ + expectedVideoCount?: number; +}; +type SharePhoneNumber = { + sharePhoneNumber: boolean; +}; +type RequestPhoneNumber = { + requestPhoneNumber: boolean; +}; +export type AnyMediaMessageContent = (({ + image: WAMediaUpload; + caption?: string; + jpegThumbnail?: string; +} & Mentionable & Contextable & WithDimensions) | ({ + video: WAMediaUpload; + caption?: string; + gifPlayback?: boolean; + jpegThumbnail?: string; + /** if set to true, will send as a `video note` */ + ptv?: boolean; +} & Mentionable & Contextable & WithDimensions) | { + audio: WAMediaUpload; + /** if set to true, will send as a `voice note` */ + ptt?: boolean; + /** optionally tell the duration of the audio */ + seconds?: number; +} | ({ + sticker: WAMediaUpload; + isAnimated?: boolean; +} & WithDimensions) | ({ + document: WAMediaUpload; + mimetype: string; + fileName?: string; + caption?: string; +} & Contextable)) & { + mimetype?: string; +} & Editable & { + /** key of the parent albumMessage to associate this media with */ + albumParentKey?: WAMessageKey; +}; +export type ButtonReplyInfo = { + displayText: string; + id: string; + index: number; +}; +export type GroupInviteInfo = { + inviteCode: string; + inviteExpiration: number; + text: string; + jid: string; + subject: string; +}; +export type WASendableProduct = Omit & { + productImage: WAMediaUpload; +}; +export type AnyRegularMessageContent = (({ + text: string; + linkPreview?: WAUrlInfo | null; +} & Mentionable & Contextable & Editable) | AnyMediaMessageContent | { + event: EventMessageOptions; +} | ({ + poll: PollMessageOptions; +} & Mentionable & Contextable & Editable) | ({ + album: AlbumMessageOptions; +} & Contextable & Mentionable) | { + contacts: { + displayName?: string; + contacts: proto.Message.IContactMessage[]; + }; +} | { + location: WALocationMessage; +} | { + react: proto.Message.IReactionMessage; +} | { + buttonReply: ButtonReplyInfo; + type: 'template' | 'plain'; +} | { + groupInvite: GroupInviteInfo; +} | { + listReply: Omit; +} | { + pin: WAMessageKey; + type: proto.PinInChat.Type; + /** + * 24 hours, 7 days, 30 days + */ + time?: 86400 | 604800 | 2592000; +} | { + product: WASendableProduct; + businessOwnerJid?: string; + body?: string; + footer?: string; +} | SharePhoneNumber | RequestPhoneNumber) & ViewOnce; +export type AnyMessageContent = (AnyRegularMessageContent | { + forward: WAMessage; + force?: boolean; +} | { + /** Delete your message or anyone's message in a group (admin required) */ + delete: WAMessageKey; +} | { + disappearingMessagesInChat: boolean | number; +} | { + limitSharing: boolean; +}) & { + ai?: boolean; +}; +export type GroupMetadataParticipants = Pick; +type MinimalRelayOptions = { + /** override the message ID with a custom provided string */ + messageId?: string; + /** should we use group metadata cache, or fetch afresh from the server; default assumed to be "true" */ + useCachedGroupMetadata?: boolean; +}; +export type MessageRelayOptions = MinimalRelayOptions & { + /** only send to a specific participant; used when a message decryption fails for a single user */ + participant?: { + jid: string; + count: number; + }; + /** additional attributes to add to the WA binary node */ + additionalAttributes?: { + [_: string]: string; + }; + additionalNodes?: BinaryNode[]; + /** should we use the devices cache, or fetch afresh from the server; default assumed to be "true" */ + useUserDevicesCache?: boolean; + /** jid list of participants for status@broadcast */ + statusJidList?: string[]; +}; +export type MiscMessageGenerationOptions = MinimalRelayOptions & { + /** optional, if you want to manually set the timestamp of the message */ + timestamp?: Date; + /** the message you want to quote */ + quoted?: WAMessage; + /** disappearing messages settings */ + ephemeralExpiration?: number | string; + /** timeout for media upload to WA server */ + mediaUploadTimeoutMs?: number; + /** jid list of participants for status@broadcast */ + statusJidList?: string[]; + /** backgroundcolor for status */ + backgroundColor?: string; + /** font type for status */ + font?: number; + /** if it is broadcast */ + broadcast?: boolean; +}; +export type MessageGenerationOptionsFromContent = MiscMessageGenerationOptions & { + userJid: string; +}; +export type WAMediaUploadFunction = (encFilePath: string, opts: { + fileEncSha256B64: string; + mediaType: MediaType; + timeoutMs?: number; +}) => Promise<{ + mediaUrl: string; + directPath: string; + meta_hmac?: string; + ts?: number; + fbid?: number; +}>; +export type MediaGenerationOptions = { + logger?: ILogger; + mediaTypeOverride?: MediaType; + upload: WAMediaUploadFunction; + /** cache media so it does not have to be uploaded again */ + mediaCache?: CacheStore; + mediaUploadTimeoutMs?: number; + options?: RequestInit; + backgroundColor?: string; + font?: number; +}; +export type MessageContentGenerationOptions = MediaGenerationOptions & { + getUrlInfo?: (text: string) => Promise; + getProfilePicUrl?: (jid: string, type: 'image' | 'preview') => Promise; + getCallLink?: (type: 'audio' | 'video', event?: { + startTime: number; + }) => Promise; + jid?: string; +}; +export type MessageGenerationOptions = MessageContentGenerationOptions & MessageGenerationOptionsFromContent; +/** + * Type of message upsert + * 1. notify => notify the user, this message was just received + * 2. append => append the message to the chat history, no notification required + */ +export type MessageUpsertType = 'append' | 'notify'; +export type MessageUserReceipt = proto.IUserReceipt; +export type WAMessageUpdate = { + update: Partial; + key: WAMessageKey; +}; +export type WAMessageCursor = { + before: WAMessageKey | undefined; +} | { + after: WAMessageKey | undefined; +}; +export type MessageUserReceiptUpdate = { + key: WAMessageKey; + receipt: MessageUserReceipt; +}; +export type MediaDecryptionKeyInfo = { + iv: Uint8Array; + cipherKey: Uint8Array; + macKey?: Uint8Array; +}; +export type MinimalMessage = Pick; +//# sourceMappingURL=Message.d.ts.map diff --git a/packages/transport/vendor/lib/Types/Message.d.ts.map b/packages/transport/vendor/lib/Types/Message.d.ts.map new file mode 100644 index 0000000..5e51a91 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Message.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/Types/Message.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Message.js b/packages/transport/vendor/lib/Types/Message.js new file mode 100644 index 0000000..7dc6cb5 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Message.js @@ -0,0 +1,11 @@ +import { proto } from '../../WAProto/index.js'; +// export the WAMessage Prototypes +export { proto as WAProto }; +export const WAMessageStubType = proto.WebMessageInfo.StubType; +export const WAMessageStatus = proto.WebMessageInfo.Status; +export var WAMessageAddressingMode; +(function (WAMessageAddressingMode) { + WAMessageAddressingMode["PN"] = "pn"; + WAMessageAddressingMode["LID"] = "lid"; +})(WAMessageAddressingMode || (WAMessageAddressingMode = {})); +//# sourceMappingURL=Message.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Message.js.map b/packages/transport/vendor/lib/Types/Message.js.map new file mode 100644 index 0000000..f9b38ac --- /dev/null +++ b/packages/transport/vendor/lib/Types/Message.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/Types/Message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAM9C,kCAAkC;AAClC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,CAAA;AA4B3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAA;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAA;AAQ1D,MAAM,CAAN,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IAClC,oCAAS,CAAA;IACT,sCAAW,CAAA;AACZ,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,QAGlC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Mex.d.ts b/packages/transport/vendor/lib/Types/Mex.d.ts new file mode 100644 index 0000000..b592148 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Mex.d.ts @@ -0,0 +1,141 @@ +export declare enum XWAPaths { + xwa2_newsletter_create = "xwa2_newsletter_create", + xwa2_newsletter_subscribers = "xwa2_newsletter_subscribers", + xwa2_newsletter_view = "xwa2_newsletter_view", + xwa2_newsletter_metadata = "xwa2_newsletter", + xwa2_newsletter_admin_count = "xwa2_newsletter_admin", + xwa2_newsletter_mute_v2 = "xwa2_newsletter_mute_v2", + xwa2_newsletter_unmute_v2 = "xwa2_newsletter_unmute_v2", + xwa2_newsletter_follow = "xwa2_newsletter_follow", + xwa2_newsletter_unfollow = "xwa2_newsletter_unfollow", + xwa2_newsletter_join_v2 = "xwa2_newsletter_join_v2", + xwa2_newsletter_leave_v2 = "xwa2_newsletter_leave_v2", + xwa2_newsletter_change_owner = "xwa2_newsletter_change_owner", + xwa2_newsletter_demote = "xwa2_newsletter_demote", + xwa2_newsletter_delete_v2 = "xwa2_newsletter_delete_v2", + xwa2_fetch_account_reachout_timelock = "xwa2_fetch_account_reachout_timelock", + xwa2_message_capping_info = "xwa2_message_capping_info" +} +export declare enum QueryIds { + CREATE = "8823471724422422", + UPDATE_METADATA = "24250201037901610", + METADATA = "6563316087068696", + SUBSCRIBERS = "9783111038412085", + FOLLOW = "24404358912487870", + UNFOLLOW = "9767147403369991", + MUTE = "29766401636284406", + UNMUTE = "9864994326891137", + ADMIN_COUNT = "7130823597031706", + CHANGE_OWNER = "7341777602580933", + DEMOTE = "6551828931592903", + DELETE = "30062808666639665", + REACHOUT_TIMELOCK = "23983697327930364", + MESSAGE_CAPPING_INFO = "24503548349331633" +} +export type NewsletterUpdate = { + name?: string; + description?: string; + picture?: string; +}; +export interface NewsletterCreateResponse { + id: string; + state: { + type: string; + }; + thread_metadata: { + creation_time: string; + description: { + id: string; + text: string; + update_time: string; + }; + handle: string | null; + invite: string; + name: { + id: string; + text: string; + update_time: string; + }; + picture: { + direct_path: string; + id: string; + type: string; + }; + preview: { + direct_path: string; + id: string; + type: string; + }; + subscribers_count: string; + verification: 'VERIFIED' | 'UNVERIFIED'; + }; + viewer_metadata: { + mute: 'ON' | 'OFF'; + role: NewsletterViewRole; + }; +} +export interface NewsletterCreateResponse { + id: string; + state: { + type: string; + }; + thread_metadata: { + creation_time: string; + description: { + id: string; + text: string; + update_time: string; + }; + handle: string | null; + invite: string; + name: { + id: string; + text: string; + update_time: string; + }; + picture: { + direct_path: string; + id: string; + type: string; + }; + preview: { + direct_path: string; + id: string; + type: string; + }; + subscribers_count: string; + verification: 'VERIFIED' | 'UNVERIFIED'; + }; + viewer_metadata: { + mute: 'ON' | 'OFF'; + role: NewsletterViewRole; + }; +} +export type NewsletterViewRole = 'ADMIN' | 'GUEST' | 'OWNER' | 'SUBSCRIBER'; +export interface NewsletterMetadata { + id: string; + owner?: string; + name: string; + description?: string; + invite?: string; + creation_time?: number; + subscribers?: number; + picture?: { + url?: string; + directPath?: string; + mediaKey?: string; + id?: string; + }; + verification?: 'VERIFIED' | 'UNVERIFIED'; + reaction_codes?: { + code: string; + count: number; + }[]; + mute_state?: 'ON' | 'OFF'; + thread_metadata?: { + creation_time?: number; + name?: string; + description?: string; + }; +} +//# sourceMappingURL=Mex.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Mex.d.ts.map b/packages/transport/vendor/lib/Types/Mex.d.ts.map new file mode 100644 index 0000000..d0694c6 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Mex.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Mex.d.ts","sourceRoot":"","sources":["../../src/Types/Mex.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Mex.js b/packages/transport/vendor/lib/Types/Mex.js new file mode 100644 index 0000000..b69e619 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Mex.js @@ -0,0 +1,37 @@ +export var XWAPaths; +(function (XWAPaths) { + XWAPaths["xwa2_newsletter_create"] = "xwa2_newsletter_create"; + XWAPaths["xwa2_newsletter_subscribers"] = "xwa2_newsletter_subscribers"; + XWAPaths["xwa2_newsletter_view"] = "xwa2_newsletter_view"; + XWAPaths["xwa2_newsletter_metadata"] = "xwa2_newsletter"; + XWAPaths["xwa2_newsletter_admin_count"] = "xwa2_newsletter_admin"; + XWAPaths["xwa2_newsletter_mute_v2"] = "xwa2_newsletter_mute_v2"; + XWAPaths["xwa2_newsletter_unmute_v2"] = "xwa2_newsletter_unmute_v2"; + XWAPaths["xwa2_newsletter_follow"] = "xwa2_newsletter_follow"; + XWAPaths["xwa2_newsletter_unfollow"] = "xwa2_newsletter_unfollow"; + XWAPaths["xwa2_newsletter_join_v2"] = "xwa2_newsletter_join_v2"; + XWAPaths["xwa2_newsletter_leave_v2"] = "xwa2_newsletter_leave_v2"; + XWAPaths["xwa2_newsletter_change_owner"] = "xwa2_newsletter_change_owner"; + XWAPaths["xwa2_newsletter_demote"] = "xwa2_newsletter_demote"; + XWAPaths["xwa2_newsletter_delete_v2"] = "xwa2_newsletter_delete_v2"; + XWAPaths["xwa2_fetch_account_reachout_timelock"] = "xwa2_fetch_account_reachout_timelock"; + XWAPaths["xwa2_message_capping_info"] = "xwa2_message_capping_info"; +})(XWAPaths || (XWAPaths = {})); +export var QueryIds; +(function (QueryIds) { + QueryIds["CREATE"] = "8823471724422422"; + QueryIds["UPDATE_METADATA"] = "24250201037901610"; + QueryIds["METADATA"] = "6563316087068696"; + QueryIds["SUBSCRIBERS"] = "9783111038412085"; + QueryIds["FOLLOW"] = "24404358912487870"; + QueryIds["UNFOLLOW"] = "9767147403369991"; + QueryIds["MUTE"] = "29766401636284406"; + QueryIds["UNMUTE"] = "9864994326891137"; + QueryIds["ADMIN_COUNT"] = "7130823597031706"; + QueryIds["CHANGE_OWNER"] = "7341777602580933"; + QueryIds["DEMOTE"] = "6551828931592903"; + QueryIds["DELETE"] = "30062808666639665"; + QueryIds["REACHOUT_TIMELOCK"] = "23983697327930364"; + QueryIds["MESSAGE_CAPPING_INFO"] = "24503548349331633"; +})(QueryIds || (QueryIds = {})); +//# sourceMappingURL=Mex.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Mex.js.map b/packages/transport/vendor/lib/Types/Mex.js.map new file mode 100644 index 0000000..077183e --- /dev/null +++ b/packages/transport/vendor/lib/Types/Mex.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Mex.js","sourceRoot":"","sources":["../../src/Types/Mex.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAiBX;AAjBD,WAAY,QAAQ;IACnB,6DAAiD,CAAA;IACjD,uEAA2D,CAAA;IAC3D,yDAA6C,CAAA;IAC7C,wDAA4C,CAAA;IAC5C,iEAAqD,CAAA;IACrD,+DAAmD,CAAA;IACnD,mEAAuD,CAAA;IACvD,6DAAiD,CAAA;IACjD,iEAAqD,CAAA;IACrD,+DAAmD,CAAA;IACnD,iEAAqD,CAAA;IACrD,yEAA6D,CAAA;IAC7D,6DAAiD,CAAA;IACjD,mEAAuD,CAAA;IACvD,yFAA6E,CAAA;IAC7E,mEAAuD,CAAA;AACxD,CAAC,EAjBW,QAAQ,KAAR,QAAQ,QAiBnB;AAED,MAAM,CAAN,IAAY,QAeX;AAfD,WAAY,QAAQ;IACnB,uCAA2B,CAAA;IAC3B,iDAAqC,CAAA;IACrC,yCAA6B,CAAA;IAC7B,4CAAgC,CAAA;IAChC,wCAA4B,CAAA;IAC5B,yCAA6B,CAAA;IAC7B,sCAA0B,CAAA;IAC1B,uCAA2B,CAAA;IAC3B,4CAAgC,CAAA;IAChC,6CAAiC,CAAA;IACjC,uCAA2B,CAAA;IAC3B,wCAA4B,CAAA;IAC5B,mDAAuC,CAAA;IACvC,sDAA0C,CAAA;AAC3C,CAAC,EAfW,QAAQ,KAAR,QAAQ,QAenB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Product.d.ts b/packages/transport/vendor/lib/Types/Product.d.ts new file mode 100644 index 0000000..a611ede --- /dev/null +++ b/packages/transport/vendor/lib/Types/Product.d.ts @@ -0,0 +1,79 @@ +import type { WAMediaUpload } from './Message.js'; +export type CatalogResult = { + data: { + paging: { + cursors: { + before: string; + after: string; + }; + }; + data: any[]; + }; +}; +export type ProductCreateResult = { + data: { + product: {}; + }; +}; +export type CatalogStatus = { + status: string; + canAppeal: boolean; +}; +export type CatalogCollection = { + id: string; + name: string; + products: Product[]; + status: CatalogStatus; +}; +export type ProductAvailability = 'in stock'; +export type ProductBase = { + name: string; + retailerId?: string; + url?: string; + description: string; + price: number; + currency: string; + isHidden?: boolean; +}; +export type ProductCreate = ProductBase & { + /** ISO country code for product origin. Set to undefined for no country */ + originCountryCode: string | undefined; + /** images of the product */ + images: WAMediaUpload[]; +}; +export type ProductUpdate = Omit; +export type Product = ProductBase & { + id: string; + imageUrls: { + [_: string]: string; + }; + reviewStatus: { + [_: string]: string; + }; + availability: ProductAvailability; +}; +export type OrderPrice = { + currency: string; + total: number; +}; +export type OrderProduct = { + id: string; + imageUrl: string; + name: string; + quantity: number; + currency: string; + price: number; +}; +export type OrderDetails = { + price: OrderPrice; + products: OrderProduct[]; +}; +export type CatalogCursor = string; +export type GetCatalogOptions = { + /** cursor to start from */ + cursor?: CatalogCursor; + /** number of products to fetch */ + limit?: number; + jid?: string; +}; +//# sourceMappingURL=Product.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Product.d.ts.map b/packages/transport/vendor/lib/Types/Product.d.ts.map new file mode 100644 index 0000000..5accd93 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Product.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../src/Types/Product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAE9C,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE;QACL,MAAM,EAAE;YAAE,OAAO,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAA;QAEtD,IAAI,EAAE,GAAG,EAAE,CAAA;KACX,CAAA;CACD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE;QAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB,MAAM,EAAE,aAAa,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAA;AAE5C,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IACzC,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,4BAA4B;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAA;AAEpE,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAClC,YAAY,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IACrC,YAAY,EAAE,mBAAmB,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAEhB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAA;AAElC,MAAM,MAAM,iBAAiB,GAAG;IAC/B,2BAA2B;IAC3B,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,GAAG,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Product.js b/packages/transport/vendor/lib/Types/Product.js new file mode 100644 index 0000000..b8e9fe4 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Product.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=Product.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Product.js.map b/packages/transport/vendor/lib/Types/Product.js.map new file mode 100644 index 0000000..ef738da --- /dev/null +++ b/packages/transport/vendor/lib/Types/Product.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Product.js","sourceRoot":"","sources":["../../src/Types/Product.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Signal.d.ts b/packages/transport/vendor/lib/Types/Signal.d.ts new file mode 100644 index 0000000..00e3cda --- /dev/null +++ b/packages/transport/vendor/lib/Types/Signal.d.ts @@ -0,0 +1,87 @@ +import { proto } from '../../WAProto/index.js'; +import type { LIDMappingStore } from '../Signal/lid-mapping.js'; +type DecryptGroupSignalOpts = { + group: string; + authorJid: string; + msg: Uint8Array; +}; +type ProcessSenderKeyDistributionMessageOpts = { + item: proto.Message.ISenderKeyDistributionMessage; + authorJid: string; +}; +type DecryptSignalProtoOpts = { + jid: string; + type: 'pkmsg' | 'msg'; + ciphertext: Uint8Array; +}; +type EncryptMessageOpts = { + jid: string; + data: Uint8Array; +}; +type EncryptGroupMessageOpts = { + group: string; + data: Uint8Array; + meId: string; +}; +type GetSenderKeyDistributionMessageOpts = { + group: string; + meId: string; +}; +type PreKey = { + keyId: number; + publicKey: Uint8Array; +}; +type SignedPreKey = PreKey & { + signature: Uint8Array; +}; +type E2ESession = { + registrationId: number; + identityKey: Uint8Array; + signedPreKey: SignedPreKey; + preKey?: PreKey; +}; +type E2ESessionOpts = { + jid: string; + session: E2ESession; +}; +export type SignalRepository = { + decryptGroupMessage(opts: DecryptGroupSignalOpts): Promise; + processSenderKeyDistributionMessage(opts: ProcessSenderKeyDistributionMessageOpts): Promise; + decryptMessage(opts: DecryptSignalProtoOpts): Promise; + encryptMessage(opts: EncryptMessageOpts): Promise<{ + type: 'pkmsg' | 'msg'; + ciphertext: Uint8Array; + }>; + encryptGroupMessage(opts: EncryptGroupMessageOpts): Promise<{ + senderKeyDistributionMessage: Uint8Array; + ciphertext: Uint8Array; + }>; + getSenderKeyDistributionMessage(opts: GetSenderKeyDistributionMessageOpts): Promise; + hasSenderKey(opts: GetSenderKeyDistributionMessageOpts): Promise; + getSessionInfo(jid: string): Promise<{ + baseKey: Uint8Array; + registrationId: number; + } | null>; + injectE2ESession(opts: E2ESessionOpts): Promise; + validateSession(jid: string): Promise<{ + exists: boolean; + reason?: string; + }>; + jidToSignalProtocolAddress(jid: string): string; + migrateSession(fromJid: string, toJid: string): Promise<{ + migrated: number; + skipped: number; + total: number; + }>; + validateSession(jid: string): Promise<{ + exists: boolean; + reason?: string; + }>; + deleteSession(jids: string[]): Promise; +}; +export interface SignalRepositoryWithLIDStore extends SignalRepository { + lidMapping: LIDMappingStore; + close?: () => void; +} +export {}; +//# sourceMappingURL=Signal.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Signal.d.ts.map b/packages/transport/vendor/lib/Types/Signal.d.ts.map new file mode 100644 index 0000000..42ba259 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Signal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Signal.d.ts","sourceRoot":"","sources":["../../src/Types/Signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,KAAK,sBAAsB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,UAAU,CAAA;CACf,CAAA;AAED,KAAK,uCAAuC,GAAG;IAC9C,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,6BAA6B,CAAA;IACjD,SAAS,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,OAAO,GAAG,KAAK,CAAA;IACrB,UAAU,EAAE,UAAU,CAAA;CACtB,CAAA;AAED,KAAK,kBAAkB,GAAG;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,UAAU,CAAA;CAChB,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,KAAK,mCAAmC,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,KAAK,MAAM,GAAG;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,UAAU,CAAA;CACrB,CAAA;AAED,KAAK,YAAY,GAAG,MAAM,GAAG;IAC5B,SAAS,EAAE,UAAU,CAAA;CACrB,CAAA;AAED,KAAK,UAAU,GAAG;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,UAAU,CAAA;IACvB,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,cAAc,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,UAAU,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACtE,mCAAmC,CAAC,IAAI,EAAE,uCAAuC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjG,cAAc,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACjE,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC;QACjD,IAAI,EAAE,OAAO,GAAG,KAAK,CAAA;QACrB,UAAU,EAAE,UAAU,CAAA;KACtB,CAAC,CAAA;IACF,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC;QAC3D,4BAA4B,EAAE,UAAU,CAAA;QACxC,UAAU,EAAE,UAAU,CAAA;KACtB,CAAC,CAAA;IACF,+BAA+B,CAAC,IAAI,EAAE,mCAAmC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/F,YAAY,CAAC,IAAI,EAAE,mCAAmC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACzE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC5F,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IAC/C,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7G,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C,CAAA;AAGD,MAAM,WAAW,4BAA6B,SAAQ,gBAAgB;IACrE,UAAU,EAAE,eAAe,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CAClB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Signal.js b/packages/transport/vendor/lib/Types/Signal.js new file mode 100644 index 0000000..cfe3db4 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Signal.js @@ -0,0 +1,2 @@ +import { proto } from '../../WAProto/index.js'; +//# sourceMappingURL=Signal.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Signal.js.map b/packages/transport/vendor/lib/Types/Signal.js.map new file mode 100644 index 0000000..b741a60 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Signal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Signal.js","sourceRoot":"","sources":["../../src/Types/Signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Socket.d.ts b/packages/transport/vendor/lib/Types/Socket.d.ts new file mode 100644 index 0000000..f9623cb --- /dev/null +++ b/packages/transport/vendor/lib/Types/Socket.d.ts @@ -0,0 +1,136 @@ +import type { Agent } from 'https'; +import type { URL } from 'url'; +import { proto } from '../../WAProto/index.js'; +import type { ILogger } from '../Utils/logger.js'; +import type { AuthenticationState, LIDMapping, SignalAuthState, TransactionCapabilityOptions } from './Auth.js'; +import type { GroupMetadata } from './GroupMetadata.js'; +import { type MediaConnInfo, type WAMessageKey } from './Message.js'; +import type { SignalRepositoryWithLIDStore } from './Signal.js'; +export type WAVersion = [number, number, number]; +export type WABrowserDescription = [string, string, string]; +export type CacheStore = { + /** get a cached key and change the stats */ + get(key: string): Promise | T | undefined; + /** set a key in the cache */ + set(key: string, value: T): Promise | void | number | boolean; + /** delete a key from the cache */ + del(key: string): void | Promise | number | boolean; + /** flush all data */ + flushAll(): void | Promise; + close?: () => void; +}; +export type PossiblyExtendedCacheStore = CacheStore & { + mget?: (keys: string[]) => Promise>; + mset?: (entries: { + key: string; + value: T; + }[]) => Promise | void | number | boolean; + mdel?: (keys: string[]) => void | Promise | number | boolean; +}; +export type PatchedMessageWithRecipientJID = proto.IMessage & { + recipientJid?: string; +}; +export type SocketConfig = { + /** the WS url to connect to WA */ + waWebSocketUrl: string | URL; + /** Fails the connection if the socket times out in this interval */ + connectTimeoutMs: number; + /** Default timeout for queries, undefined for no timeout */ + defaultQueryTimeoutMs: number | undefined; + /** ping-pong interval for WS connection */ + keepAliveIntervalMs: number; + /** should baileys use the mobile api instead of the multi device api + * @deprecated This feature has been removed + */ + mobile?: boolean; + /** proxy agent */ + agent?: Agent; + /** logger */ + logger: ILogger; + /** version to connect with */ + version: WAVersion; + /** override browser config */ + browser: WABrowserDescription; + /** Initial pushName carried in the registration ClientPayload (used by mock servers for deterministic phone assignment). */ + pushName?: string; + /** agent used for fetch requests -- uploading/downloading media */ + fetchAgent?: Agent; + /** should the QR be printed in the terminal + * @deprecated This feature has been removed + */ + printQRInTerminal?: boolean; + /** should events be emitted for actions done by this socket connection */ + emitOwnEvents: boolean; + /** custom upload hosts to upload media to */ + customUploadHosts: MediaConnInfo['hosts']; + /** time to wait between sending new retry requests */ + retryRequestDelayMs: number; + /** max retry count */ + maxMsgRetryCount: number; + /** time to wait for the generation of the next QR in ms */ + qrTimeout?: number; + /** provide an auth state object to maintain the auth state */ + auth: AuthenticationState; + /** manage history processing with this control; by default will sync up everything */ + shouldSyncHistoryMessage: (msg: proto.Message.IHistorySyncNotification) => boolean; + /** transaction capability options for SignalKeyStore */ + transactionOpts: TransactionCapabilityOptions; + /** marks the client as online whenever the socket successfully connects */ + markOnlineOnConnect: boolean; + /** alphanumeric country code (USA -> US) for the number used */ + countryCode: string; + /** provide a cache to store media, so does not have to be re-uploaded */ + mediaCache?: CacheStore; + /** + * map to store the retry counts for failed messages; + * used to determine whether to retry a message or not */ + msgRetryCounterCache?: CacheStore; + /** provide a cache to store a user's device list */ + userDevicesCache?: PossiblyExtendedCacheStore; + /** cache to store call offers */ + callOfferCache?: CacheStore; + /** cache to track placeholder resends */ + placeholderResendCache?: CacheStore; + /** width for link preview images */ + linkPreviewImageThumbnailWidth: number; + /** Should Baileys ask the phone for full history, will be received async */ + syncFullHistory: boolean; + /** Should baileys fire init queries automatically, default true */ + fireInitQueries: boolean; + /** + * generate a high quality link preview, + * entails uploading the jpegThumbnail to WA + * */ + generateHighQualityLinkPreview: boolean; + /** Enable automatic session recreation for failed messages */ + enableAutoSessionRecreation: boolean; + /** Enable recent message caching for retry handling */ + enableRecentMessageCache: boolean; + /** + * Returns if a jid should be ignored, + * no event for that jid will be triggered. + * Messages from that jid will also not be decrypted + * */ + shouldIgnoreJid: (jid: string) => boolean | undefined; + /** + * Optionally patch the message before sending out + * */ + patchMessageBeforeSending: (msg: proto.IMessage, recipientJids?: string[]) => Promise | PatchedMessageWithRecipientJID[] | PatchedMessageWithRecipientJID; + /** verify app state MACs */ + appStateMacVerification: { + patch: boolean; + snapshot: boolean; + }; + /** options for HTTP fetch requests */ + options: RequestInit; + /** + * fetch a message from your store + * implement this so that messages failed to send + * (solves the "this message can take a while" issue) can be retried + * */ + getMessage: (key: WAMessageKey) => Promise; + /** cached group metadata, use to prevent redundant requests to WA & speed up msg sending */ + cachedGroupMetadata: (jid: string) => Promise; + makeSignalRepository: (auth: SignalAuthState, logger: ILogger, pnToLIDFunc?: (jids: string[]) => Promise) => SignalRepositoryWithLIDStore; +}; +//# sourceMappingURL=Socket.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Socket.d.ts.map b/packages/transport/vendor/lib/Types/Socket.d.ts.map new file mode 100644 index 0000000..b1e2c32 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Socket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Socket.d.ts","sourceRoot":"","sources":["../../src/Types/Socket.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Socket.js b/packages/transport/vendor/lib/Types/Socket.js new file mode 100644 index 0000000..33271c7 --- /dev/null +++ b/packages/transport/vendor/lib/Types/Socket.js @@ -0,0 +1,3 @@ +import { proto } from '../../WAProto/index.js'; +import {} from './Message.js'; +//# sourceMappingURL=Socket.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/Socket.js.map b/packages/transport/vendor/lib/Types/Socket.js.map new file mode 100644 index 0000000..ef0533e --- /dev/null +++ b/packages/transport/vendor/lib/Types/Socket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Socket.js","sourceRoot":"","sources":["../../src/Types/Socket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAI9C,OAAO,EAAyC,MAAM,WAAW,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/State.d.ts b/packages/transport/vendor/lib/Types/State.d.ts new file mode 100644 index 0000000..65595ab --- /dev/null +++ b/packages/transport/vendor/lib/Types/State.d.ts @@ -0,0 +1,97 @@ +import { Boom } from '@hapi/boom'; +import type { Contact } from './Contact.js'; +export declare enum SyncState { + /** The socket is connecting, but we haven't received pending notifications yet. */ + Connecting = 0, + /** Pending notifications received. Buffering events until we decide whether to sync or not. */ + AwaitingInitialSync = 1, + /** The initial app state sync (history, etc.) is in progress. Buffering continues. */ + Syncing = 2, + /** Initial sync is complete, or was skipped. The socket is fully operational and events are processed in real-time. */ + Online = 3 +} +export type WAConnectionState = 'open' | 'connecting' | 'close'; +export type ConnectionState = { + /** connection is now open, connecting or closed */ + connection: WAConnectionState; + /** the error that caused the connection to close */ + lastDisconnect?: { + error: Boom | Error | undefined; + date: Date; + }; + /** is this a new login */ + isNewLogin?: boolean; + /** the current QR code */ + qr?: string; + /** has the device received all pending notifications while it was offline */ + receivedPendingNotifications?: boolean; + /** legacy connection options */ + legacy?: { + phoneConnected: boolean; + user?: Contact; + }; + /** + * if the client is shown as an active, online client. + * If this is false, the primary phone and other devices will receive notifs + * */ + isOnline?: boolean; + /** + * When you are in this state, WhatsApp prevents outgoing messages and calls. + */ + reachoutTimeLock?: ReachoutTimelockState; +}; +export type ReachoutTimelockState = { + isActive?: boolean; + timeEnforcementEnds?: Date; + enforcementType?: ReachoutTimelockEnforcementType; +}; +export declare enum ReachoutTimelockEnforcementType { + BIZ_COMMERCE_VIOLATION_ALCOHOL = "BIZ_COMMERCE_VIOLATION_ALCOHOL", + BIZ_COMMERCE_VIOLATION_ADULT = "BIZ_COMMERCE_VIOLATION_ADULT", + BIZ_COMMERCE_VIOLATION_ANIMALS = "BIZ_COMMERCE_VIOLATION_ANIMALS", + BIZ_COMMERCE_VIOLATION_BODY_PARTS_FLUIDS = "BIZ_COMMERCE_VIOLATION_BODY_PARTS_FLUIDS", + BIZ_COMMERCE_VIOLATION_DATING = "BIZ_COMMERCE_VIOLATION_DATING", + BIZ_COMMERCE_VIOLATION_DIGITAL_SERVICES_PRODUCTS = "BIZ_COMMERCE_VIOLATION_DIGITAL_SERVICES_PRODUCTS", + BIZ_COMMERCE_VIOLATION_DRUGS = "BIZ_COMMERCE_VIOLATION_DRUGS", + BIZ_COMMERCE_VIOLATION_DRUGS_ONLY_OTC = "BIZ_COMMERCE_VIOLATION_DRUGS_ONLY_OTC", + BIZ_COMMERCE_VIOLATION_GAMBLING = "BIZ_COMMERCE_VIOLATION_GAMBLING", + BIZ_COMMERCE_VIOLATION_HEALTHCARE = "BIZ_COMMERCE_VIOLATION_HEALTHCARE", + BIZ_COMMERCE_VIOLATION_REAL_FAKE_CURRENCY = "BIZ_COMMERCE_VIOLATION_REAL_FAKE_CURRENCY", + BIZ_COMMERCE_VIOLATION_SUPPLEMENTS = "BIZ_COMMERCE_VIOLATION_SUPPLEMENTS", + BIZ_COMMERCE_VIOLATION_TOBACCO = "BIZ_COMMERCE_VIOLATION_TOBACCO", + BIZ_COMMERCE_VIOLATION_VIOLENT_CONTENT = "BIZ_COMMERCE_VIOLATION_VIOLENT_CONTENT", + BIZ_COMMERCE_VIOLATION_WEAPONS = "BIZ_COMMERCE_VIOLATION_WEAPONS", + BIZ_QUALITY = "BIZ_QUALITY", + /** This means there is no restriction */ + DEFAULT = "DEFAULT", + WEB_COMPANION_ONLY = "WEB_COMPANION_ONLY" +} +export declare enum NewChatMessageCappingStatusType { + NONE = "NONE", + FIRST_WARNING = "FIRST_WARNING", + SECOND_WARNING = "SECOND_WARNING", + CAPPED = "CAPPED" +} +export declare enum NewChatMessageCappingMVStatusType { + NOT_ELIGIBLE = "NOT_ELIGIBLE", + NOT_ACTIVE = "NOT_ACTIVE", + ACTIVE = "ACTIVE", + ACTIVE_UPGRADE_AVAILABLE = "ACTIVE_UPGRADE_AVAILABLE" +} +export declare enum NewChatMessageCappingOTEStatusType { + NOT_ELIGIBLE = "NOT_ELIGIBLE", + ELIGIBLE = "ELIGIBLE", + ACTIVE_IN_CURRENT_CYCLE = "ACTIVE_IN_CURRENT_CYCLE", + EXHAUSTED = "EXHAUSTED" +} +export type NewChatMessageCapInfo = { + total_quota?: number; + used_quota?: number; + cycle_start_timestamp?: string; + cycle_end_timestamp?: string; + server_sent_timestamp?: string; + ote_status?: NewChatMessageCappingOTEStatusType; + mv_status?: NewChatMessageCappingMVStatusType; + capping_status?: NewChatMessageCappingStatusType; +}; +//# sourceMappingURL=State.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/State.d.ts.map b/packages/transport/vendor/lib/Types/State.d.ts.map new file mode 100644 index 0000000..84c5848 --- /dev/null +++ b/packages/transport/vendor/lib/Types/State.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../src/Types/State.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,oBAAY,SAAS;IACpB,mFAAmF;IACnF,UAAU,IAAA;IACV,+FAA+F;IAC/F,mBAAmB,IAAA;IACnB,sFAAsF;IACtF,OAAO,IAAA;IACP,uHAAuH;IACvH,MAAM,IAAA;CACN;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,CAAA;AAE/D,MAAM,MAAM,eAAe,GAAG;IAC7B,mDAAmD;IACnD,UAAU,EAAE,iBAAiB,CAAA;IAE7B,oDAAoD;IACpD,cAAc,CAAC,EAAE;QAEhB,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS,CAAA;QAC/B,IAAI,EAAE,IAAI,CAAA;KACV,CAAA;IACD,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,0BAA0B;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,6EAA6E;IAC7E,4BAA4B,CAAC,EAAE,OAAO,CAAA;IACtC,gCAAgC;IAChC,MAAM,CAAC,EAAE;QACR,cAAc,EAAE,OAAO,CAAA;QACvB,IAAI,CAAC,EAAE,OAAO,CAAA;KACd,CAAA;IACD;;;SAGK;IACL,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mBAAmB,CAAC,EAAE,IAAI,CAAA;IAC1B,eAAe,CAAC,EAAE,+BAA+B,CAAA;CACjD,CAAA;AAED,oBAAY,+BAA+B;IAC1C,8BAA8B,mCAAmC;IACjE,4BAA4B,iCAAiC;IAC7D,8BAA8B,mCAAmC;IACjE,wCAAwC,6CAA6C;IACrF,6BAA6B,kCAAkC;IAC/D,gDAAgD,qDAAqD;IACrG,4BAA4B,iCAAiC;IAC7D,qCAAqC,0CAA0C;IAC/E,+BAA+B,oCAAoC;IACnE,iCAAiC,sCAAsC;IACvE,yCAAyC,8CAA8C;IACvF,kCAAkC,uCAAuC;IACzE,8BAA8B,mCAAmC;IACjE,sCAAsC,2CAA2C;IACjF,8BAA8B,mCAAmC;IACjE,WAAW,gBAAgB;IAC3B,yCAAyC;IACzC,OAAO,YAAY;IACnB,kBAAkB,uBAAuB;CACzC;AAED,oBAAY,+BAA+B;IAC1C,IAAI,SAAS;IACb,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,MAAM,WAAW;CACjB;AAED,oBAAY,iCAAiC;IAC5C,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,wBAAwB,6BAA6B;CACrD;AAED,oBAAY,kCAAkC;IAC7C,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,uBAAuB,4BAA4B;IACnD,SAAS,cAAc;CACvB;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,UAAU,CAAC,EAAE,kCAAkC,CAAA;IAC/C,SAAS,CAAC,EAAE,iCAAiC,CAAA;IAC7C,cAAc,CAAC,EAAE,+BAA+B,CAAA;CAChD,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/State.js b/packages/transport/vendor/lib/Types/State.js new file mode 100644 index 0000000..cb5c83a --- /dev/null +++ b/packages/transport/vendor/lib/Types/State.js @@ -0,0 +1,56 @@ +import { Boom } from '@hapi/boom'; +export var SyncState; +(function (SyncState) { + /** The socket is connecting, but we haven't received pending notifications yet. */ + SyncState[SyncState["Connecting"] = 0] = "Connecting"; + /** Pending notifications received. Buffering events until we decide whether to sync or not. */ + SyncState[SyncState["AwaitingInitialSync"] = 1] = "AwaitingInitialSync"; + /** The initial app state sync (history, etc.) is in progress. Buffering continues. */ + SyncState[SyncState["Syncing"] = 2] = "Syncing"; + /** Initial sync is complete, or was skipped. The socket is fully operational and events are processed in real-time. */ + SyncState[SyncState["Online"] = 3] = "Online"; +})(SyncState || (SyncState = {})); +export var ReachoutTimelockEnforcementType; +(function (ReachoutTimelockEnforcementType) { + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_ALCOHOL"] = "BIZ_COMMERCE_VIOLATION_ALCOHOL"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_ADULT"] = "BIZ_COMMERCE_VIOLATION_ADULT"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_ANIMALS"] = "BIZ_COMMERCE_VIOLATION_ANIMALS"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_BODY_PARTS_FLUIDS"] = "BIZ_COMMERCE_VIOLATION_BODY_PARTS_FLUIDS"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_DATING"] = "BIZ_COMMERCE_VIOLATION_DATING"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_DIGITAL_SERVICES_PRODUCTS"] = "BIZ_COMMERCE_VIOLATION_DIGITAL_SERVICES_PRODUCTS"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_DRUGS"] = "BIZ_COMMERCE_VIOLATION_DRUGS"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_DRUGS_ONLY_OTC"] = "BIZ_COMMERCE_VIOLATION_DRUGS_ONLY_OTC"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_GAMBLING"] = "BIZ_COMMERCE_VIOLATION_GAMBLING"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_HEALTHCARE"] = "BIZ_COMMERCE_VIOLATION_HEALTHCARE"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_REAL_FAKE_CURRENCY"] = "BIZ_COMMERCE_VIOLATION_REAL_FAKE_CURRENCY"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_SUPPLEMENTS"] = "BIZ_COMMERCE_VIOLATION_SUPPLEMENTS"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_TOBACCO"] = "BIZ_COMMERCE_VIOLATION_TOBACCO"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_VIOLENT_CONTENT"] = "BIZ_COMMERCE_VIOLATION_VIOLENT_CONTENT"; + ReachoutTimelockEnforcementType["BIZ_COMMERCE_VIOLATION_WEAPONS"] = "BIZ_COMMERCE_VIOLATION_WEAPONS"; + ReachoutTimelockEnforcementType["BIZ_QUALITY"] = "BIZ_QUALITY"; + /** This means there is no restriction */ + ReachoutTimelockEnforcementType["DEFAULT"] = "DEFAULT"; + ReachoutTimelockEnforcementType["WEB_COMPANION_ONLY"] = "WEB_COMPANION_ONLY"; +})(ReachoutTimelockEnforcementType || (ReachoutTimelockEnforcementType = {})); +export var NewChatMessageCappingStatusType; +(function (NewChatMessageCappingStatusType) { + NewChatMessageCappingStatusType["NONE"] = "NONE"; + NewChatMessageCappingStatusType["FIRST_WARNING"] = "FIRST_WARNING"; + NewChatMessageCappingStatusType["SECOND_WARNING"] = "SECOND_WARNING"; + NewChatMessageCappingStatusType["CAPPED"] = "CAPPED"; +})(NewChatMessageCappingStatusType || (NewChatMessageCappingStatusType = {})); +export var NewChatMessageCappingMVStatusType; +(function (NewChatMessageCappingMVStatusType) { + NewChatMessageCappingMVStatusType["NOT_ELIGIBLE"] = "NOT_ELIGIBLE"; + NewChatMessageCappingMVStatusType["NOT_ACTIVE"] = "NOT_ACTIVE"; + NewChatMessageCappingMVStatusType["ACTIVE"] = "ACTIVE"; + NewChatMessageCappingMVStatusType["ACTIVE_UPGRADE_AVAILABLE"] = "ACTIVE_UPGRADE_AVAILABLE"; +})(NewChatMessageCappingMVStatusType || (NewChatMessageCappingMVStatusType = {})); +export var NewChatMessageCappingOTEStatusType; +(function (NewChatMessageCappingOTEStatusType) { + NewChatMessageCappingOTEStatusType["NOT_ELIGIBLE"] = "NOT_ELIGIBLE"; + NewChatMessageCappingOTEStatusType["ELIGIBLE"] = "ELIGIBLE"; + NewChatMessageCappingOTEStatusType["ACTIVE_IN_CURRENT_CYCLE"] = "ACTIVE_IN_CURRENT_CYCLE"; + NewChatMessageCappingOTEStatusType["EXHAUSTED"] = "EXHAUSTED"; +})(NewChatMessageCappingOTEStatusType || (NewChatMessageCappingOTEStatusType = {})); +//# sourceMappingURL=State.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/State.js.map b/packages/transport/vendor/lib/Types/State.js.map new file mode 100644 index 0000000..d64c99e --- /dev/null +++ b/packages/transport/vendor/lib/Types/State.js.map @@ -0,0 +1 @@ +{"version":3,"file":"State.js","sourceRoot":"","sources":["../../src/Types/State.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACpB,mFAAmF;IACnF,qDAAU,CAAA;IACV,+FAA+F;IAC/F,uEAAmB,CAAA;IACnB,sFAAsF;IACtF,+CAAO,CAAA;IACP,uHAAuH;IACvH,6CAAM,CAAA;AACP,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AA2CD,MAAM,CAAN,IAAY,+BAoBX;AApBD,WAAY,+BAA+B;IAC1C,oGAAiE,CAAA;IACjE,gGAA6D,CAAA;IAC7D,oGAAiE,CAAA;IACjE,wHAAqF,CAAA;IACrF,kGAA+D,CAAA;IAC/D,wIAAqG,CAAA;IACrG,gGAA6D,CAAA;IAC7D,kHAA+E,CAAA;IAC/E,sGAAmE,CAAA;IACnE,0GAAuE,CAAA;IACvE,0HAAuF,CAAA;IACvF,4GAAyE,CAAA;IACzE,oGAAiE,CAAA;IACjE,oHAAiF,CAAA;IACjF,oGAAiE,CAAA;IACjE,8DAA2B,CAAA;IAC3B,yCAAyC;IACzC,sDAAmB,CAAA;IACnB,4EAAyC,CAAA;AAC1C,CAAC,EApBW,+BAA+B,KAA/B,+BAA+B,QAoB1C;AAED,MAAM,CAAN,IAAY,+BAKX;AALD,WAAY,+BAA+B;IAC1C,gDAAa,CAAA;IACb,kEAA+B,CAAA;IAC/B,oEAAiC,CAAA;IACjC,oDAAiB,CAAA;AAClB,CAAC,EALW,+BAA+B,KAA/B,+BAA+B,QAK1C;AAED,MAAM,CAAN,IAAY,iCAKX;AALD,WAAY,iCAAiC;IAC5C,kEAA6B,CAAA;IAC7B,8DAAyB,CAAA;IACzB,sDAAiB,CAAA;IACjB,0FAAqD,CAAA;AACtD,CAAC,EALW,iCAAiC,KAAjC,iCAAiC,QAK5C;AAED,MAAM,CAAN,IAAY,kCAKX;AALD,WAAY,kCAAkC;IAC7C,mEAA6B,CAAA;IAC7B,2DAAqB,CAAA;IACrB,yFAAmD,CAAA;IACnD,6DAAuB,CAAA;AACxB,CAAC,EALW,kCAAkC,KAAlC,kCAAkC,QAK7C"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/USync.d.ts b/packages/transport/vendor/lib/Types/USync.d.ts new file mode 100644 index 0000000..6295c7e --- /dev/null +++ b/packages/transport/vendor/lib/Types/USync.d.ts @@ -0,0 +1,26 @@ +import type { BinaryNode } from '../WABinary/index.js'; +import { USyncUser } from '../WAUSync/index.js'; +/** + * Defines the interface for a USyncQuery protocol + */ +export interface USyncQueryProtocol { + /** + * The name of the protocol + */ + name: string; + /** + * Defines what goes inside the query part of a USyncQuery + */ + getQueryElement: () => BinaryNode; + /** + * Defines what goes inside the user part of a USyncQuery + */ + getUserElement: (user: USyncUser) => BinaryNode | null; + /** + * Parse the result of the query + * @param data Data from the result + * @returns Whatever the protocol is supposed to return + */ + parser: (data: BinaryNode) => unknown; +} +//# sourceMappingURL=USync.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/USync.d.ts.map b/packages/transport/vendor/lib/Types/USync.d.ts.map new file mode 100644 index 0000000..387e455 --- /dev/null +++ b/packages/transport/vendor/lib/Types/USync.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USync.d.ts","sourceRoot":"","sources":["../../src/Types/USync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,eAAe,EAAE,MAAM,UAAU,CAAA;IACjC;;OAEG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,UAAU,GAAG,IAAI,CAAA;IAEtD;;;;OAIG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAA;CACrC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/USync.js b/packages/transport/vendor/lib/Types/USync.js new file mode 100644 index 0000000..9111532 --- /dev/null +++ b/packages/transport/vendor/lib/Types/USync.js @@ -0,0 +1,2 @@ +import { USyncUser } from '../WAUSync/index.js'; +//# sourceMappingURL=USync.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/USync.js.map b/packages/transport/vendor/lib/Types/USync.js.map new file mode 100644 index 0000000..a8d3249 --- /dev/null +++ b/packages/transport/vendor/lib/Types/USync.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USync.js","sourceRoot":"","sources":["../../src/Types/USync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/index.d.ts b/packages/transport/vendor/lib/Types/index.d.ts new file mode 100644 index 0000000..fef6a2b --- /dev/null +++ b/packages/transport/vendor/lib/Types/index.d.ts @@ -0,0 +1,65 @@ +export * from './Auth.js'; +export * from './GroupMetadata.js'; +export * from './Chat.js'; +export * from './Contact.js'; +export * from './State.js'; +export * from './Message.js'; +export * from './Socket.js'; +export * from './Events.js'; +export * from './Product.js'; +export * from './Call.js'; +export * from './Signal.js'; +export * from './Mex.js'; +import type { AuthenticationState } from './Auth.js'; +import type { SocketConfig } from './Socket.js'; +export type UserFacingSocketConfig = Partial & { + auth: AuthenticationState; +}; +export type BrowsersMap = { + ubuntu(browser: string): [string, string, string]; + macOS(browser: string): [string, string, string]; + baileys(browser: string): [string, string, string]; + windows(browser: string): [string, string, string]; + appropriate(browser: string): [string, string, string]; +}; +export declare enum DisconnectReason { + connectionClosed = 428, + connectionLost = 408, + connectionReplaced = 440, + timedOut = 408, + loggedOut = 401, + badSession = 500, + restartRequired = 515, + multideviceMismatch = 411, + forbidden = 403, + unavailableService = 503 +} +export type WAInitResponse = { + ref: string; + ttl: number; + status: 200; +}; +export type WABusinessHoursConfig = { + day_of_week: string; + mode: string; + open_time?: number; + close_time?: number; +}; +export type WABusinessProfile = { + description: string; + email: string | undefined; + business_hours: { + timezone?: string; + config?: WABusinessHoursConfig[]; + business_config?: WABusinessHoursConfig[]; + }; + website: string[]; + category?: string; + wid?: string; + address?: string; +}; +export type CurveKeyPair = { + private: Uint8Array; + public: Uint8Array; +}; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/index.d.ts.map b/packages/transport/vendor/lib/Types/index.d.ts.map new file mode 100644 index 0000000..ed31ba0 --- /dev/null +++ b/packages/transport/vendor/lib/Types/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AAErB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAE1F,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAChD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACtD,CAAA;AAED,oBAAY,gBAAgB;IAC3B,gBAAgB,MAAM;IACtB,cAAc,MAAM;IACpB,kBAAkB,MAAM;IACxB,QAAQ,MAAM;IACd,SAAS,MAAM;IACf,UAAU,MAAM;IAChB,eAAe,MAAM;IACrB,mBAAmB,MAAM;IACzB,SAAS,MAAM;IACf,kBAAkB,MAAM;CACxB;AAED,MAAM,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,GAAG,CAAA;CACX,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,cAAc,EAAE;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAA;QAChC,eAAe,CAAC,EAAE,qBAAqB,EAAE,CAAA;KACzC,CAAA;IACD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/index.js b/packages/transport/vendor/lib/Types/index.js new file mode 100644 index 0000000..8aca032 --- /dev/null +++ b/packages/transport/vendor/lib/Types/index.js @@ -0,0 +1,26 @@ +export * from './Auth.js'; +export * from './GroupMetadata.js'; +export * from './Chat.js'; +export * from './Contact.js'; +export * from './State.js'; +export * from './Message.js'; +export * from './Socket.js'; +export * from './Events.js'; +export * from './Product.js'; +export * from './Call.js'; +export * from './Signal.js'; +export * from './Mex.js'; +export var DisconnectReason; +(function (DisconnectReason) { + DisconnectReason[DisconnectReason["connectionClosed"] = 428] = "connectionClosed"; + DisconnectReason[DisconnectReason["connectionLost"] = 408] = "connectionLost"; + DisconnectReason[DisconnectReason["connectionReplaced"] = 440] = "connectionReplaced"; + DisconnectReason[DisconnectReason["timedOut"] = 408] = "timedOut"; + DisconnectReason[DisconnectReason["loggedOut"] = 401] = "loggedOut"; + DisconnectReason[DisconnectReason["badSession"] = 500] = "badSession"; + DisconnectReason[DisconnectReason["restartRequired"] = 515] = "restartRequired"; + DisconnectReason[DisconnectReason["multideviceMismatch"] = 411] = "multideviceMismatch"; + DisconnectReason[DisconnectReason["forbidden"] = 403] = "forbidden"; + DisconnectReason[DisconnectReason["unavailableService"] = 503] = "unavailableService"; +})(DisconnectReason || (DisconnectReason = {})); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Types/index.js.map b/packages/transport/vendor/lib/Types/index.js.map new file mode 100644 index 0000000..5dbe554 --- /dev/null +++ b/packages/transport/vendor/lib/Types/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AAerB,MAAM,CAAN,IAAY,gBAWX;AAXD,WAAY,gBAAgB;IAC3B,iFAAsB,CAAA;IACtB,6EAAoB,CAAA;IACpB,qFAAwB,CAAA;IACxB,iEAAc,CAAA;IACd,mEAAe,CAAA;IACf,qEAAgB,CAAA;IAChB,+EAAqB,CAAA;IACrB,uFAAyB,CAAA;IACzB,mEAAe,CAAA;IACf,qFAAwB,CAAA;AACzB,CAAC,EAXW,gBAAgB,KAAhB,gBAAgB,QAW3B"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/auth-utils.d.ts b/packages/transport/vendor/lib/Utils/auth-utils.d.ts new file mode 100644 index 0000000..69d4d23 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/auth-utils.d.ts @@ -0,0 +1,24 @@ +import type { AuthenticationCreds, CacheStore, SignalKeyStore, SignalKeyStoreWithTransaction, TransactionCapabilityOptions } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +/** + * Adds caching capability to a SignalKeyStore + * @param store the store to add caching to + * @param logger to log trace events + * @param _cache cache store to use + */ +export declare function makeCacheableSignalKeyStore(store: SignalKeyStore, logger?: ILogger, _cache?: CacheStore): SignalKeyStore; +/** + * Adds DB-like transaction capability to the SignalKeyStore + * Uses AsyncLocalStorage for automatic context management + * @param state the key store to apply this capability to + * @param logger logger to log events + * @returns SignalKeyStore with transaction capability + */ +export declare const addTransactionCapability: (state: SignalKeyStore, logger: ILogger, { maxCommitRetries, delayBetweenTriesMs }: TransactionCapabilityOptions) => SignalKeyStoreWithTransaction; +/** + * Returns the authenticated user's JID, or throws a Boom-401 if creds are not yet authenticated. + * Use this anywhere we'd otherwise reach for `creds.me!.id` to fail fast with a descriptive error. + */ +export declare const assertMeId: (creds: AuthenticationCreds) => string; +export declare const initAuthCreds: () => AuthenticationCreds; +//# sourceMappingURL=auth-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/auth-utils.d.ts.map b/packages/transport/vendor/lib/Utils/auth-utils.d.ts.map new file mode 100644 index 0000000..996a716 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/auth-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"auth-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/auth-utils.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACX,mBAAmB,EACnB,UAAU,EAGV,cAAc,EACd,6BAA6B,EAC7B,4BAA4B,EAC5B,MAAM,UAAU,CAAA;AAGjB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAYvC;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,cAAc,EACrB,MAAM,CAAC,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,UAAU,GACjB,cAAc,CAkEhB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GACpC,OAAO,cAAc,EACrB,QAAQ,OAAO,EACf,2CAA2C,4BAA4B,KACrE,6BAiOF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,mBAAmB,KAAG,MAOvD,CAAA;AAED,eAAO,MAAM,aAAa,QAAO,mBAsBhC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/auth-utils.js b/packages/transport/vendor/lib/Utils/auth-utils.js new file mode 100644 index 0000000..24a3583 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/auth-utils.js @@ -0,0 +1,302 @@ +import NodeCache from '@cacheable/node-cache'; +import { Boom } from '@hapi/boom'; +import { AsyncLocalStorage } from 'async_hooks'; +import { Mutex } from 'async-mutex'; +import { randomBytes } from 'crypto'; +import PQueue from 'p-queue'; +import { DEFAULT_CACHE_TTLS } from '../Defaults/index.js'; +import { Curve, signedKeyPair } from './crypto.js'; +import { delay, generateRegistrationId } from './generics.js'; +import { PreKeyManager } from './pre-key-manager.js'; +/** + * Adds caching capability to a SignalKeyStore + * @param store the store to add caching to + * @param logger to log trace events + * @param _cache cache store to use + */ +export function makeCacheableSignalKeyStore(store, logger, _cache) { + const cache = _cache || + new NodeCache({ + stdTTL: DEFAULT_CACHE_TTLS.SIGNAL_STORE, // 5 minutes + useClones: false, + deleteOnExpire: true + }); + // Mutex for protecting cache operations + const cacheMutex = new Mutex(); + function getUniqueId(type, id) { + return `${type}.${id}`; + } + return { + async get(type, ids) { + return cacheMutex.runExclusive(async () => { + const data = {}; + const idsToFetch = []; + for (const id of ids) { + const item = (await cache.get(getUniqueId(type, id))); + if (typeof item !== 'undefined') { + data[id] = item; + } + else { + idsToFetch.push(id); + } + } + if (idsToFetch.length) { + logger?.trace({ items: idsToFetch.length }, 'loading from store'); + const fetched = await store.get(type, idsToFetch); + for (const id of idsToFetch) { + const item = fetched[id]; + if (item) { + data[id] = item; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + await cache.set(getUniqueId(type, id), item); + } + } + } + return data; + }); + }, + async set(data) { + return cacheMutex.runExclusive(async () => { + let keys = 0; + for (const type in data) { + for (const id in data[type]) { + await cache.set(getUniqueId(type, id), data[type][id]); + keys += 1; + } + } + logger?.trace({ keys }, 'updated cache'); + await store.set(data); + }); + }, + async clear() { + await cache.flushAll(); + await store.clear?.(); + } + }; +} +/** + * Adds DB-like transaction capability to the SignalKeyStore + * Uses AsyncLocalStorage for automatic context management + * @param state the key store to apply this capability to + * @param logger logger to log events + * @returns SignalKeyStore with transaction capability + */ +export const addTransactionCapability = (state, logger, { maxCommitRetries, delayBetweenTriesMs }) => { + const txStorage = new AsyncLocalStorage(); + // Queues for concurrency control (keyed by signal data type - bounded set) + const keyQueues = new Map(); + // Transaction mutexes with reference counting for cleanup + const txMutexes = new Map(); + const txMutexRefCounts = new Map(); + // Pre-key manager for specialized operations + const preKeyManager = new PreKeyManager(state, logger); + /** + * Get or create a queue for a specific key type + */ + function getQueue(key) { + if (!keyQueues.has(key)) { + keyQueues.set(key, new PQueue({ concurrency: 1 })); + } + return keyQueues.get(key); + } + /** + * Get or create a transaction mutex + */ + function getTxMutex(key) { + if (!txMutexes.has(key)) { + txMutexes.set(key, new Mutex()); + txMutexRefCounts.set(key, 0); + } + return txMutexes.get(key); + } + /** + * Acquire a reference to a transaction mutex + */ + function acquireTxMutexRef(key) { + const count = txMutexRefCounts.get(key) ?? 0; + txMutexRefCounts.set(key, count + 1); + } + /** + * Release a reference to a transaction mutex and cleanup if no longer needed + */ + function releaseTxMutexRef(key) { + const count = (txMutexRefCounts.get(key) ?? 1) - 1; + txMutexRefCounts.set(key, count); + // Cleanup if no more references and mutex is not locked + if (count <= 0) { + const mutex = txMutexes.get(key); + if (mutex && !mutex.isLocked()) { + txMutexes.delete(key); + txMutexRefCounts.delete(key); + } + } + } + /** + * Check if currently in a transaction + */ + function isInTransaction() { + return !!txStorage.getStore(); + } + /** + * Commit transaction with retries + */ + async function commitWithRetry(mutations) { + if (Object.keys(mutations).length === 0) { + logger.trace('no mutations in transaction'); + return; + } + logger.trace('committing transaction'); + for (let attempt = 0; attempt < maxCommitRetries; attempt++) { + try { + await state.set(mutations); + logger.trace({ mutationCount: Object.keys(mutations).length }, 'committed transaction'); + return; + } + catch (error) { + const retriesLeft = maxCommitRetries - attempt - 1; + logger.warn(`failed to commit mutations, retries left=${retriesLeft}`); + if (retriesLeft === 0) { + throw error; + } + await delay(delayBetweenTriesMs); + } + } + } + return { + get: async (type, ids) => { + const ctx = txStorage.getStore(); + if (!ctx) { + // No transaction - direct read without exclusive lock for concurrency + return state.get(type, ids); + } + // In transaction - check cache first + const cached = ctx.cache[type] || {}; + const missing = ids.filter(id => !(id in cached)); + if (missing.length > 0) { + ctx.dbQueries++; + logger.trace({ type, count: missing.length }, 'fetching missing keys in transaction'); + const fetched = await getTxMutex(type).runExclusive(() => state.get(type, missing)); + // Update cache + ctx.cache[type] = ctx.cache[type] || {}; + Object.assign(ctx.cache[type], fetched); + } + // Return requested ids from cache + const result = {}; + for (const id of ids) { + const value = ctx.cache[type]?.[id]; + if (value !== undefined && value !== null) { + result[id] = value; + } + } + return result; + }, + set: async (data) => { + const ctx = txStorage.getStore(); + if (!ctx) { + // No transaction - direct write with queue protection + const types = Object.keys(data); + // Process pre-keys with validation + for (const type_ of types) { + const type = type_; + if (type === 'pre-key') { + await preKeyManager.validateDeletions(data, type); + } + } + // Write all data in parallel + await Promise.all(types.map(type => getQueue(type).add(async () => { + const typeData = { [type]: data[type] }; + await state.set(typeData); + }))); + return; + } + // In transaction - update cache and mutations + logger.trace({ types: Object.keys(data) }, 'caching in transaction'); + for (const key_ in data) { + const key = key_; + // Ensure structures exist + ctx.cache[key] = ctx.cache[key] || {}; + ctx.mutations[key] = ctx.mutations[key] || {}; + // Special handling for pre-keys + if (key === 'pre-key') { + await preKeyManager.processOperations(data, key, ctx.cache, ctx.mutations, true); + } + else { + // Normal key types + Object.assign(ctx.cache[key], data[key]); + Object.assign(ctx.mutations[key], data[key]); + } + } + }, + isInTransaction, + transaction: async (work, key) => { + const existing = txStorage.getStore(); + // Nested transaction - reuse existing context + if (existing) { + logger.trace('reusing existing transaction context'); + return work(); + } + // New transaction - acquire mutex and create context + const mutex = getTxMutex(key); + acquireTxMutexRef(key); + try { + return await mutex.runExclusive(async () => { + const ctx = { + cache: {}, + mutations: {}, + dbQueries: 0 + }; + logger.trace('entering transaction'); + try { + const result = await txStorage.run(ctx, work); + // Commit mutations + await commitWithRetry(ctx.mutations); + logger.trace({ dbQueries: ctx.dbQueries }, 'transaction completed'); + return result; + } + catch (error) { + logger.error({ error }, 'transaction failed, rolling back'); + throw error; + } + }); + } + finally { + releaseTxMutexRef(key); + } + } + }; +}; +/** + * Returns the authenticated user's JID, or throws a Boom-401 if creds are not yet authenticated. + * Use this anywhere we'd otherwise reach for `creds.me!.id` to fail fast with a descriptive error. + */ +export const assertMeId = (creds) => { + const id = creds.me?.id; + if (!id) { + throw new Boom('Cannot proceed: socket is not authenticated yet (creds.me.id is missing)', { statusCode: 401 }); + } + return id; +}; +export const initAuthCreds = () => { + const identityKey = Curve.generateKeyPair(); + return { + noiseKey: Curve.generateKeyPair(), + pairingEphemeralKeyPair: Curve.generateKeyPair(), + signedIdentityKey: identityKey, + signedPreKey: signedKeyPair(identityKey, 1), + registrationId: generateRegistrationId(), + advSecretKey: randomBytes(32).toString('base64'), + processedHistoryMessages: [], + nextPreKeyId: 1, + firstUnuploadedPreKeyId: 1, + accountSyncCounter: 0, + accountSettings: { + unarchiveChats: false + }, + registered: false, + pairingCode: undefined, + lastPropHash: undefined, + routingInfo: undefined, + additionalData: undefined + }; +}; +//# sourceMappingURL=auth-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/auth-utils.js.map b/packages/transport/vendor/lib/Utils/auth-utils.js.map new file mode 100644 index 0000000..764ec67 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/auth-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auth-utils.js","sourceRoot":"","sources":["../../src/Utils/auth-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/browser-utils.d.ts b/packages/transport/vendor/lib/Utils/browser-utils.d.ts new file mode 100644 index 0000000..640274f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/browser-utils.d.ts @@ -0,0 +1,4 @@ +import type { BrowsersMap } from '../Types/index.js'; +export declare const Browsers: BrowsersMap; +export declare const getPlatformId: (browser: string) => string; +//# sourceMappingURL=browser-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/browser-utils.d.ts.map b/packages/transport/vendor/lib/Utils/browser-utils.d.ts.map new file mode 100644 index 0000000..ce6737d --- /dev/null +++ b/packages/transport/vendor/lib/Utils/browser-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"browser-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/browser-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAgB3C,eAAO,MAAM,QAAQ,EAAE,WAOtB,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,WAG5C,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/browser-utils.js b/packages/transport/vendor/lib/Utils/browser-utils.js new file mode 100644 index 0000000..5915c61 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/browser-utils.js @@ -0,0 +1,28 @@ +import { platform, release } from 'os'; +import { proto } from '../../WAProto/index.js'; +const PLATFORM_MAP = { + aix: 'AIX', + darwin: 'Mac OS', + win32: 'Windows', + android: 'Android', + freebsd: 'FreeBSD', + openbsd: 'OpenBSD', + sunos: 'Solaris', + linux: undefined, + haiku: undefined, + cygwin: undefined, + netbsd: undefined +}; +export const Browsers = { + ubuntu: browser => ['Ubuntu', browser, '22.04.4'], + macOS: browser => ['Mac OS', browser, '14.4.1'], + baileys: browser => ['Baileys', browser, '6.5.0'], + windows: browser => ['Windows', browser, '10.0.22631'], + /** The appropriate browser based on your OS & release */ + appropriate: browser => [PLATFORM_MAP[platform()] || 'Ubuntu', browser, release()] +}; +export const getPlatformId = (browser) => { + const platformType = proto.DeviceProps.PlatformType[browser.toUpperCase()]; + return platformType ? platformType.toString() : '1'; //chrome +}; +//# sourceMappingURL=browser-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/browser-utils.js.map b/packages/transport/vendor/lib/Utils/browser-utils.js.map new file mode 100644 index 0000000..91a14ef --- /dev/null +++ b/packages/transport/vendor/lib/Utils/browser-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser-utils.js","sourceRoot":"","sources":["../../src/Utils/browser-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAG9C,MAAM,YAAY,GAAG;IACpB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CACjB,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACpC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;IACjD,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;IACtD,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;CAClF,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAS,CAAC,CAAA;IACjF,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,CAAC,QAAQ;AAC7D,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/business.d.ts b/packages/transport/vendor/lib/Utils/business.d.ts new file mode 100644 index 0000000..2691b52 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/business.d.ts @@ -0,0 +1,23 @@ +import type { CatalogCollection, OrderDetails, Product, ProductCreate, ProductUpdate, WAMediaUpload, WAMediaUploadFunction } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +export declare const parseCatalogNode: (node: BinaryNode) => { + products: Product[]; + nextPageCursor: string | undefined; +}; +export declare const parseCollectionsNode: (node: BinaryNode) => { + collections: CatalogCollection[]; +}; +export declare const parseOrderDetailsNode: (node: BinaryNode) => OrderDetails; +export declare const toProductNode: (productId: string | undefined, product: ProductCreate | ProductUpdate) => BinaryNode; +export declare const parseProductNode: (productNode: BinaryNode) => Product; +/** + * Uploads images not already uploaded to WA's servers + */ +export declare function uploadingNecessaryImagesOfProduct(product: T, waUploadToServer: WAMediaUploadFunction, timeoutMs?: number): Promise; +/** + * Uploads images not already uploaded to WA's servers + */ +export declare const uploadingNecessaryImages: (images: WAMediaUpload[], waUploadToServer: WAMediaUploadFunction, timeoutMs?: number) => Promise<{ + url: string; +}[]>; +//# sourceMappingURL=business.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/business.d.ts.map b/packages/transport/vendor/lib/Utils/business.d.ts.map new file mode 100644 index 0000000..5015eb6 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/business.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"business.d.ts","sourceRoot":"","sources":["../../src/Utils/business.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,iBAAiB,EAEjB,YAAY,EAEZ,OAAO,EACP,aAAa,EACb,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,KAAK,UAAU,EAAuE,MAAM,aAAa,CAAA;AAIlH,eAAO,MAAM,gBAAgB,GAAI,MAAM,UAAU;;;CAShD,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,UAAU;;CAkBpD,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,MAAM,UAAU,iBAyBrD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,GAAG,SAAS,EAAE,SAAS,aAAa,GAAG,aAAa,eAwGlG,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,aAAa,UAAU,YAwBvD,CAAA;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EAC9F,OAAO,EAAE,CAAC,EACV,gBAAgB,EAAE,qBAAqB,EACvC,SAAS,SAAS,cASlB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,GACpC,QAAQ,aAAa,EAAE,EACvB,kBAAkB,qBAAqB,EACvC,kBAAkB;SAGS,MAAM;IAiCjC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/business.js b/packages/transport/vendor/lib/Utils/business.js new file mode 100644 index 0000000..e9e043f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/business.js @@ -0,0 +1,231 @@ +import { Boom } from '@hapi/boom'; +import { createHash } from 'crypto'; +import { createWriteStream, promises as fs } from 'fs'; +import { tmpdir } from 'os'; +import { join } from 'path'; +import { getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString } from '../WABinary/index.js'; +import { generateMessageIDV2 } from './generics.js'; +import { getStream, getUrlFromDirectPath } from './messages-media.js'; +export const parseCatalogNode = (node) => { + const catalogNode = getBinaryNodeChild(node, 'product_catalog'); + const products = getBinaryNodeChildren(catalogNode, 'product').map(parseProductNode); + const paging = getBinaryNodeChild(catalogNode, 'paging'); + return { + products, + nextPageCursor: paging ? getBinaryNodeChildString(paging, 'after') : undefined + }; +}; +export const parseCollectionsNode = (node) => { + const collectionsNode = getBinaryNodeChild(node, 'collections'); + const collections = getBinaryNodeChildren(collectionsNode, 'collection').map(collectionNode => { + const id = getBinaryNodeChildString(collectionNode, 'id'); + const name = getBinaryNodeChildString(collectionNode, 'name'); + const products = getBinaryNodeChildren(collectionNode, 'product').map(parseProductNode); + return { + id, + name, + products, + status: parseStatusInfo(collectionNode) + }; + }); + return { + collections + }; +}; +export const parseOrderDetailsNode = (node) => { + const orderNode = getBinaryNodeChild(node, 'order'); + const products = getBinaryNodeChildren(orderNode, 'product').map(productNode => { + const imageNode = getBinaryNodeChild(productNode, 'image'); + return { + id: getBinaryNodeChildString(productNode, 'id'), + name: getBinaryNodeChildString(productNode, 'name'), + imageUrl: getBinaryNodeChildString(imageNode, 'url'), + price: +getBinaryNodeChildString(productNode, 'price'), + currency: getBinaryNodeChildString(productNode, 'currency'), + quantity: +getBinaryNodeChildString(productNode, 'quantity') + }; + }); + const priceNode = getBinaryNodeChild(orderNode, 'price'); + const orderDetails = { + price: { + total: +getBinaryNodeChildString(priceNode, 'total'), + currency: getBinaryNodeChildString(priceNode, 'currency') + }, + products + }; + return orderDetails; +}; +export const toProductNode = (productId, product) => { + const attrs = {}; + const content = []; + if (typeof productId !== 'undefined') { + content.push({ + tag: 'id', + attrs: {}, + content: Buffer.from(productId) + }); + } + if (typeof product.name !== 'undefined') { + content.push({ + tag: 'name', + attrs: {}, + content: Buffer.from(product.name) + }); + } + if (typeof product.description !== 'undefined') { + content.push({ + tag: 'description', + attrs: {}, + content: Buffer.from(product.description) + }); + } + if (typeof product.retailerId !== 'undefined') { + content.push({ + tag: 'retailer_id', + attrs: {}, + content: Buffer.from(product.retailerId) + }); + } + if (product.images.length) { + content.push({ + tag: 'media', + attrs: {}, + content: product.images.map(img => { + if (!('url' in img)) { + throw new Boom('Expected img for product to already be uploaded', { statusCode: 400 }); + } + return { + tag: 'image', + attrs: {}, + content: [ + { + tag: 'url', + attrs: {}, + content: Buffer.from(img.url.toString()) + } + ] + }; + }) + }); + } + if (typeof product.price !== 'undefined') { + content.push({ + tag: 'price', + attrs: {}, + content: Buffer.from(product.price.toString()) + }); + } + if (typeof product.currency !== 'undefined') { + content.push({ + tag: 'currency', + attrs: {}, + content: Buffer.from(product.currency) + }); + } + if ('originCountryCode' in product) { + if (typeof product.originCountryCode === 'undefined') { + attrs['compliance_category'] = 'COUNTRY_ORIGIN_EXEMPT'; + } + else { + content.push({ + tag: 'compliance_info', + attrs: {}, + content: [ + { + tag: 'country_code_origin', + attrs: {}, + content: Buffer.from(product.originCountryCode) + } + ] + }); + } + } + if (typeof product.isHidden !== 'undefined') { + attrs['is_hidden'] = product.isHidden.toString(); + } + const node = { + tag: 'product', + attrs, + content + }; + return node; +}; +export const parseProductNode = (productNode) => { + const isHidden = productNode.attrs.is_hidden === 'true'; + const id = getBinaryNodeChildString(productNode, 'id'); + const mediaNode = getBinaryNodeChild(productNode, 'media'); + const statusInfoNode = getBinaryNodeChild(productNode, 'status_info'); + const product = { + id, + imageUrls: parseImageUrls(mediaNode), + reviewStatus: { + whatsapp: getBinaryNodeChildString(statusInfoNode, 'status') + }, + availability: 'in stock', + name: getBinaryNodeChildString(productNode, 'name'), + retailerId: getBinaryNodeChildString(productNode, 'retailer_id'), + url: getBinaryNodeChildString(productNode, 'url'), + description: getBinaryNodeChildString(productNode, 'description'), + price: +getBinaryNodeChildString(productNode, 'price'), + currency: getBinaryNodeChildString(productNode, 'currency'), + isHidden + }; + return product; +}; +/** + * Uploads images not already uploaded to WA's servers + */ +export async function uploadingNecessaryImagesOfProduct(product, waUploadToServer, timeoutMs = 30000) { + product = { + ...product, + images: product.images + ? await uploadingNecessaryImages(product.images, waUploadToServer, timeoutMs) + : product.images + }; + return product; +} +/** + * Uploads images not already uploaded to WA's servers + */ +export const uploadingNecessaryImages = async (images, waUploadToServer, timeoutMs = 30000) => { + const results = await Promise.all(images.map(async (img) => { + if ('url' in img) { + const url = img.url.toString(); + if (url.includes('.whatsapp.net')) { + return { url }; + } + } + const { stream } = await getStream(img); + const hasher = createHash('sha256'); + const filePath = join(tmpdir(), 'img' + generateMessageIDV2()); + const encFileWriteStream = createWriteStream(filePath); + for await (const block of stream) { + hasher.update(block); + encFileWriteStream.write(block); + } + const sha = hasher.digest('base64'); + const { directPath } = await waUploadToServer(filePath, { + mediaType: 'product-catalog-image', + fileEncSha256B64: sha, + timeoutMs + }); + await fs.unlink(filePath).catch(err => console.log('Error deleting temp file ', err)); + return { url: getUrlFromDirectPath(directPath) }; + })); + return results; +}; +const parseImageUrls = (mediaNode) => { + const imgNode = getBinaryNodeChild(mediaNode, 'image'); + return { + requested: getBinaryNodeChildString(imgNode, 'request_image_url'), + original: getBinaryNodeChildString(imgNode, 'original_image_url') + }; +}; +const parseStatusInfo = (mediaNode) => { + const node = getBinaryNodeChild(mediaNode, 'status_info'); + return { + status: getBinaryNodeChildString(node, 'status'), + canAppeal: getBinaryNodeChildString(node, 'can_appeal') === 'true' + }; +}; +//# sourceMappingURL=business.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/business.js.map b/packages/transport/vendor/lib/Utils/business.js.map new file mode 100644 index 0000000..30ad1c7 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/business.js.map @@ -0,0 +1 @@ +{"version":3,"file":"business.js","sourceRoot":"","sources":["../../src/Utils/business.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAY3B,OAAO,EAAmB,kBAAkB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAElE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAgB,EAAE,EAAE;IACpD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IACpF,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAExD,OAAO;QACN,QAAQ;QACR,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9E,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAgB,EAAE,EAAE;IACxD,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAC/D,MAAM,WAAW,GAAG,qBAAqB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,GAAG,CAAoB,cAAc,CAAC,EAAE;QAChH,MAAM,EAAE,GAAG,wBAAwB,CAAC,cAAc,EAAE,IAAI,CAAE,CAAA;QAC1D,MAAM,IAAI,GAAG,wBAAwB,CAAC,cAAc,EAAE,MAAM,CAAE,CAAA;QAE9D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACvF,OAAO;YACN,EAAE;YACF,IAAI;YACJ,QAAQ;YACR,MAAM,EAAE,eAAe,CAAC,cAAc,CAAC;SACvC,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,OAAO;QACN,WAAW;KACX,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAgB,EAAE,EAAE;IACzD,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACnD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,CAAe,WAAW,CAAC,EAAE;QAC5F,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAE,CAAA;QAC3D,OAAO;YACN,EAAE,EAAE,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAE;YAChD,IAAI,EAAE,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAE;YACpD,QAAQ,EAAE,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAE;YACrD,KAAK,EAAE,CAAC,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAE;YACvD,QAAQ,EAAE,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAE;YAC5D,QAAQ,EAAE,CAAC,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAE;SAC7D,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAExD,MAAM,YAAY,GAAiB;QAClC,KAAK,EAAE;YACN,KAAK,EAAE,CAAC,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAE;YACrD,QAAQ,EAAE,wBAAwB,CAAC,SAAS,EAAE,UAAU,CAAE;SAC1D;QACD,QAAQ;KACR,CAAA;IAED,OAAO,YAAY,CAAA;AACpB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAA6B,EAAE,OAAsC,EAAE,EAAE;IACtG,MAAM,KAAK,GAAwB,EAAE,CAAA;IACrC,MAAM,OAAO,GAAiB,EAAE,CAAA;IAEhC,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SAC/B,CAAC,CAAA;IACH,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAA;IACH,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;SACzC,CAAC,CAAA;IACH,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,CAAC,CAAA;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACjC,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,IAAI,IAAI,CAAC,iDAAiD,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;gBACvF,CAAC;gBAED,OAAO;oBACN,GAAG,EAAE,OAAO;oBACZ,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE;wBACR;4BACC,GAAG,EAAE,KAAK;4BACV,KAAK,EAAE,EAAE;4BACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;yBACxC;qBACD;iBACD,CAAA;YACF,CAAC,CAAC;SACF,CAAC,CAAA;IACH,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;SAC9C,CAAC,CAAA;IACH,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtC,CAAC,CAAA;IACH,CAAC;IAED,IAAI,mBAAmB,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,OAAO,OAAO,CAAC,iBAAiB,KAAK,WAAW,EAAE,CAAC;YACtD,KAAK,CAAC,qBAAqB,CAAC,GAAG,uBAAuB,CAAA;QACvD,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,iBAAiB;gBACtB,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE;oBACR;wBACC,GAAG,EAAE,qBAAqB;wBAC1B,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;qBAC/C;iBACD;aACD,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7C,KAAK,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAA;IACjD,CAAC;IAED,MAAM,IAAI,GAAe;QACxB,GAAG,EAAE,SAAS;QACd,KAAK;QACL,OAAO;KACP,CAAA;IACD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAuB,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAA;IACvD,MAAM,EAAE,GAAG,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAE,CAAA;IAEvD,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAE,CAAA;IAC3D,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,EAAE,aAAa,CAAE,CAAA;IAEtE,MAAM,OAAO,GAAY;QACxB,EAAE;QACF,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC;QACpC,YAAY,EAAE;YACb,QAAQ,EAAE,wBAAwB,CAAC,cAAc,EAAE,QAAQ,CAAE;SAC7D;QACD,YAAY,EAAE,UAAU;QACxB,IAAI,EAAE,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAE;QACpD,UAAU,EAAE,wBAAwB,CAAC,WAAW,EAAE,aAAa,CAAC;QAChE,GAAG,EAAE,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC;QACjD,WAAW,EAAE,wBAAwB,CAAC,WAAW,EAAE,aAAa,CAAE;QAClE,KAAK,EAAE,CAAC,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAE;QACvD,QAAQ,EAAE,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAE;QAC5D,QAAQ;KACR,CAAA;IAED,OAAO,OAAO,CAAA;AACf,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACtD,OAAU,EACV,gBAAuC,EACvC,SAAS,GAAG,KAAM;IAElB,OAAO,GAAG;QACT,GAAG,OAAO;QACV,MAAM,EAAE,OAAO,CAAC,MAAM;YACrB,CAAC,CAAC,MAAM,wBAAwB,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,CAAC;YAC7E,CAAC,CAAC,OAAO,CAAC,MAAM;KACjB,CAAA;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC5C,MAAuB,EACvB,gBAAuC,EACvC,SAAS,GAAG,KAAM,EACjB,EAAE;IACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,MAAM,CAAC,GAAG,CAA2B,KAAK,EAAC,GAAG,EAAC,EAAE;QAChD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;YAC9B,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,GAAG,EAAE,CAAA;YACf,CAAC;QACF,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,GAAG,mBAAmB,EAAE,CAAC,CAAA;QAC9D,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QAEtD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACpB,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAEnC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE;YACvD,SAAS,EAAE,uBAAuB;YAClC,gBAAgB,EAAE,GAAG;YACrB,SAAS;SACT,CAAC,CAAA;QAEF,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC,CAAA;QAErF,OAAO,EAAE,GAAG,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAA;IACjD,CAAC,CAAC,CACF,CAAA;IACD,OAAO,OAAO,CAAA;AACf,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,SAAqB,EAAE,EAAE;IAChD,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACtD,OAAO;QACN,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,CAAE;QAClE,QAAQ,EAAE,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,CAAE;KAClE,CAAA;AACF,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,SAAqB,EAAiB,EAAE;IAChE,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACzD,OAAO;QACN,MAAM,EAAE,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAE;QACjD,SAAS,EAAE,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,MAAM;KAClE,CAAA;AACF,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/chat-utils.d.ts b/packages/transport/vendor/lib/Utils/chat-utils.d.ts new file mode 100644 index 0000000..e7d6672 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/chat-utils.d.ts @@ -0,0 +1,100 @@ +import { proto } from '../../WAProto/index.js'; +import type { BaileysEventEmitter, ChatModification, ChatMutation, Contact, InitialAppStateSyncOptions, LTHashState, WAPatchCreate, WAPatchName } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +import type { ILogger } from './logger.js'; +type FetchAppStateSyncKey = (keyId: string) => Promise; +export type ChatMutationMap = { + [index: string]: ChatMutation; +}; +type Mac = { + indexMac: Uint8Array; + valueMac: Uint8Array; + operation: proto.SyncdMutation.SyncdOperation; +}; +export declare const makeLtHashGenerator: ({ indexValueMap, hash }: Pick) => { + mix: ({ indexMac, valueMac, operation }: Mac) => void; + finish: () => { + hash: Buffer; + indexValueMap: { + [indexMacBase64: string]: { + valueMac: Uint8Array | Buffer; + }; + }; + }; +}; +export declare const newLTHashState: () => LTHashState; +export declare const ensureLTHashStateVersion: (state: LTHashState) => LTHashState; +export declare const MAX_SYNC_ATTEMPTS = 2; +/** + * Check if an error is a missing app state sync key. + * WA Web treats these as "Blocked" (waits for key arrival), not fatal. + * In Baileys we retry with a snapshot which may use a different key. + */ +export declare const isMissingKeyError: (error: any) => boolean; +/** + * Determines if an app state sync error is unrecoverable. + * TypeError indicates a WASM crash; otherwise we give up after MAX_SYNC_ATTEMPTS. + * Missing keys are NOT checked here — they are handled separately as "Blocked". + */ +export declare const isAppStateSyncIrrecoverable: (error: any, attempts: number) => boolean; +export declare const encodeSyncdPatch: ({ type, index, syncAction, apiVersion, operation }: WAPatchCreate, myAppStateKeyId: string, state: LTHashState, getAppStateSyncKey: FetchAppStateSyncKey) => Promise<{ + patch: proto.ISyncdPatch; + state: LTHashState; +}>; +export declare const decodeSyncdMutations: (msgMutations: (proto.ISyncdMutation | proto.ISyncdRecord)[], initialState: LTHashState, getAppStateSyncKey: FetchAppStateSyncKey, onMutation: (mutation: ChatMutation) => void, validateMacs: boolean) => Promise<{ + hash: Buffer; + indexValueMap: { + [indexMacBase64: string]: { + valueMac: Uint8Array | Buffer; + }; + }; +}>; +export declare const decodeSyncdPatch: (msg: proto.ISyncdPatch, name: WAPatchName, initialState: LTHashState, getAppStateSyncKey: FetchAppStateSyncKey, onMutation: (mutation: ChatMutation) => void, validateMacs: boolean) => Promise<{ + hash: Buffer; + indexValueMap: { + [indexMacBase64: string]: { + valueMac: Uint8Array | Buffer; + }; + }; +}>; +export declare const extractSyncdPatches: (result: BinaryNode, options: RequestInit) => Promise<{ + critical_unblock_low: { + patches: proto.ISyncdPatch[]; + hasMorePatches: boolean; + snapshot?: proto.ISyncdSnapshot; + }; + regular_high: { + patches: proto.ISyncdPatch[]; + hasMorePatches: boolean; + snapshot?: proto.ISyncdSnapshot; + }; + regular_low: { + patches: proto.ISyncdPatch[]; + hasMorePatches: boolean; + snapshot?: proto.ISyncdSnapshot; + }; + critical_block: { + patches: proto.ISyncdPatch[]; + hasMorePatches: boolean; + snapshot?: proto.ISyncdSnapshot; + }; + regular: { + patches: proto.ISyncdPatch[]; + hasMorePatches: boolean; + snapshot?: proto.ISyncdSnapshot; + }; +}>; +export declare const downloadExternalBlob: (blob: proto.IExternalBlobReference, options: RequestInit) => Promise>; +export declare const downloadExternalPatch: (blob: proto.IExternalBlobReference, options: RequestInit) => Promise; +export declare const decodeSyncdSnapshot: (name: WAPatchName, snapshot: proto.ISyncdSnapshot, getAppStateSyncKey: FetchAppStateSyncKey, minimumVersionNumber: number | undefined, validateMacs?: boolean, logger?: ILogger) => Promise<{ + state: LTHashState; + mutationMap: ChatMutationMap; +}>; +export declare const decodePatches: (name: WAPatchName, syncds: proto.ISyncdPatch[], initial: LTHashState, getAppStateSyncKey: FetchAppStateSyncKey, options: RequestInit, minimumVersionNumber?: number, logger?: ILogger, validateMacs?: boolean) => Promise<{ + state: LTHashState; + mutationMap: ChatMutationMap; +}>; +export declare const chatModificationToAppPatch: (mod: ChatModification, jid: string) => WAPatchCreate; +export declare const processSyncAction: (syncAction: ChatMutation, ev: BaileysEventEmitter, me: Contact, initialSyncOpts?: InitialAppStateSyncOptions, logger?: ILogger) => void; +export {}; +//# sourceMappingURL=chat-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/chat-utils.d.ts.map b/packages/transport/vendor/lib/Utils/chat-utils.d.ts.map new file mode 100644 index 0000000..99805c8 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/chat-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"chat-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/chat-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/chat-utils.js b/packages/transport/vendor/lib/Utils/chat-utils.js new file mode 100644 index 0000000..c30265d --- /dev/null +++ b/packages/transport/vendor/lib/Utils/chat-utils.js @@ -0,0 +1,872 @@ +import { Boom } from '@hapi/boom'; +import { expandAppStateKeys } from 'whatsapp-rust-bridge'; +import { proto } from '../../WAProto/index.js'; +import { LabelAssociationType } from '../Types/LabelAssociation.js'; +import { getBinaryNodeChild, getBinaryNodeChildren, isJidGroup, jidNormalizedUser } from '../WABinary/index.js'; +import { aesDecrypt, aesEncrypt, hmacSign } from './crypto.js'; +import { toNumber } from './generics.js'; +import { LT_HASH_ANTI_TAMPERING } from './lt-hash.js'; +import { downloadContentFromMessage } from './messages-media.js'; +import { emitSyncActionResults, processContactAction } from './sync-action-utils.js'; +const mutationKeys = (keydata) => { + const keys = expandAppStateKeys(keydata); + return { + indexKey: keys.indexKey, + valueEncryptionKey: keys.valueEncryptionKey, + valueMacKey: keys.valueMacKey, + snapshotMacKey: keys.snapshotMacKey, + patchMacKey: keys.patchMacKey + }; +}; +const generateMac = (operation, data, keyId, key) => { + const opByte = operation === proto.SyncdMutation.SyncdOperation.SET ? 0x01 : 0x02; + const keyIdBuffer = typeof keyId === 'string' ? Buffer.from(keyId, 'base64') : keyId; + const keyData = new Uint8Array(1 + keyIdBuffer.length); + keyData[0] = opByte; + keyData.set(keyIdBuffer, 1); + const last = new Uint8Array(8); + last[7] = keyData.length; + const total = new Uint8Array(keyData.length + data.length + last.length); + total.set(keyData, 0); + total.set(data, keyData.length); + total.set(last, keyData.length + data.length); + const hmac = hmacSign(total, key, 'sha512'); + return hmac.subarray(0, 32); +}; +const to64BitNetworkOrder = (e) => { + const buff = Buffer.alloc(8); + buff.writeUint32BE(e, 4); + return buff; +}; +export const makeLtHashGenerator = ({ indexValueMap, hash }) => { + indexValueMap = { ...indexValueMap }; + const addBuffs = []; + const subBuffs = []; + return { + mix: ({ indexMac, valueMac, operation }) => { + const indexMacBase64 = Buffer.from(indexMac).toString('base64'); + const prevOp = indexValueMap[indexMacBase64]; + if (operation === proto.SyncdMutation.SyncdOperation.REMOVE) { + if (!prevOp) { + // WA Web does not throw here — it logs a warning and skips the subtract. + // The missing REMOVE will cause an LTHash mismatch, which is handled + // by the MAC validation layer (snapshot recovery or retry). + return; + } + // remove from index value mac, since this mutation is erased + delete indexValueMap[indexMacBase64]; + } + else { + addBuffs.push(valueMac); + // add this index into the history map + indexValueMap[indexMacBase64] = { valueMac }; + } + if (prevOp) { + subBuffs.push(prevOp.valueMac); + } + }, + finish: () => { + const result = LT_HASH_ANTI_TAMPERING.subtractThenAdd(hash, subBuffs, addBuffs); + return { + hash: Buffer.from(result), + indexValueMap + }; + } + }; +}; +const generateSnapshotMac = (lthash, version, name, key) => { + const total = Buffer.concat([lthash, to64BitNetworkOrder(version), Buffer.from(name, 'utf-8')]); + return hmacSign(total, key, 'sha256'); +}; +const generatePatchMac = (snapshotMac, valueMacs, version, type, key) => { + const total = Buffer.concat([snapshotMac, ...valueMacs, to64BitNetworkOrder(version), Buffer.from(type, 'utf-8')]); + return hmacSign(total, key); +}; +export const newLTHashState = () => ({ version: 0, hash: Buffer.alloc(128), indexValueMap: {} }); +export const ensureLTHashStateVersion = (state) => { + if (typeof state.version !== 'number' || isNaN(state.version)) { + state.version = 0; + } + return state; +}; +export const MAX_SYNC_ATTEMPTS = 2; +/** + * Check if an error is a missing app state sync key. + * WA Web treats these as "Blocked" (waits for key arrival), not fatal. + * In Baileys we retry with a snapshot which may use a different key. + */ +export const isMissingKeyError = (error) => { + return error?.data?.isMissingKey === true; +}; +/** + * Determines if an app state sync error is unrecoverable. + * TypeError indicates a WASM crash; otherwise we give up after MAX_SYNC_ATTEMPTS. + * Missing keys are NOT checked here — they are handled separately as "Blocked". + */ +export const isAppStateSyncIrrecoverable = (error, attempts) => { + return attempts >= MAX_SYNC_ATTEMPTS || error?.name === 'TypeError'; +}; +export const encodeSyncdPatch = async ({ type, index, syncAction, apiVersion, operation }, myAppStateKeyId, state, getAppStateSyncKey) => { + const key = !!myAppStateKeyId ? await getAppStateSyncKey(myAppStateKeyId) : undefined; + if (!key) { + throw new Boom(`myAppStateKey ("${myAppStateKeyId}") not present`, { data: { isMissingKey: true } }); + } + const encKeyId = Buffer.from(myAppStateKeyId, 'base64'); + state = { ...state, indexValueMap: { ...state.indexValueMap } }; + const indexBuffer = Buffer.from(JSON.stringify(index)); + const dataProto = proto.SyncActionData.fromObject({ + index: indexBuffer, + value: syncAction, + padding: new Uint8Array(0), + version: apiVersion + }); + const encoded = proto.SyncActionData.encode(dataProto).finish(); + const keyValue = mutationKeys(key.keyData); + const encValue = aesEncrypt(encoded, keyValue.valueEncryptionKey); + const valueMac = generateMac(operation, encValue, encKeyId, keyValue.valueMacKey); + const indexMac = hmacSign(indexBuffer, keyValue.indexKey); + // update LT hash + const generator = makeLtHashGenerator(state); + generator.mix({ indexMac, valueMac, operation }); + Object.assign(state, generator.finish()); + state.version += 1; + const snapshotMac = generateSnapshotMac(state.hash, state.version, type, keyValue.snapshotMacKey); + const patch = { + patchMac: generatePatchMac(snapshotMac, [valueMac], state.version, type, keyValue.patchMacKey), + snapshotMac: snapshotMac, + keyId: { id: encKeyId }, + mutations: [ + { + operation: operation, + record: { + index: { + blob: indexMac + }, + value: { + blob: Buffer.concat([encValue, valueMac]) + }, + keyId: { id: encKeyId } + } + } + ] + }; + const base64Index = indexMac.toString('base64'); + state.indexValueMap[base64Index] = { valueMac }; + return { patch, state }; +}; +export const decodeSyncdMutations = async (msgMutations, initialState, getAppStateSyncKey, onMutation, validateMacs) => { + const ltGenerator = makeLtHashGenerator(initialState); + const derivedKeyCache = new Map(); + // indexKey used to HMAC sign record.index.blob + // valueEncryptionKey used to AES-256-CBC encrypt record.value.blob[0:-32] + // the remaining record.value.blob[0:-32] is the mac, it the HMAC sign of key.keyId + decoded proto data + length of bytes in keyId + for (const msgMutation of msgMutations) { + // if it's a syncdmutation, get the operation property + // otherwise, if it's only a record -- it'll be a SET mutation + const operation = 'operation' in msgMutation ? msgMutation.operation : proto.SyncdMutation.SyncdOperation.SET; + const record = 'record' in msgMutation && !!msgMutation.record ? msgMutation.record : msgMutation; + let key; + try { + key = await getKey(record.keyId.id); + } + catch (err) { + // Missing-key errors must propagate so the orchestrator can park the + // collection (Blocked) and retry when APP_STATE_SYNC_KEY_SHARE arrives. + // Other errors → individual record corruption, skip and keep going. + if (isMissingKeyError(err)) + throw err; + continue; + } + const content = record.value.blob; + const encContent = content.subarray(0, -32); + const ogValueMac = content.subarray(-32); + if (validateMacs) { + const contentHmac = generateMac(operation, encContent, record.keyId.id, key.valueMacKey); + if (Buffer.compare(contentHmac, ogValueMac) !== 0) { + // HMAC verification failed — skip this record + continue; + } + } + let result; + try { + result = aesDecrypt(encContent, key.valueEncryptionKey); + } + catch { + // decrypt failed — skip this record instead of aborting + continue; + } + const syncAction = proto.SyncActionData.decode(result); + if (validateMacs) { + const hmac = hmacSign(syncAction.index, key.indexKey); + if (Buffer.compare(hmac, record.index.blob) !== 0) { + throw new Boom('HMAC index verification failed'); + } + } + const indexStr = Buffer.from(syncAction.index).toString(); + onMutation({ syncAction, index: JSON.parse(indexStr) }); + ltGenerator.mix({ + indexMac: record.index.blob, + valueMac: ogValueMac, + operation: operation + }); + } + return ltGenerator.finish(); + async function getKey(keyId) { + const base64Key = Buffer.from(keyId).toString('base64'); + const cached = derivedKeyCache.get(base64Key); + if (cached) { + return cached; + } + const keyEnc = await getAppStateSyncKey(base64Key); + if (!keyEnc) { + throw new Boom(`failed to find key "${base64Key}" to decode mutation`, { + data: { isMissingKey: true, msgMutations } + }); + } + const keys = mutationKeys(keyEnc.keyData); + derivedKeyCache.set(base64Key, keys); + return keys; + } +}; +export const decodeSyncdPatch = async (msg, name, initialState, getAppStateSyncKey, onMutation, validateMacs) => { + if (validateMacs) { + const base64Key = Buffer.from(msg.keyId.id).toString('base64'); + const mainKeyObj = await getAppStateSyncKey(base64Key); + if (!mainKeyObj) { + throw new Boom(`failed to find key "${base64Key}" to decode patch`, { data: { isMissingKey: true, msg } }); + } + const mainKey = mutationKeys(mainKeyObj.keyData); + const mutationmacs = msg.mutations.map(mutation => mutation.record.value.blob.slice(-32)); + const patchMac = generatePatchMac(msg.snapshotMac, mutationmacs, toNumber(msg.version.version), name, mainKey.patchMacKey); + if (Buffer.compare(patchMac, msg.patchMac) !== 0) { + throw new Boom('Invalid patch mac'); + } + } + const result = await decodeSyncdMutations(msg.mutations, initialState, getAppStateSyncKey, onMutation, validateMacs); + return result; +}; +export const extractSyncdPatches = async (result, options) => { + const syncNode = getBinaryNodeChild(result, 'sync'); + const collectionNodes = getBinaryNodeChildren(syncNode, 'collection'); + const final = {}; + await Promise.all(collectionNodes.map(async (collectionNode) => { + const patchesNode = getBinaryNodeChild(collectionNode, 'patches'); + const patches = getBinaryNodeChildren(patchesNode || collectionNode, 'patch'); + const snapshotNode = getBinaryNodeChild(collectionNode, 'snapshot'); + const syncds = []; + const name = collectionNode.attrs.name; + const hasMorePatches = collectionNode.attrs.has_more_patches === 'true'; + let snapshot = undefined; + if (snapshotNode && !!snapshotNode.content) { + if (!Buffer.isBuffer(snapshotNode)) { + snapshotNode.content = Buffer.from(Object.values(snapshotNode.content)); + } + const blobRef = proto.ExternalBlobReference.decode(snapshotNode.content); + const data = await downloadExternalBlob(blobRef, options); + snapshot = proto.SyncdSnapshot.decode(data); + } + for (let { content } of patches) { + if (content) { + if (!Buffer.isBuffer(content)) { + content = Buffer.from(Object.values(content)); + } + const syncd = proto.SyncdPatch.decode(content); + if (!syncd.version) { + syncd.version = { version: +collectionNode.attrs.version + 1 }; + } + syncds.push(syncd); + } + } + final[name] = { patches: syncds, hasMorePatches, snapshot }; + })); + return final; +}; +export const downloadExternalBlob = async (blob, options) => { + const stream = await downloadContentFromMessage(blob, 'md-app-state', { options }); + const bufferArray = []; + for await (const chunk of stream) { + bufferArray.push(chunk); + } + return Buffer.concat(bufferArray); +}; +export const downloadExternalPatch = async (blob, options) => { + const buffer = await downloadExternalBlob(blob, options); + const syncData = proto.SyncdMutations.decode(buffer); + return syncData; +}; +export const decodeSyncdSnapshot = async (name, snapshot, getAppStateSyncKey, minimumVersionNumber, validateMacs = true, logger) => { + const newState = newLTHashState(); + newState.version = toNumber(snapshot.version.version); + const mutationMap = {}; + const areMutationsRequired = typeof minimumVersionNumber === 'undefined' || newState.version > minimumVersionNumber; + const { hash, indexValueMap } = await decodeSyncdMutations(snapshot.records, newState, getAppStateSyncKey, areMutationsRequired + ? mutation => { + const index = mutation.syncAction.index?.toString(); + mutationMap[index] = mutation; + } + : () => { }, validateMacs); + newState.hash = hash; + newState.indexValueMap = indexValueMap; + if (validateMacs) { + const base64Key = Buffer.from(snapshot.keyId.id).toString('base64'); + const keyEnc = await getAppStateSyncKey(base64Key); + if (!keyEnc) { + throw new Boom(`failed to find key "${base64Key}" to decode mutation`, { data: { isMissingKey: true } }); + } + const result = mutationKeys(keyEnc.keyData); + const computedSnapshotMac = generateSnapshotMac(newState.hash, newState.version, name, result.snapshotMacKey); + if (Buffer.compare(snapshot.mac, computedSnapshotMac) !== 0) { + // LTHash verification may fail when decodeSyncdMutations skipped undecryptable + // records (poisoned server-side snapshot); the aggregate client hash diverges + // from the server-computed mac. Fall through with a warning so the session stays + // alive with partial state, symmetric to how decodePatches handles its own + // LTHash mismatch a few lines below. + logger?.warn({ name, version: newState.version }, 'LTHash verification failed on snapshot, continuing with partial state'); + } + } + return { + state: newState, + mutationMap + }; +}; +export const decodePatches = async (name, syncds, initial, getAppStateSyncKey, options, minimumVersionNumber, logger, validateMacs = true) => { + const newState = { + ...initial, + indexValueMap: { ...initial.indexValueMap } + }; + const mutationMap = {}; + for (const syncd of syncds) { + const { version, keyId, snapshotMac } = syncd; + if (syncd.externalMutations) { + logger?.trace({ name, version }, 'downloading external patch'); + const ref = await downloadExternalPatch(syncd.externalMutations, options); + logger?.debug({ name, version, mutations: ref.mutations.length }, 'downloaded external patch'); + syncd.mutations?.push(...ref.mutations); + } + const patchVersion = toNumber(version.version); + newState.version = patchVersion; + const shouldMutate = typeof minimumVersionNumber === 'undefined' || patchVersion > minimumVersionNumber; + let decodeResult; + try { + decodeResult = await decodeSyncdPatch(syncd, name, newState, getAppStateSyncKey, shouldMutate + ? mutation => { + const index = mutation.syncAction.index?.toString(); + mutationMap[index] = mutation; + } + : () => { }, validateMacs); + } + catch (err) { + if (isMissingKeyError(err)) + throw err; + logger?.warn({ name, version: patchVersion, error: err.message }, 'failed to decode patch, skipping'); + continue; + } + newState.hash = decodeResult.hash; + newState.indexValueMap = decodeResult.indexValueMap; + if (validateMacs) { + const base64Key = Buffer.from(keyId.id).toString('base64'); + const keyEnc = await getAppStateSyncKey(base64Key); + if (!keyEnc) { + throw new Boom(`failed to find key "${base64Key}" to decode mutation`, { data: { isMissingKey: true } }); + } + const result = mutationKeys(keyEnc.keyData); + const computedSnapshotMac = generateSnapshotMac(newState.hash, newState.version, name, result.snapshotMacKey); + if (Buffer.compare(snapshotMac, computedSnapshotMac) !== 0) { + logger?.warn({ name, version: newState.version }, 'LTHash verification failed, skipping remaining patches'); + break; + } + } + // clear memory used up by the mutations + syncd.mutations = []; + } + return { state: newState, mutationMap }; +}; +export const chatModificationToAppPatch = (mod, jid) => { + const OP = proto.SyncdMutation.SyncdOperation; + const getMessageRange = (lastMessages) => { + let messageRange; + if (Array.isArray(lastMessages)) { + const lastMsg = lastMessages[lastMessages.length - 1]; + messageRange = { + lastMessageTimestamp: lastMsg?.messageTimestamp, + messages: lastMessages?.length + ? lastMessages.map(m => { + if (!m.key?.id || !m.key?.remoteJid) { + throw new Boom('Incomplete key', { statusCode: 400, data: m }); + } + if (isJidGroup(m.key.remoteJid) && !m.key.fromMe && !m.key.participant) { + throw new Boom('Expected not from me message to have participant', { statusCode: 400, data: m }); + } + if (!m.messageTimestamp || !toNumber(m.messageTimestamp)) { + throw new Boom('Missing timestamp in last message list', { statusCode: 400, data: m }); + } + if (m.key.participant) { + m.key.participant = jidNormalizedUser(m.key.participant); + } + return m; + }) + : undefined + }; + } + else { + messageRange = lastMessages; + } + return messageRange; + }; + let patch; + if ('mute' in mod) { + patch = { + syncAction: { + muteAction: { + muted: !!mod.mute, + muteEndTimestamp: mod.mute || undefined + } + }, + index: ['mute', jid], + type: 'regular_high', + apiVersion: 2, + operation: OP.SET + }; + } + else if ('archive' in mod) { + patch = { + syncAction: { + archiveChatAction: { + archived: !!mod.archive, + messageRange: getMessageRange(mod.lastMessages) + } + }, + index: ['archive', jid], + type: 'regular_low', + apiVersion: 3, + operation: OP.SET + }; + } + else if ('markRead' in mod) { + patch = { + syncAction: { + markChatAsReadAction: { + read: mod.markRead, + messageRange: getMessageRange(mod.lastMessages) + } + }, + index: ['markChatAsRead', jid], + type: 'regular_low', + apiVersion: 3, + operation: OP.SET + }; + } + else if ('deleteForMe' in mod) { + const { timestamp, key, deleteMedia } = mod.deleteForMe; + patch = { + syncAction: { + deleteMessageForMeAction: { + deleteMedia, + messageTimestamp: timestamp + } + }, + index: ['deleteMessageForMe', jid, key.id, key.fromMe ? '1' : '0', '0'], + type: 'regular_high', + apiVersion: 3, + operation: OP.SET + }; + } + else if ('clear' in mod) { + patch = { + syncAction: { + clearChatAction: { + messageRange: getMessageRange(mod.lastMessages) + } + }, + index: ['clearChat', jid, '1' /*the option here is 0 when keep starred messages is enabled*/, '0'], + type: 'regular_high', + apiVersion: 6, + operation: OP.SET + }; + } + else if ('pin' in mod) { + patch = { + syncAction: { + pinAction: { + pinned: !!mod.pin + } + }, + index: ['pin_v1', jid], + type: 'regular_low', + apiVersion: 5, + operation: OP.SET + }; + } + else if ('contact' in mod) { + patch = { + syncAction: { + contactAction: mod.contact || {} + }, + index: ['contact', jid], + type: 'critical_unblock_low', + apiVersion: 2, + operation: mod.contact ? OP.SET : OP.REMOVE + }; + } + else if ('disableLinkPreviews' in mod) { + patch = { + syncAction: { + privacySettingDisableLinkPreviewsAction: mod.disableLinkPreviews || {} + }, + index: ['setting_disableLinkPreviews'], + type: 'regular', + apiVersion: 8, + operation: OP.SET + }; + } + else if ('star' in mod) { + const key = mod.star.messages[0]; + patch = { + syncAction: { + starAction: { + starred: !!mod.star.star + } + }, + index: ['star', jid, key.id, key.fromMe ? '1' : '0', '0'], + type: 'regular_low', + apiVersion: 2, + operation: OP.SET + }; + } + else if ('delete' in mod) { + patch = { + syncAction: { + deleteChatAction: { + messageRange: getMessageRange(mod.lastMessages) + } + }, + index: ['deleteChat', jid, '1'], + type: 'regular_high', + apiVersion: 6, + operation: OP.SET + }; + } + else if ('pushNameSetting' in mod) { + patch = { + syncAction: { + pushNameSetting: { + name: mod.pushNameSetting + } + }, + index: ['setting_pushName'], + type: 'critical_block', + apiVersion: 1, + operation: OP.SET + }; + } + else if ('quickReply' in mod) { + patch = { + syncAction: { + quickReplyAction: { + count: 0, + deleted: mod.quickReply.deleted || false, + keywords: [], + message: mod.quickReply.message || '', + shortcut: mod.quickReply.shortcut || '' + } + }, + index: ['quick_reply', mod.quickReply.timestamp || String(Math.floor(Date.now() / 1000))], + type: 'regular', + apiVersion: 2, + operation: OP.SET + }; + } + else if ('addLabel' in mod) { + patch = { + syncAction: { + labelEditAction: { + name: mod.addLabel.name, + color: mod.addLabel.color, + predefinedId: mod.addLabel.predefinedId, + deleted: mod.addLabel.deleted + } + }, + index: ['label_edit', mod.addLabel.id], + type: 'regular', + apiVersion: 3, + operation: OP.SET + }; + } + else if ('addChatLabel' in mod) { + patch = { + syncAction: { + labelAssociationAction: { + labeled: true + } + }, + index: [LabelAssociationType.Chat, mod.addChatLabel.labelId, jid], + type: 'regular', + apiVersion: 3, + operation: OP.SET + }; + } + else if ('removeChatLabel' in mod) { + patch = { + syncAction: { + labelAssociationAction: { + labeled: false + } + }, + index: [LabelAssociationType.Chat, mod.removeChatLabel.labelId, jid], + type: 'regular', + apiVersion: 3, + operation: OP.SET + }; + } + else if ('addMessageLabel' in mod) { + patch = { + syncAction: { + labelAssociationAction: { + labeled: true + } + }, + index: [LabelAssociationType.Message, mod.addMessageLabel.labelId, jid, mod.addMessageLabel.messageId, '0', '0'], + type: 'regular', + apiVersion: 3, + operation: OP.SET + }; + } + else if ('removeMessageLabel' in mod) { + patch = { + syncAction: { + labelAssociationAction: { + labeled: false + } + }, + index: [ + LabelAssociationType.Message, + mod.removeMessageLabel.labelId, + jid, + mod.removeMessageLabel.messageId, + '0', + '0' + ], + type: 'regular', + apiVersion: 3, + operation: OP.SET + }; + } + else { + throw new Boom('not supported'); + } + patch.syncAction.timestamp = Date.now(); + return patch; +}; +export const processSyncAction = (syncAction, ev, me, initialSyncOpts, logger) => { + const isInitialSync = !!initialSyncOpts; + const accountSettings = initialSyncOpts?.accountSettings; + logger?.trace({ syncAction, initialSync: !!initialSyncOpts }, 'processing sync action'); + const { syncAction: { value: action }, index: [type, id, msgId, fromMe] } = syncAction; + if (action?.muteAction) { + ev.emit('chats.update', [ + { + id, + muteEndTime: action.muteAction?.muted ? toNumber(action.muteAction.muteEndTimestamp) : null, + conditional: getChatUpdateConditional(id, undefined) + } + ]); + } + else if (action?.archiveChatAction || type === 'archive' || type === 'unarchive') { + // okay so we've to do some annoying computation here + // when we're initially syncing the app state + // there are a few cases we need to handle + // 1. if the account unarchiveChats setting is true + // a. if the chat is archived, and no further messages have been received -- simple, keep archived + // b. if the chat was archived, and the user received messages from the other person afterwards + // then the chat should be marked unarchved -- + // we compare the timestamp of latest message from the other person to determine this + // 2. if the account unarchiveChats setting is false -- then it doesn't matter, + // it'll always take an app state action to mark in unarchived -- which we'll get anyway + const archiveAction = action?.archiveChatAction; + const isArchived = archiveAction ? archiveAction.archived : type === 'archive'; + // // basically we don't need to fire an "archive" update if the chat is being marked unarchvied + // // this only applies for the initial sync + // if(isInitialSync && !isArchived) { + // isArchived = false + // } + const msgRange = !accountSettings?.unarchiveChats ? undefined : archiveAction?.messageRange; + // logger?.debug({ chat: id, syncAction }, 'message range archive') + ev.emit('chats.update', [ + { + id, + archived: isArchived, + conditional: getChatUpdateConditional(id, msgRange) + } + ]); + } + else if (action?.markChatAsReadAction) { + const markReadAction = action.markChatAsReadAction; + // basically we don't need to fire an "read" update if the chat is being marked as read + // because the chat is read by default + // this only applies for the initial sync + const isNullUpdate = isInitialSync && markReadAction.read; + ev.emit('chats.update', [ + { + id, + unreadCount: isNullUpdate ? null : !!markReadAction?.read ? 0 : -1, + conditional: getChatUpdateConditional(id, markReadAction?.messageRange) + } + ]); + } + else if (action?.deleteMessageForMeAction || type === 'deleteMessageForMe') { + ev.emit('messages.delete', { + keys: [ + { + remoteJid: id, + id: msgId, + fromMe: fromMe === '1' + } + ] + }); + } + else if (action?.contactAction) { + const results = processContactAction(action.contactAction, id, logger); + emitSyncActionResults(ev, results); + } + else if (action?.pushNameSetting) { + const name = action?.pushNameSetting?.name; + if (name && me?.name !== name) { + ev.emit('creds.update', { me: { ...me, name } }); + } + } + else if (action?.pinAction) { + ev.emit('chats.update', [ + { + id, + pinned: action.pinAction?.pinned ? toNumber(action.timestamp) : null, + conditional: getChatUpdateConditional(id, undefined) + } + ]); + } + else if (action?.unarchiveChatsSetting) { + const unarchiveChats = !!action.unarchiveChatsSetting.unarchiveChats; + ev.emit('creds.update', { accountSettings: { unarchiveChats } }); + logger?.info(`archive setting updated => '${action.unarchiveChatsSetting.unarchiveChats}'`); + if (accountSettings) { + accountSettings.unarchiveChats = unarchiveChats; + } + } + else if (action?.starAction || type === 'star') { + let starred = action?.starAction?.starred; + if (typeof starred !== 'boolean') { + starred = syncAction.index[syncAction.index.length - 1] === '1'; + } + ev.emit('messages.update', [ + { + key: { remoteJid: id, id: msgId, fromMe: fromMe === '1' }, + update: { starred } + } + ]); + } + else if (action?.deleteChatAction || type === 'deleteChat') { + if (!isInitialSync) { + ev.emit('chats.delete', [id]); + } + } + else if (action?.labelEditAction) { + const { name, color, deleted, predefinedId } = action.labelEditAction; + ev.emit('labels.edit', { + id: id, + name: name, + color: color, + deleted: deleted, + predefinedId: predefinedId ? String(predefinedId) : undefined + }); + } + else if (action?.labelAssociationAction) { + ev.emit('labels.association', { + type: action.labelAssociationAction.labeled ? 'add' : 'remove', + association: type === LabelAssociationType.Chat + ? { + type: LabelAssociationType.Chat, + chatId: syncAction.index[2], + labelId: syncAction.index[1] + } + : { + type: LabelAssociationType.Message, + chatId: syncAction.index[2], + messageId: syncAction.index[3], + labelId: syncAction.index[1] + } + }); + } + else if (action?.localeSetting?.locale) { + ev.emit('settings.update', { setting: 'locale', value: action.localeSetting.locale }); + } + else if (action?.timeFormatAction) { + ev.emit('settings.update', { setting: 'timeFormat', value: action.timeFormatAction }); + } + else if (action?.pnForLidChatAction) { + if (action.pnForLidChatAction.pnJid) { + ev.emit('lid-mapping.update', { lid: id, pn: action.pnForLidChatAction.pnJid }); + } + } + else if (action?.privacySettingRelayAllCalls) { + ev.emit('settings.update', { + setting: 'privacySettingRelayAllCalls', + value: action.privacySettingRelayAllCalls + }); + } + else if (action?.statusPrivacy) { + ev.emit('settings.update', { setting: 'statusPrivacy', value: action.statusPrivacy }); + } + else if (action?.lockChatAction) { + ev.emit('chats.lock', { id: id, locked: !!action.lockChatAction.locked }); + } + else if (action?.privacySettingDisableLinkPreviewsAction) { + ev.emit('settings.update', { + setting: 'disableLinkPreviews', + value: action.privacySettingDisableLinkPreviewsAction + }); + } + else if (action?.notificationActivitySettingAction?.notificationActivitySetting) { + ev.emit('settings.update', { + setting: 'notificationActivitySetting', + value: action.notificationActivitySettingAction.notificationActivitySetting + }); + } + else if (action?.lidContactAction) { + ev.emit('contacts.upsert', [ + { + id: id, + name: action.lidContactAction.fullName || + action.lidContactAction.firstName || + action.lidContactAction.username || + undefined, + username: action.lidContactAction.username || undefined, + lid: id, + phoneNumber: undefined + } + ]); + } + else if (action?.privacySettingChannelsPersonalisedRecommendationAction) { + ev.emit('settings.update', { + setting: 'channelsPersonalisedRecommendation', + value: action.privacySettingChannelsPersonalisedRecommendationAction + }); + } + else { + logger?.debug({ syncAction, id }, 'unprocessable update'); + } + function getChatUpdateConditional(id, msgRange) { + return isInitialSync + ? data => { + const chat = data.historySets.chats[id] || data.chatUpserts[id]; + if (chat) { + return msgRange ? isValidPatchBasedOnMessageRange(chat, msgRange) : true; + } + } + : undefined; + } + function isValidPatchBasedOnMessageRange(chat, msgRange) { + const lastMsgTimestamp = Number(msgRange?.lastMessageTimestamp || msgRange?.lastSystemMessageTimestamp || 0); + const chatLastMsgTimestamp = Number(chat?.lastMessageRecvTimestamp || 0); + return lastMsgTimestamp >= chatLastMsgTimestamp; + } +}; +//# sourceMappingURL=chat-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/chat-utils.js.map b/packages/transport/vendor/lib/Utils/chat-utils.js.map new file mode 100644 index 0000000..c5131d1 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/chat-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"chat-utils.js","sourceRoot":"","sources":["../../src/Utils/chat-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAc9C,OAAO,EAEN,oBAAoB,EAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAmB,kBAAkB,EAAE,qBAAqB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACvH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAMjF,MAAM,YAAY,GAAG,CAAC,OAAmB,EAAE,EAAE;IAC5C,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IACxC,OAAO;QACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,WAAW,EAAE,IAAI,CAAC,WAAW;KAC7B,CAAA;AACF,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CACnB,SAA6C,EAC7C,IAAgB,EAChB,KAA0B,EAC1B,GAAe,EACd,EAAE;IACH,MAAM,MAAM,GAAG,SAAS,KAAK,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IACjF,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACpF,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACtD,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;IACnB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAE3B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;IAExB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IACxE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACrB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAE7C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAE,EAAE;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5B,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAID,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,aAAa,EAAE,IAAI,EAA+C,EAAE,EAAE;IAC3G,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAiB,EAAE,CAAA;IACjC,MAAM,QAAQ,GAAiB,EAAE,CAAA;IAEjC,OAAO;QACN,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAO,EAAE,EAAE;YAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC/D,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAA;YAC5C,IAAI,SAAS,KAAK,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,yEAAyE;oBACzE,qEAAqE;oBACrE,4DAA4D;oBAC5D,OAAM;gBACP,CAAC;gBAED,6DAA6D;gBAC7D,OAAO,aAAa,CAAC,cAAc,CAAC,CAAA;YACrC,CAAC;iBAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACvB,sCAAsC;gBACtC,aAAa,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAA;YAC7C,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAsB,CAAC,CAAA;YAC7C,CAAC;QACF,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,MAAM,GAAG,sBAAsB,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAE/E,OAAO;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,aAAa;aACb,CAAA;QACF,CAAC;KACD,CAAA;AACF,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,MAAkB,EAAE,OAAe,EAAE,IAAiB,EAAE,GAAe,EAAE,EAAE;IACvG,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/F,OAAO,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CACxB,WAAuB,EACvB,SAAuB,EACvB,OAAe,EACf,IAAiB,EACjB,GAAe,EACd,EAAE;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAClH,OAAO,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,GAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAA;AAE7G,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAkB,EAAe,EAAE;IAC3E,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;IAClB,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAU,EAAW,EAAE;IACxD,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;AAC1C,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,KAAU,EAAE,QAAgB,EAAW,EAAE;IACpF,OAAO,QAAQ,IAAI,iBAAiB,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,CAAA;AACpE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACpC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAiB,EACjE,eAAuB,EACvB,KAAkB,EAClB,kBAAwC,EACvC,EAAE;IACH,MAAM,GAAG,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACrF,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,IAAI,IAAI,CAAC,mBAAmB,eAAe,gBAAgB,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;IACrG,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IAEvD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,CAAA;IAE/D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC;QACjD,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,UAAU;KACnB,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAA;IAE/D,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,OAAQ,CAAC,CAAA;IAE3C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IACjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEzD,iBAAiB;IACjB,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAC5C,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;IAChD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;IAExC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;IAElB,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAA;IAEjG,MAAM,KAAK,GAAsB;QAChC,QAAQ,EAAE,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;QAC9F,WAAW,EAAE,WAAW;QACxB,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;QACvB,SAAS,EAAE;YACV;gBACC,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE;oBACP,KAAK,EAAE;wBACN,IAAI,EAAE,QAAQ;qBACd;oBACD,KAAK,EAAE;wBACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;qBACzC;oBACD,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;iBACvB;aACD;SACD;KACD,CAAA;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC/C,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAA;IAE/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACxB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACxC,YAA2D,EAC3D,YAAyB,EACzB,kBAAwC,EACxC,UAA4C,EAC5C,YAAqB,EACpB,EAAE;IACH,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAA;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAA2C,CAAA;IAE1E,+CAA+C;IAC/C,0EAA0E;IAC1E,mIAAmI;IACnI,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACxC,sDAAsD;QACtD,8DAA8D;QAC9D,MAAM,SAAS,GAAG,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAA;QAC7G,MAAM,MAAM,GACX,QAAQ,IAAI,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAE,WAAkC,CAAA;QAE3G,IAAI,GAAoC,CAAA;QACxC,IAAI,CAAC;YACJ,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAM,CAAC,EAAG,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,qEAAqE;YACrE,wEAAwE;YACxE,oEAAoE;YACpE,IAAI,iBAAiB,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAA;YACrC,SAAQ;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAM,CAAC,IAAK,CAAA;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,WAAW,GAAG,WAAW,CAAC,SAAU,EAAE,UAAU,EAAE,MAAM,CAAC,KAAM,CAAC,EAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;YAC3F,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,8CAA8C;gBAC9C,SAAQ;YACT,CAAC;QACF,CAAC;QAED,IAAI,MAAkB,CAAA;QACtB,IAAI,CAAC;YACJ,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACR,wDAAwD;YACxD,SAAQ;QACT,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEtD,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;YACtD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAM,CAAC,IAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,IAAI,CAAC,gCAAgC,CAAC,CAAA;YACjD,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC1D,UAAU,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAEvD,WAAW,CAAC,GAAG,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC,KAAM,CAAC,IAAK;YAC7B,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,SAAU;SACrB,CAAC,CAAA;IACH,CAAC;IAED,OAAO,WAAW,CAAC,MAAM,EAAE,CAAA;IAE3B,KAAK,UAAU,MAAM,CAAC,KAAiB;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAEvD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAA;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,IAAI,CAAC,uBAAuB,SAAS,sBAAsB,EAAE;gBACtE,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE;aAC1C,CAAC,CAAA;QACH,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAA;QAC1C,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACpC,GAAsB,EACtB,IAAiB,EACjB,YAAyB,EACzB,kBAAwC,EACxC,UAA4C,EAC5C,YAAqB,EACpB,EAAE;IACH,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAM,CAAC,EAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAChE,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM,IAAI,IAAI,CAAC,uBAAuB,SAAS,mBAAmB,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;QAC3G,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,OAAQ,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,GAAG,CAAC,SAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAO,CAAC,KAAM,CAAC,IAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAE7F,MAAM,QAAQ,GAAG,gBAAgB,CAChC,GAAG,CAAC,WAAY,EAChB,YAAY,EACZ,QAAQ,CAAC,GAAG,CAAC,OAAQ,CAAC,OAAO,CAAC,EAC9B,IAAI,EACJ,OAAO,CAAC,WAAW,CACnB,CAAA;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAA;QACpC,CAAC;IACF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,SAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IACrH,OAAO,MAAM,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,MAAkB,EAAE,OAAoB,EAAE,EAAE;IACrF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnD,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAErE,MAAM,KAAK,GAAG,EAEb,CAAA;IACD,MAAM,OAAO,CAAC,GAAG,CAChB,eAAe,CAAC,GAAG,CAAC,KAAK,EAAC,cAAc,EAAC,EAAE;QAC1C,MAAM,WAAW,GAAG,kBAAkB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;QAEjE,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,IAAI,cAAc,EAAE,OAAO,CAAC,CAAA;QAC7E,MAAM,YAAY,GAAG,kBAAkB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAwB,EAAE,CAAA;QACtC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAmB,CAAA;QAErD,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,gBAAgB,KAAK,MAAM,CAAA;QAEvE,IAAI,QAAQ,GAAqC,SAAS,CAAA;QAC1D,IAAI,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;YACxE,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,OAAiB,CAAC,CAAA;YAClF,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACzD,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;QAED,KAAK,IAAI,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;YACjC,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/B,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC9C,CAAC;gBAED,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,OAAqB,CAAC,CAAA;gBAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACpB,KAAK,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,OAAQ,GAAG,CAAC,EAAE,CAAA;gBAChE,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC;QACF,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA;IAC5D,CAAC,CAAC,CACF,CAAA;IAED,OAAO,KAAK,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,IAAkC,EAAE,OAAoB,EAAE,EAAE;IACtG,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAClF,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAClC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,IAAkC,EAAE,OAAoB,EAAE,EAAE;IACvG,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,QAAQ,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACvC,IAAiB,EACjB,QAA8B,EAC9B,kBAAwC,EACxC,oBAAwC,EACxC,YAAY,GAAG,IAAI,EACnB,MAAgB,EACf,EAAE;IACH,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IACjC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAQ,CAAC,OAAO,CAAC,CAAA;IAEtD,MAAM,WAAW,GAAoB,EAAE,CAAA;IACvC,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,KAAK,WAAW,IAAI,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAA;IAEnH,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,oBAAoB,CACzD,QAAQ,CAAC,OAAQ,EACjB,QAAQ,EACR,kBAAkB,EAClB,oBAAoB;QACnB,CAAC,CAAC,QAAQ,CAAC,EAAE;YACX,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;YACnD,WAAW,CAAC,KAAM,CAAC,GAAG,QAAQ,CAAA;QAC/B,CAAC;QACF,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,EACX,YAAY,CACZ,CAAA;IACD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;IACpB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAA;IAEtC,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAM,CAAC,EAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACrE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,IAAI,CAAC,uBAAuB,SAAS,sBAAsB,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QACzG,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAA;QAC5C,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA;QAC7G,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,+EAA+E;YAC/E,8EAA8E;YAC9E,iFAAiF;YACjF,2EAA2E;YAC3E,qCAAqC;YACrC,MAAM,EAAE,IAAI,CACX,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EACnC,uEAAuE,CACvE,CAAA;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,KAAK,EAAE,QAAQ;QACf,WAAW;KACX,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,IAAiB,EACjB,MAA2B,EAC3B,OAAoB,EACpB,kBAAwC,EACxC,OAAoB,EACpB,oBAA6B,EAC7B,MAAgB,EAChB,YAAY,GAAG,IAAI,EAClB,EAAE;IACH,MAAM,QAAQ,GAAgB;QAC7B,GAAG,OAAO;QACV,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE;KAC3C,CAAA;IAED,MAAM,WAAW,GAAoB,EAAE,CAAA;IAEvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;QAC7C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,4BAA4B,CAAC,CAAA;YAC9D,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;YACzE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAA;YAC9F,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAQ,CAAC,OAAO,CAAC,CAAA;QAE/C,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAA;QAC/B,MAAM,YAAY,GAAG,OAAO,oBAAoB,KAAK,WAAW,IAAI,YAAY,GAAG,oBAAoB,CAAA;QAEvG,IAAI,YAA2E,CAAA;QAC/E,IAAI,CAAC;YACJ,YAAY,GAAG,MAAM,gBAAgB,CACpC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,kBAAkB,EAClB,YAAY;gBACX,CAAC,CAAC,QAAQ,CAAC,EAAE;oBACX,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;oBACnD,WAAW,CAAC,KAAM,CAAC,GAAG,QAAQ,CAAA;gBAC/B,CAAC;gBACF,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,EACX,YAAY,CACZ,CAAA;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,iBAAiB,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAA;YACrC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,kCAAkC,CAAC,CAAA;YAChH,SAAQ;QACT,CAAC;QAED,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAA;QACjC,QAAQ,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAA;QAEnD,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,EAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC5D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,IAAI,IAAI,CAAC,uBAAuB,SAAS,sBAAsB,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YACzG,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAA;YAC5C,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA;YAC7G,IAAI,MAAM,CAAC,OAAO,CAAC,WAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,wDAAwD,CAAC,CAAA;gBAC3G,MAAK;YACN,CAAC;QACF,CAAC;QAED,wCAAwC;QACxC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAA;IACrB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;AACxC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAqB,EAAE,GAAW,EAAE,EAAE;IAChF,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAA;IAC7C,MAAM,eAAe,GAAG,CAAC,YAA6B,EAAE,EAAE;QACzD,IAAI,YAA2D,CAAA;QAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACrD,YAAY,GAAG;gBACd,oBAAoB,EAAE,OAAO,EAAE,gBAAgB;gBAC/C,QAAQ,EAAE,YAAY,EAAE,MAAM;oBAC7B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;wBACrB,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;4BACrC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;wBAC/D,CAAC;wBAED,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;4BACxE,MAAM,IAAI,IAAI,CAAC,kDAAkD,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;wBACjG,CAAC;wBAED,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;4BAC1D,MAAM,IAAI,IAAI,CAAC,wCAAwC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;wBACvF,CAAC;wBAED,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;4BACvB,CAAC,CAAC,GAAG,CAAC,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;wBACzD,CAAC;wBAED,OAAO,CAAC,CAAA;oBACT,CAAC,CAAC;oBACH,CAAC,CAAC,SAAS;aACZ,CAAA;QACF,CAAC;aAAM,CAAC;YACP,YAAY,GAAG,YAAY,CAAA;QAC5B,CAAC;QAED,OAAO,YAAY,CAAA;IACpB,CAAC,CAAA;IAED,IAAI,KAAoB,CAAA;IACxB,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QACnB,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,UAAU,EAAE;oBACX,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI;oBACjB,gBAAgB,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;iBACvC;aACD;YACD,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;YACpB,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QAC7B,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,iBAAiB,EAAE;oBAClB,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO;oBACvB,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;iBAC/C;aACD;YACD,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;YACvB,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;QAC9B,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,oBAAoB,EAAE;oBACrB,IAAI,EAAE,GAAG,CAAC,QAAQ;oBAClB,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;iBAC/C;aACD;YACD,KAAK,EAAE,CAAC,gBAAgB,EAAE,GAAG,CAAC;YAC9B,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,aAAa,IAAI,GAAG,EAAE,CAAC;QACjC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;QACvD,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,wBAAwB,EAAE;oBACzB,WAAW;oBACX,gBAAgB,EAAE,SAAS;iBAC3B;aACD;YACD,KAAK,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,CAAC,EAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;YACxE,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;QAC3B,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,eAAe,EAAE;oBAChB,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;iBAC/C;aACD;YACD,KAAK,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,8DAA8D,EAAE,GAAG,CAAC;YAClG,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACzB,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,SAAS,EAAE;oBACV,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG;iBACjB;aACD;YACD,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC;YACtB,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QAC7B,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,aAAa,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;aAChC;YACD,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;YACvB,IAAI,EAAE,sBAAsB;YAC5B,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;SAC3C,CAAA;IACF,CAAC;SAAM,IAAI,qBAAqB,IAAI,GAAG,EAAE,CAAC;QACzC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,uCAAuC,EAAE,GAAG,CAAC,mBAAmB,IAAI,EAAE;aACtE;YACD,KAAK,EAAE,CAAC,6BAA6B,CAAC;YACtC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAA;QACjC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,UAAU,EAAE;oBACX,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI;iBACxB;aACD;YACD,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;YACzD,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QAC5B,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,gBAAgB,EAAE;oBACjB,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;iBAC/C;aACD;YACD,KAAK,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC;YAC/B,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,iBAAiB,IAAI,GAAG,EAAE,CAAC;QACrC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,eAAe,EAAE;oBAChB,IAAI,EAAE,GAAG,CAAC,eAAe;iBACzB;aACD;YACD,KAAK,EAAE,CAAC,kBAAkB,CAAC;YAC3B,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,YAAY,IAAI,GAAG,EAAE,CAAC;QAChC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,gBAAgB,EAAE;oBACjB,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,KAAK;oBACxC,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE;oBACrC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE;iBACvC;aACD;YACD,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YACzF,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;QAC9B,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,eAAe,EAAE;oBAChB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI;oBACvB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK;oBACzB,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY;oBACvC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO;iBAC7B;aACD;YACD,KAAK,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,cAAc,IAAI,GAAG,EAAE,CAAC;QAClC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,sBAAsB,EAAE;oBACvB,OAAO,EAAE,IAAI;iBACb;aACD;YACD,KAAK,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC;YACjE,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,iBAAiB,IAAI,GAAG,EAAE,CAAC;QACrC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,sBAAsB,EAAE;oBACvB,OAAO,EAAE,KAAK;iBACd;aACD;YACD,KAAK,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC;YACpE,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,iBAAiB,IAAI,GAAG,EAAE,CAAC;QACrC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,sBAAsB,EAAE;oBACvB,OAAO,EAAE,IAAI;iBACb;aACD;YACD,KAAK,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;YAChH,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,IAAI,oBAAoB,IAAI,GAAG,EAAE,CAAC;QACxC,KAAK,GAAG;YACP,UAAU,EAAE;gBACX,sBAAsB,EAAE;oBACvB,OAAO,EAAE,KAAK;iBACd;aACD;YACD,KAAK,EAAE;gBACN,oBAAoB,CAAC,OAAO;gBAC5B,GAAG,CAAC,kBAAkB,CAAC,OAAO;gBAC9B,GAAG;gBACH,GAAG,CAAC,kBAAkB,CAAC,SAAS;gBAChC,GAAG;gBACH,GAAG;aACH;YACD,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,EAAE,CAAC,GAAG;SACjB,CAAA;IACF,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEvC,OAAO,KAAK,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,UAAwB,EACxB,EAAuB,EACvB,EAAW,EACX,eAA4C,EAC5C,MAAgB,EACf,EAAE;IACH,MAAM,aAAa,GAAG,CAAC,CAAC,eAAe,CAAA;IACvC,MAAM,eAAe,GAAG,eAAe,EAAE,eAAe,CAAA;IAExD,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,wBAAwB,CAAC,CAAA;IAEvF,MAAM,EACL,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAC7B,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAChC,GAAG,UAAU,CAAA;IAEd,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;QACxB,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;YACvB;gBACC,EAAE;gBACF,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC3F,WAAW,EAAE,wBAAwB,CAAC,EAAG,EAAE,SAAS,CAAC;aACrD;SACD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,iBAAiB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACpF,qDAAqD;QACrD,6CAA6C;QAC7C,0CAA0C;QAC1C,mDAAmD;QACnD,oGAAoG;QACpG,iGAAiG;QACjG,+CAA+C;QAC/C,sFAAsF;QACtF,+EAA+E;QAC/E,wFAAwF;QACxF,MAAM,aAAa,GAAG,MAAM,EAAE,iBAAiB,CAAA;QAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAA;QAC9E,gGAAgG;QAChG,4CAA4C;QAC5C,qCAAqC;QACrC,sBAAsB;QACtB,IAAI;QAEJ,MAAM,QAAQ,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,YAAY,CAAA;QAC3F,mEAAmE;QAEnE,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;YACvB;gBACC,EAAE;gBACF,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,wBAAwB,CAAC,EAAG,EAAE,QAAQ,CAAC;aACpD;SACD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,oBAAoB,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAA;QAClD,uFAAuF;QACvF,sCAAsC;QACtC,yCAAyC;QACzC,MAAM,YAAY,GAAG,aAAa,IAAI,cAAc,CAAC,IAAI,CAAA;QAEzD,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;YACvB;gBACC,EAAE;gBACF,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,WAAW,EAAE,wBAAwB,CAAC,EAAG,EAAE,cAAc,EAAE,YAAY,CAAC;aACxE;SACD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,wBAAwB,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC9E,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,EAAE;gBACL;oBACC,SAAS,EAAE,EAAE;oBACb,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,MAAM,KAAK,GAAG;iBACtB;aACD;SACD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,aAAa,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;QACtE,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;SAAM,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,EAAE,eAAe,EAAE,IAAI,CAAA;QAC1C,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/B,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QACjD,CAAC;IACF,CAAC;SAAM,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;QAC9B,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;YACvB;gBACC,EAAE;gBACF,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;gBACpE,WAAW,EAAE,wBAAwB,CAAC,EAAG,EAAE,SAAS,CAAC;aACrD;SACD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,qBAAqB,EAAE,CAAC;QAC1C,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAA;QACpE,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,eAAe,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,CAAA;QAEhE,MAAM,EAAE,IAAI,CAAC,+BAA+B,MAAM,CAAC,qBAAqB,CAAC,cAAc,GAAG,CAAC,CAAA;QAC3F,IAAI,eAAe,EAAE,CAAC;YACrB,eAAe,CAAC,cAAc,GAAG,cAAc,CAAA;QAChD,CAAC;IACF,CAAC;SAAM,IAAI,MAAM,EAAE,UAAU,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClD,IAAI,OAAO,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,CAAA;QACzC,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAA;QAChE,CAAC;QAED,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B;gBACC,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,EAAE;gBACzD,MAAM,EAAE,EAAE,OAAO,EAAE;aACnB;SACD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,gBAAgB,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAG,CAAC,CAAC,CAAA;QAC/B,CAAC;IACF,CAAC;SAAM,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,eAAe,CAAA;QAErE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;YACtB,EAAE,EAAE,EAAG;YACP,IAAI,EAAE,IAAK;YACX,KAAK,EAAE,KAAM;YACb,OAAO,EAAE,OAAQ;YACjB,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,sBAAsB,EAAE,CAAC;QAC3C,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,EAAE,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;YAC9D,WAAW,EACV,IAAI,KAAK,oBAAoB,CAAC,IAAI;gBACjC,CAAC,CAAE;oBACD,IAAI,EAAE,oBAAoB,CAAC,IAAI;oBAC/B,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC3B,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;iBACH;gBAC3B,CAAC,CAAE;oBACD,IAAI,EAAE,oBAAoB,CAAC,OAAO;oBAClC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC3B,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9B,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;iBACA;SAChC,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QAC1C,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;IACtF,CAAC;SAAM,IAAI,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACrC,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACtF,CAAC;SAAM,IAAI,MAAM,EAAE,kBAAkB,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YACrC,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,EAAG,EAAE,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAA;QACjF,CAAC;IACF,CAAC;SAAM,IAAI,MAAM,EAAE,2BAA2B,EAAE,CAAC;QAChD,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO,EAAE,6BAA6B;YACtC,KAAK,EAAE,MAAM,CAAC,2BAA2B;SACzC,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,aAAa,EAAE,CAAC;QAClC,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAA;IACtF,CAAC;SAAM,IAAI,MAAM,EAAE,cAAc,EAAE,CAAC;QACnC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,EAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3E,CAAC;SAAM,IAAI,MAAM,EAAE,uCAAuC,EAAE,CAAC;QAC5D,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO,EAAE,qBAAqB;YAC9B,KAAK,EAAE,MAAM,CAAC,uCAAuC;SACrD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,CAAC;QACnF,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO,EAAE,6BAA6B;YACtC,KAAK,EAAE,MAAM,CAAC,iCAAiC,CAAC,2BAA2B;SAC3E,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACrC,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B;gBACC,EAAE,EAAE,EAAG;gBACP,IAAI,EACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ;oBAChC,MAAM,CAAC,gBAAgB,CAAC,SAAS;oBACjC,MAAM,CAAC,gBAAgB,CAAC,QAAQ;oBAChC,SAAS;gBACV,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,IAAI,SAAS;gBACvD,GAAG,EAAE,EAAG;gBACR,WAAW,EAAE,SAAS;aACtB;SACD,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,sDAAsD,EAAE,CAAC;QAC3E,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO,EAAE,oCAAoC;YAC7C,KAAK,EAAE,MAAM,CAAC,sDAAsD;SACpE,CAAC,CAAA;IACH,CAAC;SAAM,CAAC;QACP,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAA;IAC1D,CAAC;IAED,SAAS,wBAAwB,CAChC,EAAU,EACV,QAA0E;QAE1E,OAAO,aAAa;YACnB,CAAC,CAAC,IAAI,CAAC,EAAE;gBACP,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;gBAC/D,IAAI,IAAI,EAAE,CAAC;oBACV,OAAO,QAAQ,CAAC,CAAC,CAAC,+BAA+B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBACzE,CAAC;YACF,CAAC;YACF,CAAC,CAAC,SAAS,CAAA;IACb,CAAC;IAED,SAAS,+BAA+B,CACvC,IAAU,EACV,QAA0E;QAE1E,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,oBAAoB,IAAI,QAAQ,EAAE,0BAA0B,IAAI,CAAC,CAAC,CAAA;QAC5G,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,EAAE,wBAAwB,IAAI,CAAC,CAAC,CAAA;QACxE,OAAO,gBAAgB,IAAI,oBAAoB,CAAA;IAChD,CAAC;AACF,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts new file mode 100644 index 0000000..a79a52c --- /dev/null +++ b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts @@ -0,0 +1,17 @@ +import type { WABrowserDescription } from '../Types/index.js'; +export declare enum CompanionWebClientType { + UNKNOWN = 0, + CHROME = 1, + EDGE = 2, + FIREFOX = 3, + IE = 4, + OPERA = 5, + SAFARI = 6, + ELECTRON = 7, + UWP = 8, + OTHER_WEB_CLIENT = 9 +} +export declare const getCompanionWebClientType: ([os, browserName]: WABrowserDescription) => CompanionWebClientType; +export declare const getCompanionPlatformId: (browser: WABrowserDescription) => string; +export declare const buildPairingQRData: (ref: string, noiseKeyB64: string, identityKeyB64: string, advB64: string, browser: WABrowserDescription) => string; +//# sourceMappingURL=companion-reg-client-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts.map b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts.map new file mode 100644 index 0000000..eed2066 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"companion-reg-client-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/companion-reg-client-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEpD,oBAAY,sBAAsB;IACjC,OAAO,IAAI;IACX,MAAM,IAAI;IACV,IAAI,IAAI;IACR,OAAO,IAAI;IACX,EAAE,IAAI;IACN,KAAK,IAAI;IACT,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,gBAAgB,IAAI;CACpB;AAWD,eAAO,MAAM,yBAAyB,GAAI,mBAAmB,oBAAoB,KAAG,sBAMnF,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAS,oBAAoB,KAAG,MAEtE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC9B,KAAK,MAAM,EACX,aAAa,MAAM,EACnB,gBAAgB,MAAM,EACtB,QAAQ,MAAM,EACd,SAAS,oBAAoB,KAC3B,MAKF,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/companion-reg-client-utils.js b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.js new file mode 100644 index 0000000..f5edebd --- /dev/null +++ b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.js @@ -0,0 +1,35 @@ +export var CompanionWebClientType; +(function (CompanionWebClientType) { + CompanionWebClientType[CompanionWebClientType["UNKNOWN"] = 0] = "UNKNOWN"; + CompanionWebClientType[CompanionWebClientType["CHROME"] = 1] = "CHROME"; + CompanionWebClientType[CompanionWebClientType["EDGE"] = 2] = "EDGE"; + CompanionWebClientType[CompanionWebClientType["FIREFOX"] = 3] = "FIREFOX"; + CompanionWebClientType[CompanionWebClientType["IE"] = 4] = "IE"; + CompanionWebClientType[CompanionWebClientType["OPERA"] = 5] = "OPERA"; + CompanionWebClientType[CompanionWebClientType["SAFARI"] = 6] = "SAFARI"; + CompanionWebClientType[CompanionWebClientType["ELECTRON"] = 7] = "ELECTRON"; + CompanionWebClientType[CompanionWebClientType["UWP"] = 8] = "UWP"; + CompanionWebClientType[CompanionWebClientType["OTHER_WEB_CLIENT"] = 9] = "OTHER_WEB_CLIENT"; +})(CompanionWebClientType || (CompanionWebClientType = {})); +const BROWSER_TO_COMPANION_WEB_CLIENT = { + Chrome: CompanionWebClientType.CHROME, + Edge: CompanionWebClientType.EDGE, + Firefox: CompanionWebClientType.FIREFOX, + IE: CompanionWebClientType.IE, + Opera: CompanionWebClientType.OPERA, + Safari: CompanionWebClientType.SAFARI +}; +export const getCompanionWebClientType = ([os, browserName]) => { + if (browserName === 'Desktop') { + return os === 'Windows' ? CompanionWebClientType.UWP : CompanionWebClientType.ELECTRON; + } + return BROWSER_TO_COMPANION_WEB_CLIENT[browserName] || CompanionWebClientType.OTHER_WEB_CLIENT; +}; +export const getCompanionPlatformId = (browser) => { + return getCompanionWebClientType(browser).toString(); +}; +export const buildPairingQRData = (ref, noiseKeyB64, identityKeyB64, advB64, browser) => { + return ('https://wa.me/settings/linked_devices#' + + [ref, noiseKeyB64, identityKeyB64, advB64, getCompanionPlatformId(browser)].join(',')); +}; +//# sourceMappingURL=companion-reg-client-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/companion-reg-client-utils.js.map b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.js.map new file mode 100644 index 0000000..410ab78 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/companion-reg-client-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"companion-reg-client-utils.js","sourceRoot":"","sources":["../../src/Utils/companion-reg-client-utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,sBAWX;AAXD,WAAY,sBAAsB;IACjC,yEAAW,CAAA;IACX,uEAAU,CAAA;IACV,mEAAQ,CAAA;IACR,yEAAW,CAAA;IACX,+DAAM,CAAA;IACN,qEAAS,CAAA;IACT,uEAAU,CAAA;IACV,2EAAY,CAAA;IACZ,iEAAO,CAAA;IACP,2FAAoB,CAAA;AACrB,CAAC,EAXW,sBAAsB,KAAtB,sBAAsB,QAWjC;AAED,MAAM,+BAA+B,GAA2C;IAC/E,MAAM,EAAE,sBAAsB,CAAC,MAAM;IACrC,IAAI,EAAE,sBAAsB,CAAC,IAAI;IACjC,OAAO,EAAE,sBAAsB,CAAC,OAAO;IACvC,EAAE,EAAE,sBAAsB,CAAC,EAAE;IAC7B,KAAK,EAAE,sBAAsB,CAAC,KAAK;IACnC,MAAM,EAAE,sBAAsB,CAAC,MAAM;CACrC,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,EAAE,EAAE,WAAW,CAAuB,EAA0B,EAAE;IAC5G,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAA;IACvF,CAAC;IAED,OAAO,+BAA+B,CAAC,WAAW,CAAC,IAAI,sBAAsB,CAAC,gBAAgB,CAAA;AAC/F,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAA6B,EAAU,EAAE;IAC/E,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,GAAW,EACX,WAAmB,EACnB,cAAsB,EACtB,MAAc,EACd,OAA6B,EACpB,EAAE;IACX,OAAO,CACN,wCAAwC;QACxC,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACrF,CAAA;AACF,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/crypto.d.ts b/packages/transport/vendor/lib/Utils/crypto.d.ts new file mode 100644 index 0000000..42fff59 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/crypto.d.ts @@ -0,0 +1,37 @@ +import type { KeyPair } from '../Types/index.js'; +export { md5, hkdf } from 'whatsapp-rust-bridge'; +/** prefix version byte to the pub keys, required for some curve crypto functions */ +export declare const generateSignalPubKey: (pubKey: Uint8Array | Buffer) => Uint8Array | Buffer; +export declare const Curve: { + generateKeyPair: () => KeyPair; + sharedKey: (privateKey: Uint8Array, publicKey: Uint8Array) => Buffer; + sign: (privateKey: Uint8Array, buf: Uint8Array) => Uint8Array; + verify: (pubKey: Uint8Array, message: Uint8Array, signature: Uint8Array) => boolean; +}; +export declare const signedKeyPair: (identityKeyPair: KeyPair, keyId: number) => { + keyPair: KeyPair; + signature: Uint8Array; + keyId: number; +}; +/** + * encrypt AES 256 GCM; + * where the tag tag is suffixed to the ciphertext + * */ +export declare function aesEncryptGCM(plaintext: Uint8Array, key: Uint8Array, iv: Uint8Array, additionalData: Uint8Array): Buffer; +/** + * decrypt AES 256 GCM; + * where the auth tag is suffixed to the ciphertext + * */ +export declare function aesDecryptGCM(ciphertext: Uint8Array, key: Uint8Array, iv: Uint8Array, additionalData: Uint8Array): Buffer; +export declare function aesEncryptCTR(plaintext: Uint8Array, key: Uint8Array, iv: Uint8Array): Buffer; +export declare function aesDecryptCTR(ciphertext: Uint8Array, key: Uint8Array, iv: Uint8Array): Buffer; +/** decrypt AES 256 CBC; where the IV is prefixed to the buffer */ +export declare function aesDecrypt(buffer: Uint8Array, key: Uint8Array): Buffer; +/** decrypt AES 256 CBC */ +export declare function aesDecryptWithIV(buffer: Uint8Array, key: Uint8Array, IV: Uint8Array): Buffer; +export declare function aesEncrypt(buffer: Uint8Array, key: Uint8Array): Buffer; +export declare function aesEncrypWithIV(buffer: Buffer, key: Buffer, IV: Buffer): Buffer; +export declare function hmacSign(buffer: Buffer | Uint8Array, key: Buffer | Uint8Array, variant?: 'sha256' | 'sha512'): Buffer; +export declare function sha256(buffer: Buffer): Buffer; +export declare function derivePairingCodeKey(pairingCode: string, salt: Buffer): Promise; +//# sourceMappingURL=crypto.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/crypto.d.ts.map b/packages/transport/vendor/lib/Utils/crypto.d.ts.map new file mode 100644 index 0000000..b480840 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/crypto.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/Utils/crypto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAKhD,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,UAAU,GAAG,MAAM,0DACS,CAAA;AAEzE,eAAO,MAAM,KAAK;2BACI,OAAO;4BAQJ,UAAU,aAAa,UAAU;uBAItC,UAAU,OAAO,UAAU;qBAC7B,UAAU,WAAW,UAAU,aAAa,UAAU;CAQvE,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,iBAAiB,OAAO,EAAE,OAAO,MAAM;;;;CAOpE,CAAA;AAID;;;KAGK;AACL,wBAAgB,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,uBAI/G;AAED;;;KAGK;AACL,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,uBAUhH;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,uBAGnF;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,uBAGpF;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,uBAE7D;AAED,0BAA0B;AAC1B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,uBAGnF;AAGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,uBAI7D;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,uBAGtE;AAGD,wBAAgB,QAAQ,CACvB,MAAM,EAAE,MAAM,GAAG,UAAU,EAC3B,GAAG,EAAE,MAAM,GAAG,UAAU,EACxB,OAAO,GAAE,QAAQ,GAAG,QAAmB,2BAGvC;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,2BAEpC;AAED,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB7F"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/crypto.js b/packages/transport/vendor/lib/Utils/crypto.js new file mode 100644 index 0000000..5534efc --- /dev/null +++ b/packages/transport/vendor/lib/Utils/crypto.js @@ -0,0 +1,118 @@ +import { createCipheriv, createDecipheriv, createHash, createHmac, randomBytes } from 'crypto'; +import * as curve from 'libsignal/src/curve.js'; +import { KEY_BUNDLE_TYPE } from '../Defaults/index.js'; +export { md5, hkdf } from 'whatsapp-rust-bridge'; +// insure browser & node compatibility +const { subtle } = globalThis.crypto; +/** prefix version byte to the pub keys, required for some curve crypto functions */ +export const generateSignalPubKey = (pubKey) => pubKey.length === 33 ? pubKey : Buffer.concat([KEY_BUNDLE_TYPE, pubKey]); +export const Curve = { + generateKeyPair: () => { + const { pubKey, privKey } = curve.generateKeyPair(); + return { + private: Buffer.from(privKey), + // remove version byte + public: Buffer.from(pubKey.slice(1)) + }; + }, + sharedKey: (privateKey, publicKey) => { + const shared = curve.calculateAgreement(generateSignalPubKey(publicKey), privateKey); + return Buffer.from(shared); + }, + sign: (privateKey, buf) => curve.calculateSignature(privateKey, buf), + verify: (pubKey, message, signature) => { + try { + curve.verifySignature(generateSignalPubKey(pubKey), message, signature); + return true; + } + catch (error) { + return false; + } + } +}; +export const signedKeyPair = (identityKeyPair, keyId) => { + const preKey = Curve.generateKeyPair(); + const pubKey = generateSignalPubKey(preKey.public); + const signature = Curve.sign(identityKeyPair.private, pubKey); + return { keyPair: preKey, signature, keyId }; +}; +const GCM_TAG_LENGTH = 128 >> 3; +/** + * encrypt AES 256 GCM; + * where the tag tag is suffixed to the ciphertext + * */ +export function aesEncryptGCM(plaintext, key, iv, additionalData) { + const cipher = createCipheriv('aes-256-gcm', key, iv); + cipher.setAAD(additionalData); + return Buffer.concat([cipher.update(plaintext), cipher.final(), cipher.getAuthTag()]); +} +/** + * decrypt AES 256 GCM; + * where the auth tag is suffixed to the ciphertext + * */ +export function aesDecryptGCM(ciphertext, key, iv, additionalData) { + const decipher = createDecipheriv('aes-256-gcm', key, iv); + // decrypt additional adata + const enc = ciphertext.slice(0, ciphertext.length - GCM_TAG_LENGTH); + const tag = ciphertext.slice(ciphertext.length - GCM_TAG_LENGTH); + // set additional data + decipher.setAAD(additionalData); + decipher.setAuthTag(tag); + return Buffer.concat([decipher.update(enc), decipher.final()]); +} +export function aesEncryptCTR(plaintext, key, iv) { + const cipher = createCipheriv('aes-256-ctr', key, iv); + return Buffer.concat([cipher.update(plaintext), cipher.final()]); +} +export function aesDecryptCTR(ciphertext, key, iv) { + const decipher = createDecipheriv('aes-256-ctr', key, iv); + return Buffer.concat([decipher.update(ciphertext), decipher.final()]); +} +/** decrypt AES 256 CBC; where the IV is prefixed to the buffer */ +export function aesDecrypt(buffer, key) { + return aesDecryptWithIV(buffer.subarray(16), key, buffer.subarray(0, 16)); +} +/** decrypt AES 256 CBC */ +export function aesDecryptWithIV(buffer, key, IV) { + const aes = createDecipheriv('aes-256-cbc', key, IV); + return Buffer.concat([aes.update(buffer), aes.final()]); +} +// encrypt AES 256 CBC; where a random IV is prefixed to the buffer +export function aesEncrypt(buffer, key) { + const IV = randomBytes(16); + const aes = createCipheriv('aes-256-cbc', key, IV); + return Buffer.concat([IV, aes.update(buffer), aes.final()]); // prefix IV to the buffer +} +// encrypt AES 256 CBC with a given IV +export function aesEncrypWithIV(buffer, key, IV) { + const aes = createCipheriv('aes-256-cbc', key, IV); + return Buffer.concat([aes.update(buffer), aes.final()]); // prefix IV to the buffer +} +// sign HMAC using SHA 256 +export function hmacSign(buffer, key, variant = 'sha256') { + return createHmac(variant, key).update(buffer).digest(); +} +export function sha256(buffer) { + return createHash('sha256').update(buffer).digest(); +} +export async function derivePairingCodeKey(pairingCode, salt) { + // Convert inputs to formats Web Crypto API can work with + const encoder = new TextEncoder(); + const pairingCodeBuffer = encoder.encode(pairingCode); + const saltBuffer = new Uint8Array(salt instanceof Uint8Array ? salt : new Uint8Array(salt)); + // Import the pairing code as key material + const keyMaterial = await subtle.importKey('raw', pairingCodeBuffer, { name: 'PBKDF2' }, false, [ + 'deriveBits' + ]); + // Derive bits using PBKDF2 with the same parameters + // 2 << 16 = 131,072 iterations + const derivedBits = await subtle.deriveBits({ + name: 'PBKDF2', + salt: saltBuffer, + iterations: 2 << 16, + hash: 'SHA-256' + }, keyMaterial, 32 * 8 // 32 bytes * 8 = 256 bits + ); + return Buffer.from(derivedBits); +} +//# sourceMappingURL=crypto.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/crypto.js.map b/packages/transport/vendor/lib/Utils/crypto.js.map new file mode 100644 index 0000000..5b88171 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/crypto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/Utils/crypto.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/decode-wa-message.d.ts b/packages/transport/vendor/lib/Utils/decode-wa-message.d.ts new file mode 100644 index 0000000..4e3c598 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/decode-wa-message.d.ts @@ -0,0 +1,66 @@ +import type { WAMessage } from '../Types/index.js'; +import type { SignalRepositoryWithLIDStore } from '../Types/Signal.js'; +import { type BinaryNode } from '../WABinary/index.js'; +import type { ILogger } from './logger.js'; +export declare const getDecryptionJid: (sender: string, repository: SignalRepositoryWithLIDStore) => Promise; +export declare const NO_MESSAGE_FOUND_ERROR_TEXT = "Message absent from node"; +export declare const MISSING_KEYS_ERROR_TEXT = "Key used already or never filled"; +export declare const ACCOUNT_RESTRICTED_TEXT = "Your account has been restricted"; +export declare const DECRYPTION_RETRY_CONFIG: { + maxRetries: number; + baseDelayMs: number; + sessionRecordErrors: string[]; +}; +/** NACK reason codes we send to the server (client → server) */ +export declare const NACK_REASONS: { + SenderReachoutTimelocked: number; + ParsingError: number; + UnrecognizedStanza: number; + UnrecognizedStanzaClass: number; + UnrecognizedStanzaType: number; + InvalidProtobuf: number; + InvalidHostedCompanionStanza: number; + MissingMessageSecret: number; + SignalErrorOldCounter: number; + MessageDeletedOnPeer: number; + UnhandledError: number; + UnsupportedAdminRevoke: number; + UnsupportedLIDGroup: number; + DBOperationFailed: number; +}; +/** + * Server-side error codes returned in ack stanzas (server → client) that we + * currently have dedicated handlers for. Extend as more handlers are added. + * Distinct from the client-side NackReason enum (WAWebCreateNackFromStanza). + */ +export declare const SERVER_ERROR_CODES: { + /** + * 1:1 message missing privacy token (tctoken). Usually means the account is + * restricted: WhatsApp blocks starting new chats but preserves existing ones, + * since established chats already carry a tctoken. + */ + readonly MessageAccountRestriction: "463"; + /** Stanza validation failure (SMAX_INVALID) — likely stale device session */ + readonly SmaxInvalid: "479"; +}; +export declare const extractAddressingContext: (stanza: BinaryNode) => { + addressingMode: string; + senderAlt: string | undefined; + recipientAlt: string | undefined; +}; +/** + * Decode the received node as a message. + * @note this will only parse the message, not decrypt it + */ +export declare function decodeMessageNode(stanza: BinaryNode, meId: string, meLid: string): { + fullMessage: WAMessage; + author: string; + sender: string; +}; +export declare const decryptMessageNode: (stanza: BinaryNode, meId: string, meLid: string, repository: SignalRepositoryWithLIDStore, logger: ILogger) => { + fullMessage: WAMessage; + category: string | undefined; + author: string; + decrypt(): Promise; +}; +//# sourceMappingURL=decode-wa-message.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/decode-wa-message.d.ts.map b/packages/transport/vendor/lib/Utils/decode-wa-message.d.ts.map new file mode 100644 index 0000000..3c3dc90 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/decode-wa-message.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-wa-message.d.ts","sourceRoot":"","sources":["../../src/Utils/decode-wa-message.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAEN,KAAK,UAAU,EAWf,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,eAAO,MAAM,gBAAgB,GAAU,QAAQ,MAAM,EAAE,YAAY,4BAA4B,KAAG,OAAO,CAAC,MAAM,CAO/G,CAAA;AAuBD,eAAO,MAAM,2BAA2B,6BAA6B,CAAA;AACrE,eAAO,MAAM,uBAAuB,qCAAqC,CAAA;AACzE,eAAO,MAAM,uBAAuB,qCAAqC,CAAA;AAGzE,eAAO,MAAM,uBAAuB;;;;CAInC,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAexB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;IAC9B;;;;OAIG;;IAEH,6EAA6E;;CAEpE,CAAA;AAWV,eAAO,MAAM,wBAAwB,GAAI,QAAQ,UAAU;;;;CA6B1D,CAAA;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;;;EAkHhF;AAED,eAAO,MAAM,kBAAkB,GAC9B,QAAQ,UAAU,EAClB,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,YAAY,4BAA4B,EACxC,QAAQ,OAAO;;;;;CAoHf,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/decode-wa-message.js b/packages/transport/vendor/lib/Utils/decode-wa-message.js new file mode 100644 index 0000000..f2bc922 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/decode-wa-message.js @@ -0,0 +1,311 @@ +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidGroup, isJidMetaAI, isJidNewsletter, isJidStatusBroadcast, isLidUser, isPnUser +// transferDevice + } from '../WABinary/index.js'; +import { unpadRandomMax16 } from './generics.js'; +export const getDecryptionJid = async (sender, repository) => { + if (isLidUser(sender) || isHostedLidUser(sender)) { + return sender; + } + const mapped = await repository.lidMapping.getLIDForPN(sender); + return mapped || sender; +}; +const storeMappingFromEnvelope = async (stanza, sender, repository, decryptionJid, logger) => { + // TODO: Handle hosted IDs + const { senderAlt } = extractAddressingContext(stanza); + if (senderAlt && isLidUser(senderAlt) && isPnUser(sender) && decryptionJid === sender) { + try { + await repository.lidMapping.storeLIDPNMappings([{ lid: senderAlt, pn: sender }]); + await repository.migrateSession(sender, senderAlt); + logger.debug({ sender, senderAlt }, 'Stored LID mapping from envelope'); + } + catch (error) { + logger.warn({ sender, senderAlt, error }, 'Failed to store LID mapping'); + } + } +}; +export const NO_MESSAGE_FOUND_ERROR_TEXT = 'Message absent from node'; +export const MISSING_KEYS_ERROR_TEXT = 'Key used already or never filled'; +export const ACCOUNT_RESTRICTED_TEXT = 'Your account has been restricted'; +// Retry configuration for failed decryption +export const DECRYPTION_RETRY_CONFIG = { + maxRetries: 3, + baseDelayMs: 100, + sessionRecordErrors: ['No session record', 'SessionError: No session record'] +}; +/** NACK reason codes we send to the server (client → server) */ +export const NACK_REASONS = { + SenderReachoutTimelocked: 463, + ParsingError: 487, + UnrecognizedStanza: 488, + UnrecognizedStanzaClass: 489, + UnrecognizedStanzaType: 490, + InvalidProtobuf: 491, + InvalidHostedCompanionStanza: 493, + MissingMessageSecret: 495, + SignalErrorOldCounter: 496, + MessageDeletedOnPeer: 499, + UnhandledError: 500, + UnsupportedAdminRevoke: 550, + UnsupportedLIDGroup: 551, + DBOperationFailed: 552 +}; +/** + * Server-side error codes returned in ack stanzas (server → client) that we + * currently have dedicated handlers for. Extend as more handlers are added. + * Distinct from the client-side NackReason enum (WAWebCreateNackFromStanza). + */ +export const SERVER_ERROR_CODES = { + /** + * 1:1 message missing privacy token (tctoken). Usually means the account is + * restricted: WhatsApp blocks starting new chats but preserves existing ones, + * since established chats already carry a tctoken. + */ + MessageAccountRestriction: '463', + /** Stanza validation failure (SMAX_INVALID) — likely stale device session */ + SmaxInvalid: '479' +}; +export const extractAddressingContext = (stanza) => { + let senderAlt; + let recipientAlt; + const sender = stanza.attrs.participant || stanza.attrs.from; + const addressingMode = stanza.attrs.addressing_mode || (sender?.endsWith('lid') ? 'lid' : 'pn'); + if (addressingMode === 'lid') { + // Message is LID-addressed: sender is LID, extract corresponding PN + // without device data + senderAlt = stanza.attrs.participant_pn || stanza.attrs.sender_pn || stanza.attrs.peer_recipient_pn; + recipientAlt = stanza.attrs.recipient_pn; + // with device data + //if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt) + } + else { + // Message is PN-addressed: sender is PN, extract corresponding LID + // without device data + senderAlt = stanza.attrs.participant_lid || stanza.attrs.sender_lid || stanza.attrs.peer_recipient_lid; + recipientAlt = stanza.attrs.recipient_lid; + //with device data + //if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt) + } + return { + addressingMode, + senderAlt, + recipientAlt + }; +}; +/** + * Decode the received node as a message. + * @note this will only parse the message, not decrypt it + */ +export function decodeMessageNode(stanza, meId, meLid) { + let msgType; + let chatId; + let author; + let fromMe = false; + const msgId = stanza.attrs.id; + const from = stanza.attrs.from; + const participant = stanza.attrs.participant; + const recipient = stanza.attrs.recipient; + if (!msgId) { + throw new Boom('Invalid message stanza: missing id attribute', { data: stanza }); + } + if (!from) { + throw new Boom('Invalid message stanza: missing from attribute', { data: stanza }); + } + const addressingContext = extractAddressingContext(stanza); + const isMe = (jid) => areJidsSameUser(jid, meId); + const isMeLid = (jid) => areJidsSameUser(jid, meLid); + if (isPnUser(from) || isLidUser(from) || isHostedLidUser(from) || isHostedPnUser(from)) { + if (recipient && !isJidMetaAI(recipient)) { + if (!isMe(from) && !isMeLid(from)) { + throw new Boom('receipient present, but msg not from me', { data: stanza }); + } + if (isMe(from) || isMeLid(from)) { + fromMe = true; + } + chatId = recipient; + } + else { + chatId = from; + } + msgType = 'chat'; + author = from; + } + else if (isJidGroup(from)) { + if (!participant) { + throw new Boom('No participant in group message'); + } + if (isMe(participant) || isMeLid(participant)) { + fromMe = true; + } + msgType = 'group'; + author = participant; + chatId = from; + } + else if (isJidBroadcast(from)) { + if (!participant) { + throw new Boom('No participant in group message'); + } + const isParticipantMe = isMe(participant); + if (isJidStatusBroadcast(from)) { + msgType = isParticipantMe ? 'direct_peer_status' : 'other_status'; + } + else { + msgType = isParticipantMe ? 'peer_broadcast' : 'other_broadcast'; + } + fromMe = isParticipantMe; + chatId = from; + author = participant; + } + else if (isJidNewsletter(from)) { + msgType = 'newsletter'; + chatId = from; + author = from; + if (isMe(from) || isMeLid(from)) { + fromMe = true; + } + } + else { + throw new Boom('Unknown message type', { data: stanza }); + } + const pushname = stanza?.attrs?.notify; + const key = { + remoteJid: chatId, + remoteJidAlt: !isJidGroup(chatId) ? addressingContext.senderAlt : undefined, + remoteJidUsername: !isJidGroup(chatId) + ? stanza.attrs.peer_recipient_username || stanza.attrs.recipient_username + : undefined, + fromMe, + id: msgId, + participant, + participantAlt: isJidGroup(chatId) ? addressingContext.senderAlt : undefined, + participantUsername: stanza.attrs.participant ? stanza.attrs.participant_username : undefined, + addressingMode: addressingContext.addressingMode, + ...(msgType === 'newsletter' && stanza.attrs.server_id ? { server_id: stanza.attrs.server_id } : {}) + }; + const fullMessage = { + key, + category: stanza.attrs.category, + messageTimestamp: +stanza.attrs.t, + pushName: pushname, + broadcast: isJidBroadcast(from) + }; + if (key.fromMe) { + fullMessage.status = proto.WebMessageInfo.Status.SERVER_ACK; + } + return { + fullMessage, + author, + sender: msgType === 'chat' ? author : chatId + }; +} +export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => { + const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid); + return { + fullMessage, + category: stanza.attrs.category, + author, + async decrypt() { + let decryptables = 0; + if (Array.isArray(stanza.content)) { + for (const { tag, attrs, content } of stanza.content) { + if (tag === 'verified_name' && content instanceof Uint8Array) { + const cert = proto.VerifiedNameCertificate.decode(content); + const details = proto.VerifiedNameCertificate.Details.decode(cert.details); + fullMessage.verifiedBizName = details.verifiedName; + } + if (tag === 'unavailable' && attrs.type === 'view_once') { + fullMessage.key.isViewOnce = true; // TODO: remove from here and add a STUB TYPE + } + if (attrs.count && tag === 'enc') { + fullMessage.retryCount = Number(attrs.count); + } + if (tag !== 'enc' && tag !== 'plaintext') { + continue; + } + if (!(content instanceof Uint8Array)) { + continue; + } + decryptables += 1; + let msgBuffer; + const decryptionJid = await getDecryptionJid(author, repository); + if (tag !== 'plaintext') { + // TODO: Handle hosted devices + await storeMappingFromEnvelope(stanza, author, repository, decryptionJid, logger); + } + try { + const e2eType = tag === 'plaintext' ? 'plaintext' : attrs.type; + switch (e2eType) { + case 'skmsg': + msgBuffer = await repository.decryptGroupMessage({ + group: sender, + authorJid: author, + msg: content + }); + break; + case 'pkmsg': + case 'msg': + msgBuffer = await repository.decryptMessage({ + jid: decryptionJid, + type: e2eType, + ciphertext: content + }); + break; + case 'plaintext': + msgBuffer = content; + break; + default: + throw new Error(`Unknown e2e type: ${e2eType}`); + } + let msg = proto.Message.decode(e2eType !== 'plaintext' ? unpadRandomMax16(msgBuffer) : msgBuffer); + msg = msg.deviceSentMessage?.message || msg; + if (msg.senderKeyDistributionMessage) { + //eslint-disable-next-line max-depth + try { + await repository.processSenderKeyDistributionMessage({ + authorJid: author, + item: msg.senderKeyDistributionMessage + }); + } + catch (err) { + logger.error({ key: fullMessage.key, err }, 'failed to process sender key distribution message'); + } + } + if (fullMessage.message) { + Object.assign(fullMessage.message, msg); + } + else { + fullMessage.message = msg; + } + } + catch (err) { + const errorContext = { + key: fullMessage.key, + err, + messageType: tag === 'plaintext' ? 'plaintext' : attrs.type, + sender, + author, + isSessionRecordError: isSessionRecordError(err) + }; + logger.error(errorContext, 'failed to decrypt message'); + fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT; + fullMessage.messageStubParameters = [err.message.toString()]; + } + } + } + // if nothing was found to decrypt + if (!decryptables && !fullMessage.key?.isViewOnce) { + fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT; + fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT]; + } + } + }; +}; +/** + * Utility function to check if an error is related to missing session record + */ +function isSessionRecordError(error) { + const errorMessage = error?.message || error?.toString() || ''; + return DECRYPTION_RETRY_CONFIG.sessionRecordErrors.some(errorPattern => errorMessage.includes(errorPattern)); +} +//# sourceMappingURL=decode-wa-message.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/decode-wa-message.js.map b/packages/transport/vendor/lib/Utils/decode-wa-message.js.map new file mode 100644 index 0000000..c59729d --- /dev/null +++ b/packages/transport/vendor/lib/Utils/decode-wa-message.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-wa-message.js","sourceRoot":"","sources":["../../src/Utils/decode-wa-message.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/event-buffer.d.ts b/packages/transport/vendor/lib/Utils/event-buffer.d.ts new file mode 100644 index 0000000..017d6c2 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/event-buffer.d.ts @@ -0,0 +1,36 @@ +import type { BaileysEventEmitter, BaileysEventMap } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +/** + * A map that contains a list of all events that have been triggered + * + * Note, this can contain different type of events + * this can make processing events extremely efficient -- since everything + * can be done in a single transaction + */ +type BaileysEventData = Partial; +type BaileysBufferableEventEmitter = BaileysEventEmitter & { + /** Use to process events in a batch */ + process(handler: (events: BaileysEventData) => void | Promise): () => void; + /** + * starts buffering events, call flush() to release them + * */ + buffer(): void; + /** buffers all events till the promise completes */ + createBufferedFunction(work: (...args: A) => Promise): (...args: A) => Promise; + /** + * flushes all buffered events + * @returns returns true if the flush actually happened, otherwise false + */ + flush(): boolean; + /** is there an ongoing buffer */ + isBuffering(): boolean; + /** destroy the event buffer, clearing all resources */ + destroy(): void; +}; +/** + * The event buffer logically consolidates different events into a single event + * making the data processing more efficient. + */ +export declare const makeEventBuffer: (logger: ILogger) => BaileysBufferableEventEmitter; +export {}; +//# sourceMappingURL=event-buffer.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/event-buffer.d.ts.map b/packages/transport/vendor/lib/Utils/event-buffer.d.ts.map new file mode 100644 index 0000000..23023d5 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/event-buffer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"event-buffer.d.ts","sourceRoot":"","sources":["../../src/Utils/event-buffer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,mBAAmB,EACnB,eAAe,EAOf,MAAM,UAAU,CAAA;AAGjB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAqBvC;;;;;;GAMG;AACH,KAAK,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;AAIhD,KAAK,6BAA6B,GAAG,mBAAmB,GAAG;IAC1D,uCAAuC;IACvC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAA;IAChF;;SAEK;IACL,MAAM,IAAI,IAAI,CAAA;IACd,oDAAoD;IAEpD,sBAAsB,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACxG;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAA;IAChB,iCAAiC;IACjC,WAAW,IAAI,OAAO,CAAA;IACtB,uDAAuD;IACvD,OAAO,IAAI,IAAI,CAAA;CACf,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,OAAO,KAAG,6BA8LjD,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/event-buffer.js b/packages/transport/vendor/lib/Utils/event-buffer.js new file mode 100644 index 0000000..9b32e6f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/event-buffer.js @@ -0,0 +1,622 @@ +import EventEmitter from 'events'; +import { WAMessageStatus } from '../Types/index.js'; +import { trimUndefined } from './generics.js'; +import { updateMessageWithReaction, updateMessageWithReceipt } from './messages.js'; +import { isRealMessage, shouldIncrementChatUnread } from './process-message.js'; +const BUFFERABLE_EVENT = [ + 'messaging-history.set', + 'chats.upsert', + 'chats.update', + 'chats.delete', + 'contacts.upsert', + 'contacts.update', + 'messages.upsert', + 'messages.update', + 'messages.delete', + 'messages.reaction', + 'message-receipt.update', + 'groups.update' +]; +const BUFFERABLE_EVENT_SET = new Set(BUFFERABLE_EVENT); +/** + * The event buffer logically consolidates different events into a single event + * making the data processing more efficient. + */ +export const makeEventBuffer = (logger) => { + const ev = new EventEmitter(); + const historyCache = new Set(); + let data = makeBufferData(); + let isBuffering = false; + let bufferTimeout = null; + let flushPendingTimeout = null; // Add a specific timer for the debounced flush to prevent leak + let bufferCount = 0; + const MAX_HISTORY_CACHE_SIZE = 10000; // Limit the history cache size to prevent memory bloat + const BUFFER_TIMEOUT_MS = 30000; // 30 seconds + // take the generic event and fire it as a baileys event + ev.on('event', (map) => { + for (const event in map) { + ev.emit(event, map[event]); + } + }); + function buffer() { + if (!isBuffering) { + logger.debug('Event buffer activated'); + isBuffering = true; + bufferCount = 0; + if (bufferTimeout) { + clearTimeout(bufferTimeout); + } + bufferTimeout = setTimeout(() => { + if (isBuffering) { + logger.warn('Buffer timeout reached, auto-flushing'); + flush(); + } + }, BUFFER_TIMEOUT_MS); + } + // Always increment count when requested + bufferCount++; + } + function flush() { + if (!isBuffering) { + return false; + } + logger.debug({ bufferCount }, 'Flushing event buffer'); + isBuffering = false; + bufferCount = 0; + // Clear timeout + if (bufferTimeout) { + clearTimeout(bufferTimeout); + bufferTimeout = null; + } + if (flushPendingTimeout) { + clearTimeout(flushPendingTimeout); + flushPendingTimeout = null; + } + // Clear history cache if it exceeds the max size + if (historyCache.size > MAX_HISTORY_CACHE_SIZE) { + logger.debug({ cacheSize: historyCache.size }, 'Clearing history cache'); + historyCache.clear(); + } + const newData = makeBufferData(); + const chatUpdates = Object.values(data.chatUpdates); + let conditionalChatUpdatesLeft = 0; + for (const update of chatUpdates) { + if (update.conditional) { + conditionalChatUpdatesLeft += 1; + newData.chatUpdates[update.id] = update; + delete data.chatUpdates[update.id]; + } + } + const consolidatedData = consolidateEvents(data); + if (Object.keys(consolidatedData).length) { + ev.emit('event', consolidatedData); + } + data = newData; + logger.trace({ conditionalChatUpdatesLeft }, 'released buffered events'); + return true; + } + return { + process(handler) { + const listener = async (map) => { + await handler(map); + }; + ev.on('event', listener); + return () => { + ev.off('event', listener); + }; + }, + emit(event, evData) { + // Check if this is a messages.upsert with a different type than what's buffered + // If so, flush the buffered messages first to avoid type overshadowing + if (event === 'messages.upsert') { + const { type } = evData; + const existingUpserts = Object.values(data.messageUpserts); + if (existingUpserts.length > 0) { + const bufferedType = existingUpserts[0].type; + if (bufferedType !== type) { + logger.debug({ bufferedType, newType: type }, 'messages.upsert type mismatch, emitting buffered messages'); + // Emit the buffered messages with their correct type + ev.emit('event', { + 'messages.upsert': { + messages: existingUpserts.map(m => m.message), + type: bufferedType + } + }); + // Clear the message upserts from the buffer + data.messageUpserts = {}; + } + } + } + if (isBuffering && BUFFERABLE_EVENT_SET.has(event)) { + append(data, historyCache, event, evData, logger); + return true; + } + return ev.emit('event', { [event]: evData }); + }, + isBuffering() { + return isBuffering; + }, + buffer, + flush, + createBufferedFunction(work) { + return async (...args) => { + buffer(); + try { + const result = await work(...args); + // If this is the only buffer, flush after a small delay + if (bufferCount === 1) { + setTimeout(() => { + if (isBuffering && bufferCount === 1) { + flush(); + } + }, 100); // Small delay to allow nested buffers + } + return result; + } + catch (error) { + throw error; + } + finally { + bufferCount = Math.max(0, bufferCount - 1); + if (bufferCount === 0) { + // Only schedule ONE timeout, not 10,000 + if (!flushPendingTimeout) { + flushPendingTimeout = setTimeout(flush, 100); + } + } + } + }; + }, + on: (...args) => ev.on(...args), + off: (...args) => ev.off(...args), + removeAllListeners: (...args) => ev.removeAllListeners(...args), + destroy() { + // Clear buffer timeout + if (bufferTimeout) { + clearTimeout(bufferTimeout); + bufferTimeout = null; + } + if (flushPendingTimeout) { + clearTimeout(flushPendingTimeout); + flushPendingTimeout = null; + } + // Clear history cache + historyCache.clear(); + // Reset buffer data + data = makeBufferData(); + isBuffering = false; + bufferCount = 0; + // Remove all listeners + ev.removeAllListeners(); + logger.debug('Event buffer destroyed'); + } + }; +}; +const makeBufferData = () => { + return { + historySets: { + chats: {}, + messages: {}, + contacts: {}, + isLatest: false, + empty: true + }, + chatUpserts: {}, + chatUpdates: {}, + chatDeletes: new Set(), + contactUpserts: {}, + contactUpdates: {}, + messageUpserts: {}, + messageUpdates: {}, + messageReactions: {}, + messageDeletes: {}, + messageReceipts: {}, + groupUpdates: {} + }; +}; +function append(data, historyCache, event, +// eslint-disable-next-line @typescript-eslint/no-explicit-any +eventData, logger) { + switch (event) { + case 'messaging-history.set': + for (const chat of eventData.chats) { + const id = chat.id || ''; + const existingChat = data.historySets.chats[id]; + if (existingChat) { + existingChat.endOfHistoryTransferType = chat.endOfHistoryTransferType; + } + if (!existingChat && !historyCache.has(id)) { + data.historySets.chats[id] = chat; + historyCache.add(id); + absorbingChatUpdate(chat); + } + } + for (const contact of eventData.contacts) { + const existingContact = data.historySets.contacts[contact.id]; + if (existingContact) { + Object.assign(existingContact, trimUndefined(contact)); + } + else { + const historyContactId = `c:${contact.id}`; + const hasAnyName = contact.notify || contact.name || contact.verifiedName; + if (!historyCache.has(historyContactId) || hasAnyName) { + data.historySets.contacts[contact.id] = contact; + historyCache.add(historyContactId); + } + } + } + for (const message of eventData.messages) { + const key = stringifyMessageKey(message.key); + const existingMsg = data.historySets.messages[key]; + if (!existingMsg && !historyCache.has(key)) { + data.historySets.messages[key] = message; + historyCache.add(key); + } + } + data.historySets.empty = false; + data.historySets.syncType = eventData.syncType; + if (eventData.pastParticipants?.length) { + const merged = new Map(); + const sigOf = (p) => `${p.userJid || ''}:${p.leaveTs || ''}:${p.leaveReason || ''}`; + const ingest = (entry) => { + const key = entry.groupJid ?? JSON.stringify(entry); + const existing = merged.get(key); + if (!existing) { + merged.set(key, { ...entry, pastParticipants: [...(entry.pastParticipants || [])] }); + return; + } + const seen = new Set((existing.pastParticipants || []).map(sigOf)); + for (const p of entry.pastParticipants || []) { + const sig = sigOf(p); + if (!seen.has(sig)) { + existing.pastParticipants.push(p); + seen.add(sig); + } + } + }; + for (const entry of data.historySets.pastParticipants || []) + ingest(entry); + for (const entry of eventData.pastParticipants) + ingest(entry); + data.historySets.pastParticipants = [...merged.values()]; + } + data.historySets.progress = eventData.progress; + data.historySets.chunkOrder = eventData.chunkOrder; + data.historySets.peerDataRequestSessionId = eventData.peerDataRequestSessionId; + data.historySets.isLatest = eventData.isLatest || data.historySets.isLatest; + break; + case 'chats.upsert': + for (const chat of eventData) { + const id = chat.id || ''; + let upsert = data.chatUpserts[id]; + if (id && !upsert) { + upsert = data.historySets.chats[id]; + if (upsert) { + logger.debug({ chatId: id }, 'absorbed chat upsert in chat set'); + } + } + if (upsert) { + upsert = concatChats(upsert, chat); + } + else { + upsert = chat; + data.chatUpserts[id] = upsert; + } + absorbingChatUpdate(upsert); + if (data.chatDeletes.has(id)) { + data.chatDeletes.delete(id); + } + } + break; + case 'chats.update': + for (const update of eventData) { + const chatId = update.id; + const conditionMatches = update.conditional ? update.conditional(data) : true; + if (conditionMatches) { + delete update.conditional; + // if there is an existing upsert, merge the update into it + const upsert = data.historySets.chats[chatId] || data.chatUpserts[chatId]; + if (upsert) { + concatChats(upsert, update); + } + else { + // merge the update into the existing update + const chatUpdate = data.chatUpdates[chatId] || {}; + data.chatUpdates[chatId] = concatChats(chatUpdate, update); + } + } + else if (conditionMatches === undefined) { + // condition yet to be fulfilled + data.chatUpdates[chatId] = update; + } + // otherwise -- condition not met, update is invalid + // if the chat has been updated + // ignore any existing chat delete + if (data.chatDeletes.has(chatId)) { + data.chatDeletes.delete(chatId); + } + } + break; + case 'chats.delete': + for (const chatId of eventData) { + if (!data.chatDeletes.has(chatId)) { + data.chatDeletes.add(chatId); + } + // remove any prior updates & upserts + if (data.chatUpdates[chatId]) { + delete data.chatUpdates[chatId]; + } + if (data.chatUpserts[chatId]) { + delete data.chatUpserts[chatId]; + } + if (data.historySets.chats[chatId]) { + delete data.historySets.chats[chatId]; + } + } + break; + case 'contacts.upsert': + for (const contact of eventData) { + let upsert = data.contactUpserts[contact.id]; + if (!upsert) { + upsert = data.historySets.contacts[contact.id]; + if (upsert) { + logger.debug({ contactId: contact.id }, 'absorbed contact upsert in contact set'); + } + } + if (upsert) { + upsert = Object.assign(upsert, trimUndefined(contact)); + } + else { + upsert = contact; + data.contactUpserts[contact.id] = upsert; + } + if (data.contactUpdates[contact.id]) { + upsert = Object.assign(data.contactUpdates[contact.id], trimUndefined(contact)); + delete data.contactUpdates[contact.id]; + } + } + break; + case 'contacts.update': + const contactUpdates = eventData; + for (const update of contactUpdates) { + const id = update.id; + // merge into prior upsert + const upsert = data.historySets.contacts[id] || data.contactUpserts[id]; + if (upsert) { + Object.assign(upsert, update); + } + else { + // merge into prior update + const contactUpdate = data.contactUpdates[id] || {}; + data.contactUpdates[id] = Object.assign(contactUpdate, update); + } + } + break; + case 'messages.upsert': + const { messages, type } = eventData; + for (const message of messages) { + const key = stringifyMessageKey(message.key); + let existing = data.messageUpserts[key]?.message; + if (!existing) { + existing = data.historySets.messages[key]; + if (existing) { + logger.debug({ messageId: key }, 'absorbed message upsert in message set'); + } + } + if (existing) { + message.messageTimestamp = existing.messageTimestamp; + } + if (data.messageUpdates[key]) { + logger.debug('absorbed prior message update in message upsert'); + Object.assign(message, data.messageUpdates[key].update); + delete data.messageUpdates[key]; + } + if (data.historySets.messages[key]) { + data.historySets.messages[key] = message; + } + else { + data.messageUpserts[key] = { + message, + type: type === 'notify' || data.messageUpserts[key]?.type === 'notify' ? 'notify' : type + }; + } + } + break; + case 'messages.update': + const msgUpdates = eventData; + for (const { key, update } of msgUpdates) { + const keyStr = stringifyMessageKey(key); + const existing = data.historySets.messages[keyStr] || data.messageUpserts[keyStr]?.message; + if (existing) { + Object.assign(existing, update); + // if the message was received & read by us + // the chat counter must have been incremented + // so we need to decrement it + if (update.status === WAMessageStatus.READ && !key.fromMe) { + decrementChatReadCounterIfMsgDidUnread(existing); + } + } + else { + const msgUpdate = data.messageUpdates[keyStr] || { key, update: {} }; + Object.assign(msgUpdate.update, update); + data.messageUpdates[keyStr] = msgUpdate; + } + } + break; + case 'messages.delete': + const deleteData = eventData; + if ('keys' in deleteData) { + const { keys } = deleteData; + for (const key of keys) { + const keyStr = stringifyMessageKey(key); + if (!data.messageDeletes[keyStr]) { + data.messageDeletes[keyStr] = key; + } + if (data.messageUpserts[keyStr]) { + delete data.messageUpserts[keyStr]; + } + if (data.messageUpdates[keyStr]) { + delete data.messageUpdates[keyStr]; + } + } + } + else { + // TODO: add support + } + break; + case 'messages.reaction': + const reactions = eventData; + for (const { key, reaction } of reactions) { + const keyStr = stringifyMessageKey(key); + const existing = data.messageUpserts[keyStr]; + if (existing) { + updateMessageWithReaction(existing.message, reaction); + } + else { + data.messageReactions[keyStr] = data.messageReactions[keyStr] || { key, reactions: [] }; + updateMessageWithReaction(data.messageReactions[keyStr], reaction); + } + } + break; + case 'message-receipt.update': + const receipts = eventData; + for (const { key, receipt } of receipts) { + const keyStr = stringifyMessageKey(key); + const existing = data.messageUpserts[keyStr]; + if (existing) { + updateMessageWithReceipt(existing.message, receipt); + } + else { + data.messageReceipts[keyStr] = data.messageReceipts[keyStr] || { key, userReceipt: [] }; + updateMessageWithReceipt(data.messageReceipts[keyStr], receipt); + } + } + break; + case 'groups.update': + const groupUpdates = eventData; + for (const update of groupUpdates) { + const id = update.id; + const groupUpdate = data.groupUpdates[id] || {}; + if (!data.groupUpdates[id]) { + data.groupUpdates[id] = Object.assign(groupUpdate, update); + } + } + break; + default: + throw new Error(`"${event}" cannot be buffered`); + } + function absorbingChatUpdate(existing) { + const chatId = existing.id || ''; + const update = data.chatUpdates[chatId]; + if (update) { + const conditionMatches = update.conditional ? update.conditional(data) : true; + if (conditionMatches) { + delete update.conditional; + logger.debug({ chatId }, 'absorbed chat update in existing chat'); + Object.assign(existing, concatChats(update, existing)); + delete data.chatUpdates[chatId]; + } + else if (conditionMatches === false) { + logger.debug({ chatId }, 'chat update condition fail, removing'); + delete data.chatUpdates[chatId]; + } + } + } + function decrementChatReadCounterIfMsgDidUnread(message) { + // decrement chat unread counter + // if the message has already been marked read by us + const chatId = message.key.remoteJid; + const chat = data.chatUpdates[chatId] || data.chatUpserts[chatId]; + if (isRealMessage(message) && + shouldIncrementChatUnread(message) && + typeof chat?.unreadCount === 'number' && + chat.unreadCount > 0) { + logger.debug({ chatId: chat.id }, 'decrementing chat counter'); + chat.unreadCount -= 1; + if (chat.unreadCount === 0) { + delete chat.unreadCount; + } + } + } +} +function consolidateEvents(data) { + const map = {}; + if (!data.historySets.empty) { + map['messaging-history.set'] = { + chats: Object.values(data.historySets.chats), + messages: Object.values(data.historySets.messages), + contacts: Object.values(data.historySets.contacts), + pastParticipants: data.historySets.pastParticipants, + syncType: data.historySets.syncType, + progress: data.historySets.progress, + isLatest: data.historySets.isLatest, + chunkOrder: data.historySets.chunkOrder, + peerDataRequestSessionId: data.historySets.peerDataRequestSessionId + }; + } + const chatUpsertList = Object.values(data.chatUpserts); + if (chatUpsertList.length) { + map['chats.upsert'] = chatUpsertList; + } + const chatUpdateList = Object.values(data.chatUpdates); + if (chatUpdateList.length) { + map['chats.update'] = chatUpdateList; + } + const chatDeleteList = Array.from(data.chatDeletes); + if (chatDeleteList.length) { + map['chats.delete'] = chatDeleteList; + } + const messageUpsertList = Object.values(data.messageUpserts); + if (messageUpsertList.length) { + const type = messageUpsertList[0].type; + map['messages.upsert'] = { + messages: messageUpsertList.map(m => m.message), + type + }; + } + const messageUpdateList = Object.values(data.messageUpdates); + if (messageUpdateList.length) { + map['messages.update'] = messageUpdateList; + } + const messageDeleteList = Object.values(data.messageDeletes); + if (messageDeleteList.length) { + map['messages.delete'] = { keys: messageDeleteList }; + } + const messageReactionList = Object.values(data.messageReactions).flatMap(({ key, reactions }) => reactions.flatMap(reaction => ({ key, reaction }))); + if (messageReactionList.length) { + map['messages.reaction'] = messageReactionList; + } + const messageReceiptList = Object.values(data.messageReceipts).flatMap(({ key, userReceipt }) => userReceipt.flatMap(receipt => ({ key, receipt }))); + if (messageReceiptList.length) { + map['message-receipt.update'] = messageReceiptList; + } + const contactUpsertList = Object.values(data.contactUpserts); + if (contactUpsertList.length) { + map['contacts.upsert'] = contactUpsertList; + } + const contactUpdateList = Object.values(data.contactUpdates); + if (contactUpdateList.length) { + map['contacts.update'] = contactUpdateList; + } + const groupUpdateList = Object.values(data.groupUpdates); + if (groupUpdateList.length) { + map['groups.update'] = groupUpdateList; + } + return map; +} +function concatChats(a, b) { + if (b.unreadCount === null && // neutralize unread counter + a.unreadCount < 0) { + a.unreadCount = undefined; + b.unreadCount = undefined; + } + if (typeof a.unreadCount === 'number' && typeof b.unreadCount === 'number') { + b = { ...b }; + if (b.unreadCount >= 0) { + b.unreadCount = Math.max(b.unreadCount, 0) + Math.max(a.unreadCount, 0); + } + } + return Object.assign(a, b); +} +const stringifyMessageKey = (key) => `${key.remoteJid},${key.id},${key.fromMe ? '1' : '0'}`; +//# sourceMappingURL=event-buffer.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/event-buffer.js.map b/packages/transport/vendor/lib/Utils/event-buffer.js.map new file mode 100644 index 0000000..a087190 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/event-buffer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"event-buffer.js","sourceRoot":"","sources":["../../src/Utils/event-buffer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/generics.d.ts b/packages/transport/vendor/lib/Utils/generics.d.ts new file mode 100644 index 0000000..b0ec0a9 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/generics.d.ts @@ -0,0 +1,91 @@ +import { proto } from '../../WAProto/index.js'; +import type { BaileysEventEmitter, BaileysEventMap, ConnectionState, WACallUpdateType, WAMessageKey, WAVersion } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +export declare const BufferJSON: { + replacer: (k: any, value: any) => any; + reviver: (_: any, value: any) => any; +}; +export declare const getKeyAuthor: (key: WAMessageKey | undefined | null, meId?: string) => string; +export declare const isStringNullOrEmpty: (value: string | null | undefined) => value is null | undefined | ""; +export declare const writeRandomPadMax16: (msg: Uint8Array) => Buffer; +export declare const unpadRandomMax16: (e: Uint8Array | Buffer) => Uint8Array; +export declare const generateParticipantHashV2: (participants: string[]) => string; +export declare const encodeWAMessage: (message: proto.IMessage) => Buffer; +export declare const generateRegistrationId: () => number; +export declare const encodeBigEndian: (e: number, t?: number) => Uint8Array; +export declare const toNumber: (t: Long | number | null | undefined) => number; +/** unix timestamp of a date in seconds */ +export declare const unixTimestampSeconds: (date?: Date) => number; +export type DebouncedTimeout = ReturnType; +export declare const debouncedTimeout: (intervalMs?: number, task?: () => void) => { + start: (newIntervalMs?: number, newTask?: () => void) => void; + cancel: () => void; + setTask: (newTask: () => void) => () => void; + setInterval: (newInterval: number) => number; +}; +export declare const delay: (ms: number) => Promise; +export declare const delayCancellable: (ms: number) => { + delay: Promise; + cancel: () => void; +}; +export declare function promiseTimeout(ms: number | undefined, promise: (resolve: (v: T) => void, reject: (error: any) => void) => void): Promise; +export declare const generateMessageIDV2: (userId?: string) => string; +export declare const generateMessageID: () => string; +export declare function bindWaitForEvent(ev: BaileysEventEmitter, event: T): (check: (u: BaileysEventMap[T]) => Promise, timeoutMs?: number) => Promise; +export declare const bindWaitForConnectionUpdate: (ev: BaileysEventEmitter) => (check: (u: Partial) => Promise, timeoutMs?: number) => Promise; +/** + * utility that fetches latest baileys version from the master branch. + * Use to ensure your WA connection is always on the latest version + */ +export declare const fetchLatestBaileysVersion: (options?: RequestInit) => Promise<{ + version: WAVersion; + isLatest: boolean; + error?: undefined; +} | { + version: WAVersion; + isLatest: boolean; + error: unknown; +}>; +/** + * A utility that fetches the latest web version of whatsapp. + * Use to ensure your WA connection is always on the latest version + */ +export declare const fetchLatestWaWebVersion: (options?: RequestInit) => Promise<{ + version: WAVersion; + isLatest: boolean; + error?: undefined; +} | { + version: WAVersion; + isLatest: boolean; + error: unknown; +}>; +/** unique message tag prefix for MD clients */ +export declare const generateMdTagPrefix: () => string; +/** + * Given a type of receipt, returns what the new status of the message should be + * @param type type from receipt + */ +export declare const getStatusFromReceiptType: (type: string | undefined) => proto.WebMessageInfo.Status | undefined; +/** + * Stream errors generally provide a reason, map that to a baileys DisconnectReason + * @param reason the string reason given, eg. "conflict" + */ +export declare const getErrorCodeFromStreamError: (node: BinaryNode) => { + reason: string; + statusCode: number; +}; +export declare const getCallStatusFromNode: ({ tag, attrs }: BinaryNode) => WACallUpdateType; +export declare const getCodeFromWSError: (error: Error) => number; +/** + * Is the given platform WA business + * @param platform AuthenticationCreds.platform + */ +export declare const isWABusinessPlatform: (platform: string) => platform is "smba" | "smbi"; +export declare function trimUndefined(obj: { + [_: string]: any; +}): { + [_: string]: any; +}; +export declare function bytesToCrockford(buffer: Buffer): string; +export declare function encodeNewsletterMessage(message: proto.IMessage): Uint8Array; +//# sourceMappingURL=generics.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/generics.d.ts.map b/packages/transport/vendor/lib/Utils/generics.d.ts.map new file mode 100644 index 0000000..0888265 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/generics.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../src/Utils/generics.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/generics.js b/packages/transport/vendor/lib/Utils/generics.js new file mode 100644 index 0000000..848b1a1 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/generics.js @@ -0,0 +1,393 @@ +import { Boom } from '@hapi/boom'; +import { createHash, randomBytes } from 'crypto'; +import { proto } from '../../WAProto/index.js'; +const baileysVersion = [2, 3000, 1035194821]; +import { DisconnectReason } from '../Types/index.js'; +import { getAllBinaryNodeChildren, jidDecode } from '../WABinary/index.js'; +import { sha256 } from './crypto.js'; +export const BufferJSON = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + replacer: (k, value) => { + if (Buffer.isBuffer(value) || value instanceof Uint8Array || value?.type === 'Buffer') { + return { type: 'Buffer', data: Buffer.from(value?.data || value).toString('base64') }; + } + return value; + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + reviver: (_, value) => { + if (typeof value === 'object' && value !== null && value.type === 'Buffer' && typeof value.data === 'string') { + return Buffer.from(value.data, 'base64'); + } + if (typeof value === 'object' && value !== null && !Array.isArray(value)) { + const keys = Object.keys(value); + if (keys.length > 0 && keys.every(k => !isNaN(parseInt(k, 10)))) { + const values = Object.values(value); + if (values.every(v => typeof v === 'number')) { + return Buffer.from(values); + } + } + } + return value; + } +}; +export const getKeyAuthor = (key, meId = 'me') => (key?.fromMe ? meId : key?.participantAlt || key?.remoteJidAlt || key?.participant || key?.remoteJid) || ''; +export const isStringNullOrEmpty = (value) => +// eslint-disable-next-line eqeqeq +value == null || value === ''; +export const writeRandomPadMax16 = (msg) => { + const pad = randomBytes(1); + const padLength = (pad[0] & 0x0f) + 1; + return Buffer.concat([msg, Buffer.alloc(padLength, padLength)]); +}; +export const unpadRandomMax16 = (e) => { + const t = new Uint8Array(e); + if (0 === t.length) { + throw new Error('unpadPkcs7 given empty bytes'); + } + var r = t[t.length - 1]; + if (r > t.length) { + throw new Error(`unpad given ${t.length} bytes, but pad is ${r}`); + } + return new Uint8Array(t.buffer, t.byteOffset, t.length - r); +}; +// code is inspired by whatsmeow +export const generateParticipantHashV2 = (participants) => { + participants.sort(); + const sha256Hash = sha256(Buffer.from(participants.join(''))).toString('base64'); + return '2:' + sha256Hash.slice(0, 6); +}; +export const encodeWAMessage = (message) => writeRandomPadMax16(proto.Message.encode(message).finish()); +export const generateRegistrationId = () => { + return Uint16Array.from(randomBytes(2))[0] & 16383; +}; +export const encodeBigEndian = (e, t = 4) => { + let r = e; + const a = new Uint8Array(t); + for (let i = t - 1; i >= 0; i--) { + a[i] = 255 & r; + r >>>= 8; + } + return a; +}; +export const toNumber = (t) => typeof t === 'object' && t ? ('toNumber' in t ? t.toNumber() : t.low) : t || 0; +/** unix timestamp of a date in seconds */ +export const unixTimestampSeconds = (date = new Date()) => Math.floor(date.getTime() / 1000); +export const debouncedTimeout = (intervalMs = 1000, task) => { + let timeout; + return { + start: (newIntervalMs, newTask) => { + task = newTask || task; + intervalMs = newIntervalMs || intervalMs; + timeout && clearTimeout(timeout); + timeout = setTimeout(() => task?.(), intervalMs); + }, + cancel: () => { + timeout && clearTimeout(timeout); + timeout = undefined; + }, + setTask: (newTask) => (task = newTask), + setInterval: (newInterval) => (intervalMs = newInterval) + }; +}; +export const delay = (ms) => delayCancellable(ms).delay; +export const delayCancellable = (ms) => { + const stack = new Error().stack; + let timeout; + let reject; + const delay = new Promise((resolve, _reject) => { + timeout = setTimeout(resolve, ms); + reject = _reject; + }); + const cancel = () => { + clearTimeout(timeout); + reject(new Boom('Cancelled', { + statusCode: 500, + data: { + stack + } + })); + }; + return { delay, cancel }; +}; +export async function promiseTimeout(ms, promise) { + if (!ms) { + return new Promise(promise); + } + const stack = new Error().stack; + // Create a promise that rejects in milliseconds + const { delay, cancel } = delayCancellable(ms); + const p = new Promise((resolve, reject) => { + delay + .then(() => reject(new Boom('Timed Out', { + statusCode: DisconnectReason.timedOut, + data: { + stack + } + }))) + .catch(err => reject(err)); + promise(resolve, reject); + }).finally(cancel); + return p; +} +// inspired from whatsmeow code +// https://github.com/tulir/whatsmeow/blob/64bc969fbe78d31ae0dd443b8d4c80a5d026d07a/send.go#L42 +export const generateMessageIDV2 = (userId) => { + const data = Buffer.alloc(8 + 20 + 16); + data.writeBigUInt64BE(BigInt(Math.floor(Date.now() / 1000))); + if (userId) { + const id = jidDecode(userId); + if (id?.user) { + data.write(id.user, 8); + data.write('@c.us', 8 + id.user.length); + } + } + const random = randomBytes(16); + random.copy(data, 28); + const hash = createHash('sha256').update(data).digest(); + return '3EB0' + hash.toString('hex').toUpperCase().substring(0, 18); +}; +// generate a random ID to attach to a message +export const generateMessageID = () => '3EB0' + randomBytes(18).toString('hex').toUpperCase(); +export function bindWaitForEvent(ev, event) { + return async (check, timeoutMs) => { + let listener; + let closeListener; + await promiseTimeout(timeoutMs, (resolve, reject) => { + closeListener = ({ connection, lastDisconnect }) => { + if (connection === 'close') { + reject(lastDisconnect?.error || new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed })); + } + }; + ev.on('connection.update', closeListener); + listener = async (update) => { + if (await check(update)) { + resolve(); + } + }; + ev.on(event, listener); + }).finally(() => { + ev.off(event, listener); + ev.off('connection.update', closeListener); + }); + }; +} +export const bindWaitForConnectionUpdate = (ev) => bindWaitForEvent(ev, 'connection.update'); +/** + * utility that fetches latest baileys version from the master branch. + * Use to ensure your WA connection is always on the latest version + */ +export const fetchLatestBaileysVersion = async (options = {}) => { + const URL = 'https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/index.ts'; + try { + const response = await fetch(URL, { + dispatcher: options.dispatcher, + method: 'GET', + headers: options.headers + }); + if (!response.ok) { + throw new Boom(`Failed to fetch latest Baileys version: ${response.statusText}`, { statusCode: response.status }); + } + const text = await response.text(); + // Extract version from line 7 (const version = [...]) + const lines = text.split('\n'); + const versionLine = lines[6]; // Line 7 (0-indexed) + const versionMatch = versionLine.match(/const version = \[(\d+),\s*(\d+),\s*(\d+)\]/); + if (versionMatch) { + const version = [parseInt(versionMatch[1]), parseInt(versionMatch[2]), parseInt(versionMatch[3])]; + return { + version, + isLatest: true + }; + } + else { + throw new Error('Could not parse version from Defaults/index.ts'); + } + } + catch (error) { + return { + version: baileysVersion, + isLatest: false, + error + }; + } +}; +/** + * A utility that fetches the latest web version of whatsapp. + * Use to ensure your WA connection is always on the latest version + */ +export const fetchLatestWaWebVersion = async (options = {}) => { + try { + // Absolute minimal headers required to bypass anti-bot detection + const defaultHeaders = { + 'sec-fetch-site': 'none', + 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' + }; + const headers = { ...defaultHeaders, ...options.headers }; + const response = await fetch('https://web.whatsapp.com/sw.js', { + ...options, + method: 'GET', + headers + }); + if (!response.ok) { + throw new Boom(`Failed to fetch sw.js: ${response.statusText}`, { statusCode: response.status }); + } + const data = await response.text(); + const regex = /\\?"client_revision\\?":\s*(\d+)/; + const match = data.match(regex); + if (!match?.[1]) { + return { + version: baileysVersion, + isLatest: false, + error: { + message: 'Could not find client revision in the fetched content' + } + }; + } + const clientRevision = match[1]; + return { + version: [2, 3000, +clientRevision], + isLatest: true + }; + } + catch (error) { + return { + version: baileysVersion, + isLatest: false, + error + }; + } +}; +/** unique message tag prefix for MD clients */ +export const generateMdTagPrefix = () => { + const bytes = randomBytes(4); + return `${bytes.readUInt16BE()}.${bytes.readUInt16BE(2)}-`; +}; +const STATUS_MAP = { + sender: proto.WebMessageInfo.Status.SERVER_ACK, + played: proto.WebMessageInfo.Status.PLAYED, + read: proto.WebMessageInfo.Status.READ, + 'read-self': proto.WebMessageInfo.Status.READ +}; +/** + * Given a type of receipt, returns what the new status of the message should be + * @param type type from receipt + */ +export const getStatusFromReceiptType = (type) => { + const status = STATUS_MAP[type]; + if (typeof type === 'undefined') { + return proto.WebMessageInfo.Status.DELIVERY_ACK; + } + return status; +}; +const CODE_MAP = { + conflict: DisconnectReason.connectionReplaced +}; +/** + * Stream errors generally provide a reason, map that to a baileys DisconnectReason + * @param reason the string reason given, eg. "conflict" + */ +export const getErrorCodeFromStreamError = (node) => { + const [reasonNode] = getAllBinaryNodeChildren(node); + let reason = reasonNode?.tag || 'unknown'; + const statusCode = +(node.attrs.code || CODE_MAP[reason] || DisconnectReason.badSession); + if (statusCode === DisconnectReason.restartRequired) { + reason = 'restart required'; + } + return { + reason, + statusCode + }; +}; +export const getCallStatusFromNode = ({ tag, attrs }) => { + let status; + switch (tag) { + case 'offer': + case 'offer_notice': + status = 'offer'; + break; + case 'terminate': + if (attrs.reason === 'timeout') { + status = 'timeout'; + } + else { + //fired when accepted/rejected/timeout/caller hangs up + status = 'terminate'; + } + break; + case 'preaccept': + status = 'preaccept'; + break; + case 'transport': + status = 'transport'; + break; + case 'relaylatency': + status = 'relaylatency'; + break; + case 'reject': + status = 'reject'; + break; + case 'accept': + status = 'accept'; + break; + default: + status = 'ringing'; + break; + } + return status; +}; +const UNEXPECTED_SERVER_CODE_TEXT = 'Unexpected server response: '; +export const getCodeFromWSError = (error) => { + let statusCode = 500; + if (error?.message?.includes(UNEXPECTED_SERVER_CODE_TEXT)) { + const code = +error?.message.slice(UNEXPECTED_SERVER_CODE_TEXT.length); + if (!Number.isNaN(code) && code >= 400) { + statusCode = code; + } + } + else if ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + error?.code?.startsWith('E') || + error?.message?.includes('timed out')) { + // handle ETIMEOUT, ENOTFOUND etc + statusCode = 408; + } + return statusCode; +}; +/** + * Is the given platform WA business + * @param platform AuthenticationCreds.platform + */ +export const isWABusinessPlatform = (platform) => { + return platform === 'smbi' || platform === 'smba'; +}; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function trimUndefined(obj) { + for (const key in obj) { + if (typeof obj[key] === 'undefined') { + delete obj[key]; + } + } + return obj; +} +const CROCKFORD_CHARACTERS = '123456789ABCDEFGHJKLMNPQRSTVWXYZ'; +export function bytesToCrockford(buffer) { + let value = 0; + let bitCount = 0; + const crockford = []; + for (const element of buffer) { + value = (value << 8) | (element & 0xff); + bitCount += 8; + while (bitCount >= 5) { + crockford.push(CROCKFORD_CHARACTERS.charAt((value >>> (bitCount - 5)) & 31)); + bitCount -= 5; + } + } + if (bitCount > 0) { + crockford.push(CROCKFORD_CHARACTERS.charAt((value << (5 - bitCount)) & 31)); + } + return crockford.join(''); +} +export function encodeNewsletterMessage(message) { + return proto.Message.encode(message).finish(); +} +//# sourceMappingURL=generics.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/generics.js.map b/packages/transport/vendor/lib/Utils/generics.js.map new file mode 100644 index 0000000..0f17fff --- /dev/null +++ b/packages/transport/vendor/lib/Utils/generics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/Utils/generics.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/history.d.ts b/packages/transport/vendor/lib/Utils/history.d.ts new file mode 100644 index 0000000..93ccf2f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/history.d.ts @@ -0,0 +1,24 @@ +import { proto } from '../../WAProto/index.js'; +import type { Chat, Contact, LIDMapping, WAMessage } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +export declare const downloadHistory: (msg: proto.Message.IHistorySyncNotification, options: RequestInit) => Promise; +export declare const processHistoryMessage: (item: proto.IHistorySync, logger?: ILogger) => { + chats: Chat[]; + contacts: Contact[]; + messages: WAMessage[]; + lidPnMappings: LIDMapping[]; + pastParticipants: proto.IPastParticipants[] | null | undefined; + syncType: proto.HistorySync.HistorySyncType | null | undefined; + progress: number | null | undefined; +}; +export declare const downloadAndProcessHistorySyncNotification: (msg: proto.Message.IHistorySyncNotification, options: RequestInit, logger?: ILogger) => Promise<{ + chats: Chat[]; + contacts: Contact[]; + messages: WAMessage[]; + lidPnMappings: LIDMapping[]; + pastParticipants: proto.IPastParticipants[] | null | undefined; + syncType: proto.HistorySync.HistorySyncType | null | undefined; + progress: number | null | undefined; +}>; +export declare const getHistoryMsg: (message: proto.IMessage) => proto.Message.IHistorySyncNotification; +//# sourceMappingURL=history.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/history.d.ts.map b/packages/transport/vendor/lib/Utils/history.d.ts.map new file mode 100644 index 0000000..e56da7e --- /dev/null +++ b/packages/transport/vendor/lib/Utils/history.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/Utils/history.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAwB1C,eAAO,MAAM,eAAe,GAAU,KAAK,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,SAAS,WAAW,+BAYtG,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,MAAM,KAAK,CAAC,YAAY,EAAE,SAAS,OAAO;;;;;;;;CA6F/E,CAAA;AAED,eAAO,MAAM,yCAAyC,GACrD,KAAK,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAC3C,SAAS,WAAW,EACpB,SAAS,OAAO;;;;;;;;EAUhB,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,KAAK,CAAC,QAAQ,2CAKpD,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/history.js b/packages/transport/vendor/lib/Utils/history.js new file mode 100644 index 0000000..b869426 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/history.js @@ -0,0 +1,134 @@ +import { pipeline } from 'stream/promises'; +import { promisify } from 'util'; +import { createInflate, inflate } from 'zlib'; +import { proto } from '../../WAProto/index.js'; +import { WAMessageStubType } from '../Types/index.js'; +import { isHostedLidUser, isHostedPnUser, isLidUser, isPnUser } from '../WABinary/index.js'; +import { toNumber } from './generics.js'; +import { normalizeMessageContent } from './messages.js'; +import { downloadContentFromMessage } from './messages-media.js'; +const inflatePromise = promisify(inflate); +const extractPnFromMessages = (messages) => { + for (const msgItem of messages) { + const message = msgItem.message; + // Only extract from outgoing messages (fromMe: true) in 1:1 chats + // because userReceipt.userJid is the recipient's JID + if (!message?.key?.fromMe || !message.userReceipt?.length) { + continue; + } + const userJid = message.userReceipt[0]?.userJid; + if (userJid && (isPnUser(userJid) || isHostedPnUser(userJid))) { + return userJid; + } + } + return undefined; +}; +export const downloadHistory = async (msg, options) => { + const stream = await downloadContentFromMessage(msg, 'md-msg-hist', { options }); + // Pipe decrypted stream directly through zlib inflate + // This avoids allocating an intermediate buffer for the compressed data + const inflater = createInflate(); + const chunks = []; + inflater.on('data', (chunk) => chunks.push(chunk)); + await pipeline(stream, inflater); + const buffer = Buffer.concat(chunks); + const syncData = proto.HistorySync.decode(buffer); + return syncData; +}; +export const processHistoryMessage = (item, logger) => { + const messages = []; + const contacts = []; + const chats = []; + const lidPnMappings = []; + logger?.trace({ progress: item.progress }, 'processing history of type ' + item.syncType?.toString()); + // Extract LID-PN mappings for all sync types + for (const m of item.phoneNumberToLidMappings || []) { + if (m.lidJid && m.pnJid) { + lidPnMappings.push({ lid: m.lidJid, pn: m.pnJid }); + } + } + switch (item.syncType) { + case proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP: + case proto.HistorySync.HistorySyncType.RECENT: + case proto.HistorySync.HistorySyncType.FULL: + case proto.HistorySync.HistorySyncType.ON_DEMAND: + for (const chat of item.conversations) { + contacts.push({ + id: chat.id, + name: chat.displayName || chat.name || chat.username || undefined, + username: chat.username || undefined, + lid: chat.lidJid || chat.accountLid || undefined, + phoneNumber: chat.pnJid || undefined + }); + const chatId = chat.id; + const isLid = isLidUser(chatId) || isHostedLidUser(chatId); + const isPn = isPnUser(chatId) || isHostedPnUser(chatId); + if (isLid && chat.pnJid) { + lidPnMappings.push({ lid: chatId, pn: chat.pnJid }); + } + else if (isPn && chat.lidJid) { + lidPnMappings.push({ lid: chat.lidJid, pn: chatId }); + } + else if (isLid && !chat.pnJid) { + // Fallback: extract PN from userReceipt in messages when pnJid is missing + const pnFromReceipt = extractPnFromMessages(chat.messages || []); + if (pnFromReceipt) { + lidPnMappings.push({ lid: chatId, pn: pnFromReceipt }); + } + } + const msgs = chat.messages || []; + delete chat.messages; + for (const item of msgs) { + const message = item.message; + messages.push(message); + if (!chat.messages?.length) { + // keep only the most recent message in the chat array + chat.messages = [{ message }]; + } + if (!message.key.fromMe && !chat.lastMessageRecvTimestamp) { + chat.lastMessageRecvTimestamp = toNumber(message.messageTimestamp); + } + if ((message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_BSP || + message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_FB) && + message.messageStubParameters?.[0]) { + contacts.push({ + id: message.key.participant || message.key.remoteJid, + verifiedName: message.messageStubParameters?.[0] + }); + } + } + chats.push(chat); + } + break; + case proto.HistorySync.HistorySyncType.PUSH_NAME: + for (const c of item.pushnames) { + contacts.push({ id: c.id, notify: c.pushname }); + } + break; + } + return { + chats, + contacts, + messages, + lidPnMappings, + pastParticipants: item.pastParticipants, + syncType: item.syncType, + progress: item.progress + }; +}; +export const downloadAndProcessHistorySyncNotification = async (msg, options, logger) => { + let historyMsg; + if (msg.initialHistBootstrapInlinePayload) { + historyMsg = proto.HistorySync.decode(await inflatePromise(msg.initialHistBootstrapInlinePayload)); + } + else { + historyMsg = await downloadHistory(msg, options); + } + return processHistoryMessage(historyMsg, logger); +}; +export const getHistoryMsg = (message) => { + const normalizedContent = !!message ? normalizeMessageContent(message) : undefined; + const anyHistoryMsg = normalizedContent?.protocolMessage?.historySyncNotification; + return anyHistoryMsg; +}; +//# sourceMappingURL=history.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/history.js.map b/packages/transport/vendor/lib/Utils/history.js.map new file mode 100644 index 0000000..aebe2ce --- /dev/null +++ b/packages/transport/vendor/lib/Utils/history.js.map @@ -0,0 +1 @@ +{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/Utils/history.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/identity-change-handler.d.ts b/packages/transport/vendor/lib/Utils/identity-change-handler.d.ts new file mode 100644 index 0000000..726866e --- /dev/null +++ b/packages/transport/vendor/lib/Utils/identity-change-handler.d.ts @@ -0,0 +1,44 @@ +import NodeCache from '@cacheable/node-cache'; +import { type BinaryNode } from '../WABinary/index.js'; +import type { ILogger } from './logger.js'; +export type IdentityChangeResult = { + action: 'no_identity_node'; +} | { + action: 'invalid_notification'; +} | { + action: 'skipped_companion_device'; + device: number; +} | { + action: 'skipped_self_primary'; +} | { + action: 'debounced'; +} | { + action: 'skipped_offline'; +} | { + action: 'skipped_no_session'; +} | { + action: 'session_refreshed'; +} | { + action: 'session_refresh_failed'; + error: unknown; +}; +export type IdentityChangeContext = { + meId: string | undefined; + meLid: string | undefined; + validateSession: (jid: string) => Promise<{ + exists: boolean; + reason?: string; + }>; + assertSessions: (jids: string[], force?: boolean) => Promise; + debounceCache: NodeCache; + logger: ILogger; + /** + * Invoked right before `assertSessions` is called for an existing-session identity change. + * Used to kick off fire-and-forget side effects (e.g. tctoken re-issuance) in the same + * order WA Web does — i.e. before the E2E session is re-established. + * Must not throw; implementations are responsible for their own error handling. + */ + onBeforeSessionRefresh?: (jid: string) => void; +}; +export declare function handleIdentityChange(node: BinaryNode, ctx: IdentityChangeContext): Promise; +//# sourceMappingURL=identity-change-handler.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/identity-change-handler.d.ts.map b/packages/transport/vendor/lib/Utils/identity-change-handler.d.ts.map new file mode 100644 index 0000000..54b6a56 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/identity-change-handler.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"identity-change-handler.d.ts","sourceRoot":"","sources":["../../src/Utils/identity-change-handler.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAmB,KAAK,UAAU,EAAiC,MAAM,aAAa,CAAA;AAE7F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,MAAM,MAAM,oBAAoB,GAC7B;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC9B;IAAE,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,0BAA0B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,GAC7B;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAChC;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,wBAAwB,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/E,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACjC,MAAM,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C,CAAA;AAED,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,qBAAqB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAwD/B"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/identity-change-handler.js b/packages/transport/vendor/lib/Utils/identity-change-handler.js new file mode 100644 index 0000000..d4e1b48 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/identity-change-handler.js @@ -0,0 +1,50 @@ +import NodeCache from '@cacheable/node-cache'; +import { areJidsSameUser, getBinaryNodeChild, jidDecode } from '../WABinary/index.js'; +import { isStringNullOrEmpty } from './generics.js'; +export async function handleIdentityChange(node, ctx) { + const from = node.attrs.from; + if (!from) { + return { action: 'invalid_notification' }; + } + const identityNode = getBinaryNodeChild(node, 'identity'); + if (!identityNode) { + return { action: 'no_identity_node' }; + } + ctx.logger.info({ jid: from }, 'identity changed'); + const decoded = jidDecode(from); + if (decoded?.device && decoded.device !== 0) { + ctx.logger.debug({ jid: from, device: decoded.device }, 'ignoring identity change from companion device'); + return { action: 'skipped_companion_device', device: decoded.device }; + } + const isSelfPrimary = ctx.meId && (areJidsSameUser(from, ctx.meId) || (ctx.meLid && areJidsSameUser(from, ctx.meLid))); + if (isSelfPrimary) { + ctx.logger.info({ jid: from }, 'self primary identity changed'); + return { action: 'skipped_self_primary' }; + } + if (ctx.debounceCache.get(from)) { + ctx.logger.debug({ jid: from }, 'skipping identity assert (debounced)'); + return { action: 'debounced' }; + } + ctx.debounceCache.set(from, true); + const isOfflineNotification = !isStringNullOrEmpty(node.attrs.offline); + const hasExistingSession = await ctx.validateSession(from); + if (!hasExistingSession.exists) { + ctx.logger.debug({ jid: from }, 'no old session, skipping session refresh'); + return { action: 'skipped_no_session' }; + } + ctx.logger.debug({ jid: from }, 'old session exists, will refresh session'); + if (isOfflineNotification) { + ctx.logger.debug({ jid: from }, 'skipping session refresh during offline processing'); + return { action: 'skipped_offline' }; + } + ctx.onBeforeSessionRefresh?.(from); + try { + await ctx.assertSessions([from], true); + return { action: 'session_refreshed' }; + } + catch (error) { + ctx.logger.warn({ error, jid: from }, 'failed to assert sessions after identity change'); + return { action: 'session_refresh_failed', error }; + } +} +//# sourceMappingURL=identity-change-handler.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/identity-change-handler.js.map b/packages/transport/vendor/lib/Utils/identity-change-handler.js.map new file mode 100644 index 0000000..492fc25 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/identity-change-handler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"identity-change-handler.js","sourceRoot":"","sources":["../../src/Utils/identity-change-handler.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/index.d.ts b/packages/transport/vendor/lib/Utils/index.d.ts new file mode 100644 index 0000000..9cf7fca --- /dev/null +++ b/packages/transport/vendor/lib/Utils/index.d.ts @@ -0,0 +1,22 @@ +export * from './generics.js'; +export * from './decode-wa-message.js'; +export * from './messages.js'; +export * from './messages-media.js'; +export * from './validate-connection.js'; +export * from './crypto.js'; +export * from './signal.js'; +export * from './noise-handler.js'; +export * from './history.js'; +export * from './chat-utils.js'; +export * from './lt-hash.js'; +export * from './auth-utils.js'; +export * from './use-multi-file-auth-state.js'; +export * from './link-preview.js'; +export * from './event-buffer.js'; +export * from './process-message.js'; +export * from './message-retry-manager.js'; +export * from './browser-utils.js'; +export * from './companion-reg-client-utils.js'; +export * from './identity-change-handler.js'; +export * from './stanza-ack.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/index.d.ts.map b/packages/transport/vendor/lib/Utils/index.d.ts.map new file mode 100644 index 0000000..fb910fa --- /dev/null +++ b/packages/transport/vendor/lib/Utils/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/index.js b/packages/transport/vendor/lib/Utils/index.js new file mode 100644 index 0000000..aea2add --- /dev/null +++ b/packages/transport/vendor/lib/Utils/index.js @@ -0,0 +1,22 @@ +export * from './generics.js'; +export * from './decode-wa-message.js'; +export * from './messages.js'; +export * from './messages-media.js'; +export * from './validate-connection.js'; +export * from './crypto.js'; +export * from './signal.js'; +export * from './noise-handler.js'; +export * from './history.js'; +export * from './chat-utils.js'; +export * from './lt-hash.js'; +export * from './auth-utils.js'; +export * from './use-multi-file-auth-state.js'; +export * from './link-preview.js'; +export * from './event-buffer.js'; +export * from './process-message.js'; +export * from './message-retry-manager.js'; +export * from './browser-utils.js'; +export * from './companion-reg-client-utils.js'; +export * from './identity-change-handler.js'; +export * from './stanza-ack.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/index.js.map b/packages/transport/vendor/lib/Utils/index.js.map new file mode 100644 index 0000000..281388c --- /dev/null +++ b/packages/transport/vendor/lib/Utils/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/link-preview.d.ts b/packages/transport/vendor/lib/Utils/link-preview.d.ts new file mode 100644 index 0000000..cd2a248 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/link-preview.d.ts @@ -0,0 +1,21 @@ +import type { WAMediaUploadFunction, WAUrlInfo } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +export type URLGenerationOptions = { + thumbnailWidth: number; + fetchOpts: { + /** Timeout in ms */ + timeout: number; + proxyUrl?: string; + headers?: HeadersInit; + }; + uploadImage?: WAMediaUploadFunction; + logger?: ILogger; +}; +/** + * Given a piece of text, checks for any URL present, generates link preview for the same and returns it + * Return undefined if the fetch failed or no URL was found + * @param text first matched URL in text + * @returns the URL info required to generate link preview + */ +export declare const getUrlInfo: (text: string, opts?: URLGenerationOptions) => Promise; +//# sourceMappingURL=link-preview.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/link-preview.d.ts.map b/packages/transport/vendor/lib/Utils/link-preview.d.ts.map new file mode 100644 index 0000000..2cb9396 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/link-preview.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"link-preview.d.ts","sourceRoot":"","sources":["../../src/Utils/link-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAavC,MAAM,MAAM,oBAAoB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE;QACV,oBAAoB;QACpB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,WAAW,CAAA;KACrB,CAAA;IACD,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACtB,MAAM,MAAM,EACZ,OAAM,oBAGL,KACC,OAAO,CAAC,SAAS,GAAG,SAAS,CAwE/B,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/link-preview.js b/packages/transport/vendor/lib/Utils/link-preview.js new file mode 100644 index 0000000..0f4ff1c --- /dev/null +++ b/packages/transport/vendor/lib/Utils/link-preview.js @@ -0,0 +1,85 @@ +import { prepareWAMessageMedia } from './messages.js'; +import { extractImageThumb, getHttpStream } from './messages-media.js'; +const THUMBNAIL_WIDTH_PX = 192; +/** Fetches an image and generates a thumbnail for it */ +const getCompressedJpegThumbnail = async (url, { thumbnailWidth, fetchOpts }) => { + const stream = await getHttpStream(url, fetchOpts); + const result = await extractImageThumb(stream, thumbnailWidth); + return result; +}; +/** + * Given a piece of text, checks for any URL present, generates link preview for the same and returns it + * Return undefined if the fetch failed or no URL was found + * @param text first matched URL in text + * @returns the URL info required to generate link preview + */ +export const getUrlInfo = async (text, opts = { + thumbnailWidth: THUMBNAIL_WIDTH_PX, + fetchOpts: { timeout: 3000 } +}) => { + try { + // retries + let retries = 0; + const maxRetry = 5; + const { getLinkPreview } = await import('link-preview-js'); + let previewLink = text; + if (!text.startsWith('https://') && !text.startsWith('http://')) { + previewLink = 'https://' + previewLink; + } + const info = await getLinkPreview(previewLink, { + ...opts.fetchOpts, + followRedirects: 'follow', + handleRedirects: (baseURL, forwardedURL) => { + const urlObj = new URL(baseURL); + const forwardedURLObj = new URL(forwardedURL); + if (retries >= maxRetry) { + return false; + } + if (forwardedURLObj.hostname === urlObj.hostname || + forwardedURLObj.hostname === 'www.' + urlObj.hostname || + 'www.' + forwardedURLObj.hostname === urlObj.hostname) { + retries += 1; + return true; + } + else { + return false; + } + }, + headers: opts.fetchOpts?.headers + }); + if (info && 'title' in info && info.title) { + const [image] = info.images; + const urlInfo = { + 'canonical-url': info.url, + 'matched-text': text, + title: info.title, + description: info.description, + originalThumbnailUrl: image + }; + if (opts.uploadImage) { + const { imageMessage } = await prepareWAMessageMedia({ image: { url: image } }, { + upload: opts.uploadImage, + mediaTypeOverride: 'thumbnail-link', + options: opts.fetchOpts + }); + urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) : undefined; + urlInfo.highQualityThumbnail = imageMessage || undefined; + } + else { + try { + urlInfo.jpegThumbnail = image ? (await getCompressedJpegThumbnail(image, opts)).buffer : undefined; + } + catch (error) { + opts.logger?.debug({ err: error.stack, url: previewLink }, 'error in generating thumbnail'); + } + } + return urlInfo; + } + } + catch (error) { + if (!error.message.includes('receive a valid')) { + throw error; + } + } +}; +//# sourceMappingURL=link-preview.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/link-preview.js.map b/packages/transport/vendor/lib/Utils/link-preview.js.map new file mode 100644 index 0000000..00e257b --- /dev/null +++ b/packages/transport/vendor/lib/Utils/link-preview.js.map @@ -0,0 +1 @@ +{"version":3,"file":"link-preview.js","sourceRoot":"","sources":["../../src/Utils/link-preview.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/logger.d.ts b/packages/transport/vendor/lib/Utils/logger.d.ts new file mode 100644 index 0000000..4299d01 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/logger.d.ts @@ -0,0 +1,12 @@ +export interface ILogger { + level: string; + child(obj: Record): ILogger; + trace(obj: unknown, msg?: string): void; + debug(obj: unknown, msg?: string): void; + info(obj: unknown, msg?: string): void; + warn(obj: unknown, msg?: string): void; + error(obj: unknown, msg?: string): void; +} +declare const _default: import("pino").Logger; +export default _default; +//# sourceMappingURL=logger.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/logger.d.ts.map b/packages/transport/vendor/lib/Utils/logger.d.ts.map new file mode 100644 index 0000000..80c21aa --- /dev/null +++ b/packages/transport/vendor/lib/Utils/logger.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC5C,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvC;;AAED,wBAAyE"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/logger.js b/packages/transport/vendor/lib/Utils/logger.js new file mode 100644 index 0000000..bd32e8b --- /dev/null +++ b/packages/transport/vendor/lib/Utils/logger.js @@ -0,0 +1,3 @@ +import P from 'pino'; +export default P({ timestamp: () => `,"time":"${new Date().toJSON()}"` }); +//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/logger.js.map b/packages/transport/vendor/lib/Utils/logger.js.map new file mode 100644 index 0000000..ac4f473 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/logger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAA;AAYpB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/lt-hash.d.ts b/packages/transport/vendor/lib/Utils/lt-hash.d.ts new file mode 100644 index 0000000..f0e048f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/lt-hash.d.ts @@ -0,0 +1,8 @@ +import { LTHashAntiTampering } from 'whatsapp-rust-bridge'; +/** + * LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data + * over a series of mutations. You can add/remove mutations and it'll return a hash equal to + * if the same series of mutations was made sequentially. + */ +export declare const LT_HASH_ANTI_TAMPERING: LTHashAntiTampering; +//# sourceMappingURL=lt-hash.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/lt-hash.d.ts.map b/packages/transport/vendor/lib/Utils/lt-hash.d.ts.map new file mode 100644 index 0000000..7644717 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/lt-hash.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"lt-hash.d.ts","sourceRoot":"","sources":["../../src/Utils/lt-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,qBAA4B,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/lt-hash.js b/packages/transport/vendor/lib/Utils/lt-hash.js new file mode 100644 index 0000000..d84fbb1 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/lt-hash.js @@ -0,0 +1,8 @@ +import { LTHashAntiTampering } from 'whatsapp-rust-bridge'; +/** + * LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data + * over a series of mutations. You can add/remove mutations and it'll return a hash equal to + * if the same series of mutations was made sequentially. + */ +export const LT_HASH_ANTI_TAMPERING = new LTHashAntiTampering(); +//# sourceMappingURL=lt-hash.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/lt-hash.js.map b/packages/transport/vendor/lib/Utils/lt-hash.js.map new file mode 100644 index 0000000..db10edb --- /dev/null +++ b/packages/transport/vendor/lib/Utils/lt-hash.js.map @@ -0,0 +1 @@ +{"version":3,"file":"lt-hash.js","sourceRoot":"","sources":["../../src/Utils/lt-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,mBAAmB,EAAE,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/make-mutex.d.ts b/packages/transport/vendor/lib/Utils/make-mutex.d.ts new file mode 100644 index 0000000..54a2f3c --- /dev/null +++ b/packages/transport/vendor/lib/Utils/make-mutex.d.ts @@ -0,0 +1,9 @@ +export declare const makeMutex: () => { + mutex(code: () => Promise | T): Promise; +}; +export type Mutex = ReturnType; +export declare const makeKeyedMutex: () => { + mutex(key: string, task: () => Promise | T): Promise; +}; +export type KeyedMutex = ReturnType; +//# sourceMappingURL=make-mutex.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/make-mutex.d.ts.map b/packages/transport/vendor/lib/Utils/make-mutex.d.ts.map new file mode 100644 index 0000000..9e1da42 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/make-mutex.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"make-mutex.d.ts","sourceRoot":"","sources":["../../src/Utils/make-mutex.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;UAId,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAIjD,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA;AAEhD,eAAO,MAAM,cAAc;UAIb,CAAC,OAAO,MAAM,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAqBpE,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/make-mutex.js b/packages/transport/vendor/lib/Utils/make-mutex.js new file mode 100644 index 0000000..dcd64f3 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/make-mutex.js @@ -0,0 +1,33 @@ +import { Mutex as AsyncMutex } from 'async-mutex'; +export const makeMutex = () => { + const mutex = new AsyncMutex(); + return { + mutex(code) { + return mutex.runExclusive(code); + } + }; +}; +export const makeKeyedMutex = () => { + const map = new Map(); + return { + async mutex(key, task) { + let entry = map.get(key); + if (!entry) { + entry = { mutex: new AsyncMutex(), refCount: 0 }; + map.set(key, entry); + } + entry.refCount++; + try { + return await entry.mutex.runExclusive(task); + } + finally { + entry.refCount--; + // only delete it if this is still the current entry + if (entry.refCount === 0 && map.get(key) === entry) { + map.delete(key); + } + } + } + }; +}; +//# sourceMappingURL=make-mutex.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/make-mutex.js.map b/packages/transport/vendor/lib/Utils/make-mutex.js.map new file mode 100644 index 0000000..66506ad --- /dev/null +++ b/packages/transport/vendor/lib/Utils/make-mutex.js.map @@ -0,0 +1 @@ +{"version":3,"file":"make-mutex.js","sourceRoot":"","sources":["../../src/Utils/make-mutex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC7B,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAA;IAE9B,OAAO;QACN,KAAK,CAAI,IAA0B;YAClC,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;KACD,CAAA;AACF,CAAC,CAAA;AAID,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmD,CAAA;IAEtE,OAAO;QACN,KAAK,CAAC,KAAK,CAAI,GAAW,EAAE,IAA0B;YACrD,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAExB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;gBAChD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACpB,CAAC;YAED,KAAK,CAAC,QAAQ,EAAE,CAAA;YAEhB,IAAI,CAAC;gBACJ,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YAC5C,CAAC;oBAAS,CAAC;gBACV,KAAK,CAAC,QAAQ,EAAE,CAAA;gBAChB,oDAAoD;gBACpD,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;oBACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAChB,CAAC;YACF,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/message-retry-manager.d.ts b/packages/transport/vendor/lib/Utils/message-retry-manager.d.ts new file mode 100644 index 0000000..4a14f39 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/message-retry-manager.d.ts @@ -0,0 +1,115 @@ +import type { proto } from '../../WAProto/index.js'; +import type { ILogger } from './logger.js'; +export interface RecentMessageKey { + to: string; + id: string; +} +export interface RecentMessage { + message: proto.IMessage; + timestamp: number; +} +export interface SessionRecreateHistory { + [jid: string]: number; +} +export interface RetryCounter { + [messageId: string]: number; +} +export type PendingPhoneRequest = Record>; +export interface RetryStatistics { + totalRetries: number; + successfulRetries: number; + failedRetries: number; + mediaRetries: number; + sessionRecreations: number; + phoneRequests: number; +} +export declare enum RetryReason { + UnknownError = 0, + SignalErrorNoSession = 1, + SignalErrorInvalidKey = 2, + SignalErrorInvalidKeyId = 3, + /** MAC verification failed - most common cause of decryption failures */ + SignalErrorInvalidMessage = 4, + SignalErrorInvalidSignature = 5, + SignalErrorFutureMessage = 6, + /** Explicit MAC failure - session is definitely out of sync */ + SignalErrorBadMac = 7, + SignalErrorInvalidSession = 8, + SignalErrorInvalidMsgKey = 9, + BadBroadcastEphemeralSetting = 10, + UnknownCompanionNoPrekey = 11, + AdvFailure = 12, + StatusRevokeDelay = 13 +} +export declare class MessageRetryManager { + private logger; + private recentMessagesMap; + private messageKeyIndex; + private sessionRecreateHistory; + private retryCounters; + private baseKeys; + private pendingPhoneRequests; + private readonly maxMsgRetryCount; + private statistics; + constructor(logger: ILogger, maxMsgRetryCount: number); + /** + * Add a recent message to the cache for retry handling + */ + addRecentMessage(to: string, id: string, message: proto.IMessage): void; + /** + * Get a recent message from the cache + */ + getRecentMessage(to: string, id: string): RecentMessage | undefined; + /** + * Check if a session should be recreated based on retry count, history, and error code. + * MAC errors (codes 4 and 7) trigger immediate session recreation regardless of timeout. + */ + shouldRecreateSession(jid: string, hasSession: boolean, errorCode?: RetryReason): { + reason: string; + recreate: boolean; + }; + /** + * Parse error code from retry receipt's retry node. + * Returns undefined if no error code is present. + */ + parseRetryErrorCode(errorAttr: string | undefined): RetryReason | undefined; + /** + * Check if an error code indicates a MAC failure + */ + isMacError(errorCode: RetryReason | undefined): boolean; + /** + * Increment retry counter for a message + */ + incrementRetryCount(messageId: string): number; + /** + * Get retry count for a message + */ + getRetryCount(messageId: string): number; + /** + * Check if message has exceeded maximum retry attempts + */ + hasExceededMaxRetries(messageId: string): boolean; + /** + * Mark retry as successful + */ + markRetrySuccess(messageId: string): void; + /** + * Mark retry as failed + */ + markRetryFailed(messageId: string): void; + /** + * Schedule a phone request with delay + */ + schedulePhoneRequest(messageId: string, callback: () => void, delay?: number): void; + /** + * Cancel pending phone request + */ + cancelPendingPhoneRequest(messageId: string): void; + clear(): void; + saveBaseKey(addr: string, msgId: string, baseKey: Uint8Array): void; + hasSameBaseKey(addr: string, msgId: string, baseKey: Uint8Array): boolean; + deleteBaseKey(addr: string, msgId: string): void; + private keyToString; + private removeRecentMessage; +} +//# sourceMappingURL=message-retry-manager.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/message-retry-manager.d.ts.map b/packages/transport/vendor/lib/Utils/message-retry-manager.d.ts.map new file mode 100644 index 0000000..27a5ba0 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/message-retry-manager.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"message-retry-manager.d.ts","sourceRoot":"","sources":["../../src/Utils/message-retry-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/message-retry-manager.js b/packages/transport/vendor/lib/Utils/message-retry-manager.js new file mode 100644 index 0000000..6441755 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/message-retry-manager.js @@ -0,0 +1,265 @@ +import { LRUCache } from 'lru-cache'; +/** Number of sent messages to cache in memory for handling retry receipts */ +const RECENT_MESSAGES_SIZE = 512; +const MESSAGE_KEY_SEPARATOR = '\u0000'; +/** Timeout for session recreation - 1 hour */ +const RECREATE_SESSION_TIMEOUT = 60 * 60 * 1000; // 1 hour in milliseconds +const PHONE_REQUEST_DELAY = 3000; +// Retry reason codes matching WhatsApp Web's Signal error codes. +export var RetryReason; +(function (RetryReason) { + RetryReason[RetryReason["UnknownError"] = 0] = "UnknownError"; + RetryReason[RetryReason["SignalErrorNoSession"] = 1] = "SignalErrorNoSession"; + RetryReason[RetryReason["SignalErrorInvalidKey"] = 2] = "SignalErrorInvalidKey"; + RetryReason[RetryReason["SignalErrorInvalidKeyId"] = 3] = "SignalErrorInvalidKeyId"; + /** MAC verification failed - most common cause of decryption failures */ + RetryReason[RetryReason["SignalErrorInvalidMessage"] = 4] = "SignalErrorInvalidMessage"; + RetryReason[RetryReason["SignalErrorInvalidSignature"] = 5] = "SignalErrorInvalidSignature"; + RetryReason[RetryReason["SignalErrorFutureMessage"] = 6] = "SignalErrorFutureMessage"; + /** Explicit MAC failure - session is definitely out of sync */ + RetryReason[RetryReason["SignalErrorBadMac"] = 7] = "SignalErrorBadMac"; + RetryReason[RetryReason["SignalErrorInvalidSession"] = 8] = "SignalErrorInvalidSession"; + RetryReason[RetryReason["SignalErrorInvalidMsgKey"] = 9] = "SignalErrorInvalidMsgKey"; + RetryReason[RetryReason["BadBroadcastEphemeralSetting"] = 10] = "BadBroadcastEphemeralSetting"; + RetryReason[RetryReason["UnknownCompanionNoPrekey"] = 11] = "UnknownCompanionNoPrekey"; + RetryReason[RetryReason["AdvFailure"] = 12] = "AdvFailure"; + RetryReason[RetryReason["StatusRevokeDelay"] = 13] = "StatusRevokeDelay"; +})(RetryReason || (RetryReason = {})); +/** Error codes that indicate a MAC failure and require immediate session recreation */ +const MAC_ERROR_CODES = new Set([RetryReason.SignalErrorInvalidMessage, RetryReason.SignalErrorBadMac]); +export class MessageRetryManager { + constructor(logger, maxMsgRetryCount) { + this.logger = logger; + this.recentMessagesMap = new LRUCache({ + max: RECENT_MESSAGES_SIZE, + ttl: 5 * 60 * 1000, + ttlAutopurge: true, + dispose: (_value, key) => { + const separatorIndex = key.lastIndexOf(MESSAGE_KEY_SEPARATOR); + if (separatorIndex > -1) { + const messageId = key.slice(separatorIndex + MESSAGE_KEY_SEPARATOR.length); + this.messageKeyIndex.delete(messageId); + } + } + }); + this.messageKeyIndex = new Map(); + this.sessionRecreateHistory = new LRUCache({ + ttl: RECREATE_SESSION_TIMEOUT * 2, + ttlAutopurge: true + }); + this.retryCounters = new LRUCache({ + ttl: 15 * 60 * 1000, + ttlAutopurge: true, + updateAgeOnGet: true + }); // 15 minutes TTL + this.baseKeys = new LRUCache({ + max: 1024, + ttl: 15 * 60 * 1000, + ttlAutopurge: true + }); + this.pendingPhoneRequests = {}; + this.maxMsgRetryCount = 5; + this.statistics = { + totalRetries: 0, + successfulRetries: 0, + failedRetries: 0, + mediaRetries: 0, + sessionRecreations: 0, + phoneRequests: 0 + }; + this.maxMsgRetryCount = maxMsgRetryCount; + } + /** + * Add a recent message to the cache for retry handling + */ + addRecentMessage(to, id, message) { + const key = { to, id }; + const keyStr = this.keyToString(key); + // Add new message + this.recentMessagesMap.set(keyStr, { + message, + timestamp: Date.now() + }); + this.messageKeyIndex.set(id, keyStr); + this.logger.debug(`Added message to retry cache: ${to}/${id}`); + } + /** + * Get a recent message from the cache + */ + getRecentMessage(to, id) { + const key = { to, id }; + const keyStr = this.keyToString(key); + return this.recentMessagesMap.get(keyStr); + } + /** + * Check if a session should be recreated based on retry count, history, and error code. + * MAC errors (codes 4 and 7) trigger immediate session recreation regardless of timeout. + */ + shouldRecreateSession(jid, hasSession, errorCode) { + // If we don't have a session, always recreate + if (!hasSession) { + this.sessionRecreateHistory.set(jid, Date.now()); + this.statistics.sessionRecreations++; + return { + reason: "we don't have a Signal session with them", + recreate: true + }; + } + // IMMEDIATE recreation for MAC errors - session is definitely out of sync + if (errorCode !== undefined && MAC_ERROR_CODES.has(errorCode)) { + this.sessionRecreateHistory.set(jid, Date.now()); + this.statistics.sessionRecreations++; + this.logger.warn({ jid, errorCode: RetryReason[errorCode] }, 'MAC error detected, forcing immediate session recreation'); + return { + reason: `MAC error (code ${errorCode}: ${RetryReason[errorCode]}), immediate session recreation`, + recreate: true + }; + } + const now = Date.now(); + const prevTime = this.sessionRecreateHistory.get(jid); + // If no previous recreation or it's been more than an hour + if (!prevTime || now - prevTime > RECREATE_SESSION_TIMEOUT) { + this.sessionRecreateHistory.set(jid, now); + this.statistics.sessionRecreations++; + return { + reason: 'retry count > 1 and over an hour since last recreation', + recreate: true + }; + } + return { reason: '', recreate: false }; + } + /** + * Parse error code from retry receipt's retry node. + * Returns undefined if no error code is present. + */ + parseRetryErrorCode(errorAttr) { + if (errorAttr === undefined || errorAttr === '') { + return undefined; + } + const code = parseInt(errorAttr, 10); + if (Number.isNaN(code)) { + return undefined; + } + // Validate it's a known RetryReason + if (code >= RetryReason.UnknownError && code <= RetryReason.StatusRevokeDelay) { + return code; + } + return RetryReason.UnknownError; + } + /** + * Check if an error code indicates a MAC failure + */ + isMacError(errorCode) { + return errorCode !== undefined && MAC_ERROR_CODES.has(errorCode); + } + /** + * Increment retry counter for a message + */ + incrementRetryCount(messageId) { + this.retryCounters.set(messageId, (this.retryCounters.get(messageId) || 0) + 1); + this.statistics.totalRetries++; + return this.retryCounters.get(messageId); + } + /** + * Get retry count for a message + */ + getRetryCount(messageId) { + return this.retryCounters.get(messageId) || 0; + } + /** + * Check if message has exceeded maximum retry attempts + */ + hasExceededMaxRetries(messageId) { + return this.getRetryCount(messageId) >= this.maxMsgRetryCount; + } + /** + * Mark retry as successful + */ + markRetrySuccess(messageId) { + this.statistics.successfulRetries++; + // Clean up retry counter for successful message + this.retryCounters.delete(messageId); + this.cancelPendingPhoneRequest(messageId); + this.removeRecentMessage(messageId); + } + /** + * Mark retry as failed + */ + markRetryFailed(messageId) { + this.statistics.failedRetries++; + this.retryCounters.delete(messageId); + this.cancelPendingPhoneRequest(messageId); + this.removeRecentMessage(messageId); + } + /** + * Schedule a phone request with delay + */ + schedulePhoneRequest(messageId, callback, delay = PHONE_REQUEST_DELAY) { + // Cancel any existing request for this message + this.cancelPendingPhoneRequest(messageId); + this.pendingPhoneRequests[messageId] = setTimeout(() => { + delete this.pendingPhoneRequests[messageId]; + this.statistics.phoneRequests++; + callback(); + }, delay); + this.logger.debug(`Scheduled phone request for message ${messageId} with ${delay}ms delay`); + } + /** + * Cancel pending phone request + */ + cancelPendingPhoneRequest(messageId) { + const timeout = this.pendingPhoneRequests[messageId]; + if (timeout) { + clearTimeout(timeout); + delete this.pendingPhoneRequests[messageId]; + this.logger.debug(`Cancelled pending phone request for message ${messageId}`); + } + } + clear() { + this.recentMessagesMap.clear(); + this.messageKeyIndex.clear(); + this.sessionRecreateHistory.clear(); + this.retryCounters.clear(); + this.baseKeys.clear(); + for (const messageId of Object.keys(this.pendingPhoneRequests)) { + this.cancelPendingPhoneRequest(messageId); + } + this.statistics = { + totalRetries: 0, + successfulRetries: 0, + failedRetries: 0, + mediaRetries: 0, + sessionRecreations: 0, + phoneRequests: 0 + }; + } + saveBaseKey(addr, msgId, baseKey) { + this.baseKeys.set(`${addr}:${msgId}`, baseKey); + } + hasSameBaseKey(addr, msgId, baseKey) { + const stored = this.baseKeys.get(`${addr}:${msgId}`); + if (!stored || stored.length !== baseKey.length) { + return false; + } + for (let i = 0; i < stored.length; i++) { + if (stored[i] !== baseKey[i]) + return false; + } + return true; + } + deleteBaseKey(addr, msgId) { + this.baseKeys.delete(`${addr}:${msgId}`); + } + keyToString(key) { + return `${key.to}${MESSAGE_KEY_SEPARATOR}${key.id}`; + } + removeRecentMessage(messageId) { + const keyStr = this.messageKeyIndex.get(messageId); + if (!keyStr) { + return; + } + this.recentMessagesMap.delete(keyStr); + this.messageKeyIndex.delete(messageId); + } +} +//# sourceMappingURL=message-retry-manager.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/message-retry-manager.js.map b/packages/transport/vendor/lib/Utils/message-retry-manager.js.map new file mode 100644 index 0000000..cce9b12 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/message-retry-manager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"message-retry-manager.js","sourceRoot":"","sources":["../../src/Utils/message-retry-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages-media.d.ts b/packages/transport/vendor/lib/Utils/messages-media.d.ts new file mode 100644 index 0000000..0f666ec --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages-media.d.ts @@ -0,0 +1,133 @@ +import { Boom } from '@hapi/boom'; +import type { Agent } from 'https'; +import { Readable, Transform } from 'stream'; +import { URL } from 'url'; +import { proto } from '../../WAProto/index.js'; +import { type MediaType } from '../Defaults/index.js'; +import type { DownloadableMessage, MediaConnInfo, MediaDecryptionKeyInfo, SocketConfig, WAMediaUpload, WAMediaUploadFunction, WAMessageContent, WAMessageKey } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +import type { ILogger } from './logger.js'; +export declare const hkdfInfoKey: (type: MediaType) => string; +export declare const getRawMediaUploadData: (media: WAMediaUpload, mediaType: MediaType, logger?: ILogger) => Promise<{ + filePath: string; + fileSha256: Buffer; + fileLength: number; +}>; +/** generates all the keys required to encrypt/decrypt & sign a media message */ +export declare function getMediaKeys(buffer: Uint8Array | string | null | undefined, mediaType: MediaType): Promise; +export declare const extractImageThumb: (bufferOrFilePath: Readable | Buffer | string, width?: number) => Promise<{ + buffer: any; + original: { + width: any; + height: any; + }; +}>; +export declare const encodeBase64EncodedStringForUpload: (b64: string) => string; +export declare const generateProfilePicture: (mediaUpload: WAMediaUpload, dimensions?: { + width: number; + height: number; +}) => Promise<{ + img: Buffer; +}>; +/** gets the SHA256 of the given media message */ +export declare const mediaMessageSHA256B64: (message: WAMessageContent) => string | null | undefined; +export declare function getAudioDuration(buffer: Buffer | string | Readable): Promise; +/** + referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts + */ +export declare function getAudioWaveform(buffer: Buffer | string | Readable, logger?: ILogger): Promise | undefined>; +export declare const toReadable: (buffer: Buffer) => Readable; +export declare const toBuffer: (stream: Readable) => Promise>; +export declare const getStream: (item: WAMediaUpload, opts?: RequestInit & { + maxContentLength?: number; +}) => Promise<{ + readonly stream: Readable; + readonly type: "buffer"; +} | { + readonly stream: Readable; + readonly type: "readable"; +} | { + readonly stream: Readable; + readonly type: "remote"; +} | { + readonly stream: import("fs").ReadStream; + readonly type: "file"; +}>; +/** generates a thumbnail for a given media, if required */ +export declare function generateThumbnail(file: string, mediaType: 'video' | 'image', options: { + logger?: ILogger; +}): Promise<{ + thumbnail: string | undefined; + originalImageDimensions: { + width: number; + height: number; + } | undefined; +}>; +export declare const getHttpStream: (url: string | URL, options?: RequestInit & { + isStream?: true; +}) => Promise; +type EncryptedStreamOptions = { + saveOriginalFileIfRequired?: boolean; + logger?: ILogger; + opts?: RequestInit; +}; +export declare const encryptedStream: (media: WAMediaUpload, mediaType: MediaType, { logger, saveOriginalFileIfRequired, opts }?: EncryptedStreamOptions) => Promise<{ + mediaKey: Buffer; + originalFilePath: string | undefined; + encFilePath: string; + mac: Buffer; + fileEncSha256: Buffer; + fileSha256: Buffer; + fileLength: number; +}>; +export declare const DEF_MEDIA_HOST = "mmg.whatsapp.net"; +export type MediaDownloadOptions = { + startByte?: number; + endByte?: number; + options?: RequestInit; + /** Optional media host override; falls back to DEF_MEDIA_HOST when not provided. */ + host?: string; +}; +export declare const getUrlFromDirectPath: (directPath: string, host?: string) => string; +export declare const downloadContentFromMessage: ({ mediaKey, directPath, url }: DownloadableMessage, type: MediaType, opts?: MediaDownloadOptions) => Promise; +/** + * Decrypts and downloads an AES256-CBC encrypted file given the keys. + * Assumes the SHA256 of the plaintext is appended to the end of the ciphertext + * */ +export declare const downloadEncryptedContent: (downloadUrl: string, { cipherKey, iv }: MediaDecryptionKeyInfo, { startByte, endByte, options }?: MediaDownloadOptions) => Promise; +export declare function extensionForMediaMessage(message: WAMessageContent): string; +type MediaUploadResult = { + url?: string; + direct_path?: string; + meta_hmac?: string; + ts?: number; + fbid?: number; +}; +export type UploadParams = { + url: string; + filePath: string; + headers: Record; + timeoutMs?: number; + agent?: Agent; +}; +export declare const uploadWithNodeHttp: ({ url, filePath, headers, timeoutMs, agent }: UploadParams, redirectCount?: number) => Promise; +export declare const getWAUploadToServer: ({ customUploadHosts, fetchAgent, logger, options }: SocketConfig, refreshMediaConn: (force: boolean) => Promise) => WAMediaUploadFunction; +/** + * Generate a binary node that will request the phone to re-upload the media & return the newly uploaded URL + */ +export declare const encryptMediaRetryRequest: (key: WAMessageKey, mediaKey: Buffer | Uint8Array, meId: string) => BinaryNode; +export declare const decodeMediaRetryNode: (node: BinaryNode) => { + key: WAMessageKey; + media?: { + ciphertext: Uint8Array; + iv: Uint8Array; + }; + error?: Boom; +}; +export declare const decryptMediaRetryData: ({ ciphertext, iv }: { + ciphertext: Uint8Array; + iv: Uint8Array; +}, mediaKey: Uint8Array, msgId: string) => proto.MediaRetryNotification; +export declare const getStatusCodeForMediaRetry: (code: number) => 200 | 412 | 404 | 418; +export {}; +//# sourceMappingURL=messages-media.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages-media.d.ts.map b/packages/transport/vendor/lib/Utils/messages-media.d.ts.map new file mode 100644 index 0000000..748bd02 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages-media.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages-media.d.ts","sourceRoot":"","sources":["../../src/Utils/messages-media.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages-media.js b/packages/transport/vendor/lib/Utils/messages-media.js new file mode 100644 index 0000000..950632f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages-media.js @@ -0,0 +1,786 @@ +import { Boom } from '@hapi/boom'; +import { exec } from 'child_process'; +import * as Crypto from 'crypto'; +import { once } from 'events'; +import { createReadStream, createWriteStream, promises as fs, WriteStream } from 'fs'; +import { tmpdir } from 'os'; +import { join } from 'path'; +import { Readable, Transform } from 'stream'; +import { URL } from 'url'; +import { proto } from '../../WAProto/index.js'; +import { DEFAULT_ORIGIN, MEDIA_HKDF_KEY_MAPPING, MEDIA_PATH_MAP } from '../Defaults/index.js'; +import { getBinaryNodeChild, getBinaryNodeChildBuffer, jidNormalizedUser } from '../WABinary/index.js'; +import { aesDecryptGCM, aesEncryptGCM, hkdf } from './crypto.js'; +import { generateMessageIDV2 } from './generics.js'; +const getTmpFilesDirectory = () => tmpdir(); +const getImageProcessingLibrary = async () => { + //@ts-ignore + const [jimp, sharp] = await Promise.all([import('jimp').catch(() => { }), import('sharp').catch(() => { })]); + if (sharp) { + return { sharp }; + } + if (jimp) { + return { jimp }; + } + throw new Boom('No image processing library available'); +}; +export const hkdfInfoKey = (type) => { + const hkdfInfo = MEDIA_HKDF_KEY_MAPPING[type]; + return `WhatsApp ${hkdfInfo} Keys`; +}; +export const getRawMediaUploadData = async (media, mediaType, logger) => { + const { stream } = await getStream(media); + logger?.debug('got stream for raw upload'); + const hasher = Crypto.createHash('sha256'); + const filePath = join(tmpdir(), mediaType + generateMessageIDV2()); + const fileWriteStream = createWriteStream(filePath); + let fileLength = 0; + try { + for await (const data of stream) { + fileLength += data.length; + hasher.update(data); + if (!fileWriteStream.write(data)) { + await once(fileWriteStream, 'drain'); + } + } + fileWriteStream.end(); + await once(fileWriteStream, 'finish'); + stream.destroy(); + const fileSha256 = hasher.digest(); + logger?.debug('hashed data for raw upload'); + return { + filePath: filePath, + fileSha256, + fileLength + }; + } + catch (error) { + fileWriteStream.destroy(); + stream.destroy(); + try { + await fs.unlink(filePath); + } + catch { + // + } + throw error; + } +}; +/** generates all the keys required to encrypt/decrypt & sign a media message */ +export async function getMediaKeys(buffer, mediaType) { + if (!buffer) { + throw new Boom('Cannot derive from empty media key'); + } + if (typeof buffer === 'string') { + buffer = Buffer.from(buffer.replace('data:;base64,', ''), 'base64'); + } + // expand using HKDF to 112 bytes, also pass in the relevant app info + const expandedMediaKey = hkdf(buffer, 112, { info: hkdfInfoKey(mediaType) }); + return { + iv: expandedMediaKey.slice(0, 16), + cipherKey: expandedMediaKey.slice(16, 48), + macKey: expandedMediaKey.slice(48, 80) + }; +} +/** Extracts video thumb using FFMPEG */ +const extractVideoThumb = async (path, destPath, time, size) => new Promise((resolve, reject) => { + const cmd = `ffmpeg -ss ${time} -i ${path} -y -vf scale=${size.width}:-1 -vframes 1 -f image2 ${destPath}`; + exec(cmd, err => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); +}); +export const extractImageThumb = async (bufferOrFilePath, width = 32) => { + // TODO: Move entirely to sharp, removing jimp as it supports readable streams + // This will have positive speed and performance impacts as well as minimizing RAM usage. + if (bufferOrFilePath instanceof Readable) { + bufferOrFilePath = await toBuffer(bufferOrFilePath); + } + const lib = await getImageProcessingLibrary(); + if ('sharp' in lib && typeof lib.sharp?.default === 'function') { + const img = lib.sharp.default(bufferOrFilePath); + const dimensions = await img.metadata(); + const buffer = await img.resize(width).jpeg({ quality: 50 }).toBuffer(); + return { + buffer, + original: { + width: dimensions.width, + height: dimensions.height + } + }; + } + else if ('jimp' in lib && typeof lib.jimp?.Jimp === 'object') { + const jimp = await lib.jimp.Jimp.read(bufferOrFilePath); + const dimensions = { + width: jimp.width, + height: jimp.height + }; + const buffer = await jimp + .resize({ w: width, mode: lib.jimp.ResizeStrategy.BILINEAR }) + .getBuffer('image/jpeg', { quality: 50 }); + return { + buffer, + original: dimensions + }; + } + else { + throw new Boom('No image processing library available'); + } +}; +export const encodeBase64EncodedStringForUpload = (b64) => encodeURIComponent(b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, '')); +export const generateProfilePicture = async (mediaUpload, dimensions) => { + let buffer; + const { width: w = 640, height: h = 640 } = dimensions || {}; + if (Buffer.isBuffer(mediaUpload)) { + buffer = mediaUpload; + } + else { + // Use getStream to handle all WAMediaUpload types (Buffer, Stream, URL) + const { stream } = await getStream(mediaUpload); + // Convert the resulting stream to a buffer + buffer = await toBuffer(stream); + } + const lib = await getImageProcessingLibrary(); + let img; + if ('sharp' in lib && typeof lib.sharp?.default === 'function') { + img = lib.sharp + .default(buffer) + .resize(w, h) + .jpeg({ + quality: 50 + }) + .toBuffer(); + } + else if ('jimp' in lib && typeof lib.jimp?.Jimp === 'function') { + const jimp = await lib.jimp.Jimp.read(buffer); + const min = Math.min(jimp.width, jimp.height); + const cropped = jimp.crop({ x: 0, y: 0, w: min, h: min }); + img = cropped.resize({ w, h, mode: lib.jimp.ResizeStrategy.BILINEAR }).getBuffer('image/jpeg', { quality: 50 }); + } + else { + throw new Boom('No image processing library available'); + } + return { + img: await img + }; +}; +/** gets the SHA256 of the given media message */ +export const mediaMessageSHA256B64 = (message) => { + const media = Object.values(message)[0]; + return media?.fileSha256 && Buffer.from(media.fileSha256).toString('base64'); +}; +export async function getAudioDuration(buffer) { + const musicMetadata = await import('music-metadata'); + let metadata; + const options = { + duration: true + }; + if (Buffer.isBuffer(buffer)) { + metadata = await musicMetadata.parseBuffer(buffer, undefined, options); + } + else if (typeof buffer === 'string') { + metadata = await musicMetadata.parseFile(buffer, options); + } + else { + metadata = await musicMetadata.parseStream(buffer, undefined, options); + } + return metadata.format.duration; +} +/** + referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts + */ +export async function getAudioWaveform(buffer, logger) { + try { + // @ts-ignore + const { default: decoder } = await import('audio-decode'); + let audioData; + if (Buffer.isBuffer(buffer)) { + audioData = buffer; + } + else if (typeof buffer === 'string') { + const rStream = createReadStream(buffer); + audioData = await toBuffer(rStream); + } + else { + audioData = await toBuffer(buffer); + } + const audioBuffer = await decoder(audioData); + const rawData = audioBuffer.getChannelData(0); // We only need to work with one channel of data + const samples = 64; // Number of samples we want to have in our final data set + const blockSize = Math.floor(rawData.length / samples); // the number of samples in each subdivision + const filteredData = []; + for (let i = 0; i < samples; i++) { + const blockStart = blockSize * i; // the location of the first sample in the block + let sum = 0; + for (let j = 0; j < blockSize; j++) { + sum = sum + Math.abs(rawData[blockStart + j]); // find the sum of all the samples in the block + } + filteredData.push(sum / blockSize); // divide the sum by the block size to get the average + } + // This guarantees that the largest data point will be set to 1, and the rest of the data will scale proportionally. + const multiplier = Math.pow(Math.max(...filteredData), -1); + const normalizedData = filteredData.map(n => n * multiplier); + // Generate waveform like WhatsApp + const waveform = new Uint8Array(normalizedData.map(n => Math.floor(100 * n))); + return waveform; + } + catch (e) { + logger?.debug('Failed to generate waveform: ' + e); + } +} +export const toReadable = (buffer) => { + const readable = new Readable({ read: () => { } }); + readable.push(buffer); + readable.push(null); + return readable; +}; +export const toBuffer = async (stream) => { + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + stream.destroy(); + return Buffer.concat(chunks); +}; +export const getStream = async (item, opts) => { + if (Buffer.isBuffer(item)) { + return { stream: toReadable(item), type: 'buffer' }; + } + if ('stream' in item) { + return { stream: item.stream, type: 'readable' }; + } + const urlStr = item.url.toString(); + if (urlStr.startsWith('data:')) { + const buffer = Buffer.from(urlStr.split(',')[1], 'base64'); + return { stream: toReadable(buffer), type: 'buffer' }; + } + if (urlStr.startsWith('http://') || urlStr.startsWith('https://')) { + return { stream: await getHttpStream(item.url, opts), type: 'remote' }; + } + return { stream: createReadStream(item.url), type: 'file' }; +}; +/** generates a thumbnail for a given media, if required */ +export async function generateThumbnail(file, mediaType, options) { + let thumbnail; + let originalImageDimensions; + if (mediaType === 'image') { + const { buffer, original } = await extractImageThumb(file); + thumbnail = buffer.toString('base64'); + if (original.width && original.height) { + originalImageDimensions = { + width: original.width, + height: original.height + }; + } + } + else if (mediaType === 'video') { + const imgFilename = join(getTmpFilesDirectory(), generateMessageIDV2() + '.jpg'); + try { + await extractVideoThumb(file, imgFilename, '00:00:00', { width: 32, height: 32 }); + const buff = await fs.readFile(imgFilename); + thumbnail = buff.toString('base64'); + await fs.unlink(imgFilename); + } + catch (err) { + options.logger?.debug('could not generate video thumb: ' + err); + } + } + return { + thumbnail, + originalImageDimensions + }; +} +export const getHttpStream = async (url, options = {}) => { + const response = await fetch(url.toString(), { + dispatcher: options.dispatcher, + method: 'GET', + headers: options.headers + }); + if (!response.ok) { + throw new Boom(`Failed to fetch stream from ${url}`, { statusCode: response.status, data: { url } }); + } + // @ts-ignore Node18+ Readable.fromWeb exists + return response.body instanceof Readable ? response.body : Readable.fromWeb(response.body); +}; +export const encryptedStream = async (media, mediaType, { logger, saveOriginalFileIfRequired, opts } = {}) => { + const { stream, type } = await getStream(media, opts); + logger?.debug('fetched media stream'); + const mediaKey = Crypto.randomBytes(32); + const { cipherKey, iv, macKey } = await getMediaKeys(mediaKey, mediaType); + const encFilePath = join(getTmpFilesDirectory(), mediaType + generateMessageIDV2() + '-enc'); + const encFileWriteStream = createWriteStream(encFilePath); + let originalFileStream; + let originalFilePath; + if (saveOriginalFileIfRequired) { + originalFilePath = join(getTmpFilesDirectory(), mediaType + generateMessageIDV2() + '-original'); + originalFileStream = createWriteStream(originalFilePath); + } + let fileLength = 0; + const aes = Crypto.createCipheriv('aes-256-cbc', cipherKey, iv); + const hmac = Crypto.createHmac('sha256', macKey).update(iv); + const sha256Plain = Crypto.createHash('sha256'); + const sha256Enc = Crypto.createHash('sha256'); + const onChunk = async (buff) => { + sha256Enc.update(buff); + hmac.update(buff); + // Handle backpressure: if write returns false, wait for drain + if (!encFileWriteStream.write(buff)) { + await once(encFileWriteStream, 'drain'); + } + }; + try { + for await (const data of stream) { + fileLength += data.length; + if (type === 'remote' && + opts?.maxContentLength && + fileLength + data.length > opts.maxContentLength) { + throw new Boom(`content length exceeded when encrypting "${type}"`, { + data: { media, type } + }); + } + if (originalFileStream) { + if (!originalFileStream.write(data)) { + await once(originalFileStream, 'drain'); + } + } + sha256Plain.update(data); + await onChunk(aes.update(data)); + } + await onChunk(aes.final()); + const mac = hmac.digest().slice(0, 10); + sha256Enc.update(mac); + const fileSha256 = sha256Plain.digest(); + const fileEncSha256 = sha256Enc.digest(); + encFileWriteStream.write(mac); + const encFinishPromise = once(encFileWriteStream, 'finish'); + const originalFinishPromise = originalFileStream ? once(originalFileStream, 'finish') : Promise.resolve(); + encFileWriteStream.end(); + originalFileStream?.end?.(); + stream.destroy(); + // Wait for write streams to fully flush to disk + // This helps reduce memory pressure by allowing OS to release buffers + await encFinishPromise; + await originalFinishPromise; + logger?.debug('encrypted data successfully'); + return { + mediaKey, + originalFilePath, + encFilePath, + mac, + fileEncSha256, + fileSha256, + fileLength + }; + } + catch (error) { + // destroy all streams with error + encFileWriteStream.destroy(); + originalFileStream?.destroy?.(); + aes.destroy(); + hmac.destroy(); + sha256Plain.destroy(); + sha256Enc.destroy(); + stream.destroy(); + try { + await fs.unlink(encFilePath); + if (originalFilePath) { + await fs.unlink(originalFilePath); + } + } + catch (err) { + logger?.error({ err }, 'failed deleting tmp files'); + } + throw error; + } +}; +export const DEF_MEDIA_HOST = 'mmg.whatsapp.net'; +const AES_CHUNK_SIZE = 16; +const toSmallestChunkSize = (num) => { + return Math.floor(num / AES_CHUNK_SIZE) * AES_CHUNK_SIZE; +}; +export const getUrlFromDirectPath = (directPath, host = DEF_MEDIA_HOST) => `https://${host}${directPath}`; +const extractHost = (url) => { + if (!url) + return undefined; + try { + return new URL(url).host; + } + catch { + return undefined; + } +}; +export const downloadContentFromMessage = async ({ mediaKey, directPath, url }, type, opts = {}) => { + // Fallback host: explicit opt > host parsed from `url` > DEF_MEDIA_HOST. + // Lets us honor a non-default host carried by the proto without forcing callers to thread it through. + const fallbackHost = opts.host ?? extractHost(url); + const downloadUrl = directPath ? getUrlFromDirectPath(directPath, fallbackHost) : url; + if (!downloadUrl) { + throw new Boom('No valid media URL or directPath present in message', { statusCode: 400 }); + } + const keys = await getMediaKeys(mediaKey, type); + return downloadEncryptedContent(downloadUrl, keys, opts); +}; +/** + * Decrypts and downloads an AES256-CBC encrypted file given the keys. + * Assumes the SHA256 of the plaintext is appended to the end of the ciphertext + * */ +export const downloadEncryptedContent = async (downloadUrl, { cipherKey, iv }, { startByte, endByte, options } = {}) => { + let bytesFetched = 0; + let startChunk = 0; + let firstBlockIsIV = false; + // if a start byte is specified -- then we need to fetch the previous chunk as that will form the IV + if (startByte) { + const chunk = toSmallestChunkSize(startByte || 0); + if (chunk) { + startChunk = chunk - AES_CHUNK_SIZE; + bytesFetched = chunk; + firstBlockIsIV = true; + } + } + const endChunk = endByte ? toSmallestChunkSize(endByte || 0) + AES_CHUNK_SIZE : undefined; + const headersInit = options?.headers ? options.headers : undefined; + const headers = { + ...(headersInit + ? Array.isArray(headersInit) + ? Object.fromEntries(headersInit) + : headersInit + : {}), + Origin: DEFAULT_ORIGIN + }; + if (startChunk || endChunk) { + headers.Range = `bytes=${startChunk}-`; + if (endChunk) { + headers.Range += endChunk; + } + } + // download the message + const fetched = await getHttpStream(downloadUrl, { + ...(options || {}), + headers + }); + let remainingBytes = Buffer.from([]); + let aes; + const pushBytes = (bytes, push) => { + if (startByte || endByte) { + const start = bytesFetched >= startByte ? undefined : Math.max(startByte - bytesFetched, 0); + const end = bytesFetched + bytes.length < endByte ? undefined : Math.max(endByte - bytesFetched, 0); + push(bytes.slice(start, end)); + bytesFetched += bytes.length; + } + else { + push(bytes); + } + }; + const output = new Transform({ + transform(chunk, _, callback) { + let data = remainingBytes.length ? Buffer.concat([remainingBytes, chunk]) : chunk; + const decryptLength = toSmallestChunkSize(data.length); + remainingBytes = data.slice(decryptLength); + data = data.slice(0, decryptLength); + if (!aes) { + let ivValue = iv; + if (firstBlockIsIV) { + ivValue = data.slice(0, AES_CHUNK_SIZE); + data = data.slice(AES_CHUNK_SIZE); + } + aes = Crypto.createDecipheriv('aes-256-cbc', cipherKey, ivValue); + // if an end byte that is not EOF is specified + // stop auto padding (PKCS7) -- otherwise throws an error for decryption + if (endByte) { + aes.setAutoPadding(false); + } + } + try { + pushBytes(aes.update(data), b => this.push(b)); + callback(); + } + catch (error) { + callback(error); + } + }, + final(callback) { + try { + pushBytes(aes.final(), b => this.push(b)); + callback(); + } + catch (error) { + callback(error); + } + } + }); + return fetched.pipe(output, { end: true }); +}; +export function extensionForMediaMessage(message) { + const getExtension = (mimetype) => mimetype.split(';')[0]?.split('/')[1]; + const type = Object.keys(message)[0]; + let extension; + if (type === 'locationMessage' || type === 'liveLocationMessage' || type === 'productMessage') { + extension = '.jpeg'; + } + else { + const messageContent = message[type]; + extension = getExtension(messageContent.mimetype); + } + return extension; +} +const isNodeRuntime = () => { + return (typeof process !== 'undefined' && + process.versions?.node !== null && + typeof process.versions.bun === 'undefined' && + typeof globalThis.Deno === 'undefined'); +}; +export const uploadWithNodeHttp = async ({ url, filePath, headers, timeoutMs, agent }, redirectCount = 0) => { + if (redirectCount > 5) { + throw new Error('Too many redirects'); + } + const parsedUrl = new URL(url); + const httpModule = parsedUrl.protocol === 'https:' ? await import('https') : await import('http'); + // Get file size for Content-Length header (required for Node.js streaming) + const fileStats = await fs.stat(filePath); + const fileSize = fileStats.size; + return new Promise((resolve, reject) => { + const req = httpModule.request({ + hostname: parsedUrl.hostname, + port: parsedUrl.port || (parsedUrl.protocol === 'https:' ? 443 : 80), + path: parsedUrl.pathname + parsedUrl.search, + method: 'POST', + headers: { + ...headers, + 'Content-Length': fileSize + }, + agent, + timeout: timeoutMs + }, res => { + // Handle redirects (3xx) + if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) { + res.resume(); // Consume response to free resources + const newUrl = new URL(res.headers.location, url).toString(); + resolve(uploadWithNodeHttp({ + url: newUrl, + filePath, + headers, + timeoutMs, + agent + }, redirectCount + 1)); + return; + } + let body = ''; + res.on('data', chunk => (body += chunk)); + res.on('end', () => { + try { + resolve(JSON.parse(body)); + } + catch { + resolve(undefined); + } + }); + }); + req.on('error', reject); + req.on('timeout', () => { + req.destroy(); + reject(new Error('Upload timeout')); + }); + const stream = createReadStream(filePath); + stream.pipe(req); + stream.on('error', err => { + req.destroy(); + reject(err); + }); + }); +}; +const uploadWithFetch = async ({ url, filePath, headers, timeoutMs, agent }) => { + // Convert Node.js Readable to Web ReadableStream + const nodeStream = createReadStream(filePath); + const webStream = Readable.toWeb(nodeStream); + const response = await fetch(url, { + dispatcher: agent, + method: 'POST', + body: webStream, + headers, + duplex: 'half', + signal: timeoutMs ? AbortSignal.timeout(timeoutMs) : undefined + }); + try { + return (await response.json()); + } + catch { + return undefined; + } +}; +/** + * Uploads media to WhatsApp servers. + * + * ## Why we have two upload implementations: + * + * Node.js's native `fetch` (powered by undici) has a known bug where it buffers + * the entire request body in memory before sending, even when using streams. + * This causes memory issues with large files (e.g., 1GB file = 1GB+ memory usage). + * See: https://github.com/nodejs/undici/issues/4058 + * + * Other runtimes (Bun, Deno, browsers) correctly stream the request body without + * buffering, so we can use the web-standard Fetch API there. + * + * ## Future considerations: + * Once the undici bug is fixed, we can simplify this to use only the Fetch API + * across all runtimes. Monitor the GitHub issue for updates. + */ +const uploadMedia = async (params, logger) => { + if (isNodeRuntime()) { + logger?.debug('Using Node.js https module for upload (avoids undici buffering bug)'); + return uploadWithNodeHttp(params); + } + else { + logger?.debug('Using web-standard Fetch API for upload'); + return uploadWithFetch(params); + } +}; +export const getWAUploadToServer = ({ customUploadHosts, fetchAgent, logger, options }, refreshMediaConn) => { + return async (filePath, { mediaType, fileEncSha256B64, timeoutMs }) => { + // send a query JSON to obtain the url & auth token to upload our media + let uploadInfo = await refreshMediaConn(false); + let urls; + const hosts = [...customUploadHosts, ...uploadInfo.hosts]; + fileEncSha256B64 = encodeBase64EncodedStringForUpload(fileEncSha256B64); + // Prepare common headers + const customHeaders = (() => { + const hdrs = options?.headers; + if (!hdrs) + return {}; + return Array.isArray(hdrs) ? Object.fromEntries(hdrs) : hdrs; + })(); + const headers = { + ...customHeaders, + 'Content-Type': 'application/octet-stream', + Origin: DEFAULT_ORIGIN + }; + for (const { hostname } of hosts) { + logger.debug(`uploading to "${hostname}"`); + const auth = encodeURIComponent(uploadInfo.auth); + const url = `https://${hostname}${MEDIA_PATH_MAP[mediaType]}/${fileEncSha256B64}?auth=${auth}&token=${fileEncSha256B64}`; + let result; + try { + result = await uploadMedia({ + url, + filePath, + headers, + timeoutMs, + agent: fetchAgent + }, logger); + if (result?.url || result?.direct_path) { + urls = { + mediaUrl: result.url, + directPath: result.direct_path, + meta_hmac: result.meta_hmac, + fbid: result.fbid, + ts: result.ts + }; + break; + } + else { + uploadInfo = await refreshMediaConn(true); + throw new Error(`upload failed, reason: ${JSON.stringify(result)}`); + } + } + catch (error) { + const isLast = hostname === hosts[uploadInfo.hosts.length - 1]?.hostname; + logger.warn({ trace: error?.stack, uploadResult: result }, `Error in uploading to ${hostname} ${isLast ? '' : ', retrying...'}`); + } + } + if (!urls) { + throw new Boom('Media upload failed on all hosts', { statusCode: 500 }); + } + return urls; + }; +}; +const getMediaRetryKey = (mediaKey) => { + return hkdf(mediaKey, 32, { info: 'WhatsApp Media Retry Notification' }); +}; +/** + * Generate a binary node that will request the phone to re-upload the media & return the newly uploaded URL + */ +export const encryptMediaRetryRequest = (key, mediaKey, meId) => { + const recp = { stanzaId: key.id }; + const recpBuffer = proto.ServerErrorReceipt.encode(recp).finish(); + const iv = Crypto.randomBytes(12); + const retryKey = getMediaRetryKey(mediaKey); + const ciphertext = aesEncryptGCM(recpBuffer, retryKey, iv, Buffer.from(key.id)); + const req = { + tag: 'receipt', + attrs: { + id: key.id, + to: jidNormalizedUser(meId), + type: 'server-error' + }, + content: [ + // this encrypt node is actually pretty useless + // the media is returned even without this node + // keeping it here to maintain parity with WA Web + { + tag: 'encrypt', + attrs: {}, + content: [ + { tag: 'enc_p', attrs: {}, content: ciphertext }, + { tag: 'enc_iv', attrs: {}, content: iv } + ] + }, + { + tag: 'rmr', + attrs: { + jid: key.remoteJid, + from_me: (!!key.fromMe).toString(), + // @ts-ignore + participant: key.participant || undefined + } + } + ] + }; + return req; +}; +export const decodeMediaRetryNode = (node) => { + const rmrNode = getBinaryNodeChild(node, 'rmr'); + const event = { + key: { + id: node.attrs.id, + remoteJid: rmrNode.attrs.jid, + fromMe: rmrNode.attrs.from_me === 'true', + participant: rmrNode.attrs.participant + } + }; + const errorNode = getBinaryNodeChild(node, 'error'); + if (errorNode) { + const errorCode = +errorNode.attrs.code; + event.error = new Boom(`Failed to re-upload media (${errorCode})`, { + data: errorNode.attrs, + statusCode: getStatusCodeForMediaRetry(errorCode) + }); + } + else { + const encryptedInfoNode = getBinaryNodeChild(node, 'encrypt'); + const ciphertext = getBinaryNodeChildBuffer(encryptedInfoNode, 'enc_p'); + const iv = getBinaryNodeChildBuffer(encryptedInfoNode, 'enc_iv'); + if (ciphertext && iv) { + event.media = { ciphertext, iv }; + } + else { + event.error = new Boom('Failed to re-upload media (missing ciphertext)', { statusCode: 404 }); + } + } + return event; +}; +export const decryptMediaRetryData = ({ ciphertext, iv }, mediaKey, msgId) => { + const retryKey = getMediaRetryKey(mediaKey); + const plaintext = aesDecryptGCM(ciphertext, retryKey, iv, Buffer.from(msgId)); + return proto.MediaRetryNotification.decode(plaintext); +}; +export const getStatusCodeForMediaRetry = (code) => MEDIA_RETRY_STATUS_MAP[code]; +const MEDIA_RETRY_STATUS_MAP = { + [proto.MediaRetryNotification.ResultType.SUCCESS]: 200, + [proto.MediaRetryNotification.ResultType.DECRYPTION_ERROR]: 412, + [proto.MediaRetryNotification.ResultType.NOT_FOUND]: 404, + [proto.MediaRetryNotification.ResultType.GENERAL_ERROR]: 418 +}; +//# sourceMappingURL=messages-media.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages-media.js.map b/packages/transport/vendor/lib/Utils/messages-media.js.map new file mode 100644 index 0000000..41920ec --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages-media.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages-media.js","sourceRoot":"","sources":["../../src/Utils/messages-media.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages.d.ts b/packages/transport/vendor/lib/Utils/messages.d.ts new file mode 100644 index 0000000..7364b39 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages.d.ts @@ -0,0 +1,91 @@ +import { type Transform } from 'stream'; +import { proto } from '../../WAProto/index.js'; +import type { AnyMediaMessageContent, AnyMessageContent, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, MessageUserReceipt, WAMessage, WAMessageContent, WAMessageKey } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +import { type MediaDownloadOptions } from './messages-media.js'; +type ExtractByKey = T extends Record ? T : never; +/** + * Uses a regex to test whether the string contains a URL, and returns the URL if it does. + * @param text eg. hello https://google.com + * @returns the URL, eg. https://google.com + */ +export declare const extractUrlFromText: (text: string) => string | undefined; +export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions["getUrlInfo"], logger: MessageGenerationOptions["logger"]) => Promise; +export declare const prepareWAMessageMedia: (message: AnyMediaMessageContent, options: MessageContentGenerationOptions) => Promise; +export declare const prepareDisappearingMessageSettingContent: (ephemeralExpiration?: number) => proto.Message; +/** + * Generate forwarded message content like WA does + * @param message the message to forward + * @param options.forceForward will show the message as forwarded even if it is from you + */ +export declare const generateForwardMessageContent: (message: WAMessage, forceForward?: boolean) => proto.IMessage; +export declare const hasNonNullishProperty: (message: AnyMessageContent, key: K) => message is ExtractByKey; +export declare const generateWAMessageContent: (message: AnyMessageContent, options: MessageContentGenerationOptions) => Promise; +export declare const generateWAMessageFromContent: (jid: string, message: WAMessageContent, options: MessageGenerationOptionsFromContent) => WAMessage; +export declare const generateWAMessage: (jid: string, content: AnyMessageContent, options: MessageGenerationOptions) => Promise; +/** Get the key to access the true type of content */ +export declare const getContentType: (content: proto.IMessage | undefined) => keyof proto.IMessage | undefined; +/** + * Normalizes ephemeral, view once messages to regular message content + * Eg. image messages in ephemeral messages, in view once messages etc. + * @param content + * @returns + */ +export declare const normalizeMessageContent: (content: WAMessageContent | null | undefined) => WAMessageContent | undefined; +/** + * Extract the true message content from a message + * Eg. extracts the inner message from a disappearing message/view once message + */ +export declare const extractMessageContent: (content: WAMessageContent | undefined | null) => WAMessageContent | undefined; +/** + * Returns the device predicted by message ID + */ +export declare const getDevice: (id: string) => "web" | "unknown" | "android" | "ios" | "desktop"; +/** Upserts a receipt in the message */ +export declare const updateMessageWithReceipt: (msg: Pick, receipt: MessageUserReceipt) => void; +/** Update the message with a new reaction */ +export declare const updateMessageWithReaction: (msg: Pick, reaction: proto.IReaction) => void; +/** Update the message with a new poll update */ +export declare const updateMessageWithPollUpdate: (msg: Pick, update: proto.IPollUpdate) => void; +/** Update the message with a new event response */ +export declare const updateMessageWithEventResponse: (msg: Pick, update: proto.IEventResponse) => void; +type VoteAggregation = { + name: string; + voters: string[]; +}; +/** + * Aggregates all poll updates in a poll. + * @param msg the poll creation message + * @param meId your jid + * @returns A list of options & their voters + */ +export declare function getAggregateVotesInPollMessage({ message, pollUpdates }: Pick, meId?: string): VoteAggregation[]; +type ResponseAggregation = { + response: string; + responders: string[]; +}; +/** + * Aggregates all event responses in an event message. + * @param msg the event creation message + * @param meId your jid + * @returns A list of response types & their responders + */ +export declare function getAggregateResponsesInEventMessage({ eventResponses }: Pick, meId?: string): ResponseAggregation[]; +/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */ +export declare const aggregateMessageKeysNotFromMe: (keys: WAMessageKey[]) => { + jid: string; + participant: string | undefined; + messageIds: string[]; +}[]; +type DownloadMediaMessageContext = { + reuploadRequest: (msg: WAMessage) => Promise; + logger: ILogger; +}; +/** + * Downloads the given message. Throws an error if it's not a media message + */ +export declare const downloadMediaMessage: (message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise : Transform>; +/** Checks whether the given message is a media message; if it is returns the inner content */ +export declare const assertMediaContent: (content: proto.IMessage | null | undefined) => proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage; +export {}; +//# sourceMappingURL=messages.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages.d.ts.map b/packages/transport/vendor/lib/Utils/messages.d.ts.map new file mode 100644 index 0000000..ab6cca6 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/Utils/messages.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages.js b/packages/transport/vendor/lib/Utils/messages.js new file mode 100644 index 0000000..247b1f1 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages.js @@ -0,0 +1,893 @@ +import { Boom } from '@hapi/boom'; +import { randomBytes } from 'crypto'; +import { promises as fs } from 'fs'; +import {} from 'stream'; +import { proto } from '../../WAProto/index.js'; +import { CALL_AUDIO_PREFIX, CALL_VIDEO_PREFIX, MEDIA_KEYS, URL_REGEX, WA_DEFAULT_EPHEMERAL } from '../Defaults/index.js'; +import { WAMessageStatus, WAProto } from '../Types/index.js'; +import { isJidGroup, isJidNewsletter, isJidStatusBroadcast, jidNormalizedUser } from '../WABinary/index.js'; +import { sha256 } from './crypto.js'; +import { generateMessageIDV2, getKeyAuthor, unixTimestampSeconds } from './generics.js'; +import { downloadContentFromMessage, encryptedStream, generateThumbnail, getAudioDuration, getAudioWaveform, getRawMediaUploadData } from './messages-media.js'; +import { shouldIncludeReportingToken } from './reporting-utils.js'; +const MIMETYPE_MAP = { + image: 'image/jpeg', + video: 'video/mp4', + document: 'application/pdf', + audio: 'audio/ogg; codecs=opus', + sticker: 'image/webp', + 'product-catalog-image': 'image/jpeg' +}; +const MessageTypeProto = { + image: WAProto.Message.ImageMessage, + video: WAProto.Message.VideoMessage, + audio: WAProto.Message.AudioMessage, + sticker: WAProto.Message.StickerMessage, + document: WAProto.Message.DocumentMessage +}; +/** + * Uses a regex to test whether the string contains a URL, and returns the URL if it does. + * @param text eg. hello https://google.com + * @returns the URL, eg. https://google.com + */ +export const extractUrlFromText = (text) => text.match(URL_REGEX)?.[0]; +export const generateLinkPreviewIfRequired = async (text, getUrlInfo, logger) => { + const url = extractUrlFromText(text); + if (!!getUrlInfo && url) { + try { + const urlInfo = await getUrlInfo(url); + return urlInfo; + } + catch (error) { + // ignore if fails + logger?.warn({ trace: error.stack }, 'url generation failed'); + } + } +}; +const assertColor = async (color) => { + let assertedColor; + if (typeof color === 'number') { + assertedColor = color > 0 ? color : 0xffffffff + Number(color) + 1; + } + else { + let hex = color.trim().replace('#', ''); + if (hex.length <= 6) { + hex = 'FF' + hex.padStart(6, '0'); + } + assertedColor = parseInt(hex, 16); + return assertedColor; + } +}; +export const prepareWAMessageMedia = async (message, options) => { + const logger = options.logger; + let mediaType; + for (const key of MEDIA_KEYS) { + if (key in message) { + mediaType = key; + } + } + if (!mediaType) { + throw new Boom('Invalid media type', { statusCode: 400 }); + } + const uploadData = { + ...message, + media: message[mediaType] + }; + delete uploadData[mediaType]; + // check if cacheable + generate cache key + const cacheableKey = typeof uploadData.media === 'object' && + 'url' in uploadData.media && + !!uploadData.media.url && + !!options.mediaCache && + mediaType + ':' + uploadData.media.url.toString(); + if (mediaType === 'document' && !uploadData.fileName) { + uploadData.fileName = 'file'; + } + if (!uploadData.mimetype) { + uploadData.mimetype = MIMETYPE_MAP[mediaType]; + } + if (cacheableKey) { + const mediaBuff = await options.mediaCache.get(cacheableKey); + if (mediaBuff) { + logger?.debug({ cacheableKey }, 'got media cache hit'); + const obj = proto.Message.decode(mediaBuff); + const key = `${mediaType}Message`; + Object.assign(obj[key], { ...uploadData, media: undefined }); + return obj; + } + } + const isNewsletter = !!options.jid && isJidNewsletter(options.jid); + if (isNewsletter) { + logger?.info({ key: cacheableKey }, 'Preparing raw media for newsletter'); + const { filePath, fileSha256, fileLength } = await getRawMediaUploadData(uploadData.media, options.mediaTypeOverride || mediaType, logger); + const fileSha256B64 = fileSha256.toString('base64'); + const { mediaUrl, directPath } = await options.upload(filePath, { + fileEncSha256B64: fileSha256B64, + mediaType: mediaType, + timeoutMs: options.mediaUploadTimeoutMs + }); + await fs.unlink(filePath); + const obj = WAProto.Message.fromObject({ + // todo: add more support here + [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({ + url: mediaUrl, + directPath, + fileSha256, + fileLength, + ...uploadData, + media: undefined + }) + }); + if (uploadData.ptv) { + obj.ptvMessage = obj.videoMessage; + delete obj.videoMessage; + } + if (obj.stickerMessage) { + obj.stickerMessage.stickerSentTs = Date.now(); + } + if (cacheableKey) { + logger?.debug({ cacheableKey }, 'set cache'); + await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish()); + } + return obj; + } + const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined'; + const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData['jpegThumbnail'] === 'undefined'; + const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true && typeof uploadData.waveform === 'undefined'; + const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true; + const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation; + const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await encryptedStream(uploadData.media, options.mediaTypeOverride || mediaType, { + logger, + saveOriginalFileIfRequired: requiresOriginalForSomeProcessing, + opts: options.options + }); + const fileEncSha256B64 = fileEncSha256.toString('base64'); + const [{ mediaUrl, directPath }] = await Promise.all([ + (async () => { + const result = await options.upload(encFilePath, { + fileEncSha256B64, + mediaType, + timeoutMs: options.mediaUploadTimeoutMs + }); + logger?.debug({ mediaType, cacheableKey }, 'uploaded media'); + return result; + })(), + (async () => { + try { + if (requiresThumbnailComputation) { + const { thumbnail, originalImageDimensions } = await generateThumbnail(originalFilePath, mediaType, options); + uploadData.jpegThumbnail = thumbnail; + if (!uploadData.width && originalImageDimensions) { + uploadData.width = originalImageDimensions.width; + uploadData.height = originalImageDimensions.height; + logger?.debug('set dimensions'); + } + logger?.debug('generated thumbnail'); + } + if (requiresDurationComputation) { + uploadData.seconds = await getAudioDuration(originalFilePath); + logger?.debug('computed audio duration'); + } + if (requiresWaveformProcessing) { + uploadData.waveform = await getAudioWaveform(originalFilePath, logger); + logger?.debug('processed waveform'); + } + if (requiresAudioBackground) { + uploadData.backgroundArgb = await assertColor(options.backgroundColor); + logger?.debug('computed backgroundColor audio status'); + } + } + catch (error) { + logger?.warn({ trace: error.stack }, 'failed to obtain extra info'); + } + })() + ]).finally(async () => { + try { + await fs.unlink(encFilePath); + if (originalFilePath) { + await fs.unlink(originalFilePath); + } + logger?.debug('removed tmp files'); + } + catch (error) { + logger?.warn('failed to remove tmp file'); + } + }); + const obj = WAProto.Message.fromObject({ + [`${mediaType}Message`]: MessageTypeProto[mediaType].fromObject({ + url: mediaUrl, + directPath, + mediaKey, + fileEncSha256, + fileSha256, + fileLength, + mediaKeyTimestamp: unixTimestampSeconds(), + ...uploadData, + media: undefined + }) + }); + if (uploadData.ptv) { + obj.ptvMessage = obj.videoMessage; + delete obj.videoMessage; + } + if (cacheableKey) { + logger?.debug({ cacheableKey }, 'set cache'); + await options.mediaCache.set(cacheableKey, WAProto.Message.encode(obj).finish()); + } + return obj; +}; +export const prepareDisappearingMessageSettingContent = (ephemeralExpiration) => { + ephemeralExpiration = ephemeralExpiration || 0; + const content = { + ephemeralMessage: { + message: { + protocolMessage: { + type: WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING, + ephemeralExpiration + } + } + } + }; + return WAProto.Message.fromObject(content); +}; +/** + * Generate forwarded message content like WA does + * @param message the message to forward + * @param options.forceForward will show the message as forwarded even if it is from you + */ +export const generateForwardMessageContent = (message, forceForward) => { + let content = message.message; + if (!content) { + throw new Boom('no content in message', { statusCode: 400 }); + } + // hacky copy + content = normalizeMessageContent(content); + content = proto.Message.decode(proto.Message.encode(content).finish()); + let key = Object.keys(content)[0]; + let score = content?.[key]?.contextInfo?.forwardingScore || 0; + score += message.key.fromMe && !forceForward ? 0 : 1; + if (key === 'conversation') { + content.extendedTextMessage = { text: content[key] }; + delete content.conversation; + key = 'extendedTextMessage'; + } + const key_ = content?.[key]; + if (score > 0) { + key_.contextInfo = { forwardingScore: score, isForwarded: true }; + } + else { + key_.contextInfo = {}; + } + return content; +}; +export const hasNonNullishProperty = (message, key) => { + return (typeof message === 'object' && + message !== null && + key in message && + message[key] !== null && + message[key] !== undefined); +}; +function hasOptionalProperty(obj, key) { + return typeof obj === 'object' && obj !== null && key in obj && obj[key] !== null; +} +export const generateWAMessageContent = async (message, options) => { + var _a, _b; + let m = {}; + if (hasNonNullishProperty(message, 'text')) { + const extContent = { text: message.text }; + let urlInfo = message.linkPreview; + if (typeof urlInfo === 'undefined') { + urlInfo = await generateLinkPreviewIfRequired(message.text, options.getUrlInfo, options.logger); + } + if (urlInfo) { + extContent.matchedText = urlInfo['matched-text']; + extContent.jpegThumbnail = urlInfo.jpegThumbnail; + extContent.description = urlInfo.description; + extContent.title = urlInfo.title; + extContent.previewType = 0; + const img = urlInfo.highQualityThumbnail; + if (img) { + extContent.thumbnailDirectPath = img.directPath; + extContent.mediaKey = img.mediaKey; + extContent.mediaKeyTimestamp = img.mediaKeyTimestamp; + extContent.thumbnailWidth = img.width; + extContent.thumbnailHeight = img.height; + extContent.thumbnailSha256 = img.fileSha256; + extContent.thumbnailEncSha256 = img.fileEncSha256; + } + } + if (options.backgroundColor) { + extContent.backgroundArgb = await assertColor(options.backgroundColor); + } + if (options.font) { + extContent.font = options.font; + } + m.extendedTextMessage = extContent; + } + else if (hasNonNullishProperty(message, 'contacts')) { + const contactLen = message.contacts.contacts.length; + if (!contactLen) { + throw new Boom('require atleast 1 contact', { statusCode: 400 }); + } + if (contactLen === 1) { + m.contactMessage = WAProto.Message.ContactMessage.create(message.contacts.contacts[0]); + } + else { + m.contactsArrayMessage = WAProto.Message.ContactsArrayMessage.create(message.contacts); + } + } + else if (hasNonNullishProperty(message, 'location')) { + m.locationMessage = WAProto.Message.LocationMessage.create(message.location); + } + else if (hasNonNullishProperty(message, 'react')) { + if (!message.react.senderTimestampMs) { + message.react.senderTimestampMs = Date.now(); + } + m.reactionMessage = WAProto.Message.ReactionMessage.create(message.react); + } + else if (hasNonNullishProperty(message, 'delete')) { + m.protocolMessage = { + key: message.delete, + type: WAProto.Message.ProtocolMessage.Type.REVOKE + }; + } + else if (hasNonNullishProperty(message, 'forward')) { + m = generateForwardMessageContent(message.forward, message.force); + } + else if (hasNonNullishProperty(message, 'disappearingMessagesInChat')) { + const exp = typeof message.disappearingMessagesInChat === 'boolean' + ? message.disappearingMessagesInChat + ? WA_DEFAULT_EPHEMERAL + : 0 + : message.disappearingMessagesInChat; + m = prepareDisappearingMessageSettingContent(exp); + } + else if (hasNonNullishProperty(message, 'groupInvite')) { + m.groupInviteMessage = {}; + m.groupInviteMessage.inviteCode = message.groupInvite.inviteCode; + m.groupInviteMessage.inviteExpiration = message.groupInvite.inviteExpiration; + m.groupInviteMessage.caption = message.groupInvite.text; + m.groupInviteMessage.groupJid = message.groupInvite.jid; + m.groupInviteMessage.groupName = message.groupInvite.subject; + //TODO: use built-in interface and get disappearing mode info etc. + //TODO: cache / use store!? + if (options.getProfilePicUrl) { + const pfpUrl = await options.getProfilePicUrl(message.groupInvite.jid, 'preview'); + if (pfpUrl) { + const resp = await fetch(pfpUrl, { method: 'GET', dispatcher: options?.options?.dispatcher }); + if (resp.ok) { + const buf = Buffer.from(await resp.arrayBuffer()); + m.groupInviteMessage.jpegThumbnail = buf; + } + } + } + } + else if (hasNonNullishProperty(message, 'pin')) { + m.pinInChatMessage = {}; + m.messageContextInfo = {}; + m.pinInChatMessage.key = message.pin; + m.pinInChatMessage.type = message.type; + m.pinInChatMessage.senderTimestampMs = Date.now(); + m.messageContextInfo.messageAddOnDurationInSecs = message.type === 1 ? message.time || 86400 : 0; + } + else if (hasNonNullishProperty(message, 'buttonReply')) { + switch (message.type) { + case 'template': + m.templateButtonReplyMessage = { + selectedDisplayText: message.buttonReply.displayText, + selectedId: message.buttonReply.id, + selectedIndex: message.buttonReply.index + }; + break; + case 'plain': + m.buttonsResponseMessage = { + selectedButtonId: message.buttonReply.id, + selectedDisplayText: message.buttonReply.displayText, + type: proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT + }; + break; + } + } + else if (hasOptionalProperty(message, 'ptv') && message.ptv) { + const { videoMessage } = await prepareWAMessageMedia({ video: message.video }, options); + m.ptvMessage = videoMessage; + } + else if (hasNonNullishProperty(message, 'product')) { + const { imageMessage } = await prepareWAMessageMedia({ image: message.product.productImage }, options); + m.productMessage = WAProto.Message.ProductMessage.create({ + ...message, + product: { + ...message.product, + productImage: imageMessage + } + }); + } + else if (hasNonNullishProperty(message, 'listReply')) { + m.listResponseMessage = { ...message.listReply }; + } + else if (hasNonNullishProperty(message, 'event')) { + m.eventMessage = {}; + const startTime = Math.floor(message.event.startDate.getTime() / 1000); + if (message.event.call && options.getCallLink) { + const token = await options.getCallLink(message.event.call, { startTime }); + m.eventMessage.joinLink = (message.event.call === 'audio' ? CALL_AUDIO_PREFIX : CALL_VIDEO_PREFIX) + token; + } + m.messageContextInfo = { + // encKey + messageSecret: message.event.messageSecret || randomBytes(32) + }; + m.eventMessage.name = message.event.name; + m.eventMessage.description = message.event.description; + m.eventMessage.startTime = startTime; + m.eventMessage.endTime = message.event.endDate ? message.event.endDate.getTime() / 1000 : undefined; + m.eventMessage.isCanceled = message.event.isCancelled ?? false; + m.eventMessage.extraGuestsAllowed = message.event.extraGuestsAllowed; + m.eventMessage.isScheduleCall = message.event.isScheduleCall ?? false; + m.eventMessage.location = message.event.location; + } + else if (hasNonNullishProperty(message, 'poll')) { + (_a = message.poll).selectableCount || (_a.selectableCount = 0); + (_b = message.poll).toAnnouncementGroup || (_b.toAnnouncementGroup = false); + if (!Array.isArray(message.poll.values)) { + throw new Boom('Invalid poll values', { statusCode: 400 }); + } + if (message.poll.selectableCount < 0 || message.poll.selectableCount > message.poll.values.length) { + throw new Boom(`poll.selectableCount in poll should be >= 0 and <= ${message.poll.values.length}`, { + statusCode: 400 + }); + } + m.messageContextInfo = { + // encKey + messageSecret: message.poll.messageSecret || randomBytes(32) + }; + const pollCreationMessage = { + name: message.poll.name, + selectableOptionsCount: message.poll.selectableCount, + options: message.poll.values.map(optionName => ({ optionName })) + }; + if (message.poll.toAnnouncementGroup) { + // poll v2 is for community announcement groups (single select and multiple) + m.pollCreationMessageV2 = pollCreationMessage; + } + else { + if (message.poll.selectableCount === 1) { + //poll v3 is for single select polls + m.pollCreationMessageV3 = pollCreationMessage; + } + else { + // poll for multiple choice polls + m.pollCreationMessage = pollCreationMessage; + } + } + } + else if (hasNonNullishProperty(message, 'album')) { + m.albumMessage = { + expectedImageCount: message.album.expectedImageCount, + expectedVideoCount: message.album.expectedVideoCount + }; + } + else if (hasNonNullishProperty(message, 'sharePhoneNumber')) { + m.protocolMessage = { + type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER + }; + } + else if (hasNonNullishProperty(message, 'requestPhoneNumber')) { + m.requestPhoneNumberMessage = {}; + } + else if (hasNonNullishProperty(message, 'limitSharing')) { + m.protocolMessage = { + type: proto.Message.ProtocolMessage.Type.LIMIT_SHARING, + limitSharing: { + sharingLimited: message.limitSharing === true, + trigger: 1, + limitSharingSettingTimestamp: Date.now(), + initiatedByMe: true + } + }; + } + else { + m = await prepareWAMessageMedia(message, options); + } + if (hasOptionalProperty(message, 'viewOnce') && !!message.viewOnce) { + m = { viewOnceMessage: { message: m } }; + } + if ((hasOptionalProperty(message, 'mentions') && message.mentions?.length) || + (hasOptionalProperty(message, 'mentionAll') && message.mentionAll)) { + const messageType = Object.keys(m)[0]; + const key = m[messageType]; + if (key && 'contextInfo' in key) { + key.contextInfo = key.contextInfo || {}; + if (message.mentions?.length) { + key.contextInfo.mentionedJid = message.mentions; + } + if (message.mentionAll) { + key.contextInfo.nonJidMentions = 1; + } + } + else if (key) { + key.contextInfo = { + mentionedJid: message.mentions, + nonJidMentions: message.mentionAll ? 1 : 0 + }; + } + } + if (hasOptionalProperty(message, 'edit')) { + m = { + protocolMessage: { + key: message.edit, + editedMessage: m, + timestampMs: Date.now(), + type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT + } + }; + } + if (hasOptionalProperty(message, 'contextInfo') && !!message.contextInfo) { + const messageType = Object.keys(m)[0]; + const key = m[messageType]; + if ('contextInfo' in key && !!key.contextInfo) { + key.contextInfo = { ...key.contextInfo, ...message.contextInfo }; + } + else if (key) { + key.contextInfo = message.contextInfo; + } + } + if (hasOptionalProperty(message, 'albumParentKey') && !!message.albumParentKey) { + m.messageContextInfo = { + ...m.messageContextInfo, + messageAssociation: { + associationType: WAProto.MessageAssociation.AssociationType.MEDIA_ALBUM, + parentMessageKey: message.albumParentKey + } + }; + } + if (shouldIncludeReportingToken(m)) { + m.messageContextInfo = m.messageContextInfo || {}; + if (!m.messageContextInfo.messageSecret) { + m.messageContextInfo.messageSecret = randomBytes(32); + } + } + return WAProto.Message.create(m); +}; +export const generateWAMessageFromContent = (jid, message, options) => { + // set timestamp to now + // if not specified + if (!options.timestamp) { + options.timestamp = new Date(); + } + const innerMessage = normalizeMessageContent(message); + const key = getContentType(innerMessage); + const timestamp = unixTimestampSeconds(options.timestamp); + const { quoted, userJid } = options; + if (quoted && !isJidNewsletter(jid)) { + const participant = quoted.key.fromMe + ? userJid // TODO: Add support for LIDs + : quoted.participant || quoted.key.participant || quoted.key.remoteJid; + let quotedMsg = normalizeMessageContent(quoted.message); + const msgType = getContentType(quotedMsg); + // strip any redundant properties + quotedMsg = proto.Message.create({ [msgType]: quotedMsg[msgType] }); + const quotedContent = quotedMsg[msgType]; + if (typeof quotedContent === 'object' && quotedContent && 'contextInfo' in quotedContent) { + delete quotedContent.contextInfo; + } + const contextInfo = ('contextInfo' in innerMessage[key] && innerMessage[key]?.contextInfo) || {}; + contextInfo.participant = jidNormalizedUser(participant); + contextInfo.stanzaId = quoted.key.id; + contextInfo.quotedMessage = quotedMsg; + // if a participant is quoted, then it must be a group + // hence, remoteJid of group must also be entered + if (jid !== quoted.key.remoteJid) { + contextInfo.remoteJid = quoted.key.remoteJid; + } + if (contextInfo && innerMessage[key]) { + /* @ts-ignore */ + innerMessage[key].contextInfo = contextInfo; + } + } + if ( + // if we want to send a disappearing message + !!options?.ephemeralExpiration && + // and it's not a protocol message -- delete, toggle disappear message + key !== 'protocolMessage' && + // already not converted to disappearing message + key !== 'ephemeralMessage' && + // newsletters don't support ephemeral messages + !isJidNewsletter(jid)) { + /* @ts-ignore */ + innerMessage[key].contextInfo = { + ...(innerMessage[key].contextInfo || {}), + expiration: options.ephemeralExpiration || WA_DEFAULT_EPHEMERAL + //ephemeralSettingTimestamp: options.ephemeralOptions.eph_setting_ts?.toString() + }; + } + message = WAProto.Message.create(message); + const messageJSON = { + key: { + remoteJid: jid, + fromMe: true, + id: options?.messageId || generateMessageIDV2() + }, + message: message, + messageTimestamp: timestamp, + messageStubParameters: [], + participant: isJidGroup(jid) || isJidStatusBroadcast(jid) ? userJid : undefined, // TODO: Add support for LIDs + status: WAMessageStatus.PENDING + }; + return WAProto.WebMessageInfo.fromObject(messageJSON); +}; +export const generateWAMessage = async (jid, content, options) => { + // ensure msg ID is with every log + options.logger = options?.logger?.child({ msgId: options.messageId }); + // Pass jid in the options to generateWAMessageContent + return generateWAMessageFromContent(jid, await generateWAMessageContent(content, { ...options, jid }), options); +}; +/** Get the key to access the true type of content */ +export const getContentType = (content) => { + if (content) { + const keys = Object.keys(content); + const key = keys.find(k => (k === 'conversation' || k.includes('Message')) && k !== 'senderKeyDistributionMessage'); + return key; + } +}; +/** + * Normalizes ephemeral, view once messages to regular message content + * Eg. image messages in ephemeral messages, in view once messages etc. + * @param content + * @returns + */ +export const normalizeMessageContent = (content) => { + if (!content) { + return undefined; + } + // set max iterations to prevent an infinite loop + for (let i = 0; i < 5; i++) { + const inner = getFutureProofMessage(content); + if (!inner) { + break; + } + content = inner.message; + } + return content; + function getFutureProofMessage(message) { + return (message?.ephemeralMessage || + message?.viewOnceMessage || + message?.documentWithCaptionMessage || + message?.viewOnceMessageV2 || + message?.viewOnceMessageV2Extension || + message?.editedMessage || + message?.associatedChildMessage || + message?.groupStatusMessage || + message?.groupStatusMessageV2); + } +}; +/** + * Extract the true message content from a message + * Eg. extracts the inner message from a disappearing message/view once message + */ +export const extractMessageContent = (content) => { + const extractFromTemplateMessage = (msg) => { + if (msg.imageMessage) { + return { imageMessage: msg.imageMessage }; + } + else if (msg.documentMessage) { + return { documentMessage: msg.documentMessage }; + } + else if (msg.videoMessage) { + return { videoMessage: msg.videoMessage }; + } + else if (msg.locationMessage) { + return { locationMessage: msg.locationMessage }; + } + else { + return { + conversation: 'contentText' in msg ? msg.contentText : 'hydratedContentText' in msg ? msg.hydratedContentText : '' + }; + } + }; + content = normalizeMessageContent(content); + if (content?.buttonsMessage) { + return extractFromTemplateMessage(content.buttonsMessage); + } + if (content?.templateMessage?.hydratedFourRowTemplate) { + return extractFromTemplateMessage(content?.templateMessage?.hydratedFourRowTemplate); + } + if (content?.templateMessage?.hydratedTemplate) { + return extractFromTemplateMessage(content?.templateMessage?.hydratedTemplate); + } + if (content?.templateMessage?.fourRowTemplate) { + return extractFromTemplateMessage(content?.templateMessage?.fourRowTemplate); + } + return content; +}; +/** + * Returns the device predicted by message ID + */ +export const getDevice = (id) => /^3A.{18}$/.test(id) + ? 'ios' + : /^3E.{20}$/.test(id) + ? 'web' + : /^(.{21}|.{32})$/.test(id) + ? 'android' + : /^(3F|.{18}$)/.test(id) + ? 'desktop' + : 'unknown'; +/** Upserts a receipt in the message */ +export const updateMessageWithReceipt = (msg, receipt) => { + msg.userReceipt = msg.userReceipt || []; + const recp = msg.userReceipt.find(m => m.userJid === receipt.userJid); + if (recp) { + Object.assign(recp, receipt); + } + else { + msg.userReceipt.push(receipt); + } +}; +/** Update the message with a new reaction */ +export const updateMessageWithReaction = (msg, reaction) => { + const authorID = getKeyAuthor(reaction.key); + const reactions = (msg.reactions || []).filter(r => getKeyAuthor(r.key) !== authorID); + reaction.text = reaction.text || ''; + reactions.push(reaction); + msg.reactions = reactions; +}; +/** Update the message with a new poll update */ +export const updateMessageWithPollUpdate = (msg, update) => { + const authorID = getKeyAuthor(update.pollUpdateMessageKey); + const reactions = (msg.pollUpdates || []).filter(r => getKeyAuthor(r.pollUpdateMessageKey) !== authorID); + if (update.vote?.selectedOptions?.length) { + reactions.push(update); + } + msg.pollUpdates = reactions; +}; +/** Update the message with a new event response */ +export const updateMessageWithEventResponse = (msg, update) => { + const authorID = getKeyAuthor(update.eventResponseMessageKey); + const responses = (msg.eventResponses || []).filter(r => getKeyAuthor(r.eventResponseMessageKey) !== authorID); + responses.push(update); + msg.eventResponses = responses; +}; +/** + * Aggregates all poll updates in a poll. + * @param msg the poll creation message + * @param meId your jid + * @returns A list of options & their voters + */ +export function getAggregateVotesInPollMessage({ message, pollUpdates }, meId) { + const opts = message?.pollCreationMessage?.options || + message?.pollCreationMessageV2?.options || + message?.pollCreationMessageV3?.options || + []; + const voteHashMap = opts.reduce((acc, opt) => { + const hash = sha256(Buffer.from(opt.optionName || '')).toString(); + acc[hash] = { + name: opt.optionName || '', + voters: [] + }; + return acc; + }, {}); + for (const update of pollUpdates || []) { + const { vote } = update; + if (!vote) { + continue; + } + for (const option of vote.selectedOptions || []) { + const hash = option.toString(); + let data = voteHashMap[hash]; + if (!data) { + voteHashMap[hash] = { + name: 'Unknown', + voters: [] + }; + data = voteHashMap[hash]; + } + voteHashMap[hash].voters.push(getKeyAuthor(update.pollUpdateMessageKey, meId)); + } + } + return Object.values(voteHashMap); +} +/** + * Aggregates all event responses in an event message. + * @param msg the event creation message + * @param meId your jid + * @returns A list of response types & their responders + */ +export function getAggregateResponsesInEventMessage({ eventResponses }, meId) { + const responseTypes = ['GOING', 'NOT_GOING', 'MAYBE']; + const responseMap = {}; + for (const type of responseTypes) { + responseMap[type] = { + response: type, + responders: [] + }; + } + for (const update of eventResponses || []) { + const responseType = update.eventResponse || 'UNKNOWN'; + if (responseType !== 'UNKNOWN' && responseMap[responseType]) { + responseMap[responseType].responders.push(getKeyAuthor(update.eventResponseMessageKey, meId)); + } + } + return Object.values(responseMap); +} +/** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */ +export const aggregateMessageKeysNotFromMe = (keys) => { + const keyMap = {}; + for (const { remoteJid, id, participant, fromMe } of keys) { + if (!fromMe) { + const uqKey = `${remoteJid}:${participant || ''}`; + if (!keyMap[uqKey]) { + keyMap[uqKey] = { + jid: remoteJid, + participant: participant, + messageIds: [] + }; + } + keyMap[uqKey].messageIds.push(id); + } + } + return Object.values(keyMap); +}; +const REUPLOAD_REQUIRED_STATUS = [410, 404]; +/** + * Downloads the given message. Throws an error if it's not a media message + */ +export const downloadMediaMessage = async (message, type, options, ctx) => { + const result = await downloadMsg().catch(async (error) => { + if (ctx && + typeof error?.status === 'number' && // treat errors with status as HTTP failures requiring reupload + REUPLOAD_REQUIRED_STATUS.includes(error.status)) { + ctx.logger.info({ key: message.key }, 'sending reupload media request...'); + // request reupload + message = await ctx.reuploadRequest(message); + const result = await downloadMsg(); + return result; + } + throw error; + }); + return result; + async function downloadMsg() { + const mContent = extractMessageContent(message.message); + if (!mContent) { + throw new Boom('No message present', { statusCode: 400, data: message }); + } + const contentType = getContentType(mContent); + let mediaType = contentType?.replace('Message', ''); + const media = mContent[contentType]; + if (!media || typeof media !== 'object' || (!('url' in media) && !('thumbnailDirectPath' in media))) { + throw new Boom(`"${contentType}" message is not a media message`); + } + let download; + if ('thumbnailDirectPath' in media && !('url' in media)) { + download = { + directPath: media.thumbnailDirectPath, + mediaKey: media.mediaKey + }; + mediaType = 'thumbnail-link'; + } + else { + download = media; + } + const stream = await downloadContentFromMessage(download, mediaType, options); + if (type === 'buffer') { + const bufferArray = []; + for await (const chunk of stream) { + bufferArray.push(chunk); + } + return Buffer.concat(bufferArray); + } + return stream; + } +}; +/** Checks whether the given message is a media message; if it is returns the inner content */ +export const assertMediaContent = (content) => { + content = extractMessageContent(content); + const mediaContent = content?.documentMessage || + content?.imageMessage || + content?.videoMessage || + content?.audioMessage || + content?.stickerMessage; + if (!mediaContent) { + throw new Boom('given message is not a media message', { statusCode: 400, data: content }); + } + return mediaContent; +}; +//# sourceMappingURL=messages.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/messages.js.map b/packages/transport/vendor/lib/Utils/messages.js.map new file mode 100644 index 0000000..0f64ca7 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/messages.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/Utils/messages.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/noise-handler.d.ts b/packages/transport/vendor/lib/Utils/noise-handler.d.ts new file mode 100644 index 0000000..448d995 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/noise-handler.d.ts @@ -0,0 +1,20 @@ +import { proto } from '../../WAProto/index.js'; +import type { KeyPair } from '../Types/index.js'; +import type { BinaryNode } from '../WABinary/index.js'; +import type { ILogger } from './logger.js'; +export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }: { + keyPair: KeyPair; + NOISE_HEADER: Uint8Array; + logger: ILogger; + routingInfo?: Buffer | undefined; +}) => { + encrypt: (plaintext: Uint8Array) => Uint8Array; + decrypt: (ciphertext: Uint8Array) => Uint8Array; + authenticate: (data: Uint8Array) => void; + mixIntoKey: (data: Uint8Array) => void; + finishInit: () => Promise; + processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Uint8Array; + encodeFrame: (data: Buffer | Uint8Array) => Buffer; + decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => Promise; +}; +//# sourceMappingURL=noise-handler.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/noise-handler.d.ts.map b/packages/transport/vendor/lib/Utils/noise-handler.d.ts.map new file mode 100644 index 0000000..663ce12 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/noise-handler.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"noise-handler.d.ts","sourceRoot":"","sources":["../../src/Utils/noise-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AA4CvC,eAAO,MAAM,gBAAgB,GAAI,4FAK9B;IACF,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,UAAU,CAAA;IACxB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC;yBAqC4B,UAAU,KAAG,UAAU;0BAUtB,UAAU,KAAG,UAAU;yBAhBxB,UAAU;uBA+BZ,UAAU;;wCA0DC,KAAK,CAAC,gBAAgB,YAAY,OAAO;wBAgDzD,MAAM,GAAG,UAAU;2BAsBV,MAAM,GAAG,UAAU,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,KAAK,IAAI;CAgBnG,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/noise-handler.js b/packages/transport/vendor/lib/Utils/noise-handler.js new file mode 100644 index 0000000..a4ec90a --- /dev/null +++ b/packages/transport/vendor/lib/Utils/noise-handler.js @@ -0,0 +1,201 @@ +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import { NOISE_MODE, WA_CERT_DETAILS } from '../Defaults/index.js'; +import { decodeBinaryNode } from '../WABinary/index.js'; +import { aesDecryptGCM, aesEncryptGCM, Curve, hkdf, sha256 } from './crypto.js'; +const IV_LENGTH = 12; +const EMPTY_BUFFER = Buffer.alloc(0); +const generateIV = (counter) => { + const iv = new ArrayBuffer(IV_LENGTH); + new DataView(iv).setUint32(8, counter); + return new Uint8Array(iv); +}; +class TransportState { + constructor(encKey, decKey) { + this.encKey = encKey; + this.decKey = decKey; + this.readCounter = 0; + this.writeCounter = 0; + this.iv = new Uint8Array(IV_LENGTH); + } + encrypt(plaintext) { + const c = this.writeCounter++; + this.iv[8] = (c >>> 24) & 0xff; + this.iv[9] = (c >>> 16) & 0xff; + this.iv[10] = (c >>> 8) & 0xff; + this.iv[11] = c & 0xff; + return aesEncryptGCM(plaintext, this.encKey, this.iv, EMPTY_BUFFER); + } + decrypt(ciphertext) { + const c = this.readCounter++; + this.iv[8] = (c >>> 24) & 0xff; + this.iv[9] = (c >>> 16) & 0xff; + this.iv[10] = (c >>> 8) & 0xff; + this.iv[11] = c & 0xff; + return aesDecryptGCM(ciphertext, this.decKey, this.iv, EMPTY_BUFFER); + } +} +export const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }) => { + logger = logger.child({ class: 'ns' }); + const data = Buffer.from(NOISE_MODE); + let hash = data.byteLength === 32 ? data : sha256(data); + let salt = hash; + let encKey = hash; + let decKey = hash; + let counter = 0; + let sentIntro = false; + let inBytes = Buffer.alloc(0); + let transport = null; + let isWaitingForTransport = false; + let pendingOnFrame = null; + let introHeader; + if (routingInfo) { + introHeader = Buffer.alloc(7 + routingInfo.byteLength + NOISE_HEADER.length); + introHeader.write('ED', 0, 'utf8'); + introHeader.writeUint8(0, 2); + introHeader.writeUint8(1, 3); + introHeader.writeUint8(routingInfo.byteLength >> 16, 4); + introHeader.writeUint16BE(routingInfo.byteLength & 65535, 5); + introHeader.set(routingInfo, 7); + introHeader.set(NOISE_HEADER, 7 + routingInfo.byteLength); + } + else { + introHeader = Buffer.from(NOISE_HEADER); + } + const authenticate = (data) => { + if (!transport) { + hash = sha256(Buffer.concat([hash, data])); + } + }; + const encrypt = (plaintext) => { + if (transport) { + return transport.encrypt(plaintext); + } + const result = aesEncryptGCM(plaintext, encKey, generateIV(counter++), hash); + authenticate(result); + return result; + }; + const decrypt = (ciphertext) => { + if (transport) { + return transport.decrypt(ciphertext); + } + const result = aesDecryptGCM(ciphertext, decKey, generateIV(counter++), hash); + authenticate(ciphertext); + return result; + }; + const localHKDF = (data) => { + const key = hkdf(Buffer.from(data), 64, { salt, info: '' }); + return [key.subarray(0, 32), key.subarray(32)]; + }; + const mixIntoKey = (data) => { + const [write, read] = localHKDF(data); + salt = write; + encKey = read; + decKey = read; + counter = 0; + }; + const finishInit = async () => { + isWaitingForTransport = true; + const [write, read] = localHKDF(new Uint8Array(0)); + transport = new TransportState(write, read); + isWaitingForTransport = false; + logger.trace('Noise handler transitioned to Transport state'); + if (pendingOnFrame) { + logger.trace({ length: inBytes.length }, 'Flushing buffered frames after transport ready'); + await processData(pendingOnFrame); + pendingOnFrame = null; + } + }; + const processData = async (onFrame) => { + let size; + while (true) { + if (inBytes.length < 3) + return; + size = (inBytes[0] << 16) | (inBytes[1] << 8) | inBytes[2]; + if (inBytes.length < size + 3) + return; + let frame = inBytes.subarray(3, size + 3); + inBytes = inBytes.subarray(size + 3); + if (transport) { + const result = transport.decrypt(frame); + frame = await decodeBinaryNode(result); + } + if (logger.level === 'trace') { + logger.trace({ msg: frame?.attrs?.id }, 'recv frame'); + } + onFrame(frame); + } + }; + authenticate(NOISE_HEADER); + authenticate(publicKey); + return { + encrypt, + decrypt, + authenticate, + mixIntoKey, + finishInit, + processHandshake: ({ serverHello }, noiseKey) => { + authenticate(serverHello.ephemeral); + mixIntoKey(Curve.sharedKey(privateKey, serverHello.ephemeral)); + const decStaticContent = decrypt(serverHello.static); + mixIntoKey(Curve.sharedKey(privateKey, decStaticContent)); + const certDecoded = decrypt(serverHello.payload); + const { intermediate: certIntermediate, leaf } = proto.CertChain.decode(certDecoded); + // leaf + if (!leaf?.details || !leaf?.signature) { + throw new Boom('invalid noise leaf certificate', { statusCode: 400 }); + } + if (!certIntermediate?.details || !certIntermediate?.signature) { + throw new Boom('invalid noise intermediate certificate', { statusCode: 400 }); + } + const details = proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details); + const { issuerSerial } = details; + const verify = Curve.verify(details.key, leaf.details, leaf.signature); + const verifyIntermediate = Curve.verify(WA_CERT_DETAILS.PUBLIC_KEY, certIntermediate.details, certIntermediate.signature); + if (!verify) { + throw new Boom('noise certificate signature invalid', { statusCode: 400 }); + } + if (!verifyIntermediate) { + throw new Boom('noise intermediate certificate signature invalid', { statusCode: 400 }); + } + if (issuerSerial !== WA_CERT_DETAILS.SERIAL) { + throw new Boom('certification match failed', { statusCode: 400 }); + } + const keyEnc = encrypt(noiseKey.public); + mixIntoKey(Curve.sharedKey(noiseKey.private, serverHello.ephemeral)); + return keyEnc; + }, + encodeFrame: (data) => { + if (transport) { + data = transport.encrypt(data); + } + const dataLen = data.byteLength; + const introSize = sentIntro ? 0 : introHeader.length; + const frame = Buffer.allocUnsafe(introSize + 3 + dataLen); + if (!sentIntro) { + frame.set(introHeader); + sentIntro = true; + } + frame[introSize] = (dataLen >>> 16) & 0xff; + frame[introSize + 1] = (dataLen >>> 8) & 0xff; + frame[introSize + 2] = dataLen & 0xff; + frame.set(data, introSize + 3); + return frame; + }, + decodeFrame: async (newData, onFrame) => { + if (isWaitingForTransport) { + inBytes = Buffer.concat([inBytes, newData]); + pendingOnFrame = onFrame; + return; + } + if (inBytes.length === 0) { + inBytes = Buffer.from(newData); + } + else { + inBytes = Buffer.concat([inBytes, newData]); + } + await processData(onFrame); + } + }; +}; +//# sourceMappingURL=noise-handler.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/noise-handler.js.map b/packages/transport/vendor/lib/Utils/noise-handler.js.map new file mode 100644 index 0000000..44c79da --- /dev/null +++ b/packages/transport/vendor/lib/Utils/noise-handler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"noise-handler.js","sourceRoot":"","sources":["../../src/Utils/noise-handler.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/offline-node-processor.d.ts b/packages/transport/vendor/lib/Utils/offline-node-processor.d.ts new file mode 100644 index 0000000..c3a3dc7 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/offline-node-processor.d.ts @@ -0,0 +1,17 @@ +import type { BinaryNode } from '../WABinary/index.js'; +export type MessageType = 'message' | 'call' | 'receipt' | 'notification'; +export type OfflineNodeProcessorDeps = { + isWsOpen: () => boolean; + onUnexpectedError: (error: Error, msg: string) => void; + yieldToEventLoop: () => Promise; +}; +/** + * Creates a processor for offline stanza nodes that: + * - Queues nodes for sequential processing + * - Yields to the event loop periodically to avoid blocking + * - Catches handler errors to prevent the processing loop from crashing + */ +export declare function makeOfflineNodeProcessor(nodeProcessorMap: Map Promise>, deps: OfflineNodeProcessorDeps, batchSize?: number): { + enqueue: (type: MessageType, node: BinaryNode) => void; +}; +//# sourceMappingURL=offline-node-processor.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/offline-node-processor.d.ts.map b/packages/transport/vendor/lib/Utils/offline-node-processor.d.ts.map new file mode 100644 index 0000000..388f580 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/offline-node-processor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"offline-node-processor.d.ts","sourceRoot":"","sources":["../../src/Utils/offline-node-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,CAAA;AAOzE,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,MAAM,OAAO,CAAA;IACvB,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACvC,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EACvE,IAAI,EAAE,wBAAwB,EAC9B,SAAS,SAAK;oBAKS,WAAW,QAAQ,UAAU;EAwCpD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/offline-node-processor.js b/packages/transport/vendor/lib/Utils/offline-node-processor.js new file mode 100644 index 0000000..3ad5c79 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/offline-node-processor.js @@ -0,0 +1,40 @@ +/** + * Creates a processor for offline stanza nodes that: + * - Queues nodes for sequential processing + * - Yields to the event loop periodically to avoid blocking + * - Catches handler errors to prevent the processing loop from crashing + */ +export function makeOfflineNodeProcessor(nodeProcessorMap, deps, batchSize = 10) { + const nodes = []; + let isProcessing = false; + const enqueue = (type, node) => { + nodes.push({ type, node }); + if (isProcessing) { + return; + } + isProcessing = true; + const promise = async () => { + let processedInBatch = 0; + while (nodes.length && deps.isWsOpen()) { + const { type, node } = nodes.shift(); + const nodeProcessor = nodeProcessorMap.get(type); + if (!nodeProcessor) { + deps.onUnexpectedError(new Error(`unknown offline node type: ${type}`), 'processing offline node'); + continue; + } + await nodeProcessor(node).catch(err => deps.onUnexpectedError(err, `processing offline ${type}`)); + processedInBatch++; + // Yield to event loop after processing a batch + // This prevents blocking the event loop for too long when there are many offline nodes + if (processedInBatch >= batchSize) { + processedInBatch = 0; + await deps.yieldToEventLoop(); + } + } + isProcessing = false; + }; + promise().catch(error => deps.onUnexpectedError(error, 'processing offline nodes')); + }; + return { enqueue }; +} +//# sourceMappingURL=offline-node-processor.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/offline-node-processor.js.map b/packages/transport/vendor/lib/Utils/offline-node-processor.js.map new file mode 100644 index 0000000..d76182d --- /dev/null +++ b/packages/transport/vendor/lib/Utils/offline-node-processor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"offline-node-processor.js","sourceRoot":"","sources":["../../src/Utils/offline-node-processor.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACvC,gBAAuE,EACvE,IAA8B,EAC9B,SAAS,GAAG,EAAE;IAEd,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,IAAI,YAAY,GAAG,KAAK,CAAA;IAExB,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAE,IAAgB,EAAE,EAAE;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1B,IAAI,YAAY,EAAE,CAAC;YAClB,OAAM;QACP,CAAC;QAED,YAAY,GAAG,IAAI,CAAA;QAEnB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAA;YAExB,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACxC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;gBAErC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAA;oBAClG,SAAQ;gBACT,CAAC;gBAED,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAA;gBACjG,gBAAgB,EAAE,CAAA;gBAElB,+CAA+C;gBAC/C,uFAAuF;gBACvF,IAAI,gBAAgB,IAAI,SAAS,EAAE,CAAC;oBACnC,gBAAgB,GAAG,CAAC,CAAA;oBACpB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;gBAC9B,CAAC;YACF,CAAC;YAED,YAAY,GAAG,KAAK,CAAA;QACrB,CAAC,CAAA;QAED,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAA;IACpF,CAAC,CAAA;IAED,OAAO,EAAE,OAAO,EAAE,CAAA;AACnB,CAAC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/pre-key-manager.d.ts b/packages/transport/vendor/lib/Utils/pre-key-manager.d.ts new file mode 100644 index 0000000..ae1bb36 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/pre-key-manager.d.ts @@ -0,0 +1,28 @@ +import type { SignalDataSet, SignalDataTypeMap, SignalKeyStore } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +/** + * Manages pre-key operations with proper concurrency control + */ +export declare class PreKeyManager { + private readonly store; + private readonly logger; + private readonly queues; + constructor(store: SignalKeyStore, logger: ILogger); + /** + * Get or create a queue for a specific key type + */ + private getQueue; + /** + * Process pre-key operations (updates and deletions) + */ + processOperations(data: SignalDataSet, keyType: keyof SignalDataTypeMap, transactionCache: SignalDataSet, mutations: SignalDataSet, isInTransaction: boolean): Promise; + /** + * Process deletions with validation + */ + private processDeletions; + /** + * Validate and process pre-key deletions outside transactions + */ + validateDeletions(data: SignalDataSet, keyType: keyof SignalDataTypeMap): Promise; +} +//# sourceMappingURL=pre-key-manager.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/pre-key-manager.d.ts.map b/packages/transport/vendor/lib/Utils/pre-key-manager.d.ts.map new file mode 100644 index 0000000..a5296c2 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/pre-key-manager.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pre-key-manager.d.ts","sourceRoot":"","sources":["../../src/Utils/pre-key-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC;;GAEG;AACH,qBAAa,aAAa;IAIxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;gBAGjC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,OAAO;IAGjC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACG,iBAAiB,CACtB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,iBAAiB,EAChC,gBAAgB,EAAE,aAAa,EAC/B,SAAS,EAAE,aAAa,EACxB,eAAe,EAAE,OAAO,GACtB,OAAO,CAAC,IAAI,CAAC;IAkChB;;OAEG;YACW,gBAAgB;IA+B9B;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAmB7F"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/pre-key-manager.js b/packages/transport/vendor/lib/Utils/pre-key-manager.js new file mode 100644 index 0000000..3bec47d --- /dev/null +++ b/packages/transport/vendor/lib/Utils/pre-key-manager.js @@ -0,0 +1,106 @@ +import PQueue from 'p-queue'; +/** + * Manages pre-key operations with proper concurrency control + */ +export class PreKeyManager { + constructor(store, logger) { + this.store = store; + this.logger = logger; + this.queues = new Map(); + } + /** + * Get or create a queue for a specific key type + */ + getQueue(keyType) { + if (!this.queues.has(keyType)) { + this.queues.set(keyType, new PQueue({ concurrency: 1 })); + } + return this.queues.get(keyType); + } + /** + * Process pre-key operations (updates and deletions) + */ + async processOperations(data, keyType, transactionCache, mutations, isInTransaction) { + const keyData = data[keyType]; + if (!keyData) + return; + return this.getQueue(keyType).add(async () => { + // Ensure structures exist + transactionCache[keyType] = transactionCache[keyType] || {}; + mutations[keyType] = mutations[keyType] || {}; + // Separate deletions from updates + const deletions = []; + const updates = {}; + for (const keyId in keyData) { + if (keyData[keyId] === null) { + deletions.push(keyId); + } + else { + updates[keyId] = keyData[keyId]; + } + } + // Process updates (no validation needed) + if (Object.keys(updates).length > 0) { + Object.assign(transactionCache[keyType], updates); + Object.assign(mutations[keyType], updates); + } + // Process deletions with validation + if (deletions.length > 0) { + await this.processDeletions(keyType, deletions, transactionCache, mutations, isInTransaction); + } + }); + } + /** + * Process deletions with validation + */ + async processDeletions(keyType, ids, transactionCache, mutations, isInTransaction) { + if (isInTransaction) { + // In transaction, only allow deletion if key exists in cache + for (const keyId of ids) { + if (transactionCache[keyType]?.[keyId]) { + transactionCache[keyType][keyId] = null; + mutations[keyType][keyId] = null; + } + else { + this.logger.warn(`Skipping deletion of non-existent ${keyType} in transaction: ${keyId}`); + } + } + } + else { + // Outside transaction, validate against store + const existingKeys = await this.store.get(keyType, ids); + for (const keyId of ids) { + if (existingKeys[keyId]) { + transactionCache[keyType][keyId] = null; + mutations[keyType][keyId] = null; + } + else { + this.logger.warn(`Skipping deletion of non-existent ${keyType}: ${keyId}`); + } + } + } + } + /** + * Validate and process pre-key deletions outside transactions + */ + async validateDeletions(data, keyType) { + const keyData = data[keyType]; + if (!keyData) + return; + return this.getQueue(keyType).add(async () => { + // Find all deletion requests + const deletionIds = Object.keys(keyData).filter(id => keyData[id] === null); + if (deletionIds.length === 0) + return; + // Validate deletions + const existingKeys = await this.store.get(keyType, deletionIds); + for (const keyId of deletionIds) { + if (!existingKeys[keyId]) { + this.logger.warn(`Skipping deletion of non-existent ${keyType}: ${keyId}`); + delete data[keyType][keyId]; + } + } + }); + } +} +//# sourceMappingURL=pre-key-manager.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/pre-key-manager.js.map b/packages/transport/vendor/lib/Utils/pre-key-manager.js.map new file mode 100644 index 0000000..5c85b26 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/pre-key-manager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pre-key-manager.js","sourceRoot":"","sources":["../../src/Utils/pre-key-manager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/process-message.d.ts b/packages/transport/vendor/lib/Utils/process-message.d.ts new file mode 100644 index 0000000..b8ccbe9 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/process-message.d.ts @@ -0,0 +1,60 @@ +import { proto } from '../../WAProto/index.js'; +import type { AuthenticationCreds, BaileysEventEmitter, CacheStore, SignalKeyStoreWithTransaction, SignalRepositoryWithLIDStore, SocketConfig, WAMessage, WAMessageKey } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +type ProcessMessageContext = { + shouldProcessHistoryMsg: boolean; + placeholderResendCache?: CacheStore; + creds: AuthenticationCreds; + keyStore: SignalKeyStoreWithTransaction; + ev: BaileysEventEmitter; + logger?: ILogger; + options: RequestInit; + signalRepository: SignalRepositoryWithLIDStore; + getMessage: SocketConfig['getMessage']; +}; +/** Cleans a received message to further processing */ +export declare const cleanMessage: (message: WAMessage, meId: string, meLid: string) => void; +export declare const isRealMessage: (message: WAMessage) => boolean; +export declare const shouldIncrementChatUnread: (message: WAMessage) => boolean; +/** + * Get the ID of the chat from the given key. + * Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant + */ +export declare const getChatId: ({ remoteJid, participant, fromMe }: WAMessageKey) => string; +type PollContext = { + /** normalised jid of the person that created the poll */ + pollCreatorJid: string; + /** ID of the poll creation message */ + pollMsgId: string; + /** poll creation message enc key */ + pollEncKey: Uint8Array; + /** jid of the person that voted */ + voterJid: string; +}; +type EventContext = { + /** normalised jid of the person that created the event */ + eventCreatorJid: string; + /** ID of the event creation message */ + eventMsgId: string; + /** event creation message enc key */ + eventEncKey: Uint8Array; + /** jid of the person that responded */ + responderJid: string; +}; +/** + * Decrypt a poll vote + * @param vote encrypted vote + * @param ctx additional info about the poll required for decryption + * @returns list of SHA256 options + */ +export declare function decryptPollVote({ encPayload, encIv }: proto.Message.IPollEncValue, { pollCreatorJid, pollMsgId, pollEncKey, voterJid }: PollContext): proto.Message.PollVoteMessage; +/** + * Decrypt an event response + * @param response encrypted event response + * @param ctx additional info about the event required for decryption + * @returns event response message + */ +export declare function decryptEventResponse({ encPayload, encIv }: proto.Message.IPollEncValue, { eventCreatorJid, eventMsgId, eventEncKey, responderJid }: EventContext): proto.Message.EventResponseMessage; +declare const processMessage: (message: WAMessage, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, signalRepository, keyStore, logger, options, getMessage }: ProcessMessageContext) => Promise; +export default processMessage; +//# sourceMappingURL=process-message.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/process-message.d.ts.map b/packages/transport/vendor/lib/Utils/process-message.d.ts.map new file mode 100644 index 0000000..4a54413 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/process-message.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"process-message.d.ts","sourceRoot":"","sources":["../../src/Utils/process-message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EAQV,6BAA6B,EAC7B,4BAA4B,EAC5B,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,MAAM,UAAU,CAAA;AAiBjB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGvC,KAAK,qBAAqB,GAAG;IAC5B,uBAAuB,EAAE,OAAO,CAAA;IAChC,sBAAsB,CAAC,EAAE,UAAU,CAAA;IACnC,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,6BAA6B,CAAA;IACvC,EAAE,EAAE,mBAAmB,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,WAAW,CAAA;IACpB,gBAAgB,EAAE,4BAA4B,CAAA;IAC9C,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACtC,CAAA;AAqED,sDAAsD;AACtD,eAAO,MAAM,YAAY,GAAI,SAAS,SAAS,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,SAiD3E,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,SAAS,SAAS,YAY/C,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,SAAS,SAAS,YAAoD,CAAA;AAEhH;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,oCAAoC,YAAY,KAAG,MAkB5E,CAAA;AAED,KAAK,WAAW,GAAG;IAClB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,oCAAoC;IACpC,UAAU,EAAE,UAAU,CAAA;IACtB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,YAAY,GAAG;IACnB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAA;IACvB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,WAAW,EAAE,UAAU,CAAA;IACvB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAClD,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,iCAoBhE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAClD,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,YAAY,sCAoBxE;AAED,QAAA,MAAM,cAAc,GACnB,SAAS,SAAS,EAClB,yHAUG,qBAAqB,kBA8bxB,CAAA;AAED,eAAe,cAAc,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/process-message.js b/packages/transport/vendor/lib/Utils/process-message.js new file mode 100644 index 0000000..c4e1ff4 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/process-message.js @@ -0,0 +1,597 @@ +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import { WAMessageStubType } from '../Types/index.js'; +import { getContentType, normalizeMessageContent } from '../Utils/messages.js'; +import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidStatusBroadcast, isLidUser, jidDecode, jidEncode, jidNormalizedUser } from '../WABinary/index.js'; +import { aesDecryptGCM, hmacSign } from './crypto.js'; +import { getKeyAuthor, toNumber } from './generics.js'; +import { downloadAndProcessHistorySyncNotification } from './history.js'; +import { buildMergedTcTokenIndexWrite, resolveTcTokenJid } from './tc-token-utils.js'; +const REAL_MSG_STUB_TYPES = new Set([ + WAMessageStubType.CALL_MISSED_GROUP_VIDEO, + WAMessageStubType.CALL_MISSED_GROUP_VOICE, + WAMessageStubType.CALL_MISSED_VIDEO, + WAMessageStubType.CALL_MISSED_VOICE +]); +const REAL_MSG_REQ_ME_STUB_TYPES = new Set([WAMessageStubType.GROUP_PARTICIPANT_ADD]); +async function storeTcTokensFromHistorySync(chats, signalRepository, keyStore, logger) { + const getLIDForPN = signalRepository.lidMapping.getLIDForPN.bind(signalRepository.lidMapping); + const candidates = []; + for (const chat of chats) { + const ts = chat.tcTokenTimestamp ? toNumber(chat.tcTokenTimestamp) : 0; + if (chat.tcToken?.length && ts > 0) { + const jid = jidNormalizedUser(chat.id); + const storageJid = await resolveTcTokenJid(jid, getLIDForPN); + candidates.push({ + storageJid, + token: Buffer.from(chat.tcToken), + ts, + senderTs: chat.tcTokenSenderTimestamp ? toNumber(chat.tcTokenSenderTimestamp) : undefined + }); + } + } + if (!candidates.length) { + return; + } + const jids = candidates.map(c => c.storageJid); + const existing = await keyStore.get('tctoken', jids); + const entries = {}; + for (const c of candidates) { + const existingEntry = existing[c.storageJid]; + const existingTs = existingEntry?.timestamp ? Number(existingEntry.timestamp) : 0; + if (existingTs > 0 && existingTs >= c.ts) { + continue; + } + entries[c.storageJid] = { + ...existingEntry, + token: c.token, + timestamp: String(c.ts), + ...(c.senderTs !== undefined ? { senderTimestamp: c.senderTs } : {}) + }; + } + if (Object.keys(entries).length) { + logger?.debug({ count: Object.keys(entries).length }, 'storing tctokens from history sync'); + try { + // Include updated __index so cross-session pruning picks these JIDs up. + const indexWrite = await buildMergedTcTokenIndexWrite(keyStore, Object.keys(entries)); + await keyStore.set({ tctoken: { ...entries, ...indexWrite } }); + } + catch (err) { + logger?.warn({ err }, 'failed to store tctokens from history sync'); + } + } +} +/** Cleans a received message to further processing */ +export const cleanMessage = (message, meId, meLid) => { + // ensure remoteJid and participant doesn't have device or agent in it + if (isHostedPnUser(message.key.remoteJid) || isHostedLidUser(message.key.remoteJid)) { + message.key.remoteJid = jidEncode(jidDecode(message.key?.remoteJid)?.user, isHostedPnUser(message.key.remoteJid) ? 's.whatsapp.net' : 'lid'); + } + else { + message.key.remoteJid = jidNormalizedUser(message.key.remoteJid); + } + if (isHostedPnUser(message.key.participant) || isHostedLidUser(message.key.participant)) { + message.key.participant = jidEncode(jidDecode(message.key.participant)?.user, isHostedPnUser(message.key.participant) ? 's.whatsapp.net' : 'lid'); + } + else { + message.key.participant = jidNormalizedUser(message.key.participant); + } + const content = normalizeMessageContent(message.message); + // if the message has a reaction, ensure fromMe & remoteJid are from our perspective + if (content?.reactionMessage) { + normaliseKey(content.reactionMessage.key); + } + if (content?.pollUpdateMessage) { + normaliseKey(content.pollUpdateMessage.pollCreationMessageKey); + } + function normaliseKey(msgKey) { + // if the reaction is from another user + // we've to correctly map the key to this user's perspective + if (!message.key.fromMe) { + // if the sender believed the message being reacted to is not from them + // we've to correct the key to be from them, or some other participant + msgKey.fromMe = !msgKey.fromMe + ? areJidsSameUser(msgKey.participant || msgKey.remoteJid, meId) || + areJidsSameUser(msgKey.participant || msgKey.remoteJid, meLid) + : // if the message being reacted to, was from them + // fromMe automatically becomes false + false; + // set the remoteJid to being the same as the chat the message came from + // TODO: investigate inconsistencies + msgKey.remoteJid = message.key.remoteJid; + // set participant of the message + msgKey.participant = msgKey.participant || message.key.participant; + } + } +}; +// TODO: target:audit AUDIT THIS FUNCTION AGAIN +export const isRealMessage = (message) => { + const normalizedContent = normalizeMessageContent(message.message); + const hasSomeContent = !!getContentType(normalizedContent); + return ((!!normalizedContent || + REAL_MSG_STUB_TYPES.has(message.messageStubType) || + REAL_MSG_REQ_ME_STUB_TYPES.has(message.messageStubType)) && + hasSomeContent && + !normalizedContent?.protocolMessage && + !normalizedContent?.reactionMessage && + !normalizedContent?.pollUpdateMessage); +}; +export const shouldIncrementChatUnread = (message) => !message.key.fromMe && !message.messageStubType; +/** + * Get the ID of the chat from the given key. + * Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant + */ +export const getChatId = ({ remoteJid, participant, fromMe }) => { + if (!remoteJid) { + throw new Boom('Cannot derive chat id: message key is missing remoteJid', { + data: { remoteJid, participant, fromMe } + }); + } + if (isJidBroadcast(remoteJid) && !isJidStatusBroadcast(remoteJid) && !fromMe) { + if (!participant) { + throw new Boom('Cannot derive chat id: broadcast message key is missing participant', { + data: { remoteJid, fromMe } + }); + } + return participant; + } + return remoteJid; +}; +/** + * Decrypt a poll vote + * @param vote encrypted vote + * @param ctx additional info about the poll required for decryption + * @returns list of SHA256 options + */ +export function decryptPollVote({ encPayload, encIv }, { pollCreatorJid, pollMsgId, pollEncKey, voterJid }) { + const sign = Buffer.concat([ + toBinary(pollMsgId), + toBinary(pollCreatorJid), + toBinary(voterJid), + toBinary('Poll Vote'), + new Uint8Array([1]) + ]); + const key0 = hmacSign(pollEncKey, new Uint8Array(32), 'sha256'); + const decKey = hmacSign(sign, key0, 'sha256'); + const aad = toBinary(`${pollMsgId}\u0000${voterJid}`); + const decrypted = aesDecryptGCM(encPayload, decKey, encIv, aad); + return proto.Message.PollVoteMessage.decode(decrypted); + function toBinary(txt) { + return Buffer.from(txt); + } +} +/** + * Decrypt an event response + * @param response encrypted event response + * @param ctx additional info about the event required for decryption + * @returns event response message + */ +export function decryptEventResponse({ encPayload, encIv }, { eventCreatorJid, eventMsgId, eventEncKey, responderJid }) { + const sign = Buffer.concat([ + toBinary(eventMsgId), + toBinary(eventCreatorJid), + toBinary(responderJid), + toBinary('Event Response'), + new Uint8Array([1]) + ]); + const key0 = hmacSign(eventEncKey, new Uint8Array(32), 'sha256'); + const decKey = hmacSign(sign, key0, 'sha256'); + const aad = toBinary(`${eventMsgId}\u0000${responderJid}`); + const decrypted = aesDecryptGCM(encPayload, decKey, encIv, aad); + return proto.Message.EventResponseMessage.decode(decrypted); + function toBinary(txt) { + return Buffer.from(txt); + } +} +const processMessage = async (message, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, signalRepository, keyStore, logger, options, getMessage }) => { + const meId = creds.me.id; + const { accountSettings } = creds; + const chat = { id: jidNormalizedUser(getChatId(message.key)) }; + const isRealMsg = isRealMessage(message); + if (isRealMsg) { + chat.messages = [{ message }]; + chat.conversationTimestamp = toNumber(message.messageTimestamp); + // only increment unread count if not CIPHERTEXT and from another person + if (shouldIncrementChatUnread(message)) { + chat.unreadCount = (chat.unreadCount || 0) + 1; + } + } + const content = normalizeMessageContent(message.message); + // unarchive chat if it's a real message, or someone reacted to our message + // and we've the unarchive chats setting on + if ((isRealMsg || content?.reactionMessage?.key?.fromMe) && accountSettings?.unarchiveChats) { + chat.archived = false; + chat.readOnly = false; + } + const protocolMsg = content?.protocolMessage; + if (protocolMsg) { + switch (protocolMsg.type) { + case proto.Message.ProtocolMessage.Type.HISTORY_SYNC_NOTIFICATION: + const histNotification = protocolMsg.historySyncNotification; + const process = shouldProcessHistoryMsg; + const isLatest = !creds.processedHistoryMessages?.length; + logger?.info({ + histNotification, + process, + id: message.key.id, + isLatest + }, 'got history notification'); + if (process) { + // TODO: investigate + if (histNotification.syncType !== proto.HistorySync.HistorySyncType.ON_DEMAND) { + ev.emit('creds.update', { + processedHistoryMessages: [ + ...(creds.processedHistoryMessages || []), + { key: message.key, messageTimestamp: message.messageTimestamp } + ] + }); + } + const data = await downloadAndProcessHistorySyncNotification(histNotification, options, logger); + if (data.lidPnMappings?.length) { + logger?.debug({ count: data.lidPnMappings.length }, 'processing LID-PN mappings from history sync'); + await signalRepository.lidMapping + .storeLIDPNMappings(data.lidPnMappings) + .catch(err => logger?.warn({ err }, 'failed to store LID-PN mappings from history sync')); + } + await storeTcTokensFromHistorySync(data.chats, signalRepository, keyStore, logger); + ev.emit('messaging-history.set', { + ...data, + isLatest: histNotification.syncType !== proto.HistorySync.HistorySyncType.ON_DEMAND ? isLatest : undefined, + chunkOrder: histNotification.chunkOrder, + peerDataRequestSessionId: histNotification.peerDataRequestSessionId + }); + } + break; + case proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE: + const keys = protocolMsg.appStateSyncKeyShare.keys; + if (keys?.length) { + let newAppStateSyncKeyId = ''; + await keyStore.transaction(async () => { + const newKeys = []; + for (const { keyData, keyId } of keys) { + const strKeyId = Buffer.from(keyId.keyId).toString('base64'); + newKeys.push(strKeyId); + await keyStore.set({ 'app-state-sync-key': { [strKeyId]: keyData } }); + newAppStateSyncKeyId = strKeyId; + } + logger?.info({ newAppStateSyncKeyId, newKeys }, 'injecting new app state sync keys'); + }, meId); + ev.emit('creds.update', { myAppStateKeyId: newAppStateSyncKeyId }); + } + else { + logger?.info({ protocolMsg }, 'recv app state sync with 0 keys'); + } + break; + case proto.Message.ProtocolMessage.Type.REVOKE: + ev.emit('messages.update', [ + { + key: { + ...message.key, + id: protocolMsg.key.id + }, + update: { message: null, messageStubType: WAMessageStubType.REVOKE, key: message.key } + } + ]); + break; + case proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING: + Object.assign(chat, { + ephemeralSettingTimestamp: toNumber(message.messageTimestamp), + ephemeralExpiration: protocolMsg.ephemeralExpiration || null + }); + break; + case proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE: + const response = protocolMsg.peerDataOperationRequestResponseMessage; + if (response) { + // TODO: IMPLEMENT HISTORY SYNC ETC (sticker uploads etc.). + const peerDataOperationResult = response.peerDataOperationResult || []; + for (const result of peerDataOperationResult) { + const retryResponse = result?.placeholderMessageResendResponse; + //eslint-disable-next-line max-depth + if (!retryResponse?.webMessageInfoBytes) { + continue; + } + //eslint-disable-next-line max-depth + try { + const webMessageInfo = proto.WebMessageInfo.decode(retryResponse.webMessageInfoBytes); + const msgId = webMessageInfo.key?.id; + // Retrieve cached original message data (preserves LID details, + // timestamps, etc. that the phone may omit in its PDO response) + const cachedData = msgId ? await placeholderResendCache?.get(msgId) : undefined; + //eslint-disable-next-line max-depth + if (msgId) { + await placeholderResendCache?.del(msgId); + } + let finalMsg; + //eslint-disable-next-line max-depth + if (cachedData && typeof cachedData === 'object') { + // Apply decoded message content onto cached metadata (preserves LID etc.) + cachedData.message = webMessageInfo.message; + //eslint-disable-next-line max-depth + if (webMessageInfo.messageTimestamp) { + cachedData.messageTimestamp = webMessageInfo.messageTimestamp; + } + finalMsg = cachedData; + } + else { + finalMsg = webMessageInfo; + } + logger?.debug({ msgId, requestId: response.stanzaId }, 'received placeholder resend'); + ev.emit('messages.upsert', { + messages: [finalMsg], + type: 'notify', + requestId: response.stanzaId + }); + } + catch (err) { + logger?.warn({ err, stanzaId: response.stanzaId }, 'failed to decode placeholder resend response'); + } + } + } + break; + case proto.Message.ProtocolMessage.Type.MESSAGE_EDIT: + ev.emit('messages.update', [ + { + // flip the sender / fromMe properties because they're in the perspective of the sender + key: { ...message.key, id: protocolMsg.key?.id }, + update: { + message: { + editedMessage: { + message: protocolMsg.editedMessage + } + }, + messageTimestamp: protocolMsg.timestampMs + ? Math.floor(toNumber(protocolMsg.timestampMs) / 1000) + : message.messageTimestamp + } + } + ]); + break; + case proto.Message.ProtocolMessage.Type.GROUP_MEMBER_LABEL_CHANGE: + const labelAssociationMsg = protocolMsg.memberLabel; + if (labelAssociationMsg?.label) { + ev.emit('group.member-tag.update', { + groupId: chat.id, + label: labelAssociationMsg.label, + participant: message.key.participant, + participantAlt: message.key.participantAlt, + messageTimestamp: Number(message.messageTimestamp) + }); + } + break; + case proto.Message.ProtocolMessage.Type.LID_MIGRATION_MAPPING_SYNC: + const encodedPayload = protocolMsg.lidMigrationMappingSyncMessage?.encodedMappingPayload; + const { pnToLidMappings, chatDbMigrationTimestamp } = proto.LIDMigrationMappingSyncPayload.decode(encodedPayload); + logger?.debug({ pnToLidMappings, chatDbMigrationTimestamp }, 'got lid mappings and chat db migration timestamp'); + const pairs = []; + for (const { pn, latestLid, assignedLid } of pnToLidMappings) { + const lid = latestLid || assignedLid; + pairs.push({ lid: `${lid}@lid`, pn: `${pn}@s.whatsapp.net` }); + } + await signalRepository.lidMapping.storeLIDPNMappings(pairs); + if (pairs.length) { + for (const { pn, lid } of pairs) { + await signalRepository.migrateSession(pn, lid); + } + } + } + } + else if (content?.reactionMessage) { + const reaction = { + ...content.reactionMessage, + key: message.key + }; + ev.emit('messages.reaction', [ + { + reaction, + key: content.reactionMessage?.key + } + ]); + } + else if (content?.encEventResponseMessage) { + const encEventResponse = content.encEventResponseMessage; + const creationMsgKey = encEventResponse.eventCreationMessageKey; + // we need to fetch the event creation message to get the event enc key + const eventMsg = await getMessage(creationMsgKey); + if (eventMsg) { + try { + const meIdNormalised = jidNormalizedUser(meId); + // all jids need to be PN + const eventCreatorKey = creationMsgKey.participant || creationMsgKey.remoteJid; + const eventCreatorPn = isLidUser(eventCreatorKey) + ? await signalRepository.lidMapping.getPNForLID(eventCreatorKey) + : eventCreatorKey; + const eventCreatorJid = getKeyAuthor({ remoteJid: jidNormalizedUser(eventCreatorPn), fromMe: meIdNormalised === eventCreatorPn }, meIdNormalised); + const responderJid = getKeyAuthor(message.key, meIdNormalised); + const eventEncKey = eventMsg?.messageContextInfo?.messageSecret; + if (!eventEncKey) { + logger?.warn({ creationMsgKey }, 'event response: missing messageSecret for decryption'); + } + else { + const responseMsg = decryptEventResponse(encEventResponse, { + eventEncKey, + eventCreatorJid, + eventMsgId: creationMsgKey.id, + responderJid + }); + const eventResponse = { + eventResponseMessageKey: message.key, + senderTimestampMs: responseMsg.timestampMs, + response: responseMsg + }; + ev.emit('messages.update', [ + { + key: creationMsgKey, + update: { + eventResponses: [eventResponse] + } + } + ]); + } + } + catch (err) { + logger?.warn({ err, creationMsgKey }, 'failed to decrypt event response'); + } + } + else { + logger?.warn({ creationMsgKey }, 'event creation message not found, cannot decrypt response'); + } + } + else if (message.messageStubType) { + const jid = message.key?.remoteJid; + //let actor = whatsappID (message.participant) + let participants; + const emitParticipantsUpdate = (action) => ev.emit('group-participants.update', { + id: jid, + author: message.key.participant, + authorPn: message.key.participantAlt, + authorUsername: message.key.participantUsername, + participants, + action + }); + const emitGroupUpdate = (update) => { + ev.emit('groups.update', [ + { + id: jid, + ...update, + author: message.key.participant ?? undefined, + authorPn: message.key.participantAlt, + authorUsername: message.key.participantUsername + } + ]); + }; + const emitGroupRequestJoin = (participant, action, method) => { + ev.emit('group.join-request', { + id: jid, + author: message.key.participant, + authorPn: message.key.participantAlt, + authorUsername: message.key.participantUsername, + participant: participant.lid, + participantPn: participant.pn, + action, + method: method + }); + }; + const participantsIncludesMe = () => participants.find(jid => areJidsSameUser(meId, jid.phoneNumber)); // ADD SUPPORT FOR LID + switch (message.messageStubType) { + case WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER: + participants = message.messageStubParameters.map((a) => JSON.parse(a)) || []; + emitParticipantsUpdate('modify'); + break; + case WAMessageStubType.GROUP_PARTICIPANT_LEAVE: + case WAMessageStubType.GROUP_PARTICIPANT_REMOVE: + participants = message.messageStubParameters.map((a) => JSON.parse(a)) || []; + emitParticipantsUpdate('remove'); + // mark the chat read only if you left the group + if (participantsIncludesMe()) { + chat.readOnly = true; + } + break; + case WAMessageStubType.GROUP_PARTICIPANT_ADD: + case WAMessageStubType.GROUP_PARTICIPANT_INVITE: + case WAMessageStubType.GROUP_PARTICIPANT_ADD_REQUEST_JOIN: + participants = message.messageStubParameters.map((a) => JSON.parse(a)) || []; + if (participantsIncludesMe()) { + chat.readOnly = false; + } + emitParticipantsUpdate('add'); + break; + case WAMessageStubType.GROUP_PARTICIPANT_DEMOTE: + participants = message.messageStubParameters.map((a) => JSON.parse(a)) || []; + emitParticipantsUpdate('demote'); + break; + case WAMessageStubType.GROUP_PARTICIPANT_PROMOTE: + participants = message.messageStubParameters.map((a) => JSON.parse(a)) || []; + emitParticipantsUpdate('promote'); + break; + case WAMessageStubType.GROUP_CHANGE_ANNOUNCE: + const announceValue = message.messageStubParameters?.[0]; + emitGroupUpdate({ announce: announceValue === 'true' || announceValue === 'on' }); + break; + case WAMessageStubType.GROUP_CHANGE_RESTRICT: + const restrictValue = message.messageStubParameters?.[0]; + emitGroupUpdate({ restrict: restrictValue === 'true' || restrictValue === 'on' }); + break; + case WAMessageStubType.GROUP_CHANGE_SUBJECT: + const name = message.messageStubParameters?.[0]; + chat.name = name; + emitGroupUpdate({ subject: name }); + break; + case WAMessageStubType.GROUP_CHANGE_DESCRIPTION: + const description = message.messageStubParameters?.[0]; + chat.description = description; + emitGroupUpdate({ desc: description }); + break; + case WAMessageStubType.GROUP_CHANGE_INVITE_LINK: + const code = message.messageStubParameters?.[0]; + emitGroupUpdate({ inviteCode: code }); + break; + case WAMessageStubType.GROUP_MEMBER_ADD_MODE: + const memberAddValue = message.messageStubParameters?.[0]; + emitGroupUpdate({ memberAddMode: memberAddValue === 'all_member_add' }); + break; + case WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE: + const approvalMode = message.messageStubParameters?.[0]; + emitGroupUpdate({ joinApprovalMode: approvalMode === 'on' }); + break; + case WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD: // TODO: Add other events + const participant = JSON.parse(message.messageStubParameters?.[0]); + const action = message.messageStubParameters?.[1]; + const method = message.messageStubParameters?.[2]; + emitGroupRequestJoin(participant, action, method); + break; + } + } /* else if(content?.pollUpdateMessage) { + const creationMsgKey = content.pollUpdateMessage.pollCreationMessageKey! + // we need to fetch the poll creation message to get the poll enc key + // TODO: make standalone, remove getMessage reference + // TODO: Remove entirely + const pollMsg = await getMessage(creationMsgKey) + if(pollMsg) { + const meIdNormalised = jidNormalizedUser(meId) + const pollCreatorJid = getKeyAuthor(creationMsgKey, meIdNormalised) + const voterJid = getKeyAuthor(message.key, meIdNormalised) + const pollEncKey = pollMsg.messageContextInfo?.messageSecret! + + try { + const voteMsg = decryptPollVote( + content.pollUpdateMessage.vote!, + { + pollEncKey, + pollCreatorJid, + pollMsgId: creationMsgKey.id!, + voterJid, + } + ) + ev.emit('messages.update', [ + { + key: creationMsgKey, + update: { + pollUpdates: [ + { + pollUpdateMessageKey: message.key, + vote: voteMsg, + senderTimestampMs: (content.pollUpdateMessage.senderTimestampMs! as Long).toNumber(), + } + ] + } + } + ]) + } catch(err) { + logger?.warn( + { err, creationMsgKey }, + 'failed to decrypt poll vote' + ) + } + } else { + logger?.warn( + { creationMsgKey }, + 'poll creation message not found, cannot decrypt update' + ) + } + } */ + if (Object.keys(chat).length > 1) { + ev.emit('chats.update', [chat]); + } +}; +export default processMessage; +//# sourceMappingURL=process-message.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/process-message.js.map b/packages/transport/vendor/lib/Utils/process-message.js.map new file mode 100644 index 0000000..2b48099 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/process-message.js.map @@ -0,0 +1 @@ +{"version":3,"file":"process-message.js","sourceRoot":"","sources":["../../src/Utils/process-message.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/reporting-utils.d.ts b/packages/transport/vendor/lib/Utils/reporting-utils.d.ts new file mode 100644 index 0000000..475ca4f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/reporting-utils.d.ts @@ -0,0 +1,11 @@ +import { proto } from '../../WAProto/index.js'; +import type { WAMessageContent, WAMessageKey } from '../Types/index.js'; +import type { BinaryNode } from '../WABinary/index.js'; +export type ReportingField = { + f: number; + m?: boolean; + s?: ReportingField[]; +}; +export declare const shouldIncludeReportingToken: (message: proto.IMessage) => boolean; +export declare const getMessageReportingToken: (msgProtobuf: Buffer, message: WAMessageContent, key: WAMessageKey) => Promise; +//# sourceMappingURL=reporting-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/reporting-utils.d.ts.map b/packages/transport/vendor/lib/Utils/reporting-utils.d.ts.map new file mode 100644 index 0000000..d75acac --- /dev/null +++ b/packages/transport/vendor/lib/Utils/reporting-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"reporting-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/reporting-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,MAAM,MAAM,cAAc,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,CAAC,EAAE,OAAO,CAAA;IACX,CAAC,CAAC,EAAE,cAAc,EAAE,CAAA;CACpB,CAAA;AAwFD,eAAO,MAAM,2BAA2B,GAAI,SAAS,KAAK,CAAC,QAAQ,KAAG,OAI3C,CAAA;AAgN3B,eAAO,MAAM,wBAAwB,GACpC,aAAa,MAAM,EACnB,SAAS,gBAAgB,EACzB,KAAK,YAAY,KACf,OAAO,CAAC,UAAU,GAAG,IAAI,CA6B3B,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/reporting-utils.js b/packages/transport/vendor/lib/Utils/reporting-utils.js new file mode 100644 index 0000000..2c03034 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/reporting-utils.js @@ -0,0 +1,258 @@ +import { createHmac } from 'crypto'; +import { proto } from '../../WAProto/index.js'; +import { hkdf } from './crypto.js'; +const reportingFields = [ + { f: 1 }, + { + f: 3, + s: [{ f: 2 }, { f: 3 }, { f: 8 }, { f: 11 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }, { f: 25 }] + }, + { f: 4, s: [{ f: 1 }, { f: 16 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }] }, + { f: 5, s: [{ f: 3 }, { f: 4 }, { f: 5 }, { f: 16 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }] }, + { f: 6, s: [{ f: 1 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }, { f: 30 }] }, + { f: 7, s: [{ f: 2 }, { f: 7 }, { f: 10 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }, { f: 20 }] }, + { f: 8, s: [{ f: 2 }, { f: 7 }, { f: 9 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }, { f: 21 }] }, + { f: 9, s: [{ f: 2 }, { f: 6 }, { f: 7 }, { f: 13 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }, { f: 20 }] }, + { f: 12, s: [{ f: 1 }, { f: 2 }, { f: 14, m: true }, { f: 15 }] }, + { f: 18, s: [{ f: 6 }, { f: 16 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }] }, + { f: 26, s: [{ f: 4 }, { f: 5 }, { f: 8 }, { f: 13 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }] }, + { f: 28, s: [{ f: 1 }, { f: 2 }, { f: 4 }, { f: 5 }, { f: 6 }, { f: 7, s: [{ f: 21 }, { f: 22 }] }] }, + { f: 37, s: [{ f: 1, m: true }] }, + { + f: 49, + s: [ + { f: 2 }, + { f: 3, s: [{ f: 1 }, { f: 2 }] }, + { f: 5, s: [{ f: 21 }, { f: 22 }] }, + { f: 8, s: [{ f: 1 }, { f: 2 }] } + ] + }, + { f: 53, s: [{ f: 1, m: true }] }, + { f: 55, s: [{ f: 1, m: true }] }, + { f: 58, s: [{ f: 1, m: true }] }, + { f: 59, s: [{ f: 1, m: true }] }, + { + f: 60, + s: [ + { f: 2 }, + { f: 3, s: [{ f: 1 }, { f: 2 }] }, + { f: 5, s: [{ f: 21 }, { f: 22 }] }, + { f: 8, s: [{ f: 1 }, { f: 2 }] } + ] + }, + { + f: 64, + s: [ + { f: 2 }, + { f: 3, s: [{ f: 1 }, { f: 2 }] }, + { f: 5, s: [{ f: 21 }, { f: 22 }] }, + { f: 8, s: [{ f: 1 }, { f: 2 }] } + ] + }, + { f: 66, s: [{ f: 2 }, { f: 6 }, { f: 7 }, { f: 13 }, { f: 17, s: [{ f: 21 }, { f: 22 }] }, { f: 20 }] }, + { f: 74, s: [{ f: 1, m: true }] }, + { f: 87, s: [{ f: 1, m: true }] }, + { f: 88, s: [{ f: 1 }, { f: 2, s: [{ f: 1 }] }, { f: 3, s: [{ f: 21 }, { f: 22 }] }] }, + { f: 92, s: [{ f: 1, m: true }] }, + { f: 93, s: [{ f: 1, m: true }] }, + { f: 94, s: [{ f: 1, m: true }] } +]; +const compileReportingFields = (fields) => { + const map = new Map(); + for (const f of fields) { + map.set(f.f, { + m: f.m, + children: f.s ? compileReportingFields(f.s) : undefined + }); + } + return map; +}; +const compiledReportingFields = compileReportingFields(reportingFields); +const EMPTY_MAP = new Map(); +const ENC_SECRET_REPORT_TOKEN = 'Report Token'; +const WIRE = { + VARINT: 0, + FIXED64: 1, + BYTES: 2, + FIXED32: 5 +}; +export const shouldIncludeReportingToken = (message) => !message.reactionMessage && + !message.encReactionMessage && + !message.encEventResponseMessage && + !message.pollUpdateMessage; +const generateMsgSecretKey = (modificationType, origMsgId, origMsgSender, modificationSender, origMsgSecret) => { + const useCaseSecret = Buffer.concat([ + Buffer.from(origMsgId, 'utf8'), + Buffer.from(origMsgSender, 'utf8'), + Buffer.from(modificationSender, 'utf8'), + Buffer.from(modificationType, 'utf8') + ]); + return hkdf(origMsgSecret, 32, { info: useCaseSecret.toString('latin1') }); +}; +const extractReportingTokenContent = (data, cfg) => { + const out = []; + let i = 0; + while (i < data.length) { + const tag = decodeVarint(data, i); + if (!tag.ok) { + return null; + } + const fieldNum = tag.value >> 3; + const wireType = tag.value & 0x7; + const fieldStart = i; + i += tag.bytes; + const fieldCfg = cfg.get(fieldNum); + const pushSlice = (end) => { + if (end > data.length) { + return false; + } + out.push({ num: fieldNum, bytes: data.subarray(fieldStart, end) }); + i = end; + return true; + }; + const skip = (end) => { + if (end > data.length) { + return false; + } + i = end; + return true; + }; + if (wireType === WIRE.VARINT) { + const v = decodeVarint(data, i); + if (!v.ok) { + return null; + } + const end = i + v.bytes; + if (!fieldCfg) { + if (!skip(end)) { + return null; + } + continue; + } + if (!pushSlice(end)) { + return null; + } + continue; + } + if (wireType === WIRE.FIXED64) { + const end = i + 8; + if (!fieldCfg) { + if (!skip(end)) { + return null; + } + continue; + } + if (!pushSlice(end)) { + return null; + } + continue; + } + if (wireType === WIRE.FIXED32) { + const end = i + 4; + if (!fieldCfg) { + if (!skip(end)) { + return null; + } + continue; + } + if (!pushSlice(end)) { + return null; + } + continue; + } + if (wireType === WIRE.BYTES) { + const len = decodeVarint(data, i); + if (!len.ok) { + return null; + } + const valStart = i + len.bytes; + const valEnd = valStart + len.value; + if (valEnd > data.length) { + return null; + } + if (!fieldCfg) { + i = valEnd; + continue; + } + if (fieldCfg.m || fieldCfg.children) { + const sub = extractReportingTokenContent(data.subarray(valStart, valEnd), fieldCfg.children ?? EMPTY_MAP); + if (sub === null) { + return null; + } + if (sub.length > 0) { + const newTag = encodeVarint(tag.value); + const newLen = encodeVarint(sub.length); + out.push({ + num: fieldNum, + bytes: Buffer.concat([newTag, newLen, sub]) + }); + } + i = valEnd; + continue; + } + out.push({ num: fieldNum, bytes: data.subarray(fieldStart, valEnd) }); + i = valEnd; + continue; + } + return null; + } + if (out.length === 0) { + return Buffer.alloc(0); + } + out.sort((a, b) => a.num - b.num); + return Buffer.concat(out.map(f => f.bytes)); +}; +const decodeVarint = (buffer, offset) => { + let value = 0; + let bytes = 0; + let shift = 0; + while (offset + bytes < buffer.length) { + const current = buffer[offset + bytes]; + value |= (current & 0x7f) << shift; + bytes++; + if ((current & 0x80) === 0) { + return { value, bytes, ok: true }; + } + shift += 7; + if (shift > 35) { + return { value: 0, bytes: 0, ok: false }; + } + } + return { value: 0, bytes: 0, ok: false }; +}; +const encodeVarint = (value) => { + const parts = []; + let remaining = value >>> 0; + while (remaining > 0x7f) { + parts.push((remaining & 0x7f) | 0x80); + remaining >>>= 7; + } + parts.push(remaining); + return Buffer.from(parts); +}; +export const getMessageReportingToken = async (msgProtobuf, message, key) => { + const msgSecret = message.messageContextInfo?.messageSecret; + if (!msgSecret || !key.id) { + return null; + } + const from = key.fromMe ? key.remoteJid : key.participant || key.remoteJid; + const to = key.fromMe ? key.participant || key.remoteJid : key.remoteJid; + const reportingSecret = generateMsgSecretKey(ENC_SECRET_REPORT_TOKEN, key.id, from, to, msgSecret); + const content = extractReportingTokenContent(msgProtobuf, compiledReportingFields); + if (!content || content.length === 0) { + return null; + } + const reportingToken = createHmac('sha256', reportingSecret).update(content).digest().subarray(0, 16); + return { + tag: 'reporting', + attrs: {}, + content: [ + { + tag: 'reporting_token', + attrs: { v: '2' }, + content: reportingToken + } + ] + }; +}; +//# sourceMappingURL=reporting-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/reporting-utils.js.map b/packages/transport/vendor/lib/Utils/reporting-utils.js.map new file mode 100644 index 0000000..edf9a43 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/reporting-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reporting-utils.js","sourceRoot":"","sources":["../../src/Utils/reporting-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAG9C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAa/B,MAAM,eAAe,GAAqB;IACzC,EAAE,CAAC,EAAE,CAAC,EAAE;IACR;QACC,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KAC7F;IACD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;IACxE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;IAC5F,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IACxE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IAC7F,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IAC5F,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IACvG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IACjE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/signal.d.ts b/packages/transport/vendor/lib/Utils/signal.d.ts new file mode 100644 index 0000000..7e8c9f6 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/signal.d.ts @@ -0,0 +1,47 @@ +import type { SignalRepositoryWithLIDStore } from '../Types/index.js'; +import type { AuthenticationCreds, AuthenticationState, KeyPair, SignalIdentity, SignalKeyStore, SignedKeyPair } from '../Types/Auth.js'; +import { type BinaryNode, type FullJid } from '../WABinary/index.js'; +import type { USyncQueryResultList } from '../WAUSync/index.js'; +export declare const createSignalIdentity: (wid: string, accountSignatureKey: Uint8Array) => SignalIdentity; +export declare const getPreKeys: ({ get }: SignalKeyStore, min: number, limit: number) => Promise<{ + [id: string]: KeyPair; +}>; +export declare const generateOrGetPreKeys: (creds: AuthenticationCreds, range: number) => { + newPreKeys: { + [id: number]: KeyPair; + }; + lastPreKeyId: number; + preKeysRange: readonly [number, number]; +}; +export declare const xmppSignedPreKey: (key: SignedKeyPair) => BinaryNode; +export declare const xmppPreKey: (pair: KeyPair, id: number) => BinaryNode; +export declare const extractE2ESessionFromRetryReceipt: (receipt: BinaryNode) => { + registrationId: number; + identityKey: Uint8Array | Buffer; + signedPreKey: { + keyId: number; + publicKey: Uint8Array | Buffer; + signature: Uint8Array | Buffer; + }; + preKey: { + keyId: number; + publicKey: Uint8Array; + } | undefined; +} | null; +export declare const parseAndInjectE2ESessions: (node: BinaryNode, repository: SignalRepositoryWithLIDStore) => Promise; +export declare const extractDeviceJids: (result: USyncQueryResultList[], myJid: string, myLid: string, excludeZeroDevices: boolean) => FullJid[]; +/** + * get the next N keys for upload or processing + * @param count number of pre-keys to get or generate + */ +export declare const getNextPreKeys: ({ creds, keys }: AuthenticationState, count: number) => Promise<{ + update: Partial; + preKeys: { + [id: string]: KeyPair; + }; +}>; +export declare const getNextPreKeysNode: (state: AuthenticationState, count: number) => Promise<{ + update: Partial; + node: BinaryNode; +}>; +//# sourceMappingURL=signal.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/signal.d.ts.map b/packages/transport/vendor/lib/Utils/signal.d.ts.map new file mode 100644 index 0000000..5349ffb --- /dev/null +++ b/packages/transport/vendor/lib/Utils/signal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/Utils/signal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,MAAM,eAAe,CAAA;AACtB,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,OAAO,EASZ,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAoC,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAaxF,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,EAAE,qBAAqB,UAAU,KAAG,cAKnF,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,SAAS,cAAc,EAAE,KAAK,MAAM,EAAE,OAAO,MAAM;;EAOnF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,OAAO,mBAAmB,EAAE,OAAO,MAAM;;;;;;CAgB7E,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,aAAa,KAAG,UAQpD,CAAA;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,EAAE,IAAI,MAAM,KAAG,UAOrD,CAAA;AAIF,eAAO,MAAM,iCAAiC,GAAI,SAAS,UAAU;;;;;;;;;eAsB/C,MAAM;mBAAa,UAAU;;QAqBlD,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAU,MAAM,UAAU,EAAE,YAAY,4BAA4B,kBA0CzG,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC7B,QAAQ,oBAAoB,EAAE,EAC9B,OAAO,MAAM,EACb,OAAO,MAAM,EACb,oBAAoB,OAAO,cAkC3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,iBAAiB,mBAAmB,EAAE,OAAO,MAAM;;;;;EAavF,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,OAAO,mBAAmB,EAAE,OAAO,MAAM;;;EAqBjF,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/signal.js b/packages/transport/vendor/lib/Utils/signal.js new file mode 100644 index 0000000..3cb615c --- /dev/null +++ b/packages/transport/vendor/lib/Utils/signal.js @@ -0,0 +1,201 @@ +import { KEY_BUNDLE_TYPE } from '../Defaults/index.js'; +import { assertNodeErrorFree, getBinaryNodeChild, getBinaryNodeChildBuffer, getBinaryNodeChildren, getBinaryNodeChildUInt, getServerFromDomainType, jidDecode, S_WHATSAPP_NET, WAJIDDomains } from '../WABinary/index.js'; +import { Curve, generateSignalPubKey } from './crypto.js'; +import { encodeBigEndian } from './generics.js'; +function chunk(array, size) { + const chunks = []; + for (let i = 0; i < array.length; i += size) { + chunks.push(array.slice(i, i + size)); + } + return chunks; +} +export const createSignalIdentity = (wid, accountSignatureKey) => { + return { + identifier: { name: wid, deviceId: 0 }, + identifierKey: generateSignalPubKey(accountSignatureKey) + }; +}; +export const getPreKeys = async ({ get }, min, limit) => { + const idList = []; + for (let id = min; id < limit; id++) { + idList.push(id.toString()); + } + return get('pre-key', idList); +}; +export const generateOrGetPreKeys = (creds, range) => { + const avaliable = creds.nextPreKeyId - creds.firstUnuploadedPreKeyId; + const remaining = range - avaliable; + const lastPreKeyId = creds.nextPreKeyId + remaining - 1; + const newPreKeys = {}; + if (remaining > 0) { + for (let i = creds.nextPreKeyId; i <= lastPreKeyId; i++) { + newPreKeys[i] = Curve.generateKeyPair(); + } + } + return { + newPreKeys, + lastPreKeyId, + preKeysRange: [creds.firstUnuploadedPreKeyId, range] + }; +}; +export const xmppSignedPreKey = (key) => ({ + tag: 'skey', + attrs: {}, + content: [ + { tag: 'id', attrs: {}, content: encodeBigEndian(key.keyId, 3) }, + { tag: 'value', attrs: {}, content: key.keyPair.public }, + { tag: 'signature', attrs: {}, content: key.signature } + ] +}); +export const xmppPreKey = (pair, id) => ({ + tag: 'key', + attrs: {}, + content: [ + { tag: 'id', attrs: {}, content: encodeBigEndian(id, 3) }, + { tag: 'value', attrs: {}, content: pair.public } + ] +}); +const isValidUInt = (n) => typeof n === 'number' && Number.isInteger(n); +export const extractE2ESessionFromRetryReceipt = (receipt) => { + const keysNode = getBinaryNodeChild(receipt, 'keys'); + if (!keysNode) + return null; + const typeBuf = getBinaryNodeChildBuffer(keysNode, 'type'); + if (!typeBuf || typeBuf.length !== 1 || typeBuf[0] !== KEY_BUNDLE_TYPE[0]) + return null; + const identity = getBinaryNodeChildBuffer(keysNode, 'identity'); + const skey = getBinaryNodeChild(keysNode, 'skey'); + if (!identity || identity.length !== 32 || !skey) + return null; + const registrationId = getBinaryNodeChildUInt(receipt, 'registration', 4); + if (!isValidUInt(registrationId)) + return null; + const signedPubKey = getBinaryNodeChildBuffer(skey, 'value'); + const signedSig = getBinaryNodeChildBuffer(skey, 'signature'); + const signedKeyId = getBinaryNodeChildUInt(skey, 'id', 3); + if (!signedPubKey || signedPubKey.length !== 32 || !signedSig || !isValidUInt(signedKeyId)) { + return null; + } + const preKeyNode = getBinaryNodeChild(keysNode, 'key'); + let preKey; + if (preKeyNode) { + const preKeyPub = getBinaryNodeChildBuffer(preKeyNode, 'value'); + const preKeyId = getBinaryNodeChildUInt(preKeyNode, 'id', 3); + if (!preKeyPub || preKeyPub.length !== 32 || !isValidUInt(preKeyId)) { + return null; + } + preKey = { keyId: preKeyId, publicKey: generateSignalPubKey(preKeyPub) }; + } + return { + registrationId, + identityKey: generateSignalPubKey(identity), + signedPreKey: { + keyId: signedKeyId, + publicKey: generateSignalPubKey(signedPubKey), + signature: signedSig + }, + preKey + }; +}; +export const parseAndInjectE2ESessions = async (node, repository) => { + const extractKey = (key) => key + ? { + keyId: getBinaryNodeChildUInt(key, 'id', 3), + publicKey: generateSignalPubKey(getBinaryNodeChildBuffer(key, 'value')), + signature: getBinaryNodeChildBuffer(key, 'signature') + } + : undefined; + const nodes = getBinaryNodeChildren(getBinaryNodeChild(node, 'list'), 'user'); + for (const node of nodes) { + assertNodeErrorFree(node); + } + // Most of the work in repository.injectE2ESession is CPU intensive, not IO + // So Promise.all doesn't really help here, + // but blocks even loop if we're using it inside keys.transaction, and it makes it "sync" actually + // This way we chunk it in smaller parts and between those parts we can yield to the event loop + // It's rare case when you need to E2E sessions for so many users, but it's possible + const chunkSize = 100; + const chunks = chunk(nodes, chunkSize); + for (const nodesChunk of chunks) { + for (const node of nodesChunk) { + const signedKey = getBinaryNodeChild(node, 'skey'); + const key = getBinaryNodeChild(node, 'key'); + const identity = getBinaryNodeChildBuffer(node, 'identity'); + const jid = node.attrs.jid; + const registrationId = getBinaryNodeChildUInt(node, 'registration', 4); + await repository.injectE2ESession({ + jid, + session: { + registrationId: registrationId, + identityKey: generateSignalPubKey(identity), + signedPreKey: extractKey(signedKey), + preKey: extractKey(key) + } + }); + } + } +}; +export const extractDeviceJids = (result, myJid, myLid, excludeZeroDevices) => { + const { user: myUser, device: myDevice } = jidDecode(myJid); + const extracted = []; + for (const userResult of result) { + const { devices, id } = userResult; + const decoded = jidDecode(id), { user, server } = decoded; + let { domainType } = decoded; + const deviceList = devices?.deviceList; + if (!Array.isArray(deviceList)) + continue; + for (const { id: device, keyIndex, isHosted } of deviceList) { + if ((!excludeZeroDevices || device !== 0) && // if zero devices are not-excluded, or device is non zero + ((myUser !== user && myLid !== user) || myDevice !== device) && // either different user or if me user, not this device + (device === 0 || !!keyIndex) // ensure that "key-index" is specified for "non-zero" devices, produces a bad req otherwise + ) { + if (isHosted) { + domainType = domainType === WAJIDDomains.LID ? WAJIDDomains.HOSTED_LID : WAJIDDomains.HOSTED; + } + extracted.push({ + user, + device, + domainType, + server: getServerFromDomainType(server, domainType) + }); + } + } + } + return extracted; +}; +/** + * get the next N keys for upload or processing + * @param count number of pre-keys to get or generate + */ +export const getNextPreKeys = async ({ creds, keys }, count) => { + const { newPreKeys, lastPreKeyId, preKeysRange } = generateOrGetPreKeys(creds, count); + const update = { + nextPreKeyId: Math.max(lastPreKeyId + 1, creds.nextPreKeyId), + firstUnuploadedPreKeyId: Math.max(creds.firstUnuploadedPreKeyId, lastPreKeyId + 1) + }; + await keys.set({ 'pre-key': newPreKeys }); + const preKeys = await getPreKeys(keys, preKeysRange[0], preKeysRange[0] + preKeysRange[1]); + return { update, preKeys }; +}; +export const getNextPreKeysNode = async (state, count) => { + const { creds } = state; + const { update, preKeys } = await getNextPreKeys(state, count); + const node = { + tag: 'iq', + attrs: { + xmlns: 'encrypt', + type: 'set', + to: S_WHATSAPP_NET + }, + content: [ + { tag: 'registration', attrs: {}, content: encodeBigEndian(creds.registrationId) }, + { tag: 'type', attrs: {}, content: KEY_BUNDLE_TYPE }, + { tag: 'identity', attrs: {}, content: creds.signedIdentityKey.public }, + { tag: 'list', attrs: {}, content: Object.keys(preKeys).map(k => xmppPreKey(preKeys[+k], +k)) }, + xmppSignedPreKey(creds.signedPreKey) + ] + }; + return { update, node }; +}; +//# sourceMappingURL=signal.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/signal.js.map b/packages/transport/vendor/lib/Utils/signal.js.map new file mode 100644 index 0000000..f46bf5c --- /dev/null +++ b/packages/transport/vendor/lib/Utils/signal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/Utils/signal.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/stanza-ack.d.ts b/packages/transport/vendor/lib/Utils/stanza-ack.d.ts new file mode 100644 index 0000000..f6f0550 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/stanza-ack.d.ts @@ -0,0 +1,11 @@ +import type { BinaryNode } from '../WABinary/index.js'; +/** + * Builds an ACK stanza for a received node. + * Pure function -- no I/O, no side effects. + * + * Mirrors WhatsApp Web's ACK construction: + * - WAWebHandleMsgSendAck.sendAck / sendNack + * - WAWebCreateNackFromStanza.createNackFromStanza + */ +export declare function buildAckStanza(node: BinaryNode, errorCode?: number, meId?: string): BinaryNode; +//# sourceMappingURL=stanza-ack.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/stanza-ack.d.ts.map b/packages/transport/vendor/lib/Utils/stanza-ack.d.ts.map new file mode 100644 index 0000000..e3f7254 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/stanza-ack.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stanza-ack.d.ts","sourceRoot":"","sources":["../../src/Utils/stanza-ack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAkC9F"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/stanza-ack.js b/packages/transport/vendor/lib/Utils/stanza-ack.js new file mode 100644 index 0000000..832186a --- /dev/null +++ b/packages/transport/vendor/lib/Utils/stanza-ack.js @@ -0,0 +1,38 @@ +/** + * Builds an ACK stanza for a received node. + * Pure function -- no I/O, no side effects. + * + * Mirrors WhatsApp Web's ACK construction: + * - WAWebHandleMsgSendAck.sendAck / sendNack + * - WAWebCreateNackFromStanza.createNackFromStanza + */ +export function buildAckStanza(node, errorCode, meId) { + const { tag, attrs } = node; + const stanza = { + tag: 'ack', + attrs: { + id: attrs.id, + to: attrs.from, + class: tag + } + }; + if (errorCode) { + stanza.attrs.error = errorCode.toString(); + } + if (attrs.participant) { + stanza.attrs.participant = attrs.participant; + } + if (attrs.recipient) { + stanza.attrs.recipient = attrs.recipient; + } + // WA Web always includes type when present: `n.type || DROP_ATTR` + if (attrs.type) { + stanza.attrs.type = attrs.type; + } + // WA Web WAWebHandleMsgSendAck.sendAck/sendNack always include `from` for message-class ACKs + if (tag === 'message' && meId) { + stanza.attrs.from = meId; + } + return stanza; +} +//# sourceMappingURL=stanza-ack.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/stanza-ack.js.map b/packages/transport/vendor/lib/Utils/stanza-ack.js.map new file mode 100644 index 0000000..e8e4a60 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/stanza-ack.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stanza-ack.js","sourceRoot":"","sources":["../../src/Utils/stanza-ack.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,SAAkB,EAAE,IAAa;IACjF,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;IAC3B,MAAM,MAAM,GAAe;QAC1B,GAAG,EAAE,KAAK;QACV,KAAK,EAAE;YACN,EAAE,EAAE,KAAK,CAAC,EAAG;YACb,EAAE,EAAE,KAAK,CAAC,IAAK;YACf,KAAK,EAAE,GAAG;SACV;KACD,CAAA;IAED,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAA;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IACzC,CAAC;IAED,kEAAkE;IAClE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IAC/B,CAAC;IAED,6FAA6F;IAC7F,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/sync-action-utils.d.ts b/packages/transport/vendor/lib/Utils/sync-action-utils.d.ts new file mode 100644 index 0000000..b2ad671 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/sync-action-utils.d.ts @@ -0,0 +1,19 @@ +import { proto } from '../../WAProto/index.js'; +import type { BaileysEventEmitter, BaileysEventMap, Contact } from '../Types/index.js'; +import type { ILogger } from './logger.js'; +export type ContactsUpsertResult = { + event: 'contacts.upsert'; + data: Contact[]; +}; +export type LidMappingUpdateResult = { + event: 'lid-mapping.update'; + data: BaileysEventMap['lid-mapping.update']; +}; +export type SyncActionResult = ContactsUpsertResult | LidMappingUpdateResult; +/** + * Process contactAction and return events to emit. + * Pure function - no side effects. + */ +export declare const processContactAction: (action: proto.SyncActionValue.IContactAction, id: string | undefined, logger?: ILogger) => SyncActionResult[]; +export declare const emitSyncActionResults: (ev: BaileysEventEmitter, results: SyncActionResult[]) => void; +//# sourceMappingURL=sync-action-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/sync-action-utils.d.ts.map b/packages/transport/vendor/lib/Utils/sync-action-utils.d.ts.map new file mode 100644 index 0000000..99c6c4d --- /dev/null +++ b/packages/transport/vendor/lib/Utils/sync-action-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sync-action-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/sync-action-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAE7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,iBAAiB,CAAA;IACxB,IAAI,EAAE,OAAO,EAAE,CAAA;CACf,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACpC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,IAAI,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAA;CAC3C,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,sBAAsB,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAChC,QAAQ,KAAK,CAAC,eAAe,CAAC,cAAc,EAC5C,IAAI,MAAM,GAAG,SAAS,EACtB,SAAS,OAAO,KACd,gBAAgB,EAuClB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,IAAI,mBAAmB,EAAE,SAAS,gBAAgB,EAAE,KAAG,IAQ5F,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/sync-action-utils.js b/packages/transport/vendor/lib/Utils/sync-action-utils.js new file mode 100644 index 0000000..6d5831f --- /dev/null +++ b/packages/transport/vendor/lib/Utils/sync-action-utils.js @@ -0,0 +1,49 @@ +import { proto } from '../../WAProto/index.js'; +import { isLidUser, isPnUser } from '../WABinary/index.js'; +/** + * Process contactAction and return events to emit. + * Pure function - no side effects. + */ +export const processContactAction = (action, id, logger) => { + const results = []; + if (!id) { + logger?.warn({ hasFullName: !!action.fullName, hasLidJid: !!action.lidJid, hasPnJid: !!action.pnJid }, 'contactAction sync: missing id in index'); + return results; + } + const lidJid = action.lidJid; + const idIsPn = isPnUser(id); + // PN is in index[1], not in contactAction.pnJid which is usually null + const phoneNumber = idIsPn ? id : action.pnJid || undefined; + // Always emit contacts.upsert + results.push({ + event: 'contacts.upsert', + data: [ + { + id, + name: action.fullName || action.firstName || action.username || undefined, + username: action.username || undefined, + lid: lidJid || undefined, + phoneNumber + } + ] + }); + // Emit lid-mapping.update if we have valid LID-PN pair + if (lidJid && isLidUser(lidJid) && idIsPn) { + results.push({ + event: 'lid-mapping.update', + data: { lid: lidJid, pn: id } + }); + } + return results; +}; +export const emitSyncActionResults = (ev, results) => { + for (const result of results) { + if (result.event === 'contacts.upsert') { + ev.emit('contacts.upsert', result.data); + } + else { + ev.emit('lid-mapping.update', result.data); + } + } +}; +//# sourceMappingURL=sync-action-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/sync-action-utils.js.map b/packages/transport/vendor/lib/Utils/sync-action-utils.js.map new file mode 100644 index 0000000..8e093bd --- /dev/null +++ b/packages/transport/vendor/lib/Utils/sync-action-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sync-action-utils.js","sourceRoot":"","sources":["../../src/Utils/sync-action-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAejD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CACnC,MAA4C,EAC5C,EAAsB,EACtB,MAAgB,EACK,EAAE;IACvB,MAAM,OAAO,GAAuB,EAAE,CAAA;IAEtC,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,MAAM,EAAE,IAAI,CACX,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EACxF,yCAAyC,CACzC,CAAA;QACD,OAAO,OAAO,CAAA;IACf,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC3B,sEAAsE;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAA;IAE3D,8BAA8B;IAC9B,OAAO,CAAC,IAAI,CAAC;QACZ,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE;YACL;gBACC,EAAE;gBACF,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS;gBACzE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;gBACtC,GAAG,EAAE,MAAM,IAAI,SAAS;gBACxB,WAAW;aACX;SACD;KACD,CAAC,CAAA;IAEF,uDAAuD;IACvD,IAAI,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE;SAC7B,CAAC,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAuB,EAAE,OAA2B,EAAQ,EAAE;IACnG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YACxC,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACP,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;IACF,CAAC;AACF,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/tc-token-utils.d.ts b/packages/transport/vendor/lib/Utils/tc-token-utils.d.ts new file mode 100644 index 0000000..b6165b8 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/tc-token-utils.d.ts @@ -0,0 +1,37 @@ +import type { SignalKeyStoreWithTransaction } from '../Types/index.js'; +import type { BinaryNode } from '../WABinary/index.js'; +/** Sentinel key under `tctoken` store holding a JSON array of tracked storage JIDs for cross-session pruning. */ +export declare const TC_TOKEN_INDEX_KEY = "__index"; +/** Read the persisted tctoken JID index and return its entries (never contains the sentinel key itself). */ +export declare function readTcTokenIndex(keys: SignalKeyStoreWithTransaction): Promise; +/** Build a SignalDataSet fragment that writes the merged index (persisted ∪ added) under the sentinel key. */ +export declare function buildMergedTcTokenIndexWrite(keys: SignalKeyStoreWithTransaction, addedJids: Iterable): Promise<{ + [TC_TOKEN_INDEX_KEY]: { + token: Buffer; + }; +}>; +export declare function isTcTokenExpired(timestamp: number | string | null | undefined): boolean; +export declare function shouldSendNewTcToken(senderTimestamp: number | undefined): boolean; +/** Resolve JID to LID for tctoken storage (WA Web stores under LID) */ +export declare function resolveTcTokenJid(jid: string, getLIDForPN: (pn: string) => Promise): Promise; +/** Resolve target JID for issuing privacy token based on AB prop 14303 */ +export declare function resolveIssuanceJid(jid: string, issueToLid: boolean, getLIDForPN: (pn: string) => Promise, getPNForLID?: (lid: string) => Promise): Promise; +type TcTokenParams = { + jid: string; + baseContent?: BinaryNode[]; + authState: { + keys: SignalKeyStoreWithTransaction; + }; + getLIDForPN: (pn: string) => Promise; +}; +export declare function buildTcTokenFromJid({ authState, jid, baseContent, getLIDForPN }: TcTokenParams): Promise; +type StoreTcTokensParams = { + result: BinaryNode; + fallbackJid: string; + keys: SignalKeyStoreWithTransaction; + getLIDForPN: (pn: string) => Promise; + onNewJidStored?: (jid: string) => void; +}; +export declare function storeTcTokensFromIqResult({ result, fallbackJid, keys, getLIDForPN, onNewJidStored }: StoreTcTokensParams): Promise; +export {}; +//# sourceMappingURL=tc-token-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/tc-token-utils.d.ts.map b/packages/transport/vendor/lib/Utils/tc-token-utils.d.ts.map new file mode 100644 index 0000000..59a7f8d --- /dev/null +++ b/packages/transport/vendor/lib/Utils/tc-token-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"tc-token-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/tc-token-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAkC7C,iHAAiH;AACjH,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAE3C,4GAA4G;AAC5G,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW7F;AAED,8GAA8G;AAC9G,wBAAsB,4BAA4B,CACjD,IAAI,EAAE,6BAA6B,EACnC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GACzB,OAAO,CAAC;IAAE,CAAC,kBAAkB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAUtD;AAGD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CASvF;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAMjF;AAED,uEAAuE;AACvE,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACjD,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,0EAA0E;AAC1E,wBAAsB,kBAAkB,CACvC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EACnD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACnD,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,KAAK,aAAa,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,SAAS,EAAE;QACV,IAAI,EAAE,6BAA6B,CAAA;KACnC,CAAA;IACD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACnD,CAAA;AAED,wBAAsB,mBAAmB,CAAC,EACzC,SAAS,EACT,GAAG,EACH,WAAgB,EAChB,WAAW,EACX,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,CAgCnD;AAED,KAAK,mBAAmB,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,6BAA6B,CAAA;IACnC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACnD,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC,CAAA;AAED,wBAAsB,yBAAyB,CAAC,EAC/C,MAAM,EACN,WAAW,EACX,IAAI,EACJ,WAAW,EACX,cAAc,EACd,EAAE,mBAAmB,iBAkCrB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/tc-token-utils.js b/packages/transport/vendor/lib/Utils/tc-token-utils.js new file mode 100644 index 0000000..7db5863 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/tc-token-utils.js @@ -0,0 +1,163 @@ +import { getBinaryNodeChild, getBinaryNodeChildren, isHostedLidUser, isHostedPnUser, isJidMetaAI, isLidUser, isPnUser, jidNormalizedUser } from '../WABinary/index.js'; +// Same phone-number pattern as WABinary's isJidBot, applied against the user +// part so the check is invariant to @c.us ↔ @s.whatsapp.net normalization. +const BOT_PHONE_REGEX = /^1313555\d{4}$|^131655500\d{2}$/; +/** + * Mirrors WA Web's `Wid.isRegularUser()` (user ∧ ¬PSA ∧ ¬Bot). Used to gate tctoken + * storage against malformed notifications — WA Web filters server-side but we + * defend here for parity with `WAWebSetTcTokenChatAction.handleIncomingTcToken`. + * Works for both pre- and post-normalized JIDs (`@c.us` vs `@s.whatsapp.net`). + */ +function isRegularUser(jid) { + if (!jid) + return false; + const user = jid.split('@')[0] ?? ''; + if (user === '0') + return false; // PSA + if (BOT_PHONE_REGEX.test(user)) + return false; // Bot by phone pattern + if (isJidMetaAI(jid)) + return false; // MetaAI (@bot server) + return !!(isPnUser(jid) || isLidUser(jid) || isHostedPnUser(jid) || isHostedLidUser(jid) || jid.endsWith('@c.us')); +} +const TC_TOKEN_BUCKET_DURATION = 604800; // 7 days +const TC_TOKEN_NUM_BUCKETS = 4; // ~28-day rolling window +/** Sentinel key under `tctoken` store holding a JSON array of tracked storage JIDs for cross-session pruning. */ +export const TC_TOKEN_INDEX_KEY = '__index'; +/** Read the persisted tctoken JID index and return its entries (never contains the sentinel key itself). */ +export async function readTcTokenIndex(keys) { + const data = await keys.get('tctoken', [TC_TOKEN_INDEX_KEY]); + const entry = data[TC_TOKEN_INDEX_KEY]; + if (!entry?.token?.length) + return []; + try { + const parsed = JSON.parse(Buffer.from(entry.token).toString()); + if (!Array.isArray(parsed)) + return []; + return parsed.filter((j) => typeof j === 'string' && j.length > 0 && j !== TC_TOKEN_INDEX_KEY); + } + catch { + return []; + } +} +/** Build a SignalDataSet fragment that writes the merged index (persisted ∪ added) under the sentinel key. */ +export async function buildMergedTcTokenIndexWrite(keys, addedJids) { + const persisted = await readTcTokenIndex(keys); + const merged = new Set(persisted); + for (const jid of addedJids) { + if (jid && jid !== TC_TOKEN_INDEX_KEY) + merged.add(jid); + } + return { + [TC_TOKEN_INDEX_KEY]: { token: Buffer.from(JSON.stringify([...merged])) } + }; +} +// WA Web has separate sender/receiver AB props for these but they're identical today +export function isTcTokenExpired(timestamp) { + if (timestamp === null || timestamp === undefined) + return true; + const ts = typeof timestamp === 'string' ? parseInt(timestamp) : timestamp; + if (isNaN(ts)) + return true; + const now = Math.floor(Date.now() / 1000); + const currentBucket = Math.floor(now / TC_TOKEN_BUCKET_DURATION); + const cutoffBucket = currentBucket - (TC_TOKEN_NUM_BUCKETS - 1); + const cutoffTimestamp = cutoffBucket * TC_TOKEN_BUCKET_DURATION; + return ts < cutoffTimestamp; +} +export function shouldSendNewTcToken(senderTimestamp) { + if (senderTimestamp === undefined) + return true; + const now = Math.floor(Date.now() / 1000); + const currentBucket = Math.floor(now / TC_TOKEN_BUCKET_DURATION); + const senderBucket = Math.floor(senderTimestamp / TC_TOKEN_BUCKET_DURATION); + return currentBucket > senderBucket; +} +/** Resolve JID to LID for tctoken storage (WA Web stores under LID) */ +export async function resolveTcTokenJid(jid, getLIDForPN) { + if (isLidUser(jid)) + return jid; + const lid = await getLIDForPN(jid); + return lid ?? jid; +} +/** Resolve target JID for issuing privacy token based on AB prop 14303 */ +export async function resolveIssuanceJid(jid, issueToLid, getLIDForPN, getPNForLID) { + if (issueToLid) { + if (isLidUser(jid)) + return jid; + const lid = await getLIDForPN(jid); + return lid ?? jid; + } + if (!isLidUser(jid)) + return jid; + if (getPNForLID) { + const pn = await getPNForLID(jid); + return pn ?? jid; + } + return jid; +} +export async function buildTcTokenFromJid({ authState, jid, baseContent = [], getLIDForPN }) { + try { + const storageJid = await resolveTcTokenJid(jid, getLIDForPN); + const tcTokenData = await authState.keys.get('tctoken', [storageJid]); + const entry = tcTokenData?.[storageJid]; + const tcTokenBuffer = entry?.token; + if (!tcTokenBuffer?.length || isTcTokenExpired(entry?.timestamp)) { + if (tcTokenBuffer) { + // Preserve senderTimestamp so shouldSendNewTcToken() keeps its dedupe state + // after we drop the unusable peer token. Only wipe the record entirely when + // there's nothing worth keeping. + const cleared = entry?.senderTimestamp !== undefined + ? { token: Buffer.alloc(0), senderTimestamp: entry.senderTimestamp } + : null; + await authState.keys.set({ tctoken: { [storageJid]: cleared } }); + } + return baseContent.length > 0 ? baseContent : undefined; + } + baseContent.push({ + tag: 'tctoken', + attrs: {}, + content: tcTokenBuffer + }); + return baseContent; + } + catch (error) { + return baseContent.length > 0 ? baseContent : undefined; + } +} +export async function storeTcTokensFromIqResult({ result, fallbackJid, keys, getLIDForPN, onNewJidStored }) { + const tokensNode = getBinaryNodeChild(result, 'tokens'); + if (!tokensNode) + return; + const tokenNodes = getBinaryNodeChildren(tokensNode, 'token'); + for (const tokenNode of tokenNodes) { + if (tokenNode.attrs.type !== 'trusted_contact' || !(tokenNode.content instanceof Uint8Array)) { + continue; + } + // In notifications tokenNode.attrs.jid is your own device JID, not the sender's + const rawJid = jidNormalizedUser(fallbackJid || tokenNode.attrs.jid); + if (!isRegularUser(rawJid)) + continue; + const storageJid = await resolveTcTokenJid(rawJid, getLIDForPN); + const existingTcData = await keys.get('tctoken', [storageJid]); + const existingEntry = existingTcData[storageJid]; + const existingTs = existingEntry?.timestamp ? Number(existingEntry.timestamp) : 0; + const incomingTs = tokenNode.attrs.t ? Number(tokenNode.attrs.t) : 0; + // timestamp-less tokens would be immediately expired + if (!incomingTs) + continue; + if (existingTs > 0 && existingTs > incomingTs) + continue; + await keys.set({ + tctoken: { + [storageJid]: { + ...existingEntry, + token: Buffer.from(tokenNode.content), + timestamp: tokenNode.attrs.t + } + } + }); + onNewJidStored?.(storageJid); + } +} +//# sourceMappingURL=tc-token-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/tc-token-utils.js.map b/packages/transport/vendor/lib/Utils/tc-token-utils.js.map new file mode 100644 index 0000000..91b8f43 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/tc-token-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tc-token-utils.js","sourceRoot":"","sources":["../../src/Utils/tc-token-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts new file mode 100644 index 0000000..0adc372 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts @@ -0,0 +1,13 @@ +import type { AuthenticationState } from '../Types/index.js'; +/** + * stores the full authentication state in a single folder. + * Far more efficient than singlefileauthstate + * + * Again, I wouldn't endorse this for any production level use other than perhaps a bot. + * Would recommend writing an auth state for use with a proper SQL or No-SQL DB + * */ +export declare const useMultiFileAuthState: (folder: string) => Promise<{ + state: AuthenticationState; + saveCreds: () => Promise; +}>; +//# sourceMappingURL=use-multi-file-auth-state.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts.map b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts.map new file mode 100644 index 0000000..5967515 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"use-multi-file-auth-state.d.ts","sourceRoot":"","sources":["../../src/Utils/use-multi-file-auth-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAuB,mBAAmB,EAAqB,MAAM,UAAU,CAAA;AAqB3F;;;;;;KAMK;AACL,eAAO,MAAM,qBAAqB,GACjC,QAAQ,MAAM,KACZ,OAAO,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAqGxE,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js new file mode 100644 index 0000000..dc8182c --- /dev/null +++ b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js @@ -0,0 +1,121 @@ +import { Mutex } from 'async-mutex'; +import { mkdir, readFile, stat, unlink, writeFile } from 'fs/promises'; +import { join } from 'path'; +import { proto } from '../../WAProto/index.js'; +import { initAuthCreds } from './auth-utils.js'; +import { BufferJSON } from './generics.js'; +// We need to lock files due to the fact that we are using async functions to read and write files +// https://github.com/WhiskeySockets/Baileys/issues/794 +// https://github.com/nodejs/node/issues/26338 +// Use a Map to store mutexes for each file path +const fileLocks = new Map(); +// Get or create a mutex for a specific file path +const getFileLock = (path) => { + let mutex = fileLocks.get(path); + if (!mutex) { + mutex = new Mutex(); + fileLocks.set(path, mutex); + } + return mutex; +}; +/** + * stores the full authentication state in a single folder. + * Far more efficient than singlefileauthstate + * + * Again, I wouldn't endorse this for any production level use other than perhaps a bot. + * Would recommend writing an auth state for use with a proper SQL or No-SQL DB + * */ +export const useMultiFileAuthState = async (folder) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const writeData = async (data, file) => { + const filePath = join(folder, fixFileName(file)); + const mutex = getFileLock(filePath); + return mutex.acquire().then(async (release) => { + try { + await writeFile(filePath, JSON.stringify(data, BufferJSON.replacer)); + } + finally { + release(); + } + }); + }; + const readData = async (file) => { + try { + const filePath = join(folder, fixFileName(file)); + const mutex = getFileLock(filePath); + return await mutex.acquire().then(async (release) => { + try { + const data = await readFile(filePath, { encoding: 'utf-8' }); + return JSON.parse(data, BufferJSON.reviver); + } + finally { + release(); + } + }); + } + catch (error) { + return null; + } + }; + const removeData = async (file) => { + try { + const filePath = join(folder, fixFileName(file)); + const mutex = getFileLock(filePath); + return mutex.acquire().then(async (release) => { + try { + await unlink(filePath); + } + catch { + } + finally { + release(); + } + }); + } + catch { } + }; + const folderInfo = await stat(folder).catch(() => { }); + if (folderInfo) { + if (!folderInfo.isDirectory()) { + throw new Error(`found something that is not a directory at ${folder}, either delete it or specify a different location`); + } + } + else { + await mkdir(folder, { recursive: true }); + } + const fixFileName = (file) => file?.replace(/\//g, '__')?.replace(/:/g, '-'); + const creds = (await readData('creds.json')) || initAuthCreds(); + return { + state: { + creds, + keys: { + get: async (type, ids) => { + const data = {}; + await Promise.all(ids.map(async (id) => { + let value = await readData(`${type}-${id}.json`); + if (type === 'app-state-sync-key' && value) { + value = proto.Message.AppStateSyncKeyData.fromObject(value); + } + data[id] = value; + })); + return data; + }, + set: async (data) => { + const tasks = []; + for (const category in data) { + for (const id in data[category]) { + const value = data[category][id]; + const file = `${category}-${id}.json`; + tasks.push(value ? writeData(value, file) : removeData(file)); + } + } + await Promise.all(tasks); + } + } + }, + saveCreds: async () => { + return writeData(creds, 'creds.json'); + } + }; +}; +//# sourceMappingURL=use-multi-file-auth-state.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js.map b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js.map new file mode 100644 index 0000000..b7e6486 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/use-multi-file-auth-state.js.map @@ -0,0 +1 @@ +{"version":3,"file":"use-multi-file-auth-state.js","sourceRoot":"","sources":["../../src/Utils/use-multi-file-auth-state.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/validate-connection.d.ts b/packages/transport/vendor/lib/Utils/validate-connection.d.ts new file mode 100644 index 0000000..3d79ffb --- /dev/null +++ b/packages/transport/vendor/lib/Utils/validate-connection.d.ts @@ -0,0 +1,11 @@ +import { proto } from '../../WAProto/index.js'; +import type { AuthenticationCreds, SignalCreds, SocketConfig } from '../Types/index.js'; +import { type BinaryNode } from '../WABinary/index.js'; +export declare const generateLoginNode: (userJid: string, config: SocketConfig) => proto.IClientPayload; +export declare const generateRegistrationNode: ({ registrationId, signedPreKey, signedIdentityKey }: SignalCreds, config: SocketConfig) => proto.ClientPayload; +export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick) => { + creds: Partial; + reply: BinaryNode; +}; +export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array; +//# sourceMappingURL=validate-connection.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/validate-connection.d.ts.map b/packages/transport/vendor/lib/Utils/validate-connection.d.ts.map new file mode 100644 index 0000000..44738fa --- /dev/null +++ b/packages/transport/vendor/lib/Utils/validate-connection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"validate-connection.d.ts","sourceRoot":"","sources":["../../src/Utils/validate-connection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAO9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC9E,OAAO,EAAE,KAAK,UAAU,EAAiD,MAAM,aAAa,CAAA;AA2D5F,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,QAAQ,YAAY,KAAG,KAAK,CAAC,cAY/E,CAAA;AAUD,eAAO,MAAM,wBAAwB,GACpC,qDAAqD,WAAW,EAChE,QAAQ,YAAY,wBAuDpB,CAAA;AAED,eAAO,MAAM,0BAA0B,GACtC,QAAQ,UAAU,EAClB,uDAIG,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;;;CAyFvF,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,SAAS,KAAK,CAAC,wBAAwB,EAAE,qBAAqB,OAAO,gCAS/G,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/validate-connection.js b/packages/transport/vendor/lib/Utils/validate-connection.js new file mode 100644 index 0000000..f26782b --- /dev/null +++ b/packages/transport/vendor/lib/Utils/validate-connection.js @@ -0,0 +1,203 @@ +import { Boom } from '@hapi/boom'; +import { createHash } from 'crypto'; +import { proto } from '../../WAProto/index.js'; +import { KEY_BUNDLE_TYPE, WA_ADV_ACCOUNT_SIG_PREFIX, WA_ADV_DEVICE_SIG_PREFIX, WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX } from '../Defaults/index.js'; +import { getBinaryNodeChild, jidDecode, S_WHATSAPP_NET } from '../WABinary/index.js'; +import { Curve, hmacSign } from './crypto.js'; +import { encodeBigEndian } from './generics.js'; +import { createSignalIdentity } from './signal.js'; +const getUserAgent = (config) => { + return { + appVersion: { + primary: config.version[0], + secondary: config.version[1], + tertiary: config.version[2] + }, + platform: proto.ClientPayload.UserAgent.Platform.WEB, + releaseChannel: proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE, + osVersion: '0.1', + device: 'Desktop', + osBuildNumber: '0.1', + localeLanguageIso6391: 'en', + mnc: '000', + mcc: '000', + localeCountryIso31661Alpha2: config.countryCode + }; +}; +const PLATFORM_MAP = { + 'Mac OS': proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN, + Windows: proto.ClientPayload.WebInfo.WebSubPlatform.WIN32 +}; +const getWebInfo = (config) => { + let webSubPlatform = proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER; + if (config.syncFullHistory && + PLATFORM_MAP[config.browser[0]] && + config.browser[1] === 'Desktop') { + webSubPlatform = PLATFORM_MAP[config.browser[0]]; + } + return { webSubPlatform }; +}; +const getClientPayload = (config) => { + const payload = { + connectType: proto.ClientPayload.ConnectType.WIFI_UNKNOWN, + connectReason: proto.ClientPayload.ConnectReason.USER_ACTIVATED, + userAgent: getUserAgent(config) + }; + payload.webInfo = getWebInfo(config); + if (config.pushName) { + payload.pushName = config.pushName; + } + return payload; +}; +export const generateLoginNode = (userJid, config) => { + const { user, device } = jidDecode(userJid); + const payload = { + ...getClientPayload(config), + passive: true, + pull: true, + username: +user, + device: device, + // TODO: investigate (hard set as false atm) + lidDbMigrated: false + }; + return proto.ClientPayload.fromObject(payload); +}; +const getPlatformType = (platform) => { + const platformType = platform.toUpperCase(); + return (proto.DeviceProps.PlatformType[platformType] || + proto.DeviceProps.PlatformType.CHROME); +}; +export const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config) => { + // the app version needs to be md5 hashed + // and passed in + const appVersionBuf = createHash('md5') + .update(config.version.join('.')) // join as string + .digest(); + const companion = { + os: config.browser[0], + platformType: getPlatformType(config.browser[1]), + requireFullSync: config.syncFullHistory, + historySyncConfig: { + storageQuotaMb: 10240, + inlineInitialPayloadInE2EeMsg: true, + recentSyncDaysLimit: undefined, + supportCallLogHistory: false, + supportBotUserAgentChatHistory: true, + supportCagReactionsAndPolls: true, + supportBizHostedMsg: true, + supportRecentSyncChunkMessageCountTuning: true, + supportHostedGroupMsg: true, + supportFbidBotChatHistory: true, + supportAddOnHistorySyncMigration: undefined, + supportMessageAssociation: true, + supportGroupHistory: false, + onDemandReady: undefined, + supportGuestChat: undefined + }, + version: { + primary: 10, + secondary: 15, + tertiary: 7 + } + }; + const companionProto = proto.DeviceProps.encode(companion).finish(); + const registerPayload = { + ...getClientPayload(config), + passive: false, + pull: false, + devicePairingData: { + buildHash: appVersionBuf, + deviceProps: companionProto, + eRegid: encodeBigEndian(registrationId), + eKeytype: KEY_BUNDLE_TYPE, + eIdent: signedIdentityKey.public, + eSkeyId: encodeBigEndian(signedPreKey.keyId, 3), + eSkeyVal: signedPreKey.keyPair.public, + eSkeySig: signedPreKey.signature + } + }; + return proto.ClientPayload.fromObject(registerPayload); +}; +export const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, signalIdentities }) => { + const msgId = stanza.attrs.id; + const pairSuccessNode = getBinaryNodeChild(stanza, 'pair-success'); + const deviceIdentityNode = getBinaryNodeChild(pairSuccessNode, 'device-identity'); + const platformNode = getBinaryNodeChild(pairSuccessNode, 'platform'); + const deviceNode = getBinaryNodeChild(pairSuccessNode, 'device'); + const businessNode = getBinaryNodeChild(pairSuccessNode, 'biz'); + if (!deviceIdentityNode || !deviceNode) { + throw new Boom('Missing device-identity or device in pair success node', { data: stanza }); + } + const bizName = businessNode?.attrs.name; + const jid = deviceNode.attrs.jid; + const lid = deviceNode.attrs.lid; + const { details, hmac, accountType } = proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content); + let hmacPrefix = Buffer.from([]); + if (accountType !== undefined && accountType === proto.ADVEncryptionType.HOSTED) { + hmacPrefix = WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX; + } + const advSign = hmacSign(Buffer.concat([hmacPrefix, details]), Buffer.from(advSecretKey, 'base64')); + if (Buffer.compare(hmac, advSign) !== 0) { + throw new Boom('Invalid account signature'); + } + const account = proto.ADVSignedDeviceIdentity.decode(details); + const { accountSignatureKey, accountSignature, details: deviceDetails } = account; + const deviceIdentity = proto.ADVDeviceIdentity.decode(deviceDetails); + const accountSignaturePrefix = deviceIdentity.deviceType === proto.ADVEncryptionType.HOSTED + ? WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX + : WA_ADV_ACCOUNT_SIG_PREFIX; + const accountMsg = Buffer.concat([accountSignaturePrefix, deviceDetails, signedIdentityKey.public]); + if (!Curve.verify(accountSignatureKey, accountMsg, accountSignature)) { + throw new Boom('Failed to verify account signature'); + } + const deviceMsg = Buffer.concat([ + WA_ADV_DEVICE_SIG_PREFIX, + deviceDetails, + signedIdentityKey.public, + accountSignatureKey + ]); + account.deviceSignature = Curve.sign(signedIdentityKey.private, deviceMsg); + const identity = createSignalIdentity(lid, accountSignatureKey); + const accountEnc = encodeSignedDeviceIdentity(account, false); + const reply = { + tag: 'iq', + attrs: { + to: S_WHATSAPP_NET, + type: 'result', + id: msgId + }, + content: [ + { + tag: 'pair-device-sign', + attrs: {}, + content: [ + { + tag: 'device-identity', + attrs: { 'key-index': deviceIdentity.keyIndex.toString() }, + content: accountEnc + } + ] + } + ] + }; + const authUpdate = { + account, + me: { id: jid, name: bizName, lid }, + signalIdentities: [...(signalIdentities || []), identity], + platform: platformNode?.attrs.name + }; + return { + creds: authUpdate, + reply + }; +}; +export const encodeSignedDeviceIdentity = (account, includeSignatureKey) => { + account = { ...account }; + // set to null if we are not to include the signature key + // or if we are including the signature key but it is empty + if (!includeSignatureKey || !account.accountSignatureKey?.length) { + account.accountSignatureKey = null; + } + return proto.ADVSignedDeviceIdentity.encode(account).finish(); +}; +//# sourceMappingURL=validate-connection.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/Utils/validate-connection.js.map b/packages/transport/vendor/lib/Utils/validate-connection.js.map new file mode 100644 index 0000000..51a64f4 --- /dev/null +++ b/packages/transport/vendor/lib/Utils/validate-connection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"validate-connection.js","sourceRoot":"","sources":["../../src/Utils/validate-connection.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/constants.d.ts b/packages/transport/vendor/lib/WABinary/constants.d.ts new file mode 100644 index 0000000..faf2fd9 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/constants.d.ts @@ -0,0 +1,28 @@ +export declare const TAGS: { + LIST_EMPTY: number; + DICTIONARY_0: number; + DICTIONARY_1: number; + DICTIONARY_2: number; + DICTIONARY_3: number; + INTEROP_JID: number; + FB_JID: number; + AD_JID: number; + LIST_8: number; + LIST_16: number; + JID_PAIR: number; + HEX_8: number; + BINARY_8: number; + BINARY_20: number; + BINARY_32: number; + NIBBLE_8: number; + PACKED_MAX: number; +}; +export declare const DOUBLE_BYTE_TOKENS: readonly [readonly ["read-self", "active", "fbns", "protocol", "reaction", "screen_width", "heartbeat", "deviceid", "2:47DEQpj8", "uploadfieldstat", "voip_settings", "retry", "priority", "longitude", "conflict", "false", "ig_professional", "replaced", "preaccept", "cover_photo", "uncompressed", "encopt", "ppic", "04", "passive", "status-revoke-drop", "keygen", "540", "offer", "rate", "opus", "latitude", "w:gp2", "ver", "4", "business_profile", "medium", "sender", "prev_v_id", "email", "website", "invited", "sign_credential", "05", "transport", "skey", "reason", "peer_abtest_bucket", "America/Sao_Paulo", "appid", "refresh", "100", "06", "404", "101", "104", "107", "102", "109", "103", "member_add_mode", "105", "transaction-id", "110", "106", "outgoing", "108", "111", "tokens", "followers", "ig_handle", "self_pid", "tue", "dec", "thu", "joinable", "peer_pid", "mon", "features", "wed", "peer_device_presence", "pn", "delete", "07", "fri", "audio_duration", "admin", "connected", "delta", "rcat", "disable", "collection", "08", "480", "sat", "phash", "all", "invite", "accept", "critical_unblock_low", "group_update", "signed_credential", "blinded_credential", "eph_setting", "net", "09", "background_location", "refresh_id", "Asia/Kolkata", "privacy_mode_ts", "account_sync", "voip_payload_type", "service_areas", "acs_public_key", "v_id", "0a", "fallback_class", "relay", "actual_actors", "metadata", "w:biz", "5", "connected-limit", "notice", "0b", "host_storage", "fb_page", "subject", "privatestats", "invis", "groupadd", "010", "note.m4r", "uuid", "0c", "8000", "sun", "372", "1020", "stage", "1200", "720", "canonical", "fb", "011", "video_duration", "0d", "1140", "superadmin", "012", "Opening.m4r", "keystore_attestation", "dleq_proof", "013", "timestamp", "ab_key", "w:sync:app:state", "0e", "vertical", "600", "p_v_id", "6", "likes", "014", "500", "1260", "creator", "0f", "rte", "destination", "group", "group_info", "syncd_anti_tampering_fatal_exception_enabled", "015", "dl_bw", "Asia/Jakarta", "vp8/h.264", "online", "1320", "fb:multiway", "10", "timeout", "016", "nse_retry", "urn:xmpp:whatsapp:dirty", "017", "a_v_id", "web_shops_chat_header_button_enabled", "nse_call", "inactive-upgrade", "none", "web", "groups", "2250", "mms_hot_content_timespan_in_seconds", "contact_blacklist", "nse_read", "suspended_group_deletion_notification", "binary_version", "018", "https://www.whatsapp.com/otp/copy/", "reg_push", "shops_hide_catalog_attachment_entrypoint", "server_sync", ".", "ephemeral_messages_allowed_values", "019", "mms_vcache_aggregation_enabled", "iphone", "America/Argentina/Buenos_Aires", "01a", "mms_vcard_autodownload_size_kb", "nse_ver", "shops_header_dropdown_menu_item", "dhash", "catalog_status", "communities_mvp_new_iqs_serverprop", "blocklist", "default", "11", "ephemeral_messages_enabled", "01b", "original_dimensions", "8", "mms4_media_retry_notification_encryption_enabled", "mms4_server_error_receipt_encryption_enabled", "original_image_url", "sync", "multiway", "420", "companion_enc_static", "shops_profile_drawer_entrypoint", "01c", "vcard_as_document_size_kb", "status_video_max_duration", "request_image_url", "01d", "regular_high", "s_t", "abt", "share_ext_min_preliminary_image_quality", "01e", "32", "syncd_key_rotation_enabled", "data_namespace", "md_downgrade_read_receipts2", "patch", "polltype", "ephemeral_messages_setting", "userrate", "15", "partial_pjpeg_bw_threshold", "played-self", "catalog_exists", "01f", "mute_v2"], readonly ["reject", "dirty", "announcement", "020", "13", "9", "status_video_max_bitrate", "fb:thrift_iq", "offline_batch", "022", "full", "ctwa_first_business_reply_logging", "h.264", "smax_id", "group_description_length", "https://www.whatsapp.com/otp/code", "status_image_max_edge", "smb_upsell_business_profile_enabled", "021", "web_upgrade_to_md_modal", "14", "023", "s_o", "smaller_video_thumbs_status_enabled", "media_max_autodownload", "960", "blocking_status", "peer_msg", "joinable_group_call_client_version", "group_call_video_maximization_enabled", "return_snapshot", "high", "America/Mexico_City", "entry_point_block_logging_enabled", "pop", "024", "1050", "16", "1380", "one_tap_calling_in_group_chat_size", "regular_low", "inline_joinable_education_enabled", "hq_image_max_edge", "locked", "America/Bogota", "smb_biztools_deeplink_enabled", "status_image_quality", "1088", "025", "payments_upi_intent_transaction_limit", "voip", "w:g2", "027", "md_pin_chat_enabled", "026", "multi_scan_pjpeg_download_enabled", "shops_product_grid", "transaction_id", "ctwa_context_enabled", "20", "fna", "hq_image_quality", "alt_jpeg_doc_detection_quality", "group_call_max_participants", "pkey", "America/Belem", "image_max_kbytes", "web_cart_v1_1_order_message_changes_enabled", "ctwa_context_enterprise_enabled", "urn:xmpp:whatsapp:account", "840", "Asia/Kuala_Lumpur", "max_participants", "video_remux_after_repair_enabled", "stella_addressbook_restriction_type", "660", "900", "780", "context_menu_ios13_enabled", "mute-state", "ref", "payments_request_messages", "029", "frskmsg", "vcard_max_size_kb", "sample_buffer_gif_player_enabled", "match_last_seen", "510", "4983", "video_max_bitrate", "028", "w:comms:chat", "17", "frequently_forwarded_max", "groups_privacy_blacklist", "Asia/Karachi", "02a", "web_download_document_thumb_mms_enabled", "02b", "hist_sync", "biz_block_reasons_version", "1024", "18", "web_is_direct_connection_for_plm_transparent", "view_once_write", "file_max_size", "paid_convo_id", "online_privacy_setting", "video_max_edge", "view_once_read", "enhanced_storage_management", "multi_scan_pjpeg_encoding_enabled", "ctwa_context_forward_enabled", "video_transcode_downgrade_enable", "template_doc_mime_types", "hq_image_bw_threshold", "30", "body", "u_aud_limit_sil_restarts_ctrl", "other", "participating", "w:biz:directory", "1110", "vp8", "4018", "meta", "doc_detection_image_max_edge", "image_quality", "1170", "02c", "smb_upsell_chat_banner_enabled", "key_expiry_time_second", "pid", "stella_interop_enabled", "19", "linked_device_max_count", "md_device_sync_enabled", "02d", "02e", "360", "enhanced_block_enabled", "ephemeral_icon_in_forwarding", "paid_convo_status", "gif_provider", "project_name", "server-error", "canonical_url_validation_enabled", "wallpapers_v2", "syncd_clear_chat_delete_chat_enabled", "medianotify", "02f", "shops_required_tos_version", "vote", "reset_skey_on_id_change", "030", "image_max_edge", "multicast_limit_global", "ul_bw", "21", "25", "5000", "poll", "570", "22", "031", "1280", "WhatsApp", "032", "bloks_shops_enabled", "50", "upload_host_switching_enabled", "web_ctwa_context_compose_enabled", "ptt_forwarded_features_enabled", "unblocked", "partial_pjpeg_enabled", "fbid:devices", "height", "ephemeral_group_query_ts", "group_join_permissions", "order", "033", "alt_jpeg_status_quality", "migrate", "popular-bank", "win_uwp_deprecation_killswitch_enabled", "web_download_status_thumb_mms_enabled", "blocking", "url_text", "035", "web_forwarding_limit_to_groups", "1600", "val", "1000", "syncd_msg_date_enabled", "bank-ref-id", "max_subject", "payments_web_enabled", "web_upload_document_thumb_mms_enabled", "size", "request", "ephemeral", "24", "receipt_agg", "ptt_remember_play_position", "sampling_weight", "enc_rekey", "mute_always", "037", "034", "23", "036", "action", "click_to_chat_qr_enabled", "width", "disabled", "038", "md_blocklist_v2", "played_self_enabled", "web_buttons_message_enabled", "flow_id", "clear", "450", "fbid:thread", "bloks_session_state", "America/Lima", "attachment_picker_refresh", "download_host_switching_enabled", "1792", "u_aud_limit_sil_restarts_test2", "custom_urls", "device_fanout", "optimistic_upload", "2000", "key_cipher_suite", "web_smb_upsell_in_biz_profile_enabled", "e", "039", "siri_post_status_shortcut", "pair-device", "lg", "lc", "stream_attribution_url", "model", "mspjpeg_phash_gen", "catalog_send_all", "new_multi_vcards_ui", "share_biz_vcard_enabled", "-", "clean", "200", "md_blocklist_v2_server", "03b", "03a", "web_md_migration_experience", "ptt_conversation_waveform", "u_aud_limit_sil_restarts_test1"], readonly ["64", "ptt_playback_speed_enabled", "web_product_list_message_enabled", "paid_convo_ts", "27", "manufacturer", "psp-routing", "grp_uii_cleanup", "ptt_draft_enabled", "03c", "business_initiated", "web_catalog_products_onoff", "web_upload_link_thumb_mms_enabled", "03e", "mediaretry", "35", "hfm_string_changes", "28", "America/Fortaleza", "max_keys", "md_mhfs_days", "streaming_upload_chunk_size", "5541", "040", "03d", "2675", "03f", "...", "512", "mute", "48", "041", "alt_jpeg_quality", "60", "042", "md_smb_quick_reply", "5183", "c", "1343", "40", "1230", "043", "044", "mms_cat_v1_forward_hot_override_enabled", "user_notice", "ptt_waveform_send", "047", "Asia/Calcutta", "250", "md_privacy_v2", "31", "29", "128", "md_messaging_enabled", "046", "crypto", "690", "045", "enc_iv", "75", "failure", "ptt_oot_playback", "AIzaSyDR5yfaG7OG8sMTUj8kfQEb8T9pN8BM6Lk", "w", "048", "2201", "web_large_files_ui", "Asia/Makassar", "812", "status_collapse_muted", "1334", "257", "2HP4dm", "049", "patches", "1290", "43cY6T", "America/Caracas", "web_sticker_maker", "campaign", "ptt_pausable_enabled", "33", "42", "attestation", "biz", "04b", "query_linked", "s", "125", "04a", "810", "availability", "1411", "responsiveness_v2_m1", "catalog_not_created", "34", "America/Santiago", "1465", "enc_p", "04d", "status_info", "04f", "key_version", "..", "04c", "04e", "md_group_notification", "1598", "1215", "web_cart_enabled", "37", "630", "1920", "2394", "-1", "vcard", "38", "elapsed", "36", "828", "peer", "pricing_category", "1245", "invalid", "stella_ios_enabled", "2687", "45", "1528", "39", "u_is_redial_audio_1104_ctrl", "1025", "1455", "58", "2524", "2603", "054", "bsp_system_message_enabled", "web_pip_redesign", "051", "verify_apps", "1974", "1272", "1322", "1755", "052", "70", "050", "1063", "1135", "1361", "80", "1096", "1828", "1851", "1251", "1921", "key_config_id", "1254", "1566", "1252", "2525", "critical_block", "1669", "max_available", "w:auth:backup:token", "product", "2530", "870", "1022", "participant_uuid", "web_cart_on_off", "1255", "1432", "1867", "41", "1415", "1440", "240", "1204", "1608", "1690", "1846", "1483", "1687", "1749", "69", "url_number", "053", "1325", "1040", "365", "59", "Asia/Riyadh", "1177", "test_recommended", "057", "1612", "43", "1061", "1518", "1635", "055", "1034", "1375", "750", "1430", "event_code", "1682", "503", "55", "865", "78", "1309", "1365", "44", "America/Guayaquil", "535", "LIMITED", "1377", "1613", "1420", "1599", "1822", "05a", "1681", "password", "1111", "1214", "1376", "1478", "47", "1082", "4282", "Europe/Istanbul", "1307", "46", "058", "1124", "256", "rate-overlimit", "retail", "u_a_socket_err_fix_succ_test", "1292", "1370", "1388", "520", "861", "psa", "regular", "1181", "1766", "05b", "1183", "1213", "1304", "1537"], readonly ["1724", "profile_picture", "1071", "1314", "1605", "407", "990", "1710", "746", "pricing_model", "056", "059", "061", "1119", "6027", "65", "877", "1607", "05d", "917", "seen", "1516", "49", "470", "973", "1037", "1350", "1394", "1480", "1796", "keys", "794", "1536", "1594", "2378", "1333", "1524", "1825", "116", "309", "52", "808", "827", "909", "495", "1660", "361", "957", "google", "1357", "1565", "1967", "996", "1775", "586", "736", "1052", "1670", "bank", "177", "1416", "2194", "2222", "1454", "1839", "1275", "53", "997", "1629", "6028", "smba", "1378", "1410", "05c", "1849", "727", "create", "1559", "536", "1106", "1310", "1944", "670", "1297", "1316", "1762", "en", "1148", "1295", "1551", "1853", "1890", "1208", "1784", "7200", "05f", "178", "1283", "1332", "381", "643", "1056", "1238", "2024", "2387", "179", "981", "1547", "1705", "05e", "290", "903", "1069", "1285", "2436", "062", "251", "560", "582", "719", "56", "1700", "2321", "325", "448", "613", "777", "791", "51", "488", "902", "Asia/Almaty", "is_hidden", "1398", "1527", "1893", "1999", "2367", "2642", "237", "busy", "065", "067", "233", "590", "993", "1511", "54", "723", "860", "363", "487", "522", "605", "995", "1321", "1691", "1865", "2447", "2462", "NON_TRANSACTIONAL", "433", "871", "432", "1004", "1207", "2032", "2050", "2379", "2446", "279", "636", "703", "904", "248", "370", "691", "700", "1068", "1655", "2334", "060", "063", "364", "533", "534", "567", "1191", "1210", "1473", "1827", "069", "701", "2531", "514", "prev_dhash", "064", "496", "790", "1046", "1139", "1505", "1521", "1108", "207", "544", "637", "final", "1173", "1293", "1694", "1939", "1951", "1993", "2353", "2515", "504", "601", "857", "modify", "spam_request", "p_121_aa_1101_test4", "866", "1427", "1502", "1638", "1744", "2153", "068", "382", "725", "1704", "1864", "1990", "2003", "Asia/Dubai", "508", "531", "1387", "1474", "1632", "2307", "2386", "819", "2014", "066", "387", "1468", "1706", "2186", "2261", "471", "728", "1147", "1372", "1961"]]; +export declare const SINGLE_BYTE_TOKENS: string[]; +export declare const TOKEN_MAP: { + [token: string]: { + dict?: number; + index: number; + }; +}; +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/constants.d.ts.map b/packages/transport/vendor/lib/WABinary/constants.d.ts.map new file mode 100644 index 0000000..9f31852 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/WABinary/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;CAkBhB,CAAA;AAED,eAAO,MAAM,kBAAkB,qpZAygCrB,CAAA;AAEV,eAAO,MAAM,kBAAkB,UA6O9B,CAAA;AAED,eAAO,MAAM,SAAS,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/constants.js b/packages/transport/vendor/lib/WABinary/constants.js new file mode 100644 index 0000000..cfe2e42 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/constants.js @@ -0,0 +1,1301 @@ +export const TAGS = { + LIST_EMPTY: 0, + DICTIONARY_0: 236, + DICTIONARY_1: 237, + DICTIONARY_2: 238, + DICTIONARY_3: 239, + INTEROP_JID: 245, + FB_JID: 246, + AD_JID: 247, + LIST_8: 248, + LIST_16: 249, + JID_PAIR: 250, + HEX_8: 251, + BINARY_8: 252, + BINARY_20: 253, + BINARY_32: 254, + NIBBLE_8: 255, + PACKED_MAX: 127 +}; +export const DOUBLE_BYTE_TOKENS = [ + [ + 'read-self', + 'active', + 'fbns', + 'protocol', + 'reaction', + 'screen_width', + 'heartbeat', + 'deviceid', + '2:47DEQpj8', + 'uploadfieldstat', + 'voip_settings', + 'retry', + 'priority', + 'longitude', + 'conflict', + 'false', + 'ig_professional', + 'replaced', + 'preaccept', + 'cover_photo', + 'uncompressed', + 'encopt', + 'ppic', + '04', + 'passive', + 'status-revoke-drop', + 'keygen', + '540', + 'offer', + 'rate', + 'opus', + 'latitude', + 'w:gp2', + 'ver', + '4', + 'business_profile', + 'medium', + 'sender', + 'prev_v_id', + 'email', + 'website', + 'invited', + 'sign_credential', + '05', + 'transport', + 'skey', + 'reason', + 'peer_abtest_bucket', + 'America/Sao_Paulo', + 'appid', + 'refresh', + '100', + '06', + '404', + '101', + '104', + '107', + '102', + '109', + '103', + 'member_add_mode', + '105', + 'transaction-id', + '110', + '106', + 'outgoing', + '108', + '111', + 'tokens', + 'followers', + 'ig_handle', + 'self_pid', + 'tue', + 'dec', + 'thu', + 'joinable', + 'peer_pid', + 'mon', + 'features', + 'wed', + 'peer_device_presence', + 'pn', + 'delete', + '07', + 'fri', + 'audio_duration', + 'admin', + 'connected', + 'delta', + 'rcat', + 'disable', + 'collection', + '08', + '480', + 'sat', + 'phash', + 'all', + 'invite', + 'accept', + 'critical_unblock_low', + 'group_update', + 'signed_credential', + 'blinded_credential', + 'eph_setting', + 'net', + '09', + 'background_location', + 'refresh_id', + 'Asia/Kolkata', + 'privacy_mode_ts', + 'account_sync', + 'voip_payload_type', + 'service_areas', + 'acs_public_key', + 'v_id', + '0a', + 'fallback_class', + 'relay', + 'actual_actors', + 'metadata', + 'w:biz', + '5', + 'connected-limit', + 'notice', + '0b', + 'host_storage', + 'fb_page', + 'subject', + 'privatestats', + 'invis', + 'groupadd', + '010', + 'note.m4r', + 'uuid', + '0c', + '8000', + 'sun', + '372', + '1020', + 'stage', + '1200', + '720', + 'canonical', + 'fb', + '011', + 'video_duration', + '0d', + '1140', + 'superadmin', + '012', + 'Opening.m4r', + 'keystore_attestation', + 'dleq_proof', + '013', + 'timestamp', + 'ab_key', + 'w:sync:app:state', + '0e', + 'vertical', + '600', + 'p_v_id', + '6', + 'likes', + '014', + '500', + '1260', + 'creator', + '0f', + 'rte', + 'destination', + 'group', + 'group_info', + 'syncd_anti_tampering_fatal_exception_enabled', + '015', + 'dl_bw', + 'Asia/Jakarta', + 'vp8/h.264', + 'online', + '1320', + 'fb:multiway', + '10', + 'timeout', + '016', + 'nse_retry', + 'urn:xmpp:whatsapp:dirty', + '017', + 'a_v_id', + 'web_shops_chat_header_button_enabled', + 'nse_call', + 'inactive-upgrade', + 'none', + 'web', + 'groups', + '2250', + 'mms_hot_content_timespan_in_seconds', + 'contact_blacklist', + 'nse_read', + 'suspended_group_deletion_notification', + 'binary_version', + '018', + 'https://www.whatsapp.com/otp/copy/', + 'reg_push', + 'shops_hide_catalog_attachment_entrypoint', + 'server_sync', + '.', + 'ephemeral_messages_allowed_values', + '019', + 'mms_vcache_aggregation_enabled', + 'iphone', + 'America/Argentina/Buenos_Aires', + '01a', + 'mms_vcard_autodownload_size_kb', + 'nse_ver', + 'shops_header_dropdown_menu_item', + 'dhash', + 'catalog_status', + 'communities_mvp_new_iqs_serverprop', + 'blocklist', + 'default', + '11', + 'ephemeral_messages_enabled', + '01b', + 'original_dimensions', + '8', + 'mms4_media_retry_notification_encryption_enabled', + 'mms4_server_error_receipt_encryption_enabled', + 'original_image_url', + 'sync', + 'multiway', + '420', + 'companion_enc_static', + 'shops_profile_drawer_entrypoint', + '01c', + 'vcard_as_document_size_kb', + 'status_video_max_duration', + 'request_image_url', + '01d', + 'regular_high', + 's_t', + 'abt', + 'share_ext_min_preliminary_image_quality', + '01e', + '32', + 'syncd_key_rotation_enabled', + 'data_namespace', + 'md_downgrade_read_receipts2', + 'patch', + 'polltype', + 'ephemeral_messages_setting', + 'userrate', + '15', + 'partial_pjpeg_bw_threshold', + 'played-self', + 'catalog_exists', + '01f', + 'mute_v2' + ], + [ + 'reject', + 'dirty', + 'announcement', + '020', + '13', + '9', + 'status_video_max_bitrate', + 'fb:thrift_iq', + 'offline_batch', + '022', + 'full', + 'ctwa_first_business_reply_logging', + 'h.264', + 'smax_id', + 'group_description_length', + 'https://www.whatsapp.com/otp/code', + 'status_image_max_edge', + 'smb_upsell_business_profile_enabled', + '021', + 'web_upgrade_to_md_modal', + '14', + '023', + 's_o', + 'smaller_video_thumbs_status_enabled', + 'media_max_autodownload', + '960', + 'blocking_status', + 'peer_msg', + 'joinable_group_call_client_version', + 'group_call_video_maximization_enabled', + 'return_snapshot', + 'high', + 'America/Mexico_City', + 'entry_point_block_logging_enabled', + 'pop', + '024', + '1050', + '16', + '1380', + 'one_tap_calling_in_group_chat_size', + 'regular_low', + 'inline_joinable_education_enabled', + 'hq_image_max_edge', + 'locked', + 'America/Bogota', + 'smb_biztools_deeplink_enabled', + 'status_image_quality', + '1088', + '025', + 'payments_upi_intent_transaction_limit', + 'voip', + 'w:g2', + '027', + 'md_pin_chat_enabled', + '026', + 'multi_scan_pjpeg_download_enabled', + 'shops_product_grid', + 'transaction_id', + 'ctwa_context_enabled', + '20', + 'fna', + 'hq_image_quality', + 'alt_jpeg_doc_detection_quality', + 'group_call_max_participants', + 'pkey', + 'America/Belem', + 'image_max_kbytes', + 'web_cart_v1_1_order_message_changes_enabled', + 'ctwa_context_enterprise_enabled', + 'urn:xmpp:whatsapp:account', + '840', + 'Asia/Kuala_Lumpur', + 'max_participants', + 'video_remux_after_repair_enabled', + 'stella_addressbook_restriction_type', + '660', + '900', + '780', + 'context_menu_ios13_enabled', + 'mute-state', + 'ref', + 'payments_request_messages', + '029', + 'frskmsg', + 'vcard_max_size_kb', + 'sample_buffer_gif_player_enabled', + 'match_last_seen', + '510', + '4983', + 'video_max_bitrate', + '028', + 'w:comms:chat', + '17', + 'frequently_forwarded_max', + 'groups_privacy_blacklist', + 'Asia/Karachi', + '02a', + 'web_download_document_thumb_mms_enabled', + '02b', + 'hist_sync', + 'biz_block_reasons_version', + '1024', + '18', + 'web_is_direct_connection_for_plm_transparent', + 'view_once_write', + 'file_max_size', + 'paid_convo_id', + 'online_privacy_setting', + 'video_max_edge', + 'view_once_read', + 'enhanced_storage_management', + 'multi_scan_pjpeg_encoding_enabled', + 'ctwa_context_forward_enabled', + 'video_transcode_downgrade_enable', + 'template_doc_mime_types', + 'hq_image_bw_threshold', + '30', + 'body', + 'u_aud_limit_sil_restarts_ctrl', + 'other', + 'participating', + 'w:biz:directory', + '1110', + 'vp8', + '4018', + 'meta', + 'doc_detection_image_max_edge', + 'image_quality', + '1170', + '02c', + 'smb_upsell_chat_banner_enabled', + 'key_expiry_time_second', + 'pid', + 'stella_interop_enabled', + '19', + 'linked_device_max_count', + 'md_device_sync_enabled', + '02d', + '02e', + '360', + 'enhanced_block_enabled', + 'ephemeral_icon_in_forwarding', + 'paid_convo_status', + 'gif_provider', + 'project_name', + 'server-error', + 'canonical_url_validation_enabled', + 'wallpapers_v2', + 'syncd_clear_chat_delete_chat_enabled', + 'medianotify', + '02f', + 'shops_required_tos_version', + 'vote', + 'reset_skey_on_id_change', + '030', + 'image_max_edge', + 'multicast_limit_global', + 'ul_bw', + '21', + '25', + '5000', + 'poll', + '570', + '22', + '031', + '1280', + 'WhatsApp', + '032', + 'bloks_shops_enabled', + '50', + 'upload_host_switching_enabled', + 'web_ctwa_context_compose_enabled', + 'ptt_forwarded_features_enabled', + 'unblocked', + 'partial_pjpeg_enabled', + 'fbid:devices', + 'height', + 'ephemeral_group_query_ts', + 'group_join_permissions', + 'order', + '033', + 'alt_jpeg_status_quality', + 'migrate', + 'popular-bank', + 'win_uwp_deprecation_killswitch_enabled', + 'web_download_status_thumb_mms_enabled', + 'blocking', + 'url_text', + '035', + 'web_forwarding_limit_to_groups', + '1600', + 'val', + '1000', + 'syncd_msg_date_enabled', + 'bank-ref-id', + 'max_subject', + 'payments_web_enabled', + 'web_upload_document_thumb_mms_enabled', + 'size', + 'request', + 'ephemeral', + '24', + 'receipt_agg', + 'ptt_remember_play_position', + 'sampling_weight', + 'enc_rekey', + 'mute_always', + '037', + '034', + '23', + '036', + 'action', + 'click_to_chat_qr_enabled', + 'width', + 'disabled', + '038', + 'md_blocklist_v2', + 'played_self_enabled', + 'web_buttons_message_enabled', + 'flow_id', + 'clear', + '450', + 'fbid:thread', + 'bloks_session_state', + 'America/Lima', + 'attachment_picker_refresh', + 'download_host_switching_enabled', + '1792', + 'u_aud_limit_sil_restarts_test2', + 'custom_urls', + 'device_fanout', + 'optimistic_upload', + '2000', + 'key_cipher_suite', + 'web_smb_upsell_in_biz_profile_enabled', + 'e', + '039', + 'siri_post_status_shortcut', + 'pair-device', + 'lg', + 'lc', + 'stream_attribution_url', + 'model', + 'mspjpeg_phash_gen', + 'catalog_send_all', + 'new_multi_vcards_ui', + 'share_biz_vcard_enabled', + '-', + 'clean', + '200', + 'md_blocklist_v2_server', + '03b', + '03a', + 'web_md_migration_experience', + 'ptt_conversation_waveform', + 'u_aud_limit_sil_restarts_test1' + ], + [ + '64', + 'ptt_playback_speed_enabled', + 'web_product_list_message_enabled', + 'paid_convo_ts', + '27', + 'manufacturer', + 'psp-routing', + 'grp_uii_cleanup', + 'ptt_draft_enabled', + '03c', + 'business_initiated', + 'web_catalog_products_onoff', + 'web_upload_link_thumb_mms_enabled', + '03e', + 'mediaretry', + '35', + 'hfm_string_changes', + '28', + 'America/Fortaleza', + 'max_keys', + 'md_mhfs_days', + 'streaming_upload_chunk_size', + '5541', + '040', + '03d', + '2675', + '03f', + '...', + '512', + 'mute', + '48', + '041', + 'alt_jpeg_quality', + '60', + '042', + 'md_smb_quick_reply', + '5183', + 'c', + '1343', + '40', + '1230', + '043', + '044', + 'mms_cat_v1_forward_hot_override_enabled', + 'user_notice', + 'ptt_waveform_send', + '047', + 'Asia/Calcutta', + '250', + 'md_privacy_v2', + '31', + '29', + '128', + 'md_messaging_enabled', + '046', + 'crypto', + '690', + '045', + 'enc_iv', + '75', + 'failure', + 'ptt_oot_playback', + 'AIzaSyDR5yfaG7OG8sMTUj8kfQEb8T9pN8BM6Lk', + 'w', + '048', + '2201', + 'web_large_files_ui', + 'Asia/Makassar', + '812', + 'status_collapse_muted', + '1334', + '257', + '2HP4dm', + '049', + 'patches', + '1290', + '43cY6T', + 'America/Caracas', + 'web_sticker_maker', + 'campaign', + 'ptt_pausable_enabled', + '33', + '42', + 'attestation', + 'biz', + '04b', + 'query_linked', + 's', + '125', + '04a', + '810', + 'availability', + '1411', + 'responsiveness_v2_m1', + 'catalog_not_created', + '34', + 'America/Santiago', + '1465', + 'enc_p', + '04d', + 'status_info', + '04f', + 'key_version', + '..', + '04c', + '04e', + 'md_group_notification', + '1598', + '1215', + 'web_cart_enabled', + '37', + '630', + '1920', + '2394', + '-1', + 'vcard', + '38', + 'elapsed', + '36', + '828', + 'peer', + 'pricing_category', + '1245', + 'invalid', + 'stella_ios_enabled', + '2687', + '45', + '1528', + '39', + 'u_is_redial_audio_1104_ctrl', + '1025', + '1455', + '58', + '2524', + '2603', + '054', + 'bsp_system_message_enabled', + 'web_pip_redesign', + '051', + 'verify_apps', + '1974', + '1272', + '1322', + '1755', + '052', + '70', + '050', + '1063', + '1135', + '1361', + '80', + '1096', + '1828', + '1851', + '1251', + '1921', + 'key_config_id', + '1254', + '1566', + '1252', + '2525', + 'critical_block', + '1669', + 'max_available', + 'w:auth:backup:token', + 'product', + '2530', + '870', + '1022', + 'participant_uuid', + 'web_cart_on_off', + '1255', + '1432', + '1867', + '41', + '1415', + '1440', + '240', + '1204', + '1608', + '1690', + '1846', + '1483', + '1687', + '1749', + '69', + 'url_number', + '053', + '1325', + '1040', + '365', + '59', + 'Asia/Riyadh', + '1177', + 'test_recommended', + '057', + '1612', + '43', + '1061', + '1518', + '1635', + '055', + '1034', + '1375', + '750', + '1430', + 'event_code', + '1682', + '503', + '55', + '865', + '78', + '1309', + '1365', + '44', + 'America/Guayaquil', + '535', + 'LIMITED', + '1377', + '1613', + '1420', + '1599', + '1822', + '05a', + '1681', + 'password', + '1111', + '1214', + '1376', + '1478', + '47', + '1082', + '4282', + 'Europe/Istanbul', + '1307', + '46', + '058', + '1124', + '256', + 'rate-overlimit', + 'retail', + 'u_a_socket_err_fix_succ_test', + '1292', + '1370', + '1388', + '520', + '861', + 'psa', + 'regular', + '1181', + '1766', + '05b', + '1183', + '1213', + '1304', + '1537' + ], + [ + '1724', + 'profile_picture', + '1071', + '1314', + '1605', + '407', + '990', + '1710', + '746', + 'pricing_model', + '056', + '059', + '061', + '1119', + '6027', + '65', + '877', + '1607', + '05d', + '917', + 'seen', + '1516', + '49', + '470', + '973', + '1037', + '1350', + '1394', + '1480', + '1796', + 'keys', + '794', + '1536', + '1594', + '2378', + '1333', + '1524', + '1825', + '116', + '309', + '52', + '808', + '827', + '909', + '495', + '1660', + '361', + '957', + 'google', + '1357', + '1565', + '1967', + '996', + '1775', + '586', + '736', + '1052', + '1670', + 'bank', + '177', + '1416', + '2194', + '2222', + '1454', + '1839', + '1275', + '53', + '997', + '1629', + '6028', + 'smba', + '1378', + '1410', + '05c', + '1849', + '727', + 'create', + '1559', + '536', + '1106', + '1310', + '1944', + '670', + '1297', + '1316', + '1762', + 'en', + '1148', + '1295', + '1551', + '1853', + '1890', + '1208', + '1784', + '7200', + '05f', + '178', + '1283', + '1332', + '381', + '643', + '1056', + '1238', + '2024', + '2387', + '179', + '981', + '1547', + '1705', + '05e', + '290', + '903', + '1069', + '1285', + '2436', + '062', + '251', + '560', + '582', + '719', + '56', + '1700', + '2321', + '325', + '448', + '613', + '777', + '791', + '51', + '488', + '902', + 'Asia/Almaty', + 'is_hidden', + '1398', + '1527', + '1893', + '1999', + '2367', + '2642', + '237', + 'busy', + '065', + '067', + '233', + '590', + '993', + '1511', + '54', + '723', + '860', + '363', + '487', + '522', + '605', + '995', + '1321', + '1691', + '1865', + '2447', + '2462', + 'NON_TRANSACTIONAL', + '433', + '871', + '432', + '1004', + '1207', + '2032', + '2050', + '2379', + '2446', + '279', + '636', + '703', + '904', + '248', + '370', + '691', + '700', + '1068', + '1655', + '2334', + '060', + '063', + '364', + '533', + '534', + '567', + '1191', + '1210', + '1473', + '1827', + '069', + '701', + '2531', + '514', + 'prev_dhash', + '064', + '496', + '790', + '1046', + '1139', + '1505', + '1521', + '1108', + '207', + '544', + '637', + 'final', + '1173', + '1293', + '1694', + '1939', + '1951', + '1993', + '2353', + '2515', + '504', + '601', + '857', + 'modify', + 'spam_request', + 'p_121_aa_1101_test4', + '866', + '1427', + '1502', + '1638', + '1744', + '2153', + '068', + '382', + '725', + '1704', + '1864', + '1990', + '2003', + 'Asia/Dubai', + '508', + '531', + '1387', + '1474', + '1632', + '2307', + '2386', + '819', + '2014', + '066', + '387', + '1468', + '1706', + '2186', + '2261', + '471', + '728', + '1147', + '1372', + '1961' + ] +]; +export const SINGLE_BYTE_TOKENS = [ + '', + 'xmlstreamstart', + 'xmlstreamend', + 's.whatsapp.net', + 'type', + 'participant', + 'from', + 'receipt', + 'id', + 'notification', + 'disappearing_mode', + 'status', + 'jid', + 'broadcast', + 'user', + 'devices', + 'device_hash', + 'to', + 'offline', + 'message', + 'result', + 'class', + 'xmlns', + 'duration', + 'notify', + 'iq', + 't', + 'ack', + 'g.us', + 'enc', + 'urn:xmpp:whatsapp:push', + 'presence', + 'config_value', + 'picture', + 'verified_name', + 'config_code', + 'key-index-list', + 'contact', + 'mediatype', + 'routing_info', + 'edge_routing', + 'get', + 'read', + 'urn:xmpp:ping', + 'fallback_hostname', + '0', + 'chatstate', + 'business_hours_config', + 'unavailable', + 'download_buckets', + 'skmsg', + 'verified_level', + 'composing', + 'handshake', + 'device-list', + 'media', + 'text', + 'fallback_ip4', + 'media_conn', + 'device', + 'creation', + 'location', + 'config', + 'item', + 'fallback_ip6', + 'count', + 'w:profile:picture', + 'image', + 'business', + '2', + 'hostname', + 'call-creator', + 'display_name', + 'relaylatency', + 'platform', + 'abprops', + 'success', + 'msg', + 'offline_preview', + 'prop', + 'key-index', + 'v', + 'day_of_week', + 'pkmsg', + 'version', + '1', + 'ping', + 'w:p', + 'download', + 'video', + 'set', + 'specific_hours', + 'props', + 'primary', + 'unknown', + 'hash', + 'commerce_experience', + 'last', + 'subscribe', + 'max_buckets', + 'call', + 'profile', + 'member_since_text', + 'close_time', + 'call-id', + 'sticker', + 'mode', + 'participants', + 'value', + 'query', + 'profile_options', + 'open_time', + 'code', + 'list', + 'host', + 'ts', + 'contacts', + 'upload', + 'lid', + 'preview', + 'update', + 'usync', + 'w:stats', + 'delivery', + 'auth_ttl', + 'context', + 'fail', + 'cart_enabled', + 'appdata', + 'category', + 'atn', + 'direct_connection', + 'decrypt-fail', + 'relay_id', + 'mmg-fallback.whatsapp.net', + 'target', + 'available', + 'name', + 'last_id', + 'mmg.whatsapp.net', + 'categories', + '401', + 'is_new', + 'index', + 'tctoken', + 'ip4', + 'token_id', + 'latency', + 'recipient', + 'edit', + 'ip6', + 'add', + 'thumbnail-document', + '26', + 'paused', + 'true', + 'identity', + 'stream:error', + 'key', + 'sidelist', + 'background', + 'audio', + '3', + 'thumbnail-image', + 'biz-cover-photo', + 'cat', + 'gcm', + 'thumbnail-video', + 'error', + 'auth', + 'deny', + 'serial', + 'in', + 'registration', + 'thumbnail-link', + 'remove', + '00', + 'gif', + 'thumbnail-gif', + 'tag', + 'capability', + 'multicast', + 'item-not-found', + 'description', + 'business_hours', + 'config_expo_key', + 'md-app-state', + 'expiration', + 'fallback', + 'ttl', + '300', + 'md-msg-hist', + 'device_orientation', + 'out', + 'w:m', + 'open_24h', + 'side_list', + 'token', + 'inactive', + '01', + 'document', + 'te2', + 'played', + 'encrypt', + 'msgr', + 'hide', + 'direct_path', + '12', + 'state', + 'not-authorized', + 'url', + 'terminate', + 'signature', + 'status-revoke-delay', + '02', + 'te', + 'linked_accounts', + 'trusted_contact', + 'timezone', + 'ptt', + 'kyc-id', + 'privacy_token', + 'readreceipts', + 'appointment_only', + 'address', + 'expected_ts', + 'privacy', + '7', + 'android', + 'interactive', + 'device-identity', + 'enabled', + 'attribute_padding', + '1080', + '03', + 'screen_height' +]; +export const TOKEN_MAP = {}; +for (const [i, SINGLE_BYTE_TOKEN] of SINGLE_BYTE_TOKENS.entries()) { + TOKEN_MAP[SINGLE_BYTE_TOKEN] = { index: i }; +} +for (const [i, DOUBLE_BYTE_TOKEN] of DOUBLE_BYTE_TOKENS.entries()) { + for (const [j, element] of DOUBLE_BYTE_TOKEN.entries()) { + TOKEN_MAP[element] = { dict: i, index: j }; + } +} +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/constants.js.map b/packages/transport/vendor/lib/WABinary/constants.js.map new file mode 100644 index 0000000..ab5cfc3 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/WABinary/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;IACnB,UAAU,EAAE,CAAC;IACb,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;IACjB,WAAW,EAAE,GAAG;IAChB,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;CACf,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC;QACC,WAAW;QACX,QAAQ;QACR,MAAM;QACN,UAAU;QACV,UAAU;QACV,cAAc;QACd,WAAW;QACX,UAAU;QACV,YAAY;QACZ,iBAAiB;QACjB,eAAe;QACf,OAAO;QACP,UAAU;QACV,WAAW;QACX,UAAU;QACV,OAAO;QACP,iBAAiB;QACjB,UAAU;QACV,WAAW;QACX,aAAa;QACb,cAAc;QACd,QAAQ;QACR,MAAM;QACN,IAAI;QACJ,SAAS;QACT,oBAAoB;QACpB,QAAQ;QACR,KAAK;QACL,OAAO;QACP,MAAM;QACN,MAAM;QACN,UAAU;QACV,OAAO;QACP,KAAK;QACL,GAAG;QACH,kBAAkB;QAClB,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,OAAO;QACP,SAAS;QACT,SAAS;QACT,iBAAiB;QACjB,IAAI;QACJ,WAAW;QACX,MAAM;QACN,QAAQ;QACR,oBAAoB;QACpB,mBAAmB;QACnB,OAAO;QACP,SAAS;QACT,KAAK;QACL,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,iBAAiB;QACjB,KAAK;QACL,gBAAgB;QAChB,KAAK;QACL,KAAK;QACL,UAAU;QACV,KAAK;QACL,KAAK;QACL,QAAQ;QACR,WAAW;QACX,WAAW;QACX,UAAU;QACV,KAAK;QACL,KAAK;QACL,KAAK;QACL,UAAU;QACV,UAAU;QACV,KAAK;QACL,UAAU;QACV,KAAK;QACL,sBAAsB;QACtB,IAAI;QACJ,QAAQ;QACR,IAAI;QACJ,KAAK;QACL,gBAAgB;QAChB,OAAO;QACP,WAAW;QACX,OAAO;QACP,MAAM;QACN,SAAS;QACT,YAAY;QACZ,IAAI;QACJ,KAAK;QACL,KAAK;QACL,OAAO;QACP,KAAK;QACL,QAAQ;QACR,QAAQ;QACR,sBAAsB;QACtB,cAAc;QACd,mBAAmB;QACnB,oBAAoB;QACpB,aAAa;QACb,KAAK;QACL,IAAI;QACJ,qBAAqB;QACrB,YAAY;QACZ,cAAc;QACd,iBAAiB;QACjB,cAAc;QACd,mBAAmB;QACnB,eAAe;QACf,gBAAgB;QAChB,MAAM;QACN,IAAI;QACJ,gBAAgB;QAChB,OAAO;QACP,eAAe;QACf,UAAU;QACV,OAAO;QACP,GAAG;QACH,iBAAiB;QACjB,QAAQ;QACR,IAAI;QACJ,cAAc;QACd,SAAS;QACT,SAAS;QACT,cAAc;QACd,OAAO;QACP,UAAU;QACV,KAAK;QACL,UAAU;QACV,MAAM;QACN,IAAI;QACJ,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,KAAK;QACL,WAAW;QACX,IAAI;QACJ,KAAK;QACL,gBAAgB;QAChB,IAAI;QACJ,MAAM;QACN,YAAY;QACZ,KAAK;QACL,aAAa;QACb,sBAAsB;QACtB,YAAY;QACZ,KAAK;QACL,WAAW;QACX,QAAQ;QACR,kBAAkB;QAClB,IAAI;QACJ,UAAU;QACV,KAAK;QACL,QAAQ;QACR,GAAG;QACH,OAAO;QACP,KAAK;QACL,KAAK;QACL,MAAM;QACN,SAAS;QACT,IAAI;QACJ,KAAK;QACL,aAAa;QACb,OAAO;QACP,YAAY;QACZ,8CAA8C;QAC9C,KAAK;QACL,OAAO;QACP,cAAc;QACd,WAAW;QACX,QAAQ;QACR,MAAM;QACN,aAAa;QACb,IAAI;QACJ,SAAS;QACT,KAAK;QACL,WAAW;QACX,yBAAyB;QACzB,KAAK;QACL,QAAQ;QACR,sCAAsC;QACtC,UAAU;QACV,kBAAkB;QAClB,MAAM;QACN,KAAK;QACL,QAAQ;QACR,MAAM;QACN,qCAAqC;QACrC,mBAAmB;QACnB,UAAU;QACV,uCAAuC;QACvC,gBAAgB;QAChB,KAAK;QACL,oCAAoC;QACpC,UAAU;QACV,0CAA0C;QAC1C,aAAa;QACb,GAAG;QACH,mCAAmC;QACnC,KAAK;QACL,gCAAgC;QAChC,QAAQ;QACR,gCAAgC;QAChC,KAAK;QACL,gCAAgC;QAChC,SAAS;QACT,iCAAiC;QACjC,OAAO;QACP,gBAAgB;QAChB,oCAAoC;QACpC,WAAW;QACX,SAAS;QACT,IAAI;QACJ,4BAA4B;QAC5B,KAAK;QACL,qBAAqB;QACrB,GAAG;QACH,kDAAkD;QAClD,8CAA8C;QAC9C,oBAAoB;QACpB,MAAM;QACN,UAAU;QACV,KAAK;QACL,sBAAsB;QACtB,iCAAiC;QACjC,KAAK;QACL,2BAA2B;QAC3B,2BAA2B;QAC3B,mBAAmB;QACnB,KAAK;QACL,cAAc;QACd,KAAK;QACL,KAAK;QACL,yCAAyC;QACzC,KAAK;QACL,IAAI;QACJ,4BAA4B;QAC5B,gBAAgB;QAChB,6BAA6B;QAC7B,OAAO;QACP,UAAU;QACV,4BAA4B;QAC5B,UAAU;QACV,IAAI;QACJ,4BAA4B;QAC5B,aAAa;QACb,gBAAgB;QAChB,KAAK;QACL,SAAS;KACT;IACD;QACC,QAAQ;QACR,OAAO;QACP,cAAc;QACd,KAAK;QACL,IAAI;QACJ,GAAG;QACH,0BAA0B;QAC1B,cAAc;QACd,eAAe;QACf,KAAK;QACL,MAAM;QACN,mCAAmC;QACnC,OAAO;QACP,SAAS;QACT,0BAA0B;QAC1B,mCAAmC;QACnC,uBAAuB;QACvB,qCAAqC;QACrC,KAAK;QACL,yBAAyB;QACzB,IAAI;QACJ,KAAK;QACL,KAAK;QACL,qCAAqC;QACrC,wBAAwB;QACxB,KAAK;QACL,iBAAiB;QACjB,UAAU;QACV,oCAAoC;QACpC,uCAAuC;QACvC,iBAAiB;QACjB,MAAM;QACN,qBAAqB;QACrB,mCAAmC;QACnC,KAAK;QACL,KAAK;QACL,MAAM;QACN,IAAI;QACJ,MAAM;QACN,oCAAoC;QACpC,aAAa;QACb,mCAAmC;QACnC,mBAAmB;QACnB,QAAQ;QACR,gBAAgB;QAChB,+BAA+B;QAC/B,sBAAsB;QACtB,MAAM;QACN,KAAK;QACL,uCAAuC;QACvC,MAAM;QACN,MAAM;QACN,KAAK;QACL,qBAAqB;QACrB,KAAK;QACL,mCAAmC;QACnC,oBAAoB;QACpB,gBAAgB;QAChB,sBAAsB;QACtB,IAAI;QACJ,KAAK;QACL,kBAAkB;QAClB,gCAAgC;QAChC,6BAA6B;QAC7B,MAAM;QACN,eAAe;QACf,kBAAkB;QAClB,6CAA6C;QAC7C,iCAAiC;QACjC,2BAA2B;QAC3B,KAAK;QACL,mBAAmB;QACnB,kBAAkB;QAClB,kCAAkC;QAClC,qCAAqC;QACrC,KAAK;QACL,KAAK;QACL,KAAK;QACL,4BAA4B;QAC5B,YAAY;QACZ,KAAK;QACL,2BAA2B;QAC3B,KAAK;QACL,SAAS;QACT,mBAAmB;QACnB,kCAAkC;QAClC,iBAAiB;QACjB,KAAK;QACL,MAAM;QACN,mBAAmB;QACnB,KAAK;QACL,cAAc;QACd,IAAI;QACJ,0BAA0B;QAC1B,0BAA0B;QAC1B,cAAc;QACd,KAAK;QACL,yCAAyC;QACzC,KAAK;QACL,WAAW;QACX,2BAA2B;QAC3B,MAAM;QACN,IAAI;QACJ,8CAA8C;QAC9C,iBAAiB;QACjB,eAAe;QACf,eAAe;QACf,wBAAwB;QACxB,gBAAgB;QAChB,gBAAgB;QAChB,6BAA6B;QAC7B,mCAAmC;QACnC,8BAA8B;QAC9B,kCAAkC;QAClC,yBAAyB;QACzB,uBAAuB;QACvB,IAAI;QACJ,MAAM;QACN,+BAA+B;QAC/B,OAAO;QACP,eAAe;QACf,iBAAiB;QACjB,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,8BAA8B;QAC9B,eAAe;QACf,MAAM;QACN,KAAK;QACL,gCAAgC;QAChC,wBAAwB;QACxB,KAAK;QACL,wBAAwB;QACxB,IAAI;QACJ,yBAAyB;QACzB,wBAAwB;QACxB,KAAK;QACL,KAAK;QACL,KAAK;QACL,wBAAwB;QACxB,8BAA8B;QAC9B,mBAAmB;QACnB,cAAc;QACd,cAAc;QACd,cAAc;QACd,kCAAkC;QAClC,eAAe;QACf,sCAAsC;QACtC,aAAa;QACb,KAAK;QACL,4BAA4B;QAC5B,MAAM;QACN,yBAAyB;QACzB,KAAK;QACL,gBAAgB;QAChB,wBAAwB;QACxB,OAAO;QACP,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,MAAM;QACN,KAAK;QACL,IAAI;QACJ,KAAK;QACL,MAAM;QACN,UAAU;QACV,KAAK;QACL,qBAAqB;QACrB,IAAI;QACJ,+BAA+B;QAC/B,kCAAkC;QAClC,gCAAgC;QAChC,WAAW;QACX,uBAAuB;QACvB,cAAc;QACd,QAAQ;QACR,0BAA0B;QAC1B,wBAAwB;QACxB,OAAO;QACP,KAAK;QACL,yBAAyB;QACzB,SAAS;QACT,cAAc;QACd,wCAAwC;QACxC,uCAAuC;QACvC,UAAU;QACV,UAAU;QACV,KAAK;QACL,gCAAgC;QAChC,MAAM;QACN,KAAK;QACL,MAAM;QACN,wBAAwB;QACxB,aAAa;QACb,aAAa;QACb,sBAAsB;QACtB,uCAAuC;QACvC,MAAM;QACN,SAAS;QACT,WAAW;QACX,IAAI;QACJ,aAAa;QACb,4BAA4B;QAC5B,iBAAiB;QACjB,WAAW;QACX,aAAa;QACb,KAAK;QACL,KAAK;QACL,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,0BAA0B;QAC1B,OAAO;QACP,UAAU;QACV,KAAK;QACL,iBAAiB;QACjB,qBAAqB;QACrB,6BAA6B;QAC7B,SAAS;QACT,OAAO;QACP,KAAK;QACL,aAAa;QACb,qBAAqB;QACrB,cAAc;QACd,2BAA2B;QAC3B,iCAAiC;QACjC,MAAM;QACN,gCAAgC;QAChC,aAAa;QACb,eAAe;QACf,mBAAmB;QACnB,MAAM;QACN,kBAAkB;QAClB,uCAAuC;QACvC,GAAG;QACH,KAAK;QACL,2BAA2B;QAC3B,aAAa;QACb,IAAI;QACJ,IAAI;QACJ,wBAAwB;QACxB,OAAO;QACP,mBAAmB;QACnB,kBAAkB;QAClB,qBAAqB;QACrB,yBAAyB;QACzB,GAAG;QACH,OAAO;QACP,KAAK;QACL,wBAAwB;QACxB,KAAK;QACL,KAAK;QACL,6BAA6B;QAC7B,2BAA2B;QAC3B,gCAAgC;KAChC;IACD;QACC,IAAI;QACJ,4BAA4B;QAC5B,kCAAkC;QAClC,eAAe;QACf,IAAI;QACJ,cAAc;QACd,aAAa;QACb,iBAAiB;QACjB,mBAAmB;QACnB,KAAK;QACL,oBAAoB;QACpB,4BAA4B;QAC5B,mCAAmC;QACnC,KAAK;QACL,YAAY;QACZ,IAAI;QACJ,oBAAoB;QACpB,IAAI;QACJ,mBAAmB;QACnB,UAAU;QACV,cAAc;QACd,6BAA6B;QAC7B,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,kBAAkB;QAClB,IAAI;QACJ,KAAK;QACL,oBAAoB;QACpB,MAAM;QACN,GAAG;QACH,MAAM;QACN,IAAI;QACJ,MAAM;QACN,KAAK;QACL,KAAK;QACL,yCAAyC;QACzC,aAAa;QACb,mBAAmB;QACnB,KAAK;QACL,eAAe;QACf,KAAK;QACL,eAAe;QACf,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,sBAAsB;QACtB,KAAK;QACL,QAAQ;QACR,KAAK;QACL,KAAK;QACL,QAAQ;QACR,IAAI;QACJ,SAAS;QACT,kBAAkB;QAClB,yCAAyC;QACzC,GAAG;QACH,KAAK;QACL,MAAM;QACN,oBAAoB;QACpB,eAAe;QACf,KAAK;QACL,uBAAuB;QACvB,MAAM;QACN,KAAK;QACL,QAAQ;QACR,KAAK;QACL,SAAS;QACT,MAAM;QACN,QAAQ;QACR,iBAAiB;QACjB,mBAAmB;QACnB,UAAU;QACV,sBAAsB;QACtB,IAAI;QACJ,IAAI;QACJ,aAAa;QACb,KAAK;QACL,KAAK;QACL,cAAc;QACd,GAAG;QACH,KAAK;QACL,KAAK;QACL,KAAK;QACL,cAAc;QACd,MAAM;QACN,sBAAsB;QACtB,qBAAqB;QACrB,IAAI;QACJ,kBAAkB;QAClB,MAAM;QACN,OAAO;QACP,KAAK;QACL,aAAa;QACb,KAAK;QACL,aAAa;QACb,IAAI;QACJ,KAAK;QACL,KAAK;QACL,uBAAuB;QACvB,MAAM;QACN,MAAM;QACN,kBAAkB;QAClB,IAAI;QACJ,KAAK;QACL,MAAM;QACN,MAAM;QACN,IAAI;QACJ,OAAO;QACP,IAAI;QACJ,SAAS;QACT,IAAI;QACJ,KAAK;QACL,MAAM;QACN,kBAAkB;QAClB,MAAM;QACN,SAAS;QACT,oBAAoB;QACpB,MAAM;QACN,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,6BAA6B;QAC7B,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,MAAM;QACN,KAAK;QACL,4BAA4B;QAC5B,kBAAkB;QAClB,KAAK;QACL,aAAa;QACb,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,IAAI;QACJ,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,eAAe;QACf,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,gBAAgB;QAChB,MAAM;QACN,eAAe;QACf,qBAAqB;QACrB,SAAS;QACT,MAAM;QACN,KAAK;QACL,MAAM;QACN,kBAAkB;QAClB,iBAAiB;QACjB,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,YAAY;QACZ,KAAK;QACL,MAAM;QACN,MAAM;QACN,KAAK;QACL,IAAI;QACJ,aAAa;QACb,MAAM;QACN,kBAAkB;QAClB,KAAK;QACL,MAAM;QACN,IAAI;QACJ,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,YAAY;QACZ,MAAM;QACN,KAAK;QACL,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,MAAM;QACN,MAAM;QACN,IAAI;QACJ,mBAAmB;QACnB,KAAK;QACL,SAAS;QACT,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,UAAU;QACV,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,MAAM;QACN,iBAAiB;QACjB,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,KAAK;QACL,gBAAgB;QAChB,QAAQ;QACR,8BAA8B;QAC9B,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,SAAS;QACT,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACN;IACD;QACC,MAAM;QACN,iBAAiB;QACjB,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,KAAK;QACL,eAAe;QACf,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,QAAQ;QACR,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK;QACL,QAAQ;QACR,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,IAAI;QACJ,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,IAAI;QACJ,KAAK;QACL,KAAK;QACL,aAAa;QACb,WAAW;QACX,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,mBAAmB;QACnB,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,MAAM;QACN,KAAK;QACL,YAAY;QACZ,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,MAAM;QACN,MA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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/decode.d.ts b/packages/transport/vendor/lib/WABinary/decode.d.ts new file mode 100644 index 0000000..475a181 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/decode.d.ts @@ -0,0 +1,7 @@ +import type { BinaryNode, BinaryNodeCodingOptions } from './types.js'; +export declare const decompressingIfRequired: (buffer: Buffer) => Promise>; +export declare const decodeDecompressedBinaryNode: (buffer: Buffer, opts: Pick, indexRef?: { + index: number; +}) => BinaryNode; +export declare const decodeBinaryNode: (buff: Buffer) => Promise; +//# sourceMappingURL=decode.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/decode.d.ts.map b/packages/transport/vendor/lib/WABinary/decode.d.ts.map new file mode 100644 index 0000000..46dc4ff --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/decode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/WABinary/decode.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAIlE,eAAO,MAAM,uBAAuB,GAAU,QAAQ,MAAM,qCAS3D,CAAA;AAED,eAAO,MAAM,4BAA4B,GACxC,QAAQ,MAAM,EACd,MAAM,IAAI,CAAC,uBAAuB,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,MAAM,CAAC,EACzF,WAAU;IAAE,KAAK,EAAE,MAAM,CAAA;CAAiB,KACxC,UAuRF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,UAAU,CAGvE,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/decode.js b/packages/transport/vendor/lib/WABinary/decode.js new file mode 100644 index 0000000..02ec6bd --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/decode.js @@ -0,0 +1,262 @@ +import { promisify } from 'util'; +import { inflate } from 'zlib'; +import * as constants from './constants.js'; +import { jidEncode, WAJIDDomains } from './jid-utils.js'; +const inflatePromise = promisify(inflate); +export const decompressingIfRequired = async (buffer) => { + if (2 & buffer.readUInt8()) { + buffer = await inflatePromise(buffer.slice(1)); + } + else { + // nodes with no compression have a 0x00 prefix, we remove that + buffer = buffer.slice(1); + } + return buffer; +}; +export const decodeDecompressedBinaryNode = (buffer, opts, indexRef = { index: 0 }) => { + const { DOUBLE_BYTE_TOKENS, SINGLE_BYTE_TOKENS, TAGS } = opts; + const checkEOS = (length) => { + if (indexRef.index + length > buffer.length) { + throw new Error('end of stream'); + } + }; + const next = () => { + const value = buffer[indexRef.index]; + indexRef.index += 1; + return value; + }; + const readByte = () => { + checkEOS(1); + return next(); + }; + const readBytes = (n) => { + checkEOS(n); + const value = buffer.slice(indexRef.index, indexRef.index + n); + indexRef.index += n; + return value; + }; + const readStringFromChars = (length) => { + return readBytes(length).toString('utf-8'); + }; + const readInt = (n, littleEndian = false) => { + checkEOS(n); + let val = 0; + for (let i = 0; i < n; i++) { + const shift = littleEndian ? i : n - 1 - i; + val |= next() << (shift * 8); + } + return val; + }; + const readInt20 = () => { + checkEOS(3); + return ((next() & 15) << 16) + (next() << 8) + next(); + }; + const unpackHex = (value) => { + if (value >= 0 && value < 16) { + return value < 10 ? '0'.charCodeAt(0) + value : 'A'.charCodeAt(0) + value - 10; + } + throw new Error('invalid hex: ' + value); + }; + const unpackNibble = (value) => { + if (value >= 0 && value <= 9) { + return '0'.charCodeAt(0) + value; + } + switch (value) { + case 10: + return '-'.charCodeAt(0); + case 11: + return '.'.charCodeAt(0); + case 15: + return '\0'.charCodeAt(0); + default: + throw new Error('invalid nibble: ' + value); + } + }; + const unpackByte = (tag, value) => { + if (tag === TAGS.NIBBLE_8) { + return unpackNibble(value); + } + else if (tag === TAGS.HEX_8) { + return unpackHex(value); + } + else { + throw new Error('unknown tag: ' + tag); + } + }; + const readPacked8 = (tag) => { + const startByte = readByte(); + let value = ''; + for (let i = 0; i < (startByte & 127); i++) { + const curByte = readByte(); + value += String.fromCharCode(unpackByte(tag, (curByte & 0xf0) >> 4)); + value += String.fromCharCode(unpackByte(tag, curByte & 0x0f)); + } + if (startByte >> 7 !== 0) { + value = value.slice(0, -1); + } + return value; + }; + const isListTag = (tag) => { + return tag === TAGS.LIST_EMPTY || tag === TAGS.LIST_8 || tag === TAGS.LIST_16; + }; + const readListSize = (tag) => { + switch (tag) { + case TAGS.LIST_EMPTY: + return 0; + case TAGS.LIST_8: + return readByte(); + case TAGS.LIST_16: + return readInt(2); + default: + throw new Error('invalid tag for list size: ' + tag); + } + }; + const readJidPair = () => { + const i = readString(readByte()); + const j = readString(readByte()); + if (j) { + return (i || '') + '@' + j; + } + throw new Error('invalid jid pair: ' + i + ', ' + j); + }; + const readAdJid = () => { + const rawDomainType = readByte(); + const domainType = Number(rawDomainType); + const device = readByte(); + const user = readString(readByte()); + let server = 's.whatsapp.net'; // default whatsapp server + if (domainType === WAJIDDomains.LID) { + server = 'lid'; + } + else if (domainType === WAJIDDomains.HOSTED) { + server = 'hosted'; + } + else if (domainType === WAJIDDomains.HOSTED_LID) { + server = 'hosted.lid'; + } + return jidEncode(user, server, device); + }; + const readFbJid = () => { + const user = readString(readByte()); + const device = readInt(2); + const server = readString(readByte()); + return `${user}:${device}@${server}`; + }; + const readInteropJid = () => { + const user = readString(readByte()); + const device = readInt(2); + const integrator = readInt(2); + let server = 'interop'; + const beforeServer = indexRef.index; + try { + server = readString(readByte()); + } + catch (err) { + indexRef.index = beforeServer; + } + return `${integrator}-${user}:${device}@${server}`; + }; + const readString = (tag) => { + if (tag >= 1 && tag < SINGLE_BYTE_TOKENS.length) { + return SINGLE_BYTE_TOKENS[tag] || ''; + } + switch (tag) { + case TAGS.DICTIONARY_0: + case TAGS.DICTIONARY_1: + case TAGS.DICTIONARY_2: + case TAGS.DICTIONARY_3: + return getTokenDouble(tag - TAGS.DICTIONARY_0, readByte()); + case TAGS.LIST_EMPTY: + return ''; + case TAGS.BINARY_8: + return readStringFromChars(readByte()); + case TAGS.BINARY_20: + return readStringFromChars(readInt20()); + case TAGS.BINARY_32: + return readStringFromChars(readInt(4)); + case TAGS.JID_PAIR: + return readJidPair(); + case TAGS.FB_JID: + return readFbJid(); + case TAGS.INTEROP_JID: + return readInteropJid(); + case TAGS.AD_JID: + return readAdJid(); + case TAGS.HEX_8: + case TAGS.NIBBLE_8: + return readPacked8(tag); + default: + throw new Error('invalid string with tag: ' + tag); + } + }; + const readList = (tag) => { + const items = []; + const size = readListSize(tag); + for (let i = 0; i < size; i++) { + items.push(decodeDecompressedBinaryNode(buffer, opts, indexRef)); + } + return items; + }; + const getTokenDouble = (index1, index2) => { + const dict = DOUBLE_BYTE_TOKENS[index1]; + if (!dict) { + throw new Error(`Invalid double token dict (${index1})`); + } + const value = dict[index2]; + if (typeof value === 'undefined') { + throw new Error(`Invalid double token (${index2})`); + } + return value; + }; + const listSize = readListSize(readByte()); + const header = readString(readByte()); + if (!listSize || !header.length) { + throw new Error('invalid node'); + } + const attrs = {}; + let data; + if (listSize === 0 || !header) { + throw new Error('invalid node'); + } + // read the attributes in + const attributesLength = (listSize - 1) >> 1; + for (let i = 0; i < attributesLength; i++) { + const key = readString(readByte()); + const value = readString(readByte()); + attrs[key] = value; + } + if (listSize % 2 === 0) { + const tag = readByte(); + if (isListTag(tag)) { + data = readList(tag); + } + else { + let decoded; + switch (tag) { + case TAGS.BINARY_8: + decoded = readBytes(readByte()); + break; + case TAGS.BINARY_20: + decoded = readBytes(readInt20()); + break; + case TAGS.BINARY_32: + decoded = readBytes(readInt(4)); + break; + default: + decoded = readString(tag); + break; + } + data = decoded; + } + } + return { + tag: header, + attrs, + content: data + }; +}; +export const decodeBinaryNode = async (buff) => { + const decompBuff = await decompressingIfRequired(buff); + return decodeDecompressedBinaryNode(decompBuff, constants); +}; +//# sourceMappingURL=decode.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/decode.js.map b/packages/transport/vendor/lib/WABinary/decode.js.map new file mode 100644 index 0000000..f968283 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/decode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/WABinary/decode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/encode.d.ts b/packages/transport/vendor/lib/WABinary/encode.d.ts new file mode 100644 index 0000000..e28a238 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/encode.d.ts @@ -0,0 +1,3 @@ +import type { BinaryNode, BinaryNodeCodingOptions } from './types.js'; +export declare const encodeBinaryNode: (node: BinaryNode, opts?: Pick, buffer?: number[]) => Buffer; +//# sourceMappingURL=encode.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/encode.d.ts.map b/packages/transport/vendor/lib/WABinary/encode.d.ts.map new file mode 100644 index 0000000..c286672 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/encode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/WABinary/encode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAElE,eAAO,MAAM,gBAAgB,GAC5B,MAAM,UAAU,EAChB,OAAM,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,WAAW,CAAa,EACrE,SAAQ,MAAM,EAAQ,KACpB,MAGF,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/encode.js b/packages/transport/vendor/lib/WABinary/encode.js new file mode 100644 index 0000000..41aef1a --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/encode.js @@ -0,0 +1,220 @@ +import * as constants from './constants.js'; +import { jidDecode } from './jid-utils.js'; +export const encodeBinaryNode = (node, opts = constants, buffer = [0]) => { + const encoded = encodeBinaryNodeInner(node, opts, buffer); + return Buffer.from(encoded); +}; +const encodeBinaryNodeInner = ({ tag, attrs, content }, opts, buffer) => { + const { TAGS, TOKEN_MAP } = opts; + const pushByte = (value) => buffer.push(value & 0xff); + const pushInt = (value, n, littleEndian = false) => { + for (let i = 0; i < n; i++) { + const curShift = littleEndian ? i : n - 1 - i; + buffer.push((value >> (curShift * 8)) & 0xff); + } + }; + const pushBytes = (bytes) => { + for (const b of bytes) { + buffer.push(b); + } + }; + const pushInt16 = (value) => { + pushBytes([(value >> 8) & 0xff, value & 0xff]); + }; + const pushInt20 = (value) => pushBytes([(value >> 16) & 0x0f, (value >> 8) & 0xff, value & 0xff]); + const writeByteLength = (length) => { + if (length >= 4294967296) { + throw new Error('string too large to encode: ' + length); + } + if (length >= 1 << 20) { + pushByte(TAGS.BINARY_32); + pushInt(length, 4); // 32 bit integer + } + else if (length >= 256) { + pushByte(TAGS.BINARY_20); + pushInt20(length); + } + else { + pushByte(TAGS.BINARY_8); + pushByte(length); + } + }; + const writeStringRaw = (str) => { + const bytes = Buffer.from(str, 'utf-8'); + writeByteLength(bytes.length); + pushBytes(bytes); + }; + const writeJid = ({ domainType, device, user, server }) => { + if (typeof device !== 'undefined') { + pushByte(TAGS.AD_JID); + pushByte(domainType || 0); + pushByte(device || 0); + writeString(user); + } + else { + pushByte(TAGS.JID_PAIR); + if (user.length) { + writeString(user); + } + else { + pushByte(TAGS.LIST_EMPTY); + } + writeString(server); + } + }; + const packNibble = (char) => { + switch (char) { + case '-': + return 10; + case '.': + return 11; + case '\0': + return 15; + default: + if (char >= '0' && char <= '9') { + return char.charCodeAt(0) - '0'.charCodeAt(0); + } + throw new Error(`invalid byte for nibble "${char}"`); + } + }; + const packHex = (char) => { + if (char >= '0' && char <= '9') { + return char.charCodeAt(0) - '0'.charCodeAt(0); + } + if (char >= 'A' && char <= 'F') { + return 10 + char.charCodeAt(0) - 'A'.charCodeAt(0); + } + if (char >= 'a' && char <= 'f') { + return 10 + char.charCodeAt(0) - 'a'.charCodeAt(0); + } + if (char === '\0') { + return 15; + } + throw new Error(`Invalid hex char "${char}"`); + }; + const writePackedBytes = (str, type) => { + if (str.length > TAGS.PACKED_MAX) { + throw new Error('Too many bytes to pack'); + } + pushByte(type === 'nibble' ? TAGS.NIBBLE_8 : TAGS.HEX_8); + let roundedLength = Math.ceil(str.length / 2.0); + if (str.length % 2 !== 0) { + roundedLength |= 128; + } + pushByte(roundedLength); + const packFunction = type === 'nibble' ? packNibble : packHex; + const packBytePair = (v1, v2) => { + const result = (packFunction(v1) << 4) | packFunction(v2); + return result; + }; + const strLengthHalf = Math.floor(str.length / 2); + for (let i = 0; i < strLengthHalf; i++) { + pushByte(packBytePair(str[2 * i], str[2 * i + 1])); + } + if (str.length % 2 !== 0) { + pushByte(packBytePair(str[str.length - 1], '\x00')); + } + }; + const isNibble = (str) => { + if (!str || str.length > TAGS.PACKED_MAX) { + return false; + } + for (const char of str) { + const isInNibbleRange = char >= '0' && char <= '9'; + if (!isInNibbleRange && char !== '-' && char !== '.') { + return false; + } + } + return true; + }; + const isHex = (str) => { + if (!str || str.length > TAGS.PACKED_MAX) { + return false; + } + for (const char of str) { + const isInNibbleRange = char >= '0' && char <= '9'; + if (!isInNibbleRange && !(char >= 'A' && char <= 'F')) { + return false; + } + } + return true; + }; + const writeString = (str) => { + if (str === undefined || str === null) { + pushByte(TAGS.LIST_EMPTY); + return; + } + if (str === '') { + writeStringRaw(str); + return; + } + const tokenIndex = TOKEN_MAP[str]; + if (tokenIndex) { + if (typeof tokenIndex.dict === 'number') { + pushByte(TAGS.DICTIONARY_0 + tokenIndex.dict); + } + pushByte(tokenIndex.index); + } + else if (isNibble(str)) { + writePackedBytes(str, 'nibble'); + } + else if (isHex(str)) { + writePackedBytes(str, 'hex'); + } + else { + const decodedJid = jidDecode(str); + if (decodedJid) { + writeJid(decodedJid); + } + else { + writeStringRaw(str); + } + } + }; + const writeListStart = (listSize) => { + if (listSize === 0) { + pushByte(TAGS.LIST_EMPTY); + } + else if (listSize < 256) { + pushBytes([TAGS.LIST_8, listSize]); + } + else { + pushByte(TAGS.LIST_16); + pushInt16(listSize); + } + }; + if (!tag) { + throw new Error('Invalid node: tag cannot be undefined'); + } + const validAttributes = Object.keys(attrs || {}).filter(k => typeof attrs[k] !== 'undefined' && attrs[k] !== null); + writeListStart(2 * validAttributes.length + 1 + (typeof content !== 'undefined' ? 1 : 0)); + writeString(tag); + for (const key of validAttributes) { + if (typeof attrs[key] === 'string') { + writeString(key); + writeString(attrs[key]); + } + } + if (typeof content === 'string') { + writeString(content); + } + else if (Buffer.isBuffer(content) || content instanceof Uint8Array) { + writeByteLength(content.length); + pushBytes(content); + } + else if (Array.isArray(content)) { + const validContent = content.filter(item => item && (item.tag || Buffer.isBuffer(item) || item instanceof Uint8Array || typeof item === 'string')); + writeListStart(validContent.length); + for (const item of validContent) { + encodeBinaryNodeInner(item, opts, buffer); + } + } + else if (typeof content === 'undefined') { + // do nothing + } + else { + throw new Error(`invalid children for header "${tag}": ${content} (${typeof content})`); + } + return buffer; +}; +//# sourceMappingURL=encode.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/encode.js.map b/packages/transport/vendor/lib/WABinary/encode.js.map new file mode 100644 index 0000000..839f8e2 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/encode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/WABinary/encode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/generic-utils.d.ts b/packages/transport/vendor/lib/WABinary/generic-utils.d.ts new file mode 100644 index 0000000..e9770b8 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/generic-utils.d.ts @@ -0,0 +1,15 @@ +import { proto } from '../../WAProto/index.js'; +import { type BinaryNode } from './types.js'; +export declare const getBinaryNodeChildren: (node: BinaryNode | undefined, childTag: string) => BinaryNode[]; +export declare const getBinaryNodeChild: (node: BinaryNode | undefined, childTag: string) => BinaryNode | undefined; +export declare const getAllBinaryNodeChildren: ({ content }: BinaryNode) => BinaryNode[]; +export declare const getBinaryNodeChildBuffer: (node: BinaryNode | undefined, childTag: string) => Uint8Array | Buffer | undefined; +export declare const getBinaryNodeChildString: (node: BinaryNode | undefined, childTag: string) => string | undefined; +export declare const getBinaryNodeChildUInt: (node: BinaryNode, childTag: string, length: number) => number | undefined; +export declare const assertNodeErrorFree: (node: BinaryNode) => void; +export declare const reduceBinaryNodeToDictionary: (node: BinaryNode, tag: string) => { + [_: string]: string; +}; +export declare const getBinaryNodeMessages: ({ content }: BinaryNode) => proto.WebMessageInfo[]; +export declare function binaryNodeToString(node: BinaryNode | BinaryNode['content'], i?: number): string; +//# sourceMappingURL=generic-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/generic-utils.d.ts.map b/packages/transport/vendor/lib/WABinary/generic-utils.d.ts.map new file mode 100644 index 0000000..db842c4 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/generic-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"generic-utils.d.ts","sourceRoot":"","sources":["../../src/WABinary/generic-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAMzC,eAAO,MAAM,qBAAqB,GAAI,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,MAAM,iBAoBnF,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,MAAM,2BAEhF,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,aAAa,UAAU,iBAM/D,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,MAAM,sEAKtF,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,MAAM,uBAOtF,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,MAAM,UAAU,EAAE,UAAU,MAAM,EAAE,QAAQ,MAAM,uBAKxF,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,MAAM,UAAU,SAKnD,CAAA;AAED,eAAO,MAAM,4BAA4B,GAAI,MAAM,UAAU,EAAE,KAAK,MAAM;;CAezE,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,aAAa,UAAU,2BAW5D,CAAA;AAaD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,SAAI,GAAG,MAAM,CA2B1F"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/generic-utils.js b/packages/transport/vendor/lib/WABinary/generic-utils.js new file mode 100644 index 0000000..96ef256 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/generic-utils.js @@ -0,0 +1,113 @@ +import { Boom } from '@hapi/boom'; +import { proto } from '../../WAProto/index.js'; +import {} from './types.js'; +// some extra useful utilities +const indexCache = new WeakMap(); +export const getBinaryNodeChildren = (node, childTag) => { + if (!node || !Array.isArray(node.content)) + return []; + let index = indexCache.get(node); + // Build the index once per node + if (!index) { + index = new Map(); + for (const child of node.content) { + let arr = index.get(child.tag); + if (!arr) + index.set(child.tag, (arr = [])); + arr.push(child); + } + indexCache.set(node, index); + } + // Return first matching child + return index.get(childTag) || []; +}; +export const getBinaryNodeChild = (node, childTag) => { + return getBinaryNodeChildren(node, childTag)[0]; +}; +export const getAllBinaryNodeChildren = ({ content }) => { + if (Array.isArray(content)) { + return content; + } + return []; +}; +export const getBinaryNodeChildBuffer = (node, childTag) => { + const child = getBinaryNodeChild(node, childTag)?.content; + if (Buffer.isBuffer(child) || child instanceof Uint8Array) { + return child; + } +}; +export const getBinaryNodeChildString = (node, childTag) => { + const child = getBinaryNodeChild(node, childTag)?.content; + if (Buffer.isBuffer(child) || child instanceof Uint8Array) { + return Buffer.from(child).toString('utf-8'); + } + else if (typeof child === 'string') { + return child; + } +}; +export const getBinaryNodeChildUInt = (node, childTag, length) => { + const buff = getBinaryNodeChildBuffer(node, childTag); + if (buff) { + return bufferToUInt(buff, length); + } +}; +export const assertNodeErrorFree = (node) => { + const errNode = getBinaryNodeChild(node, 'error'); + if (errNode) { + throw new Boom(errNode.attrs.text || 'Unknown error', { data: +errNode.attrs.code }); + } +}; +export const reduceBinaryNodeToDictionary = (node, tag) => { + const nodes = getBinaryNodeChildren(node, tag); + const dict = nodes.reduce((dict, { attrs }) => { + if (typeof attrs.name === 'string') { + dict[attrs.name] = attrs.value || attrs.config_value; + } + else { + dict[attrs.config_code] = attrs.value || attrs.config_value; + } + return dict; + }, {}); + return dict; +}; +export const getBinaryNodeMessages = ({ content }) => { + const msgs = []; + if (Array.isArray(content)) { + for (const item of content) { + if (item.tag === 'message') { + msgs.push(proto.WebMessageInfo.decode(item.content).toJSON()); + } + } + } + return msgs; +}; +function bufferToUInt(e, t) { + let a = 0; + for (let i = 0; i < t; i++) { + a = 256 * a + e[i]; + } + return a; +} +const tabs = (n) => '\t'.repeat(n); +export function binaryNodeToString(node, i = 0) { + if (!node) { + return node; + } + if (typeof node === 'string') { + return tabs(i) + node; + } + if (node instanceof Uint8Array) { + return tabs(i) + Buffer.from(node).toString('hex'); + } + if (Array.isArray(node)) { + return node.map(x => tabs(i + 1) + binaryNodeToString(x, i + 1)).join('\n'); + } + const children = binaryNodeToString(node.content, i + 1); + const tag = `<${node.tag} ${Object.entries(node.attrs || {}) + .filter(([, v]) => v !== undefined) + .map(([k, v]) => `${k}='${v}'`) + .join(' ')}`; + const content = children ? `>\n${children}\n${tabs(i)}` : '/>'; + return tag + content; +} +//# sourceMappingURL=generic-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/generic-utils.js.map b/packages/transport/vendor/lib/WABinary/generic-utils.js.map new file mode 100644 index 0000000..952f41a --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/generic-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"generic-utils.js","sourceRoot":"","sources":["../../src/WABinary/generic-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/index.d.ts b/packages/transport/vendor/lib/WABinary/index.d.ts new file mode 100644 index 0000000..54726ef --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/index.d.ts @@ -0,0 +1,6 @@ +export * from './encode.js'; +export * from './decode.js'; +export * from './generic-utils.js'; +export * from './jid-utils.js'; +export * from './types.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/index.d.ts.map b/packages/transport/vendor/lib/WABinary/index.d.ts.map new file mode 100644 index 0000000..c1d9190 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/WABinary/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/index.js b/packages/transport/vendor/lib/WABinary/index.js new file mode 100644 index 0000000..215f207 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/index.js @@ -0,0 +1,6 @@ +export * from './encode.js'; +export * from './decode.js'; +export * from './generic-utils.js'; +export * from './jid-utils.js'; +export * from './types.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/index.js.map b/packages/transport/vendor/lib/WABinary/index.js.map new file mode 100644 index 0000000..e01f2d6 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/WABinary/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/jid-utils.d.ts b/packages/transport/vendor/lib/WABinary/jid-utils.d.ts new file mode 100644 index 0000000..eefcb06 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/jid-utils.d.ts @@ -0,0 +1,48 @@ +export declare const S_WHATSAPP_NET = "@s.whatsapp.net"; +export declare const OFFICIAL_BIZ_JID = "16505361212@c.us"; +export declare const SERVER_JID = "server@c.us"; +export declare const PSA_WID = "0@c.us"; +export declare const STORIES_JID = "status@broadcast"; +export declare const META_AI_JID = "13135550002@c.us"; +export type JidServer = 'c.us' | 'g.us' | 'broadcast' | 's.whatsapp.net' | 'call' | 'lid' | 'newsletter' | 'bot' | 'hosted' | 'hosted.lid'; +export declare enum WAJIDDomains { + WHATSAPP = 0, + LID = 1, + HOSTED = 128, + HOSTED_LID = 129 +} +export type JidWithDevice = { + user: string; + device?: number; +}; +export type FullJid = JidWithDevice & { + server: JidServer; + domainType?: number; +}; +export declare const getServerFromDomainType: (initialServer: string, domainType?: WAJIDDomains) => JidServer; +export declare const jidEncode: (user: string | number | null, server: JidServer, device?: number, agent?: number) => string; +export declare const jidDecode: (jid: string | undefined) => FullJid | undefined; +/** is the jid a user */ +export declare const areJidsSameUser: (jid1: string | undefined, jid2: string | undefined) => boolean; +/** is the jid Meta AI */ +export declare const isJidMetaAI: (jid: string | undefined) => boolean | undefined; +/** is the jid a PN user */ +export declare const isPnUser: (jid: string | undefined) => boolean | undefined; +/** is the jid a LID */ +export declare const isLidUser: (jid: string | undefined) => boolean | undefined; +/** is the jid a broadcast */ +export declare const isJidBroadcast: (jid: string | undefined) => boolean | undefined; +/** is the jid a group */ +export declare const isJidGroup: (jid: string | undefined) => boolean | undefined; +/** is the jid the status broadcast */ +export declare const isJidStatusBroadcast: (jid: string) => jid is "status@broadcast"; +/** is the jid a newsletter */ +export declare const isJidNewsletter: (jid: string | undefined) => boolean | undefined; +/** is the jid a hosted PN */ +export declare const isHostedPnUser: (jid: string | undefined) => boolean | undefined; +/** is the jid a hosted LID */ +export declare const isHostedLidUser: (jid: string | undefined) => boolean | undefined; +export declare const isJidBot: (jid: string | undefined) => boolean | "" | undefined; +export declare const jidNormalizedUser: (jid: string | undefined) => string; +export declare const transferDevice: (fromJid: string, toJid: string) => string; +//# sourceMappingURL=jid-utils.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/jid-utils.d.ts.map b/packages/transport/vendor/lib/WABinary/jid-utils.d.ts.map new file mode 100644 index 0000000..48e4fac --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/jid-utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"jid-utils.d.ts","sourceRoot":"","sources":["../../src/WABinary/jid-utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,oBAAoB,CAAA;AAC/C,eAAO,MAAM,gBAAgB,qBAAqB,CAAA;AAClD,eAAO,MAAM,UAAU,gBAAgB,CAAA;AACvC,eAAO,MAAM,OAAO,WAAW,CAAA;AAC/B,eAAO,MAAM,WAAW,qBAAqB,CAAA;AAC7C,eAAO,MAAM,WAAW,qBAAqB,CAAA;AAE7C,MAAM,MAAM,SAAS,GAClB,MAAM,GACN,MAAM,GACN,WAAW,GACX,gBAAgB,GAChB,MAAM,GACN,KAAK,GACL,YAAY,GACZ,KAAK,GACL,QAAQ,GACR,YAAY,CAAA;AAEf,oBAAY,YAAY;IACvB,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,MAAM;IACZ,UAAU,MAAM;CAChB;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG;IACrC,MAAM,EAAE,SAAS,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,eAAe,MAAM,EAAE,aAAa,YAAY,KAAG,SAY1F,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,QAAQ,SAAS,EAAE,SAAS,MAAM,EAAE,QAAQ,MAAM,WAEzG,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,OAAO,GAAG,SA8B7D,CAAA;AAED,wBAAwB;AACxB,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,YAClC,CAAA;AAChD,yBAAyB;AACzB,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,GAAG,SAAS,wBAA0B,CAAA;AAC7E,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,GAAG,SAAS,wBAAqC,CAAA;AACrF,uBAAuB;AACvB,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,GAAG,SAAS,wBAA0B,CAAA;AAC3E,6BAA6B;AAC7B,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,GAAG,SAAS,wBAAgC,CAAA;AACtF,yBAAyB;AACzB,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,GAAG,SAAS,wBAA2B,CAAA;AAC7E,sCAAsC;AACtC,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,8BAA+B,CAAA;AAC/E,8BAA8B;AAC9B,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,GAAG,SAAS,wBAAiC,CAAA;AACxF,6BAA6B;AAC7B,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,GAAG,SAAS,wBAA6B,CAAA;AACnF,8BAA8B;AAC9B,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,GAAG,SAAS,wBAAiC,CAAA;AAIxF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,GAAG,SAAS,6BAAuE,CAAA;AAEvH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,GAAG,SAAS,WAQxD,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,WAK5D,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/jid-utils.js b/packages/transport/vendor/lib/WABinary/jid-utils.js new file mode 100644 index 0000000..ff6b871 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/jid-utils.js @@ -0,0 +1,96 @@ +export const S_WHATSAPP_NET = '@s.whatsapp.net'; +export const OFFICIAL_BIZ_JID = '16505361212@c.us'; +export const SERVER_JID = 'server@c.us'; +export const PSA_WID = '0@c.us'; +export const STORIES_JID = 'status@broadcast'; +export const META_AI_JID = '13135550002@c.us'; +export var WAJIDDomains; +(function (WAJIDDomains) { + WAJIDDomains[WAJIDDomains["WHATSAPP"] = 0] = "WHATSAPP"; + WAJIDDomains[WAJIDDomains["LID"] = 1] = "LID"; + WAJIDDomains[WAJIDDomains["HOSTED"] = 128] = "HOSTED"; + WAJIDDomains[WAJIDDomains["HOSTED_LID"] = 129] = "HOSTED_LID"; +})(WAJIDDomains || (WAJIDDomains = {})); +export const getServerFromDomainType = (initialServer, domainType) => { + switch (domainType) { + case WAJIDDomains.LID: + return 'lid'; + case WAJIDDomains.HOSTED: + return 'hosted'; + case WAJIDDomains.HOSTED_LID: + return 'hosted.lid'; + case WAJIDDomains.WHATSAPP: + default: + return initialServer; + } +}; +export const jidEncode = (user, server, device, agent) => { + return `${user || ''}${!!agent ? `_${agent}` : ''}${!!device ? `:${device}` : ''}@${server}`; +}; +export const jidDecode = (jid) => { + // todo: investigate how to implement hosted ids in this case + const sepIdx = typeof jid === 'string' ? jid.indexOf('@') : -1; + if (sepIdx < 0) { + return undefined; + } + const server = jid.slice(sepIdx + 1); + const userCombined = jid.slice(0, sepIdx); + const [userAgent, device] = userCombined.split(':'); + const [user, agent] = userAgent.split('_'); + let domainType = WAJIDDomains.WHATSAPP; + if (server === 'lid') { + domainType = WAJIDDomains.LID; + } + else if (server === 'hosted') { + domainType = WAJIDDomains.HOSTED; + } + else if (server === 'hosted.lid') { + domainType = WAJIDDomains.HOSTED_LID; + } + else if (agent) { + domainType = parseInt(agent); + } + return { + server: server, + user: user, + domainType, + device: device ? +device : undefined + }; +}; +/** is the jid a user */ +export const areJidsSameUser = (jid1, jid2) => jidDecode(jid1)?.user === jidDecode(jid2)?.user; +/** is the jid Meta AI */ +export const isJidMetaAI = (jid) => jid?.endsWith('@bot'); +/** is the jid a PN user */ +export const isPnUser = (jid) => jid?.endsWith('@s.whatsapp.net'); +/** is the jid a LID */ +export const isLidUser = (jid) => jid?.endsWith('@lid'); +/** is the jid a broadcast */ +export const isJidBroadcast = (jid) => jid?.endsWith('@broadcast'); +/** is the jid a group */ +export const isJidGroup = (jid) => jid?.endsWith('@g.us'); +/** is the jid the status broadcast */ +export const isJidStatusBroadcast = (jid) => jid === 'status@broadcast'; +/** is the jid a newsletter */ +export const isJidNewsletter = (jid) => jid?.endsWith('@newsletter'); +/** is the jid a hosted PN */ +export const isHostedPnUser = (jid) => jid?.endsWith('@hosted'); +/** is the jid a hosted LID */ +export const isHostedLidUser = (jid) => jid?.endsWith('@hosted.lid'); +const botRegexp = /^1313555\d{4}$|^131655500\d{2}$/; +export const isJidBot = (jid) => jid && botRegexp.test(jid.split('@')[0]) && jid.endsWith('@c.us'); +export const jidNormalizedUser = (jid) => { + const result = jidDecode(jid); + if (!result) { + return ''; + } + const { user, server } = result; + return jidEncode(user, server === 'c.us' ? 's.whatsapp.net' : server); +}; +export const transferDevice = (fromJid, toJid) => { + const fromDecoded = jidDecode(fromJid); + const deviceId = fromDecoded?.device || 0; + const { server, user } = jidDecode(toJid); + return jidEncode(user, server, deviceId); +}; +//# sourceMappingURL=jid-utils.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/jid-utils.js.map b/packages/transport/vendor/lib/WABinary/jid-utils.js.map new file mode 100644 index 0000000..0a124e0 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/jid-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jid-utils.js","sourceRoot":"","sources":["../../src/WABinary/jid-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/types.d.ts b/packages/transport/vendor/lib/WABinary/types.d.ts new file mode 100644 index 0000000..a913916 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/types.d.ts @@ -0,0 +1,19 @@ +import * as constants from './constants.js'; +/** + * the binary node WA uses internally for communication + * + * this is manipulated soley as an object and it does not have any functions. + * This is done for easy serialization, to prevent running into issues with prototypes & + * to maintain functional code structure + * */ +export type BinaryNode = { + tag: string; + attrs: { + [key: string]: string; + }; + content?: BinaryNode[] | string | Uint8Array; +}; +export type BinaryNodeAttributes = BinaryNode['attrs']; +export type BinaryNodeData = BinaryNode['content']; +export type BinaryNodeCodingOptions = typeof constants; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/types.d.ts.map b/packages/transport/vendor/lib/WABinary/types.d.ts.map new file mode 100644 index 0000000..d7c3210 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/WABinary/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC;;;;;;KAMK;AACL,MAAM,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAChC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,UAAU,CAAA;CAC5C,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AACtD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAElD,MAAM,MAAM,uBAAuB,GAAG,OAAO,SAAS,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/types.js b/packages/transport/vendor/lib/WABinary/types.js new file mode 100644 index 0000000..7bb6a46 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/types.js @@ -0,0 +1,2 @@ +import * as constants from './constants.js'; +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WABinary/types.js.map b/packages/transport/vendor/lib/WABinary/types.js.map new file mode 100644 index 0000000..088a608 --- /dev/null +++ b/packages/transport/vendor/lib/WABinary/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/WABinary/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/BinaryInfo.d.ts b/packages/transport/vendor/lib/WAM/BinaryInfo.d.ts new file mode 100644 index 0000000..bb6ee2c --- /dev/null +++ b/packages/transport/vendor/lib/WAM/BinaryInfo.d.ts @@ -0,0 +1,9 @@ +import type { EventInputType } from './constants.js'; +export declare class BinaryInfo { + protocolVersion: number; + sequence: number; + events: EventInputType[]; + buffer: Buffer[]; + constructor(options?: Partial); +} +//# sourceMappingURL=BinaryInfo.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/BinaryInfo.d.ts.map b/packages/transport/vendor/lib/WAM/BinaryInfo.d.ts.map new file mode 100644 index 0000000..ca39886 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/BinaryInfo.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BinaryInfo.d.ts","sourceRoot":"","sources":["../../src/WAM/BinaryInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,qBAAa,UAAU;IACtB,eAAe,SAAI;IACnB,QAAQ,SAAI;IACZ,MAAM,EAAS,cAAc,EAAE,CAAA;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAK;gBAET,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM;CAG7C"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/BinaryInfo.js b/packages/transport/vendor/lib/WAM/BinaryInfo.js new file mode 100644 index 0000000..e1e419a --- /dev/null +++ b/packages/transport/vendor/lib/WAM/BinaryInfo.js @@ -0,0 +1,10 @@ +export class BinaryInfo { + constructor(options = {}) { + this.protocolVersion = 5; + this.sequence = 0; + this.events = []; + this.buffer = []; + Object.assign(this, options); + } +} +//# sourceMappingURL=BinaryInfo.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/BinaryInfo.js.map b/packages/transport/vendor/lib/WAM/BinaryInfo.js.map new file mode 100644 index 0000000..c2a501f --- /dev/null +++ b/packages/transport/vendor/lib/WAM/BinaryInfo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"BinaryInfo.js","sourceRoot":"","sources":["../../src/WAM/BinaryInfo.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IAMtB,YAAY,UAA+B,EAAE;QAL7C,oBAAe,GAAG,CAAC,CAAA;QACnB,aAAQ,GAAG,CAAC,CAAA;QACZ,WAAM,GAAG,EAAsB,CAAA;QAC/B,WAAM,GAAa,EAAE,CAAA;QAGpB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7B,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/constants.d.ts b/packages/transport/vendor/lib/WAM/constants.d.ts new file mode 100644 index 0000000..3e463a0 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/constants.d.ts @@ -0,0 +1,40 @@ +export declare const WEB_EVENTS: Event[]; +export declare const WEB_GLOBALS: Global[]; +export declare const FLAG_BYTE = 8, FLAG_GLOBAL = 0, FLAG_EVENT = 1, FLAG_FIELD = 2, FLAG_EXTENDED = 4; +export type Event = { + name: string; + id: number; + props: { + [key: string]: [number, string | { + [key: string]: number; + }]; + }; + weight: number; + wamChannel: string; + privateStatsIdInt?: number; +}; +export type Global = { + name: string; + id: number; + type: string | { + [key: string]: number; + }; + validator?: string; + channels: string[]; +}; +type EventByName = Extract; +export type EventInputType = { + [key in Event['name']]: { + props: { + [k in keyof EventByName['props']]: Value; + }; + globals: { + [x: string]: Value; + }; + }; +} & {}; +export type Value = number | null | string; +export {}; +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/constants.d.ts.map b/packages/transport/vendor/lib/WAM/constants.d.ts.map new file mode 100644 index 0000000..6d133cc --- /dev/null +++ b/packages/transport/vendor/lib/WAM/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/WAM/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,EAAE,KAAK,EAi4rB7B,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,EAgc/B,CAAA;AAED,eAAO,MAAM,SAAS,IAAI,EACzB,WAAW,IAAI,EACf,UAAU,IAAI,EACd,UAAU,IAAI,EACd,aAAa,IAAI,CAAA;AAElB,MAAM,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAA;IACtE,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,KAAK,WAAW,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAA;AAEvE,MAAM,MAAM,cAAc,GAAG;KAC3B,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG;QACvB,KAAK,EAAE;aAEL,CAAC,IAAI,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK;SAC7C,CAAA;QACD,OAAO,EAAE;YAAE,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;SAAE,CAAA;KAC/B;CACD,GAAG,EAAE,CAAA;AAEN,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/constants.js b/packages/transport/vendor/lib/WAM/constants.js new file mode 100644 index 0000000..97bcf65 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/constants.js @@ -0,0 +1,22853 @@ +export const WEB_EVENTS = [ + { + name: 'WamDroppedEvent', + id: 4358, + props: { + droppedEventCode: [1, 'integer'], + droppedEventCount: [2, 'integer'], + isFromWamsys: [3, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MetaVerifiedInteraction', + id: 4870, + props: { + businessOwnerJid: [1, 'string'], + businessOwnerPlatform: [ + 2, + { + SMBA: 1, + SMBI: 2, + ENT: 3 + } + ], + metaVerifiedInteractionAction: [ + 3, + { + MV_INTERACTION_ACTION_CLICK_MV_BADGE: 1, + MV_INTERACTION_ACTION_VIEW_MV_EDUCATION_BOTTOM_SHEET: 2, + MV_INTERACTION_ACTION_CLICK_MV_EDUCATION_LINK: 3, + MV_INTERACTION_ACTION_VIEW_CROSS_SELL_PROFILE_INTERSTITIAL: 4, + MV_INTERACTION_ACTION_CLICK_MV_MORE_LINK: 5, + MV_INTERACTION_ACTION_CLICK_GET_WA_BUSINESS: 6, + MV_INTERACTION_ACTION_CLICK_SUPPORT: 7, + MV_INTERACTION_ACTION_CLICK_CUSTOM_WEBPAGE_AND_LINK: 8, + MV_INTERACTION_ACTION_CLICK_MULTI_DEVICE: 9, + MV_INTERACTION_ACTION_CLICK_MV_LEARN_MORE: 10, + MV_INTERACTION_ACTION_CLICK_MV_HOME: 11, + MV_INTERACTION_ACTION_CLICK_BLOCK: 12, + MV_INTERACTION_ACTION_CLICK_PROFILE: 13, + VIEW_NOT_MV_LABEL: 14, + CLICK_NOT_MV_LABEL: 15, + VIEW: 16, + CLICK_LEARN_MORE: 17, + CLICK_GET_MV: 18, + CLICK_DISMISS: 19 + } + ], + metaVerifiedInteractionAssetType: [ + 4, + { + CHANNEL: 1, + SMB: 2, + ENT: 3, + PERSONAL: 4 + } + ], + metaVerifiedInteractionReferral: [ + 5, + { + CHAT_PROFILE: 1, + CONTACT_CARD: 2, + SETTINGS: 3, + BUSINESS_TOOLS: 4, + NOTIFICATION: 5, + FMX_CONTACT_CARD: 6, + INCOMING_CALL_NOTIFICATION: 7, + INCOMING_CALL_SCREEN: 8 + } + ], + metaVerifiedInteractionSurface: [ + 6, + { + BUSINESS_PROFILE: 1, + MV_EDUCATION_BOTTOM_SHEET: 2, + CROSS_SELL_PROFILE_INTERSTITIAL: 3, + META_VERIFIED_HOME: 4, + SETTINGS: 5, + BUSINESS_TOOLS: 6, + BUSINESS_CARD: 7, + FMX_NOT_META_VERFIED_BOTTOM_SHEET: 8, + FMX_CONTACT_CARD: 9, + INCOMING_CALL_NOTIFICATION: 10, + INCOMING_CALL_SCREEN: 11, + INCOMING_CALL_NOT_MV_BOTTOMSHEET: 12 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'WebHdMediaAwarenessInteraction', + id: 5426, + props: { + hdMediaSelected: [1, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GraphqlCatalogRequest', + id: 3206, + props: { + businessJid: [4, 'string'], + businessType: [ + 5, + { + SMB: 1, + API_DC: 2, + API: 3 + } + ], + graphqlCatalogEndpoint: [ + 1, + { + GET_CATALOG: 1, + GET_PRODUCT: 2, + GET_PRODUCT_LIST: 3, + GET_COLLECTIONS: 4, + GET_SINGLE_COLLECTION: 5, + GET_CATEGORIES: 6, + GET_VARIANTS: 7, + GET_PROMOTIONS: 8, + CREATE_COLLECTION: 9, + GET_PUBLIC_KEY: 10, + VERIFY_POSTCODE: 11 + } + ], + graphqlErrorCode: [3, 'integer'], + graphqlRequestResult: [ + 2, + { + SUCCESS: 1, + FAILURE: 2 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'UiRevokeAction', + id: 3298, + props: { + messageAction: [ + 1, + { + MESSAGE_SELECTED: 0, + TRASH_CAN_SELECTED: 1, + ADMIN_DELETE_FOR_EVERYONE: 2, + SENDER_DELETE_FOR_EVERYONE: 3, + ADMIN_AND_SENDER_DELETE_FOR_EVERYONE: 4, + DELETE_FOR_EVERYONE_SELECTED: 5 + } + ], + uiRevokeActionDuration: [2, 'integer'], + uiRevokeActionSessionId: [3, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'LwiEntryPointImpression', + id: 2906, + props: { + businessToolsSessionId: [2, 'string'], + catalogSessionId: [1, 'string'], + itemsCount: [7, 'integer'], + lwiEntryPoint: [ + 3, + { + SMB_CATALG_LIST_LWI_ADVERTISE_BANNER: 1, + SMB_CATALOG_LIST_ADVERTISE_MENU_ITEM: 2, + SMB_BUSINESS_TOOLS_ADVERTISE_LIST_ITEM: 3, + SMB_STATUS_DETAILS_ADVERTISE_MENU_ITEM: 4, + SMB_STATUS_PREVIEW_ADVERTISE_MENU_ITEM: 5, + SMB_CONVERSATIONS_LIST_BANNER_WITH_VALID_PRODUCT: 6, + SMB_CONVERSATIONS_LIST_BANNER_WITHOUT_VALID_PRODUCT: 7, + SMB_STATUS_3DTOUCH_ADVERTISE_MENU_ITEM: 8, + SMB_HOME_SCREEN_OVERFLOW_MENU_ITEM: 9, + SMB_BUSINESS_TOOLS_ADVERTISE_LIST_FIRST_ITEM: 10, + SMB_SETTINGS_ADVERTISE_LIST_ITEM: 11, + SMB_ADVERTISE_FROM_NOTIFICATION: 12, + SMB_ADVERTISE_FROM_BANNER: 13, + SMB_ADVERTISE_FROM_DEEP_LINK: 14, + SMB_BUSINESS_TOOLS_TAB_ADVERTISE: 15, + SMB_CATALOG_LIST_ADVERTISE_BUTTON: 16, + SMB_PRODUCT_DETAILS_ADVERTISE_BUTTON: 17, + SMB_ADVERTISE_FROM_STATUS_MESSAGE: 18, + SMB_HOME_SCREEN_ICON: 19, + SMB_HOME_BANNER: 20, + SMB_ADVERTISE_FROM_STATUS_MESSAGE_SELF_VIEW: 21, + SMB_STATUS_MAIN_TAB_ADVERTISE: 22, + SMB_STATUS_MAIN_TAB_BANNER: 23, + SMB_BUSINESS_HOME_CARD_CREATE_FIRST_AD: 24, + SMB_BUSINESS_HOME_CARD_CREATE_RETURNING_AD: 25, + SMB_MEDIA_SHARE_VIA_GROUP: 26, + SMB_MEDIA_SHARE_VIA_BROADCAST: 27, + STATUS_PLAYBACK_SCREEN_ICON: 28, + CATALOG_SHARED_IN_GROUP: 29, + CATALOG_SHARED_IN_BROADCAST_LIST: 30, + CATALOG_SHARED_IN_SINGLE_CHAT: 31, + PRODUCT_SHARED_IN_SINGLE_CHAT: 32, + PRODUCT_SHARED_IN_BROADCAST_LIST: 33, + PRODUCT_SHARED_IN_GROUP: 34, + PRODUCT_LINK_SHARED_IN_SINGLE_CHAT: 35, + PRODUCT_LINK_SHARED_IN_BROADCAST_LIST: 36, + PRODUCT_LINK_SHARED_IN_GROUP: 37, + SMB_MESSAGING_GUIDE_AD_CREATION: 38, + SMB_BUSINESS_HOME_ADVERTISE_FROM_BANNER: 39, + SMB_STATUS_UPSELL_BOTTOM_SHEET: 40, + BUSINESS_PROFILE: 41, + SMB_BUSINESS_HOME_CARD_ACTIVE_AD: 42, + SMB_STATUS_CHANNELS_TAB_ADVERTISE: 43, + SMB_STATUS_CHANNELS_TAB_BANNER: 44, + SMB_PRODUCT_UPSELL_BOTTOM_SHEET: 45, + SMB_STATUS_CHANNELS_UPSELL_BOTTOM_SHEET: 46, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_INDIVIDUAL: 47, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_GROUP: 48, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_BROADCAST: 49, + SMB_BUSINESS_HOME_CARD_ACTIVE_AD_DISMISS: 50, + SMB_BUSINESS_HOME_CARD_DRAFT_AD: 51, + SMB_BUSINESS_HOME_MANAGE_AD: 52, + SMB_BUSINESS_TOOLS_MANAGE_AD: 53, + SMB_HOME_SCREEN_OVERFLOW_MANAGE_ITEM: 54, + SMB_BUSINESS_HOME_QP_CARD: 55, + SMB_CREATED_AD: 56, + SMB_BUSINESS_HOME_CARD_COUPON_PROMOTION: 57, + SMB_SETTINGS_MANAGE_AD: 58, + SMB_BUSINESS_HOME_IG_FIRST: 59, + SMB_BUSINESS_ADS_HUB_OVERVIEW: 60, + SMB_BUSINESS_DRAFT_AD_NUX: 61, + SMB_ADS_CREDIT_BLOKS_CTWA: 62, + SMB_ARCHIVE_STATUS_MAIN_TAB_BOOST: 80, + SMB_PRODUCT_DETAILS_ADVERTISE_AGAIN_BUTTON: 81, + SMB_ADVERTISE_FROM_MANAGE_ADS_CREATE_AD_BUTTON: 82, + SMB_ADVERTISE_FROM_AD_DETAILS_RECREATE_AD_BUTTON: 83, + SMB_BUSINESS_HOME_LEARNING_HUB: 84, + SMB_AUTOMATOR_UPSELL: 85, + SMB_ADVERTISE_FROM_MANAGE_ADS_OVERFLOW_MENU_ITEM_RECREATE_AD_BUTTON: 86 + } + ], + lwiSubEntryPoint: [ + 6, + { + SMB_HOME_SCREEN_CONVERSATIONS_TAB: 1, + SMB_HOME_SCREEN_STATUS_TAB: 2, + SMB_HOME_SCREEN_CALL_HISTORY_TAB: 3, + SMB_HOME_SCREEN_COMMUNITIES_TAB: 4, + SMB_HOME_SCREEN_BIZ_HOME_TAB: 5 + } + ], + statusSessionId: [5, 'integer'], + userHasLinkedFbPage: [4, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'EphemeralSyncResponseSend', + id: 4778, + props: { + clientDisappearingModeInitiator: [ + 1, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + clientEphemeralityDuration: [2, 'integer'], + clientEphemeralityInitiator: [ + 3, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + clientEphemeralitySettingTimestamp: [4, 'integer'], + clientEphemeralityTriggerAction: [ + 5, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + esrDisappearingModeInitiator: [ + 6, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + esrEphemeralityDuration: [7, 'integer'], + esrEphemeralityInitiator: [ + 8, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + esrEphemeralitySettingTimestamp: [9, 'integer'], + esrEphemeralityTriggerAction: [ + 10, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + esrFailureReason: [ + 11, + { + ESR_ABPROP_OFF: 1, + DM_RELIABILITY_ABPROP_OFF: 2, + INVALID_MESSAGE_TYPE: 3, + OLDER_EPHEMERAL_SETTING_TIMESTAMP: 4, + NO_EPHEMERAL_INFO: 5, + ATTEMPTS_EXHAUSTED: 6, + NO_USER_INFO: 7, + NO_CHAT_SESSION: 8, + INVALID_EPHEMERAL_DURATION: 9 + } + ], + esrSendAttempt: [12, 'integer'], + esrSendResult: [ + 13, + { + SUCCESS: 1, + ERROR: 2 + } + ], + isAGroup: [14, 'boolean'], + messageDisappearingModeInitiator: [ + 15, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + messageEphemeralityDuration: [16, 'integer'], + messageEphemeralityInitiator: [ + 17, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + messageEphemeralitySettingTimestamp: [18, 'integer'], + messageEphemeralityTriggerAction: [ + 19, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + threadId: [20, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatMute', + id: 2280, + props: { + actionConducted: [ + 3, + { + MUTE: 1, + UNMUTE: 2, + EXPIRE: 3 + } + ], + chatMuteNotificationChoice: [ + 5, + { + NO_NOTIFICATIONS_WHEN_MUTED: 1, + YES_NOTIFICATIONS_WHEN_MUTED: 2 + } + ], + muteChatType: [ + 4, + { + ONE_ON_ONE: 1, + GROUP: 2, + CHANNEL: 3, + INTEROP: 4, + INORGANIC_NOTIFICATION: 5 + } + ], + muteDuration: [1, 'timer'], + muteEntryPoint: [ + 6, + { + CHAT_LIST_SCREEN: 1, + CONTACT_INFO: 2, + CONVERSATION_SCREEN: 3, + CHAT_MORE_OPTIONS: 4, + CHAT_LONG_PRESS_OPTIONS: 5, + INORGANIC_NOTIFICATION: 6, + LIST_BASED_MUTE: 7 + } + ], + muteGroupSize: [2, 'integer'], + waOfficialAccountName: [ + 7, + { + WHATSAPP_CHATPSA: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'AdvMetadataCreationFailure', + id: 3048, + props: { + advMetadataIsMe: [1, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GroupJourney', + id: 4512, + props: { + actionType: [ + 1, + { + OPEN: 1, + SELECT_FILTER: 2, + SEARCH_WITH_FILTER: 3, + SEARCH: 4, + SEARCH_ITEM_SELECTED: 5, + SEARCH_MSG_SENT: 6, + UNSELECT_FILTER: 7, + AUTO_CLEAR_FILTER: 8, + VIEW: 9, + GROUP_NAVIGATION: 10, + GROUP_DISCOVERY: 11, + GROUP_JOIN: 12, + SUBGROUP_SWITCHER_CLICK: 13, + SUBGROUP_MENTION_CLICK: 14, + COMMUNITY_RICH_SYSTEM_MESSAGE_CLICK: 15, + GROUP_SYSTEM_MESSAGE_CLICK: 16, + NESTING_VIEW_COMMUNITY_CLICK: 17, + SELECT_COMMUNITY_ADMINS_CAN_ADD_GROUPS: 18, + SELECT_EVERYONE_CAN_ADD_GROUPS: 19, + GROUP_JOIN_REQUEST: 20, + NOTIFICATION_RECEIVED: 21, + NOTIFICATION_RENDERED: 22, + TAP_TO_OPEN: 23, + TAP_TO_REPLY: 24, + VOIP_CALLBACK: 25, + VOIP_MESSAGE: 26, + VOIP_DECLINE: 27, + MARK_AS_READ: 28, + AI_NEW_CHAT_CLICK: 29, + AI_TAB_SELECTION_CLICK: 30, + AI_PERSONA_SELECTION_CLICK: 31, + AI_TOS_VIEW: 32, + AI_TOS_ACCEPT_CLICK: 33, + AI_TOS_DISMISS_CLICK: 34, + AI_NEW_UGC_CLICK: 35, + AI_UGC_CREATION_START_CLICK: 36, + AI_GENDER_AGE_SELECTION_CLICK: 37, + AI_PERSONALITY_SELECTION_CLICK: 38, + AI_INTEREST_SELECTION_CLICK: 39, + AI_AVATAR_SELECTION_CLICK: 40, + AI_NAME_SELECTION_CLICK: 41, + AI_UGC_CREATION_FINISH_CLICK: 42, + REQUEST_WAITLIST_DIALOG_APPEAR: 43, + REQUEST_WAITLIST_SELECT: 44, + FILTER_VIEWED: 45, + FILTER_EMPTY_STATE_VIEWED: 46, + BUSINESS_SERP_LOADED: 47, + BIZ_SEE_MORE_CLICKED: 48, + IMPRESSION: 49, + BIZ_SEARCH_SET_LOCATION_CLICKED: 50, + CLOSE_BTN_CLICKED: 51, + AI_CHAT_CLICK: 52, + NEW_CHAT_CLICK: 53, + SERP_LOADED: 54, + CLICK: 55, + ENTER: 56, + DISMISS: 57, + SEND_MESSAGE_SUCCESS: 58, + META_AI_MODEL_SETTING_SHOW: 59, + META_AI_MODEL_UPDATE: 60, + AI_CHARACTER_EXPLORE_CLICK: 61, + AI_CHARACTER_EXISTING_CHAT_CLICK: 62, + AI_CHARACTER_PREVIEWED: 63, + AI_CHARACTER_PROMPT_CLICK: 64, + AI_CHARACTER_START_CHATTING_CLICK: 65, + AI_CHARACTER_SHARE_CLICKED: 66, + AI_CHARACTER_CREATOR_PROFILE_CLICK: 67, + AI_TOS_DISMISS_NOT_ACCEPTED: 68, + AI_TOS_DISMISS_AUTO_ACCEPTED: 69, + AI_CHARACTER_CHAT_CLICK: 70, + AI_HOME_IMPRESSION: 71, + AI_VOICE_NUX_VIEW: 72, + AI_VOICE_NUX_ALLOW: 73, + AI_VOICE_NUX_DISMISS: 74, + AI_VOICE_MIC_PERMISSION_VIEW: 75, + AI_VOICE_MIC_PERMISSION_ALLOW: 76, + AI_VOICE_MIC_PERMISSION_DISMISS: 77, + AI_VOICE_AUDIO_RECORDING_PERMISSION_VIEW: 78, + AI_VOICE_AUDIO_RECORDING_PERMISSION_WHILE_USING_THE_APP_CLICK: 79, + AI_VOICE_AUDIO_RECORDING_PERMISSION_ONLY_THIS_TIME_CLICK: 80, + AI_VOICE_HALF_SHEET_VIEW: 81, + AI_VOICE_HALF_SHEET_CONNECT: 82, + AI_VOICE_FULL_SHEET_VIEW: 83, + SCAN: 84, + AI_VOICE_MIC_PERMISSION_REDIRECT_TO_SETTING: 85, + AI_VOICE_SEARCH_CHATS_LIST_CLICK: 86, + AI_VOICE_CHAT_THREAD_CLICK: 87, + AI_VOICE_FAB_CLICK: 88, + XMA_REELS_PLUGIN_PREVIEWED: 89, + XMA_REELS_CLICKED: 90, + AI_MEMORY_DELETE: 91, + AI_MEMORY_ALL_DELETE: 92, + AI_MEMORY_DISMISS_CLICK: 93, + AI_MEMORY_BOTTOM_SHEET_VIEW_ALL_CLICK: 94, + AI_MEMORY_VIEW: 95, + AI_MULTIMODAL_SESSION_BEGIN: 96, + AI_VOICE_TO_TEXT_TRANSITION: 97, + AI_VOICE_CONNECTION_ERROR: 98, + AI_VOICE_TAP_ICEBREAKER: 99, + AI_MULTIMODAL_HISTORY_FETCH: 100, + AI_LISTENING_ENABLE: 101, + AI_LISTENING_DISABLE: 102, + AI_TAB_CLICK: 103, + AI_TAB_IMPRESSION: 104, + AI_DISCOVERY_CLICK: 105, + AI_DISCOVERY_PREVIEW: 106, + AI_CHARACTER_AUDIO_MUTED: 107, + AI_CHARACTER_AUDIO_UNMUTED: 108, + AI_TAB_CHARACTER_PREVIEWED: 109, + AI_CHARACTER_IMPRESSION: 110, + AI_INLINE_TOS_RENDERED: 111, + AI_INLINE_TOS_VIEWED_ATTEMPT: 112, + AI_INLINE_TOS_VIEWED: 113, + AI_INITIATION_CONTINUE_ACCEPTED: 114, + NOVICE_AI_TAB_CLICK: 115, + AI_VOICE_BACKGROUND_CALL: 116, + AI_VOICE_FOREGROUND_CALL: 119, + AI_VOICE_START_CALL: 120, + AI_VOICE_END_CALL: 121, + AI_VOICE_AUTO_END_CALL: 122, + AI_NULL_STATE_PROMPT_SEND: 125, + AI_NULL_STATE_HISTORY_FETCH: 126, + AI_VOICE_CONVERSATION_STARTER_CLICK: 127, + AI_VOICE_START_VOICE_MODE: 128, + AI_VOICE_SEND_TEXT: 129, + AI_TOS_NOTICE_ID_ERROR: 130, + AI_HOME_PULL_TO_REFRESH: 131, + AI_VOICE_VIEW_VOICE_SELECTION: 132, + AI_VOICE_SKIP_VOICE_SELECTION: 133, + AI_VOICE_CANCEL_VOICE_SELECTION: 134, + AI_VOICE_SELECT_VOICE_SELECTION: 135, + AI_VOICE_ON_DEFAULT_ENABLED: 136, + AI_VOICE_ON_DEFAULT_DISABLED: 137, + AI_MEMORY_UPDATED: 138, + AI_CREATION_BUTTON_CLICK: 139, + AI_CREATION_TOS_PREVIEWED: 140, + AI_CREATION_PREVIEW: 141, + AI_CREATION_DESCRIPTION_SUBMIT: 142, + AI_CREATION_PERSONALITY_CATEGORY_PREVIEW: 143, + AI_CREATION_PERSONALITY_SUBMIT: 144, + AI_CREATION_AVATAR_CREATE_PREVIEWED: 145, + AI_CREATION_AVATAR_SUBMIT: 146, + AI_CREATION_AUDIENCE_PUBLIC: 147, + AI_CREATION_AUDIENCE_ONLY_ME: 148, + AI_CREATION_CONFIRMED: 149, + AI_CREATION_DELETION_STARTED: 150, + AI_CREATION_DELETION_COMPLETED: 151, + AI_CREATION_REPORT_STARTED: 152, + AI_CREATION_REPORT_COMPLETED: 153, + AI_CREATION_NAMING_PREVIEWED: 154, + AI_CREATION_NAMING_SUBMIT: 155, + AI_CREATION_INTRO_PREVIEWED: 156, + AI_CREATION_INTRO_SUBMIT: 157, + AI_CREATION_REVIEW_PREVIEWED: 158, + AI_CREATION_SUBMIT: 159, + AI_CHAT_THREAD_VOICE_VIEW: 160, + AI_VOICE_CONVERSATION_STARTER_VIEW: 161, + AI_HIDE_REQUEST_SUBMITTED: 162, + AI_CHARACTER_EXPLORE_VIEWED: 163, + META_AI_CHAT_THREAD_VIEWED_TEXT: 164, + META_AI_CHAT_THREAD_VIEWED_VOICE: 165, + TAP_TO_FORWARD: 166, + TAP_TO_COPY: 167, + TAP_TO_STAR: 168, + TAP_TO_DELETE: 169, + TAP_TO_REACT: 170, + SWIPE_TO_REPLY: 171, + AI_CREATION_AVATAR_EDIT_CLICK: 172, + AI_CREATION_AVATAR_CREATE_NEW: 173, + AI_CREATION_VOICE_SELECTION_PREVIEWED: 174, + AI_CREATION_NAMING_EDIT_SAVED: 175, + AI_CREATION_DESCRIPTION_EDIT_SAVED: 176, + AI_CREATION_INTRODUCTION_EDIT_SAVED: 177, + AI_CREATION_WELCOME_MSG_SAVED: 178, + AI_CREATION_ICEBREAKER_SAVED: 179, + AI_CREATION_INSTRUCTIONS_SAVED: 180, + AI_CREATION_INSTRUCTIONS_DELETED: 181, + AI_CREATION_EXAMPLE_DIALOG_SAVED: 182, + AI_CREATION_EXAMPLE_DIALOG_DELETED: 183, + AI_CREATION_ADVANCED_SETTINGS_PREVIEWED: 184, + AI_CREATION_VOICE_PREVIEWED: 185, + AI_CREATION_VOICE_SUBMIT: 186, + AI_VOICE_TOS_ACCEPT_CLICK: 187, + AI_VOICE_TOS_VIEW: 188, + AI_CREATION_AVATAR_REGENERATION: 189, + AI_VOICE_RING_TAP_CLICK: 190, + AI_VOICE_RING_UNDO_MUTE_UNMUTE: 191, + AI_HOME_BOUNCE: 192, + AI_CREATION_AVATAR_EDIT_BUTTON_CLICK: 193, + AI_CREATION_AVATAR_EDIT_DONE: 194, + AI_CREATION_AVATAR_EDIT_SUBMIT: 195, + AI_CREATION_AVATAR_CROP_CLICK: 196, + AI_CREATION_AVATAR_CROP_DONE: 197, + AI_CREATION_IMAGE_UPLOAD_CLICK: 198, + AI_CREATION_IMAGE_UPLOAD_DONE: 199, + AI_CREATION_AVATAR_EDIT_PREVIEWED: 200 + } + ], + appSessionId: [2, 'string'], + groupSize: [3, 'integer'], + surface: [ + 4, + { + CHAT: 1, + CHATLIST: 2, + GALLERY: 3, + COMMUNITY_HOME: 4, + COMMUNITY_TAB: 5, + COMMUNITY_NAV: 6, + COMMUNITY_NAV_SHEET: 7, + COMMUNITY_SETTINGS: 8, + GROUP_INFO: 9, + NOTIFICATION: 10, + EXPRESSIONS_EMOJI: 11, + INVITE_NON_WA_CONTACT: 12, + CHAT_INFO_PAGE: 13, + NOTES_PROMPT: 14, + CHAT_THREAD: 15, + SEARCH_FILTER: 16, + TOOL_LIST_ITEM: 17, + GEN_AI_AGENT_NUX_SCREEN: 18, + GEN_AI_AGENT_NUX_TOS_SCREEN: 19, + GEN_AI_AGENT_NUX_BIZ_INFO_SCREEN: 20, + GEN_AI_AGENT_NUX_AUTHENTICATION_SCREEN: 21, + GEN_AI_MORE_BIZ_INFO_SCREEN: 22, + GEN_AI_AUTOMATIC_REPLIES_SCREEN: 23, + GEN_AI_COMMON_QUESTIONS_SCREEN: 24, + GEN_AI_READY_SCREEN: 25, + OVERFLOW_MENU: 26, + BROADCAST_LIST_LANDING_PAGE: 27, + BANNER_FROM_EXISTING_BCL: 28, + BANNER_FROM_NEW_BCL: 29, + COMPOSER: 30, + CONFIRM_EXIT_NOTE_DIALOGUE: 31, + VERIFY_EMAIL: 32, + EMAIL_VERIFICATION_CODE_SEND_ERROR_PROMPT: 33, + INCORRECT_EMAIL_VERIFICATION_CODE_PROMPT: 34, + EMAIL_CODE_VERIFICATION_ERROR_PROMPT: 35, + EMAIL_VERIFICATION: 36, + NOT_MY_EMAIL_PROMPT: 37, + REMOVE_EMAIL_ERROR_PROMPT: 38, + REMOVE_EMAIL: 39, + STICKER_TRAY_IN_CHAT: 40, + STICKER_SEARCH_CHAT: 41, + BUSINESS_HOME_PAGE: 42, + BROADCAST_LIST_AUDIENCE_PAGE: 43, + GEN_AI_WEB_ONBOARDING_EDUCATION: 44, + GEN_AI_WEB_ONBOARDING_QR_CODE: 45, + GEN_AI_WEB_ONBOARDING_SUCCESS: 46, + GEN_AI_SETTINGS_HOME_SCREEN: 47, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_SCREEN: 48, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_EDIT_SCREEN: 49, + GEN_AI_SETTINGS_BIZ_INFO_SCREEN: 50, + GEN_AI_SETTINGS_BIZ_INFO_EDIT_SCREEN: 51, + GEN_AI_SETTINGS_AUTO_REPLY_SCREEN: 52, + GEN_AI_SETTINGS_ATUO_REPLY_TYPE_EDIT_SCREEN: 53, + GEN_AI_SETTINGS_AUTO_REPLY_TIME_EDIT_SCREEN: 54, + GEN_AI_SETTINGS_FAQ_SCREEN: 55, + GEN_AI_SETTINGS_FAQ_EDIT_INFO_SCREEN: 56, + GEN_AI_SETTINGS_ADD_NEW_CONTACT_SCREEN: 57, + GEN_AI_SETTINGS_ADD_NEW_BUSINESS_INFO: 58, + GEN_AI_SETTINGS_DISCONNECT: 59, + ACCOUNT_SETTINGS: 60, + CREATE_BIZ_PROFILE: 61, + CREATE_PASS_KEY: 62, + ADD_EMAIL: 63, + VERIFY_NEW_EMAIL: 64, + INITIALIZING_ACCOUNT: 65, + GEN_AI_SETTINGS_DYI: 66, + GEN_AI_SETTINGS_LEAD_GEN_QUESTIONS: 67, + CATALOG_MANAGER: 68, + CATALOG_SETTINGS: 69, + FB_ACCOUNT_CONFIRMATION_BOTTOM_SHEET: 70, + CONNECT_CATALOG_SELECTION: 71, + REPLACE_CATALOG_CONFIRMATION_PROMPT: 72, + FB_LOGIN_BOTTOM_SHEET: 73, + CONNECTED_CATALOG_DETAILS_BOTTOM_SHEET: 74, + CONFIRM_DISCONNECT_CATALOG_BOTTOM_SHEET: 75, + GIF_EXPRESSIONS_TRAY: 76, + BUSINESS_PROFILE_DESCRIPTION_GENAI_LOADING: 77, + BUSINESS_PROFILE_DESCRIPTION_GENAI: 78, + SELECT_BIZ_CATEGORY: 79, + SEARCH_BIZ_CATEGORY_BOTTOM_SHEET: 80, + ADD_BIZ_HOURS: 81, + SELECT_BIZ_HOURS_BOTTOM_SHEET: 82, + ADD_PROFILE_PHOTO: 83, + ADD_BIZ_DISCOVERY_INFO: 84, + ADD_BIZ_DESCRIPTION: 85, + GEN_AI_WEB_ONBOARDING_AUTHENTICATION: 86, + GEN_AI_COACHING: 87, + PRODUCT_DETAILS: 88, + ORIGIN_COUNTRY: 89, + IMPORTER_INFO: 90, + IMPORTER_COUNTRY: 91, + EDIT_BIZ_PROFILE: 92, + GEN_AI_LEARNING_SUMMARY: 93, + GEN_AI_KNOWLEDGE_EDIT: 94, + ADD_ITEM: 95, + EDIT_ITEM: 96, + GEN_AI_AI_HUB_CHECKLIST: 97, + GEN_AI_AI_HUB_CHAT: 98, + GEN_AI_AI_HUB_HOME: 99, + GEN_AI_AI_HUB_ADD_BUSINESS_INFO: 100, + GEN_AI_AI_HUB_ADD_PRODUCT_INFO: 101, + GEN_AI_AI_HUB_ADD_PURCHASING_INFO: 102, + GEN_AI_AGENT_EDIT_FIELD_BOTTOM_SHEET: 103, + GEN_AI_AI_HUB_KNOWLEDGE_REPO: 104, + CONNECT_CATALOG_NUX_BOTTOM_SHEET: 105, + GENAI_AGENT_AUTO_REPLY_CONFIRMATION_DIALOG: 106, + GENAI_AGENT_AUTO_REPLY_ERROR_DIALOG: 107, + FB_WEB_LOGIN: 108, + GENAI_AGENT_COACHING_INDICATOR_BOTTOMSHEET: 109, + WATCH_LEARNING_VIDEO: 110, + GEN_AI_BESTSELLERS: 111, + GEN_AI_AI_HUB_KNOWLEDGE_RESOURCE: 112, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_SELECTION: 113, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_MANUAL: 114, + DIRECT_MIGRATION_AVAILABILITY: 115, + ACCESS_CONTACT_AND_MEDIA_PROMPT: 116, + ACCESS_CONTACT_PROMPT: 117, + ACCESS_AUDIO_MEDIA_PROMPT: 118, + ACCESS_VISUAL_MEDIA_PROMPT: 119, + NOT_ENOUGH_SPACE_WARNING: 120, + VERIFY_OTP: 121, + DIRECT_MIGRATION_IN_PROGRESS: 122, + DIRECT_MIGRATION_FAILED: 123, + ACCOUNT_BACKUP_CHECK: 124, + ACCESS_BACKUP_PERMISSION_PROMPT: 125, + RESTORE_OR_TRANFER_CHAT: 126, + ENTER_PHONE_NUMBER: 127, + CHECK_USERNAME_AND_PIN: 128, + CHECK_USERNAME: 129, + ONBOARDING_USERNAME_UPDATE_TOAST: 130, + ONBOARDING_USERNAME_PIN_REMOVE_TOAST: 131, + LABEL_LIST: 132, + LABEL_DETAILS: 133, + LABEL_APPLICATION: 134, + GEN_AI_AGENT_HANDOFF_LIST_CONFIG: 135, + DOCUMENTS_PICKER: 136, + DOCUMENTS_PREVIEW: 137 + } + ], + threadType: [ + 5, + { + GROUP: 1, + BROADCAST: 2, + INDIVIDUAL: 3, + STATUS: 4, + CHANNEL: 5, + SUB_GROUP: 6, + DEFAULT_SUB_GROUP: 7, + PARENT_GROUP: 8, + BOT: 9 + } + ], + uiSurface: [ + 7, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + userRole: [ + 6, + { + MEMBER: 0, + ADMIN: 1, + CADMIN: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CoexPrivacySysMsg', + id: 5204, + props: { + coexStatusReplyPrivacyDisclaimerUserAction: [ + 8, + { + DISPLAYED: 1, + TAPPED: 2 + } + ], + coexSysMsgBusinessId: [1, 'string'], + coexSysMsgInsertionChannel: [ + 9, + { + CHAT_OPEN: 0, + MESSAGE_RECEIVE: 1, + HISTORY_SYNC: 2 + } + ], + coexSysMsgInsertionErrorCode: [2, 'integer'], + coexSysMsgInsertionErrorMsg: [3, 'string'], + coexSysMsgInsertionSuccess: [4, 'boolean'], + coexSysMsgIsSelf: [5, 'boolean'], + coexSysMsgMultiDeviceId: [6, 'integer'], + coexSysMsgStateTransitionAttempt: [ + 7, + { + E2EE_TO_HOSTED: 0, + HOSTED_TO_E2EE: 1, + HOSTED_TO_HOSTED: 2 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'E2eMessageSend', + id: 476, + props: { + agentEngagementType: [ + 15, + { + DIRECT_CHAT: 0, + INVOKED: 1, + MEMBER: 2 + } + ], + botType: [ + 17, + { + UNKNOWN: 0, + METABOT: 1, + BOT_1P_BIZ: 2, + BOT_3P_BIZ: 3, + UGC: 4, + META_CHARACTER: 5 + } + ], + e2eBackfill: [18, 'boolean'], + e2eCiphertextType: [ + 5, + { + MESSAGE: 0, + PREKEY_MESSAGE: 1, + SENDER_KEY_MESSAGE: 2, + MESSAGE_SECRET_MESSAGE: 3 + } + ], + e2eCiphertextVersion: [6, 'integer'], + e2eDestination: [ + 4, + { + INDIVIDUAL: 0, + GROUP: 1, + LIST: 2, + STATUS: 3, + CHANNEL: 4, + INTEROP: 5 + } + ], + e2eFailureReason: [ + 2, + { + INVALID_MESSAGE: 0, + LEGACY_MESSAGE: 1, + INVALID_VERSION: 2, + PRE_KEY_MESSAGE_MISSING_PRE_KEY: 3, + PRE_KEY_MESSAGE_INVALID_KEY: 4, + UNTRUSTED_IDENTITY: 5, + NO_SESSION_AVAILABLE: 6, + PLAINTEXT_BYTE_MISMATCH: 7, + UNKNOWN_CIPHERTEXT_TYPE: 8, + UNKNOWN_CIPHERTEXT_VERSION: 9, + INVALID_PADDING: 10, + INVALID_PROTOCOL_BUFFER: 11, + INVALID_NUMBER_OF_MESSAGE_TYPES: 12, + INVALID_IMAGE_FILE_LENGTH: 13, + INVALID_IMAGE_FILE_SHA256: 14, + INVALID_IMAGE_MEDIA_URL: 15, + INVALID_IMAGE_MEDIA_KEY: 16, + INVALID_IMAGE_MIME_TYPE: 17, + UNKNOWN_V2_TAGS: 18, + INVALID_EDIT_VERSION: 19, + INVALID_HSM_NAMESPACE: 20, + INVALID_HSM_ELEMENT: 21, + UNKNOWN_PROTOCOL_MESSAGE_TYPE: 22, + DUPLICATE_MESSAGE: 23, + FINGERPRINT_IDENTITY_MISMATCH: 24, + FINGERPRINT_VERSION_MISMATCH: 25, + INVALID_ARGUMENT: 26, + INVALID_KEY: 27, + INVALID_KEY_ID: 28, + INVALID_MAC: 29, + NO_MEMORY: 30, + STALE_KEY_EXCHANGE: 31, + VRF_SIGNATURE_VERIFICATION_FAILED: 32, + ERROR_MINIMUM_VALUE: 33, + ERROR_UNKNOWN: 34, + INVALID_BROADCAST_STANZA_ATTRIBUTE: 35, + INVALID_LIST_REPLY_MESSAGE: 36, + INVALID_LIST_REPLY_ROW_IDENTIFIER: 37, + INVALID_BUTTONS_RESPONSE_MESSAGE: 38, + INVALID_BUTTONS_RESPONSE_BUTTON_IDENTIFIER: 39, + INVALID_ORDER_MESSAGE: 40, + ERROR_CANCELLED: 41, + FUTURE_MESSAGE: 42, + INVALID_EMPTY_PROTOBUF_NOT_ALLOWED: 43, + SELF_SEND: 44, + INVALID_MEDIA_MIME_TYPE_TEMPLATE_MESSAGE: 45, + INVALID_MEDIA_ENC_HASH: 46, + INVALID_IDENTITY: 47, + PASSTHROUGH: 48, + NOT_IN_PENDING_DEVICES: 49, + EDIT_TYPE_AND_PROTOCOL_MISMATCH: 50, + DECRYPTION_FAILED: 51, + DESERIALIZE_INVALID_PROTO_FORMAT: 52, + DESERIALIZE_RATCHET_KEY_BAD_FORMAT: 53, + DESERIALIZE_PK_INVALID_PROTO_FORMAT: 54, + DESERIALZE_PK_KEY_BAD_FORMAT: 55, + TOO_MANY_MESSAGES_IN_FUTURE: 56, + EMPTY_VERSION_CONTENT_SUFFIX: 57, + CONTENT_EXCEEDED_EXPECTED_LENGTH: 58, + GRP_INVALID_PROTO_FORMAT: 59, + GRP_INVALID_KEY_FORMAT: 60, + GRP_VERSION_CONTENT_EMPTY: 61, + GRP_INVALID_VERSION_CONTENT_LENGTH: 62, + GRP_SENDER_KEY_INVALID_PROTO_FORMAT: 63, + GRP_SENDER_KEY_PROTO_ERROR: 64, + GRP_TOO_MANY_MESSAGES_IN_FUTURE: 65, + MISSING_MESSAGE_SECRET: 66, + MESSAGE_SECRET_INVALID: 67, + INVALID_REACTION_TEXT: 68, + UNSUPPORTED_MESSAGE_TYPE: 69, + UNSUPPORTED_IN_INTEROP: 70, + TARGET_MESSAGE_NOT_FOUND: 71, + STATUS_FROM_HOSTED_DEVICE_UNSUPPORTED: 72, + GROUP_MESSAGE_FROM_HOSTED_DEVICE_UNSUPPORTED: 73, + BROADCAST_FROM_HOSTED_DEVICE_UNSUPPORTED: 74, + LIVE_LOCATION_FROM_HOSTED_DEVICE_UNSUPPORTED: 75, + MESSAGE_TYPE_MISMATCH: 76, + ERROR_SESSION_STATE_UNACKED_PKMSG_GET_BASE_KEY: 77, + ERROR_SIGNAL_MESSAGE_GET_SENDER_RATCHET_KEY: 78, + ERROR_SESSION_STATE_GET_ROOT_KEY: 79, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY_PAIR: 80, + ERROR_SESSION_STATE_SET_SENDER_CHAIN_KEY: 81, + ERROR_SESSION_STATE_FIND_RECEIVER_CHAIN: 82, + ERROR_SESSION_RECORD_DESERIALIZE: 83, + ERROR_SENDER_KEY_STATE_REMOVE_SENDER_MESSAGE_KEY: 84, + ERROR_EMPTY_PLAINTEXT_DATA: 85, + ERROR_MAC_LEN_MISMATCH: 86, + ERROR_INVALID_MAC_LEN: 87, + ERROR_INVALID_SIGNATURE_LEN: 88, + ERROR_SENDER_KEY_LOAD_KEY: 89, + ERROR_FAST_RATCHET_SENDER_KEY_LOAD_KEY: 90, + ERROR_UNKNOWN_LOAD_KEY: 91, + ERROR_UNKNOWN_LOAD_SESSION: 92, + ERROR_SESSION_RECORD_GET_STATE: 93, + ERROR_SESSION_STATE_GET_SENDER_CHAIN_KEY: 94, + ERROR_INVALID_KEY_MATEIRAL_DATA_LEN: 95, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY: 96, + ERROR_SESSION_STATE_GET_LOCAL_IDENTITY_KEY: 97, + ERROR_SESSION_STATE_GET_REMOTE_IDENTITY_KEY: 98, + ERROR_MEDIA_HASH_VERIFICATION_FAILURE: 99, + ERROR_CIPHERTEXT_TOO_LONG: 100, + ERROR_THUMBNAIL_HASH_VERIFICATION_FAILURE: 101, + ERROR_PARENT_CHILD_SENDER_JID_MISMATCH: 102, + INVALID_EDIT_MESSAGE: 103, + INVALID_SESSION: 104 + } + ], + e2eReceiverDeviceType: [ + 19, + { + MY_PRIMARY: 1, + OTHER_PRIMARY: 2, + MY_COMPANION: 3, + OTHER_COMPANION: 4, + MY_HOSTED_COMPANION: 5, + OTHER_HOSTED_COMPANION: 6 + } + ], + e2eReceiverType: [ + 8, + { + PRIMARY: 1, + COMPANION: 2 + } + ], + e2eSuccessful: [1, 'boolean'], + editType: [ + 14, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + encRetryCount: [9, 'integer'], + groupEncryptionState: [ + 22, + { + E2EE: 1, + HOSTED: 2 + } + ], + invisibleMessageCategory: [ + 21, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isLid: [12, 'boolean'], + localAddressingMode: [ + 16, + { + PN: 1, + LID: 2 + } + ], + messageDistributionType: [ + 20, + { + REGULAR_MESSAGE: 0, + DIRECT_MESSAGE: 1, + SENDER_KEY_DISTRIBUTION_MESSAGE: 2 + } + ], + messageIsInvisible: [10, 'boolean'], + messageMediaType: [ + 7, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + retryCount: [3, 'integer'], + revokeType: [ + 11, + { + SENDER: 0, + ADMIN: 1 + } + ], + typeOfGroup: [ + 13, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 20 + }, + { + name: 'GifSearchCancelled', + id: 1126, + props: { + gifSearchProvider: [ + 1, + { + GIPHY: 0, + TENOR: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatPsaRead', + id: 3574, + props: { + messageMediaType: [ + 1, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + psaCampaignId: [4, 'string'], + psaMsgId: [5, 'string'], + readEntryPoint: [ + 3, + { + CHAT_LIST: 1, + CHAT: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcEmojiOpen', + id: 1166, + props: { + webcEmojiOpenTab: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SignCredential', + id: 2242, + props: { + applicationState: [ + 6, + { + FOREGROUND: 1, + BACKGROUND: 2 + } + ], + isFromWameta: [8, 'boolean'], + overallT: [4, 'timer'], + projectCode: [ + 7, + { + DIT: 1, + DIRECTORY_SEARCH: 2 + } + ], + retryCount: [2, 'integer'], + signCredentialResult: [ + 1, + { + SUCCESS: 1, + ERROR_BAD_REQUEST: 2, + ERROR_SERVER: 3, + ERROR_OTHER: 4, + ERROR_CLIENT_NETWORK: 5 + } + ], + signCredentialT: [3, 'timer'], + waConnectedToChatd: [5, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMessageProcessingPerf', + id: 5790, + props: { + dbStoringT: [7, 'integer'], + decryptionT: [1, 'integer'], + isOffline: [2, 'boolean'], + lidProcessingT: [8, 'integer'], + parsingT: [3, 'integer'], + postProcessingT: [4, 'integer'], + preProcessingT: [5, 'integer'], + processingT: [6, 'integer'], + reportTokenValidationT: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 100 + }, + { + name: 'WaFsSingleEmojiMessageDaily', + id: 5602, + props: { + animatedEmojiEnabled: [1, 'boolean'], + animatedEmojiReceiveCnt: [2, 'integer'], + animatedEmojiSendCnt: [3, 'integer'], + emojiClickCnt: [4, 'integer'], + emojiReplyCount: [5, 'integer'], + pauseAnimationCnt: [6, 'integer'], + replayAnimationCnt: [7, 'integer'], + singleEmojiReceiveCnt: [8, 'integer'], + singleEmojiSendCnt: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MexEventV2', + id: 4336, + props: { + mexEventV2DurationMs: [1, 'timer'], + mexEventV2EndTime: [2, 'integer'], + mexEventV2ErrorCodes: [3, 'string'], + mexEventV2Errors: [4, 'string'], + mexEventV2HasData: [5, 'boolean'], + mexEventV2IsArgoPayload: [10, 'boolean'], + mexEventV2IsMex: [6, 'boolean'], + mexEventV2OperationName: [7, 'string'], + mexEventV2QueryId: [8, 'string'], + mexEventV2StartTime: [9, 'integer'], + mexFbUserType: [11, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BotJourney', + id: 4630, + props: { + actionType: [ + 1, + { + OPEN: 1, + SELECT_FILTER: 2, + SEARCH_WITH_FILTER: 3, + SEARCH: 4, + SEARCH_ITEM_SELECTED: 5, + SEARCH_MSG_SENT: 6, + UNSELECT_FILTER: 7, + AUTO_CLEAR_FILTER: 8, + VIEW: 9, + GROUP_NAVIGATION: 10, + GROUP_DISCOVERY: 11, + GROUP_JOIN: 12, + SUBGROUP_SWITCHER_CLICK: 13, + SUBGROUP_MENTION_CLICK: 14, + COMMUNITY_RICH_SYSTEM_MESSAGE_CLICK: 15, + GROUP_SYSTEM_MESSAGE_CLICK: 16, + NESTING_VIEW_COMMUNITY_CLICK: 17, + SELECT_COMMUNITY_ADMINS_CAN_ADD_GROUPS: 18, + SELECT_EVERYONE_CAN_ADD_GROUPS: 19, + GROUP_JOIN_REQUEST: 20, + NOTIFICATION_RECEIVED: 21, + NOTIFICATION_RENDERED: 22, + TAP_TO_OPEN: 23, + TAP_TO_REPLY: 24, + VOIP_CALLBACK: 25, + VOIP_MESSAGE: 26, + VOIP_DECLINE: 27, + MARK_AS_READ: 28, + AI_NEW_CHAT_CLICK: 29, + AI_TAB_SELECTION_CLICK: 30, + AI_PERSONA_SELECTION_CLICK: 31, + AI_TOS_VIEW: 32, + AI_TOS_ACCEPT_CLICK: 33, + AI_TOS_DISMISS_CLICK: 34, + AI_NEW_UGC_CLICK: 35, + AI_UGC_CREATION_START_CLICK: 36, + AI_GENDER_AGE_SELECTION_CLICK: 37, + AI_PERSONALITY_SELECTION_CLICK: 38, + AI_INTEREST_SELECTION_CLICK: 39, + AI_AVATAR_SELECTION_CLICK: 40, + AI_NAME_SELECTION_CLICK: 41, + AI_UGC_CREATION_FINISH_CLICK: 42, + REQUEST_WAITLIST_DIALOG_APPEAR: 43, + REQUEST_WAITLIST_SELECT: 44, + FILTER_VIEWED: 45, + FILTER_EMPTY_STATE_VIEWED: 46, + BUSINESS_SERP_LOADED: 47, + BIZ_SEE_MORE_CLICKED: 48, + IMPRESSION: 49, + BIZ_SEARCH_SET_LOCATION_CLICKED: 50, + CLOSE_BTN_CLICKED: 51, + AI_CHAT_CLICK: 52, + NEW_CHAT_CLICK: 53, + SERP_LOADED: 54, + CLICK: 55, + ENTER: 56, + DISMISS: 57, + SEND_MESSAGE_SUCCESS: 58, + META_AI_MODEL_SETTING_SHOW: 59, + META_AI_MODEL_UPDATE: 60, + AI_CHARACTER_EXPLORE_CLICK: 61, + AI_CHARACTER_EXISTING_CHAT_CLICK: 62, + AI_CHARACTER_PREVIEWED: 63, + AI_CHARACTER_PROMPT_CLICK: 64, + AI_CHARACTER_START_CHATTING_CLICK: 65, + AI_CHARACTER_SHARE_CLICKED: 66, + AI_CHARACTER_CREATOR_PROFILE_CLICK: 67, + AI_TOS_DISMISS_NOT_ACCEPTED: 68, + AI_TOS_DISMISS_AUTO_ACCEPTED: 69, + AI_CHARACTER_CHAT_CLICK: 70, + AI_HOME_IMPRESSION: 71, + AI_VOICE_NUX_VIEW: 72, + AI_VOICE_NUX_ALLOW: 73, + AI_VOICE_NUX_DISMISS: 74, + AI_VOICE_MIC_PERMISSION_VIEW: 75, + AI_VOICE_MIC_PERMISSION_ALLOW: 76, + AI_VOICE_MIC_PERMISSION_DISMISS: 77, + AI_VOICE_AUDIO_RECORDING_PERMISSION_VIEW: 78, + AI_VOICE_AUDIO_RECORDING_PERMISSION_WHILE_USING_THE_APP_CLICK: 79, + AI_VOICE_AUDIO_RECORDING_PERMISSION_ONLY_THIS_TIME_CLICK: 80, + AI_VOICE_HALF_SHEET_VIEW: 81, + AI_VOICE_HALF_SHEET_CONNECT: 82, + AI_VOICE_FULL_SHEET_VIEW: 83, + SCAN: 84, + AI_VOICE_MIC_PERMISSION_REDIRECT_TO_SETTING: 85, + AI_VOICE_SEARCH_CHATS_LIST_CLICK: 86, + AI_VOICE_CHAT_THREAD_CLICK: 87, + AI_VOICE_FAB_CLICK: 88, + XMA_REELS_PLUGIN_PREVIEWED: 89, + XMA_REELS_CLICKED: 90, + AI_MEMORY_DELETE: 91, + AI_MEMORY_ALL_DELETE: 92, + AI_MEMORY_DISMISS_CLICK: 93, + AI_MEMORY_BOTTOM_SHEET_VIEW_ALL_CLICK: 94, + AI_MEMORY_VIEW: 95, + AI_MULTIMODAL_SESSION_BEGIN: 96, + AI_VOICE_TO_TEXT_TRANSITION: 97, + AI_VOICE_CONNECTION_ERROR: 98, + AI_VOICE_TAP_ICEBREAKER: 99, + AI_MULTIMODAL_HISTORY_FETCH: 100, + AI_LISTENING_ENABLE: 101, + AI_LISTENING_DISABLE: 102, + AI_TAB_CLICK: 103, + AI_TAB_IMPRESSION: 104, + AI_DISCOVERY_CLICK: 105, + AI_DISCOVERY_PREVIEW: 106, + AI_CHARACTER_AUDIO_MUTED: 107, + AI_CHARACTER_AUDIO_UNMUTED: 108, + AI_TAB_CHARACTER_PREVIEWED: 109, + AI_CHARACTER_IMPRESSION: 110, + AI_INLINE_TOS_RENDERED: 111, + AI_INLINE_TOS_VIEWED_ATTEMPT: 112, + AI_INLINE_TOS_VIEWED: 113, + AI_INITIATION_CONTINUE_ACCEPTED: 114, + NOVICE_AI_TAB_CLICK: 115, + AI_VOICE_BACKGROUND_CALL: 116, + AI_VOICE_FOREGROUND_CALL: 119, + AI_VOICE_START_CALL: 120, + AI_VOICE_END_CALL: 121, + AI_VOICE_AUTO_END_CALL: 122, + AI_NULL_STATE_PROMPT_SEND: 125, + AI_NULL_STATE_HISTORY_FETCH: 126, + AI_VOICE_CONVERSATION_STARTER_CLICK: 127, + AI_VOICE_START_VOICE_MODE: 128, + AI_VOICE_SEND_TEXT: 129, + AI_TOS_NOTICE_ID_ERROR: 130, + AI_HOME_PULL_TO_REFRESH: 131, + AI_VOICE_VIEW_VOICE_SELECTION: 132, + AI_VOICE_SKIP_VOICE_SELECTION: 133, + AI_VOICE_CANCEL_VOICE_SELECTION: 134, + AI_VOICE_SELECT_VOICE_SELECTION: 135, + AI_VOICE_ON_DEFAULT_ENABLED: 136, + AI_VOICE_ON_DEFAULT_DISABLED: 137, + AI_MEMORY_UPDATED: 138, + AI_CREATION_BUTTON_CLICK: 139, + AI_CREATION_TOS_PREVIEWED: 140, + AI_CREATION_PREVIEW: 141, + AI_CREATION_DESCRIPTION_SUBMIT: 142, + AI_CREATION_PERSONALITY_CATEGORY_PREVIEW: 143, + AI_CREATION_PERSONALITY_SUBMIT: 144, + AI_CREATION_AVATAR_CREATE_PREVIEWED: 145, + AI_CREATION_AVATAR_SUBMIT: 146, + AI_CREATION_AUDIENCE_PUBLIC: 147, + AI_CREATION_AUDIENCE_ONLY_ME: 148, + AI_CREATION_CONFIRMED: 149, + AI_CREATION_DELETION_STARTED: 150, + AI_CREATION_DELETION_COMPLETED: 151, + AI_CREATION_REPORT_STARTED: 152, + AI_CREATION_REPORT_COMPLETED: 153, + AI_CREATION_NAMING_PREVIEWED: 154, + AI_CREATION_NAMING_SUBMIT: 155, + AI_CREATION_INTRO_PREVIEWED: 156, + AI_CREATION_INTRO_SUBMIT: 157, + AI_CREATION_REVIEW_PREVIEWED: 158, + AI_CREATION_SUBMIT: 159, + AI_CHAT_THREAD_VOICE_VIEW: 160, + AI_VOICE_CONVERSATION_STARTER_VIEW: 161, + AI_HIDE_REQUEST_SUBMITTED: 162, + AI_CHARACTER_EXPLORE_VIEWED: 163, + META_AI_CHAT_THREAD_VIEWED_TEXT: 164, + META_AI_CHAT_THREAD_VIEWED_VOICE: 165, + TAP_TO_FORWARD: 166, + TAP_TO_COPY: 167, + TAP_TO_STAR: 168, + TAP_TO_DELETE: 169, + TAP_TO_REACT: 170, + SWIPE_TO_REPLY: 171, + AI_CREATION_AVATAR_EDIT_CLICK: 172, + AI_CREATION_AVATAR_CREATE_NEW: 173, + AI_CREATION_VOICE_SELECTION_PREVIEWED: 174, + AI_CREATION_NAMING_EDIT_SAVED: 175, + AI_CREATION_DESCRIPTION_EDIT_SAVED: 176, + AI_CREATION_INTRODUCTION_EDIT_SAVED: 177, + AI_CREATION_WELCOME_MSG_SAVED: 178, + AI_CREATION_ICEBREAKER_SAVED: 179, + AI_CREATION_INSTRUCTIONS_SAVED: 180, + AI_CREATION_INSTRUCTIONS_DELETED: 181, + AI_CREATION_EXAMPLE_DIALOG_SAVED: 182, + AI_CREATION_EXAMPLE_DIALOG_DELETED: 183, + AI_CREATION_ADVANCED_SETTINGS_PREVIEWED: 184, + AI_CREATION_VOICE_PREVIEWED: 185, + AI_CREATION_VOICE_SUBMIT: 186, + AI_VOICE_TOS_ACCEPT_CLICK: 187, + AI_VOICE_TOS_VIEW: 188, + AI_CREATION_AVATAR_REGENERATION: 189, + AI_VOICE_RING_TAP_CLICK: 190, + AI_VOICE_RING_UNDO_MUTE_UNMUTE: 191, + AI_HOME_BOUNCE: 192, + AI_CREATION_AVATAR_EDIT_BUTTON_CLICK: 193, + AI_CREATION_AVATAR_EDIT_DONE: 194, + AI_CREATION_AVATAR_EDIT_SUBMIT: 195, + AI_CREATION_AVATAR_CROP_CLICK: 196, + AI_CREATION_AVATAR_CROP_DONE: 197, + AI_CREATION_IMAGE_UPLOAD_CLICK: 198, + AI_CREATION_IMAGE_UPLOAD_DONE: 199, + AI_CREATION_AVATAR_EDIT_PREVIEWED: 200 + } + ], + additionalCategory: [ + 11, + { + META_AI_MODEL_BASE: 1, + META_AI_MODEL_PREMIUM: 2 + } + ], + aiCreationAvatarCropChanges: [38, 'string'], + aiCreationInputType: [ + 29, + { + SUGGESTION: 1, + USER_INPUT: 2, + USER_INPUT_AND_SUGGESTION: 3 + } + ], + aiCreationPersonalityCategoryInsert: [26, 'string'], + aiCreationPersonalityCategorySelect: [27, 'string'], + aiDiscoveryTab: [4, 'string'], + aiSessionId: [18, 'string'], + aiVoiceOnSelectionDefault: [24, 'boolean'], + aiVoiceSelectionEnum: [25, 'string'], + appSessionId: [2, 'string'], + botDiscoveryPath: [ + 8, + { + CURATED_DISPLAY: 1, + SEARCH: 2, + VIEW_ALL: 3, + DEEPLINK_USER_SHARED: 4 + } + ], + botEntryPoint: [ + 7, + { + WA_CHAT: 1, + STATUS: 2, + NEW_CHAT: 3, + INVOKE: 4, + SHARED_AI: 5, + NOTIFICATION: 6, + BANNER: 7, + AI_CHATS_LIST_BUTTON: 8, + AI_CONTACT_ON_WA: 9, + DEEPLINK_USER_SHARED: 10, + DEEPLINK_QP: 11, + AI_SEARCH_CHATS_LIST: 12, + CHAT_INFO_PAGE: 13, + AI_VOICE: 14, + AI_CHAT_SHORTCUT: 15, + AI_IMAGINE_BOTTOM_SHEET: 16, + AI_HOME_PREVIEW: 17, + AI_SEARCH_CHATS_LIST_VOICE: 18, + AI_CHAT_THREAD_VOICE: 19, + AI_FAB_VOICE: 20, + CHAT_INFO_SETTINGS: 21, + CHAT_THREAD: 22, + AI_MEMORY_BOTTOM_SHEET: 23, + FORWARD: 24, + AI_MEMORY_SYSTEM_MESSAGE: 25, + AI_WIDGET: 26, + SHARE: 27, + AI_NEW_FAB_VOICE: 28, + AI_TAB_DISCOVERY: 29, + CHAT_LIST: 30, + AI_TAB: 31, + AI_HOME_IN_TAB: 32, + AI_NULL_STATE: 33, + AI_STUDIO_CREATION: 34, + AI_STUDIO_PROFILE_EDIT: 35, + BOT_SETTINGS: 36, + META_AI_LONG_PRESS_CONTEXT_MENU: 37, + FAB: 38, + AI_NEW_FAB_VOICE_CALL_HISTORY: 39, + AI_STUDIO_CREATION_FAB: 40, + INVOKE_META_AI_1ON1: 41, + INVOKE_META_AI_GROUP: 42, + AI_STUDIO_YOUR_AI: 43, + ASK_META_AI_CONTEXT_MENU: 44 + } + ], + botPersonaId: [5, 'string'], + callRandomId: [13, 'string'], + conversationStarterCategory: [22, 'string'], + conversationStarterIndex: [23, 'integer'], + conversationStarterPromptMode: [28, 'string'], + deviceLanguage: [16, 'string'], + discoveryOrigin: [ + 19, + { + AI_TAB: 1, + AI_HOME: 2, + AI_HOME_IN_TAB: 3 + } + ], + inlineTosNoticeId: [20, 'string'], + inlineTosStatus: [ + 21, + { + SUCCESS: 1, + FAIL: 2 + } + ], + isMetaAiAssistant: [12, 'boolean'], + isMetaAiCharacterBotChat: [9, 'boolean'], + isUserCreatedAgent: [10, 'boolean'], + metricCount: [17, 'integer'], + uiSurface: [ + 6, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + xmaReelIndex: [14, 'integer'], + xmaReelMaxIndex: [15, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SearchTheWebFunnel', + id: 5702, + props: { + imageSearchFailedErrorType: [ + 5, + { + NON_200_RESPONSE: 0, + NON_302_RESPONSE: 1, + NULL_RESPONSE_BODY: 2, + DECODE_OR_PARSE_ERROR: 3, + NO_REDIRECT_URL: 4, + INVALID_URL: 5, + CONSENT_FORM_IN_URL: 6, + NETWORK_ERROR: 7, + UNKNOWN_ERROR: 8 + } + ], + messageType: [ + 1, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + stwEntryPoint: [ + 2, + { + HIGHLY_FORWARDED_MESSAGE: 0, + URL_LONG_PRESS: 1, + MEDIA_VIEWER: 2, + CONTEXT_MENU: 3 + } + ], + stwFormat: [ + 3, + { + SINGLE_LINK: 0, + SINGLE_IMAGE: 1, + SINGLE_TEXT: 2, + MULTIPLE_LINK_IMAGE: 3, + MULTIPLE_LINK_TEXT: 4, + MULTIPLE_IMAGE_TEXT: 5, + MULTIPLE_LINK_IMAGE_TEXT: 6 + } + ], + stwInteraction: [ + 4, + { + ENTRY_POINT_SURFACED: 0, + ENTRY_POINT_CLICKED: 1, + LINK_SEARCH_CLICKED: 2, + IMAGE_SEARCH_CLICKED: 3, + TEXT_SEARCH_CLICKED: 4, + SEARCH_CLICKED: 5, + STW_DISMISSED: 6, + LEARN_MORE_CLICKED: 7, + LINK_OPEN_CLICKED: 8, + LINK_COPY_CLICKED: 9, + LINK_ADD_TO_READING_LIST: 10, + IMAGE_SEARCH_REDIRECT: 11, + IMAGE_SEARCH_FAILED: 12 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'VideoTranscoder', + id: 1802, + props: { + sourceAudioBitRate: [12, 'number'], + sourceDuration: [8, 'timer'], + sourceFileSize: [7, 'number'], + sourceFormat: [ + 14, + { + SLOMO: 0, + VIDEO: 1, + GIF: 2 + } + ], + sourceFrameRate: [13, 'number'], + sourceHeight: [10, 'number'], + sourceVideoBitRate: [11, 'number'], + sourceWidth: [9, 'number'], + targetAudioBitRate: [20, 'number'], + targetDuration: [16, 'timer'], + targetFileSize: [15, 'number'], + targetFormat: [ + 22, + { + IMAGE: 0, + VIDEO: 1, + GIF: 2 + } + ], + targetFrameRate: [21, 'number'], + targetHeight: [18, 'number'], + targetVideoBitRate: [19, 'number'], + targetWidth: [17, 'number'], + transcoderAlgorithm: [ + 1, + { + WA_IPHONE: 0, + FB_IPHONE: 1 + } + ], + transcoderContainsVideocomposition: [5, 'boolean'], + transcoderHasEdits: [6, 'boolean'], + transcoderIsPassthrough: [4, 'boolean'], + transcoderResult: [ + 2, + { + UNKNOWN: 0, + SUCCEEDED: 1, + FAILED: 2, + CANCELLED: 3 + } + ], + transcoderT: [3, 'timer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SyncdKeyCount', + id: 3978, + props: { + keysUsedInSnapshotCount: [1, 'integer'], + p80MuationsPerKey: [2, 'integer'], + p95MuationsPerKey: [3, 'integer'], + syncdSessionLengthDays: [4, 'integer'], + totalKeyCount: [5, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'Ptt', + id: 458, + props: { + isMetaAiThread: [15, 'boolean'], + pttAvgNoiseLoudness: [11, 'number'], + pttAvgNoiseLoudnessReduction: [12, 'number'], + pttAvgSpeechLoudness: [13, 'number'], + pttAvgSpeechLoudnessReduction: [14, 'number'], + pttDraftPlayCnt: [7, 'integer'], + pttDraftSeekCnt: [8, 'integer'], + pttDuration: [5, 'timer'], + pttLock: [4, 'boolean'], + pttPauseCnt: [9, 'integer'], + pttResult: [ + 1, + { + SENT: 1, + CANCELLED: 2, + TOO_SHORT: 3 + } + ], + pttSize: [3, 'number'], + pttSource: [ + 2, + { + FROM_CONVERSATION: 0, + FROM_VOICEMAIL: 1 + } + ], + pttStop: [6, 'boolean'], + pttStopTapCnt: [10, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'StickerSend', + id: 1840, + props: { + stickerIsAi: [7, 'boolean'], + stickerIsAnimated: [3, 'boolean'], + stickerIsAvatar: [6, 'boolean'], + stickerIsFirstParty: [2, 'boolean'], + stickerIsFromStickerMaker: [5, 'boolean'], + stickerIsFromUserCreatedPack: [12, 'boolean'], + stickerIsGiphy: [10, 'boolean'], + stickerIsLottie: [9, 'boolean'], + stickerIsTenor: [11, 'boolean'], + stickerMakerSourceType: [ + 8, + { + CUTOUT_IMAGE: 1, + WEB_STICKER_MAKER: 2, + IOS_STICKER_MAKER: 3, + ANDROID_STICKER_MAKER: 4, + TRANSPARENT_IMAGE: 5, + GIF: 6 + } + ], + stickerSendMessageType: [ + 4, + { + REGULAR: 1, + PAYMENTS: 2 + } + ], + stickerSendOrigin: [ + 1, + { + STICKER_SEARCH: 1, + FORWARD: 2, + STICKER_PICKER_TAB_RECENTS: 3, + STICKER_PICKER_TAB_FAVORITES: 4, + STICKER_PICKER_TAB_EMOTION: 5, + STICKER_PICKER_TAB_PACK: 6, + STICKER_PICKER_TAB_CONTEXTUAL_SUGGESTIONS: 7, + STICKER_MAKER: 8, + STICKER_STORE: 9, + AI_STICKER_CREATE: 10, + AI_STICKER_CREATE_TRAY: 11, + AI_STICKER_CREATE_CHAT: 12, + STATUS_QUICK_REPLY: 13, + DISCOVERY_PACK: 14, + STICKER_FROM_DEVICE_KEYBOARD: 15, + STICKER_PACK_INFO: 16, + CONVERSATION_STARTER: 17 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelDiscoveryVisibilityTracking', + id: 5766, + props: { + channelCategoryIndex: [1, 'integer'], + channelCategoryName: [2, 'string'], + channelDirectorySessionId: [3, 'integer'], + channelEventUnit: [ + 4, + { + RECOMMENDED_CHANNELS: 1, + SIMILAR_CHANNELS: 2, + RECENT_SEARCHES: 3 + } + ], + channelIndex: [5, 'integer'], + cid: [6, 'string'], + countrySelector: [7, 'string'], + discoverySurface: [ + 8, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + isSubImpression: [16, 'boolean'], + pillSelected: [ + 11, + { + RECOMMENDED: 1, + TRENDING: 2, + FEATURED: 3, + NEW: 4, + POPULAR: 5 + } + ], + similarChannelsSessionId: [13, 'integer'], + unifiedSessionId: [14, 'string'], + updatesTabSessionId: [17, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'UpdatesTabSearch', + id: 4838, + props: { + channelsAdminCount: [5, 'integer'], + channelsFollowedCount: [1, 'integer'], + premiumChannelsFollowedCount: [8, 'integer'], + recentStatusItemCount: [2, 'integer'], + recentStatusRowCount: [3, 'integer'], + updateTabSearchEventType: [ + 4, + { + SEARCH_TAP: 1, + SEARCH: 5, + SERP_LOADED: 6, + SEARCH_RESULT_SCROLL: 7, + SEARCH_SUBMIT: 8, + ITEM_TAP: 9, + ITEM_REMOVE: 10, + FOLLOW: 11, + UNFOLLOW: 12 + } + ], + updatesTabSearchModeType: [ + 11, + { + QUERY: 0, + RECENT: 1 + } + ], + updatesTabSearchResultType: [ + 9, + { + STATUS: 0, + FOLLOWED_CHANNELS: 1, + OTHER_CHANNELS: 2, + SEARCH_QUERY: 3, + CONTACT: 4 + } + ], + updatesTabSearchSessionId: [10, 'string'], + viewedStatusItemCount: [6, 'integer'], + viewedStatusRowCount: [7, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BusinessUnmute', + id: 1378, + props: { + muteeId: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdBootstrapAppStateCriticalDataProcessing', + id: 3164, + props: { + bootstrapAppStateDataStage: [ + 1, + { + REQUEST_BUILT: 1, + RESPONSE_RECEIVED: 2, + RESPONSE_PARSED_VALID: 3, + MISSING_KEYS_REQUESTED: 4, + MISSING_KEYS_RECEIVED: 5, + MUTATIONS_DECRYPTED: 6, + ABOUT_TO_APPLY_MUTATIONS: 7, + APPLIED_MUTATIONS: 8, + PUSHNAME_APPLIED: 9, + PUSHNAME_INVALID: 10, + ENTERED_RETRY_MODE: 11 + } + ], + mdBootstrapPayloadType: [ + 2, + { + CRITICAL: 1, + NON_CRITICAL: 2 + } + ], + mdRegAttemptId: [3, 'string'], + mdSessionId: [4, 'string'], + mdTimestamp: [5, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CommunityFeatureUsage', + id: 3696, + props: { + communityId: [2, 'string'], + communityUiAction: [ + 4, + { + ENTRY: 1, + GROUP_NAV: 2, + GROUP_ADD: 3, + COMMUNITY_NAV: 4 + } + ], + communityUiFeature: [ + 3, + { + SUBGROUP_SWITCH: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupSafetyCheckSheetSeen', + id: 6240, + props: { + integrityGroupUserHashedId: [2, 'string'], + psSafetyCheckGroupJid: [1, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 216763284, + weight: 1 + }, + { + name: 'ChannelCoreEvent', + id: 4692, + props: { + channelCoreEventSequenceNumber: [8, 'integer'], + channelCoreEventType: [ + 1, + { + FOLLOW: 1, + UNFOLLOW: 2, + MUTE: 3, + UNMUTE: 4, + PREMIUM_SUBSCRIBE: 5, + PREMIUM_UNSUBSCRIBE: 6, + CHANNEL_PREMIUM_SETUP: 7, + CHANNEL_PREMIUM_CANCEL: 8, + HIDE: 9, + UNHIDE: 10 + } + ], + channelDirectorySessionId: [7, 'integer'], + channelEntryPoint: [ + 2, + { + UNKNOWN: 0, + UPDATES_TAB: 1, + DIRECTORY: 2, + LINK: 3, + DEEPLINK: 4, + FORWARDED_MESSAGE: 5, + DIRECTORY_SEARCH: 6, + RECOMMENDED_LIST: 7, + NOTIFICATION: 8, + UPDATES_TAB_SEARCH: 9, + STATUS: 10, + ADMIN_INVITE_MESSAGE: 11, + MEDIA_BROWSER: 12, + SIMILAR_CHANNEL: 13, + DIRECTORY_CATEGORIES: 14, + DIRECTORY_CATEGORIES_SEARCH: 15, + NEWSLETTER_MEDIA_GALLERY_MEDIA: 16, + NEWSLETTER_MEDIA_GALLERY_LINKS: 17, + THREAD_CHAIN_PILL: 18, + THREAD_CHAIN_SWIPE_UP: 19, + RECENT_SEARCHES: 20 + } + ], + channelEntryPointApp: [ + 3, + { + EXTERNAL_UNKNOWN: 1, + WHATSAPP: 2 + } + ], + channelEntryPointMetadata: [ + 10, + { + STATUS_HEADER: 1, + LINK_TOOLTIP: 2, + LINK_BUTTON: 3, + POST_TOOLTIP: 4 + } + ], + channelEventUnit: [ + 12, + { + RECOMMENDED_CHANNELS: 1, + SIMILAR_CHANNELS: 2, + RECENT_SEARCHES: 3 + } + ], + cid: [4, 'string'], + directoryChannelIndex: [9, 'integer'], + discoverySurface: [ + 14, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + entryPointMetadata: [5, 'string'], + eventSurface: [ + 6, + { + CHANNEL_UPDATES_HOME: 1, + CHANNEL_THREAD: 2, + CHANNEL_DIRECTORY: 3, + CHANNEL_DIRECTORY_SEARCH: 4, + CHANNEL_PROFILE: 5, + CHANNEL_UPDATES_HOME_SEARCH: 6, + CHANNEL_DIRECTORY_CATEGORIES: 7, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 8 + } + ], + similarChannelsSessionId: [13, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcFingerprint', + id: 1704, + props: { + browserEngine: [ + 26, + { + BLINK: 0, + GECKO: 1, + WEBKIT: 2, + UNKNOWN: 3 + } + ], + connectionRtt: [37, 'integer'], + cpuMake: [38, 'string'], + deviceMemory: [39, 'string'], + extentionIds: [27, 'string'], + externalSources: [36, 'string'], + gpuMake: [40, 'string'], + hasChrome: [28, 'boolean'], + hasTaskbar: [29, 'boolean'], + hasWebShare: [30, 'boolean'], + historyLength: [41, 'integer'], + mimeTypeCount: [31, 'integer'], + notificationPermission: [32, 'boolean'], + pdfViewerEnabled: [33, 'boolean'], + peripherals: [42, 'string'], + platformEstimate: [ + 34, + { + WINDOWS: 0, + MAC: 1, + LINUX: 2, + ANDROID: 3, + CHROME_OS: 4, + IOS: 5, + UNKNOWN: 6 + } + ], + pluginCount: [35, 'integer'], + screenResolution: [43, 'string'], + sessionStorageLength: [44, 'integer'], + timezone: [45, 'string'], + touchPresence: [46, 'boolean'], + viewportSize: [47, 'string'], + webcCanvasFingerprint: [25, 'string'], + webcWebglFingerprint: [24, 'string'], + webcWebglRenderer: [23, 'string'], + webcWebglVendor: [22, 'string'], + webcWindowNavigatorWebdriver: [ + 21, + { + FALSE: 0, + TRUE: 1, + UNDEFINED: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'DisappearingMessageKeepInChat', + id: 3482, + props: { + canEditDmSettings: [16, 'boolean'], + chatEphemeralityDuration: [1, 'integer'], + isAGroup: [2, 'boolean'], + isAdmin: [3, 'boolean'], + keptCount: [15, 'integer'], + keptDelta: [4, 'integer'], + kicActionName: [ + 5, + { + KEEP_MESSAGE: 1, + UNKEEP_MESSAGE: 2, + VIEW_KEPT_MESSAGES: 3, + SEARCH_RESULTS_DISPLAY: 4, + SEARCH_RESULTS_TAP: 5 + } + ], + kicActor: [ + 6, + { + SENDER: 1, + RECIPIENT: 2 + } + ], + kicEntryPoint: [ + 7, + { + CHAT_INFO: 1, + SEARCH: 2, + CHAT: 3, + MEDIA: 4, + DOCS: 5, + LINKS: 6 + } + ], + mediaType: [ + 8, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageExpiredOnUnkeep: [9, 'boolean'], + messageExpiryTimer: [10, 'integer'], + messagesInFolder: [11, 'integer'], + messagesSelected: [12, 'integer'], + threadId: [13, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatLockAction', + id: 4212, + props: { + actionEntryPoint: [ + 3, + { + CHAT_INFO: 0, + CHAT_CONTEXT_MENU: 1, + NOTIFICATIONS: 2, + CONTACTS: 3, + CHAT_LIST: 4, + UNKNOWN: 5, + PRIVATE_REPLY: 6, + STATUS_REPLY: 7, + SEARCH: 8, + DIRECT_MESSAGE: 9, + PRIVACY_SETTINGS: 10, + CHAT_LONG_PRESS_OPTIONS: 11, + CHAT_MORE_OPTIONS: 12 + } + ], + actionFolderChatsCount: [4, 'integer'], + authType: [ + 5, + { + SECRET_CODE: 0, + OTHER: 1 + } + ], + chatLockActionType: [ + 1, + { + CHAT_INFO_IMPRESSION: 0, + LOCK_CHAT_SCREEN_IMPRESSION: 1, + AUTH_INITIATED: 2, + AUTH_SUCCEEDED: 3, + SET_UP_AUTH_IMPRESSION: 4, + ADD_CHAT_LOCK: 5, + REMOVE_CHAT_LOCK: 6, + CLEAR_AND_UNLOCK_IMPRESSION: 7, + CLEAR_AND_UNLOCK_SUCCESS: 8, + CLEAR_AND_UNLOCK_FAILURE: 9, + AUTH_FAILURE: 10, + BOTTOM_SHEET_IMPRESSION: 11, + BOTTOM_SHEET_CONTINUE_CLICK: 12, + BOTTOM_SHEET_LEARN_MORE_CLICK: 13, + FOLDER_OPEN: 14, + FORGOT_SECRET_CODE: 15, + UNLOCK_AND_CLEAR_WARNING: 16, + USE_SECRET_CODE_AUTH: 17 + } + ], + chatLockIsGroup: [2, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMemoryStat', + id: 1188, + props: { + appContext: [26, 'string'], + appContextBitfield: [27, 'integer'], + chatCollectionSize: [17, 'integer'], + chatDbSize: [18, 'integer'], + contactCollectionSize: [19, 'integer'], + contactDbSize: [20, 'integer'], + isForeground: [13, 'boolean'], + jsHeapSizeLimit: [9, 'integer'], + messageCollectionSize: [24, 'integer'], + messageDbSize: [25, 'integer'], + peakUsedJsHeapSize: [14, 'integer'], + scenario: [ + 15, + { + INITIAL_PAIRING: 0, + OFFLINE_RESUME: 1, + IDLE: 2, + RECENT_HISTORY_SYNC: 3, + CHAT_NAVIGATION: 4 + } + ], + totalJsHeapSize: [10, 'integer'], + uptime: [6, 'number'], + usedJsHeapSize: [11, 'integer'], + usedJsHeapSizeDelta: [16, 'integer'], + webcRuntimeEnv: [ + 23, + { + MAIN: 1, + WEB_WORKER: 2, + SERVICE_WORKER: 3 + } + ] + }, + wamChannel: 'regular', + weight: 10 + }, + { + name: 'WebcMediaEditorSend', + id: 2890, + props: { + blurImageCount: [7, 'integer'], + editedImageCount: [2, 'integer'], + emojiLayerCount: [5, 'integer'], + imageCount: [1, 'integer'], + paintedImageCount: [3, 'integer'], + stickerLayerCount: [6, 'integer'], + textLayerCount: [4, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebContactListStartNewChat', + id: 4560, + props: { + webContactListStartNewChatSearch: [1, 'boolean'], + webContactListStartNewChatType: [ + 2, + { + CONTACT: 1, + GROUP: 2, + CONTACTLESS: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'InvalidMacIncomingMutation', + id: 6072, + props: { + collection: [ + 1, + { + REGULAR: 1, + REGULAR_LOW: 2, + REGULAR_HIGH: 3, + CRITICAL_BLOCK: 4, + CRITICAL_UNBLOCK_LOW: 5 + } + ], + doesIndexExistLocally: [2, 'boolean'], + isSenderPrimary: [3, 'boolean'], + mutationActionName: [4, 'string'], + mutationIndexMac: [5, 'string'], + mutationOperationType: [ + 6, + { + SET: 0, + REMOVE: 1 + } + ], + patchSenderPlatform: [ + 7, + { + ANDROID: 1, + SMBA: 2, + IPHONE: 3, + SMBI: 4, + WEB: 5, + WINDOWS: 6, + DARWIN: 7, + IPAD: 8, + WEAROS: 9 + } + ], + patchVersionNum: [8, 'integer'], + senderDeviceId: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcButterbarEvent', + id: 3932, + props: { + webcButterbarAction: [ + 1, + { + IMPRESSION: 1, + CLICK_CTA: 2, + CLICK_DISMISS: 3, + AUTO_DISMISS: 4 + } + ], + webcButterbarType: [ + 2, + { + OFFLINE: 1, + RESUME_CONNECTING: 2, + RESUME_LOADING_MSGS_PROGRESS: 3, + UPDATE_DUE_TO_SOFT_MIN: 4, + UWP_UPSELL: 5, + NOTIFICATION: 6, + OFFLINE_NOTIFICATION: 7 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdBootstrapAppStateDataDownloaded', + id: 2294, + props: { + appContext: [14, 'string'], + appContextBitfield: [15, 'integer'], + applicationState: [ + 13, + { + FOREGROUND: 1, + BACKGROUND: 2 + } + ], + mdBootstrapContactsCount: [5, 'integer'], + mdBootstrapHistoryPayloadType: [ + 11, + { + INITIAL: 1, + RECENT_HISTORY: 2, + FULL_HISTORY: 3, + PUSHNAME: 4, + STATUS_V3: 5, + NON_BLOCKING_DATA: 6, + ON_DEMAND: 7 + } + ], + mdBootstrapPayloadSize: [4, 'integer'], + mdBootstrapPayloadType: [ + 2, + { + CRITICAL: 1, + NON_CRITICAL: 2 + } + ], + mdBootstrapStepDuration: [6, 'integer'], + mdBootstrapStepResult: [ + 7, + { + SUCCESS: 1, + FAILURE: 2 + } + ], + mdRegAttemptId: [10, 'string'], + mdSessionId: [1, 'string'], + mdStorageQuotaBytes: [8, 'integer'], + mdStorageQuotaUsedBytes: [9, 'integer'], + mdTimestamp: [3, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcSocketConnect', + id: 5450, + props: { + webcAuthHandshakeDuration: [1, 'timer'], + webcSocketConnectDuration: [2, 'timer'], + webcSocketConnectReason: [ + 3, + { + PAGE_LOAD: 0, + RECONNECT: 1 + } + ], + webcSocketHostname: [4, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'DisappearingModeSettingChange', + id: 3056, + props: { + disappearingModeEntryPoint: [ + 4, + { + ACCOUNT_SETTINGS: 1, + SYSTEM_MESSAGE: 2, + INDIVIDUAL_CHAT_DISAPPEARING_MESSAGES_SETTING: 3, + GROUP_CHAT_DISAPPEARING_MESSAGES_SETTING: 4, + DEEP_LINK: 5, + STORAGE_SETTINGS: 6, + PRIVACY_SETTINGS: 7 + } + ], + lastToggleTimestamp: [3, 'integer'], + newEphemeralityDuration: [2, 'integer'], + previousEphemeralityDuration: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'AddressingModeMismatch', + id: 4750, + props: { + iqResponse: [ + 1, + { + ADD_PARTICIPANT: 1, + REMOVE_PARTICIPANT: 2, + PROMOTE_PARTICIPANT: 3, + DEMOTE_PARTICIPANT: 4 + } + ], + localAddressingMode: [ + 2, + { + PN: 1, + LID: 2 + } + ], + mismatchOrigin: [ + 6, + { + INCOMING_GROUP_MESSAGE: 1, + ACK_OUTGOING_MESSAGE: 2, + GROUP_NOTIFICATION: 3, + GROUP_PROFILE_PICTURE_NOTIFICATION: 4, + IQ_RESPONSES: 5 + } + ], + notificationTag: [3, 'string'], + serverAddressingMode: [ + 5, + { + PN: 1, + LID: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'DeepLinkClick', + id: 1156, + props: { + deepLinkHasPhoneNumber: [2, 'boolean'], + deepLinkHasText: [1, 'boolean'], + deepLinkHasUsername: [4, 'boolean'], + deepLinkHasUsernamePin: [5, 'boolean'], + deepLinkRequirePinEntry: [6, 'boolean'], + deepLinkSessionId: [3, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupOpened', + id: 6236, + props: { + integrityGroupUserHashedId: [4, 'string'], + isGroupSafetyCheckAbpropEnabled: [2, 'boolean'], + isPartOfGroupSafetyCheckExperiment: [3, 'boolean'], + openedGroupJid: [1, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 216763284, + weight: 1 + }, + { + name: 'DeepLinkConversion', + id: 1432, + props: { + callInitiator: [ + 8, + { + BUSINESS: 0, + CONSUMER: 1 + } + ], + ctwaChatCreationMode: [ + 4, + { + JID: 0, + LID: 1 + } + ], + ctwaConversionType: [ + 3, + { + FIRST_MESSAGE: 0, + DEEP_CONVERSATION: 1, + FIRST_BIZ_REPLY: 2, + FIRST_CALL: 3, + FIRST_LONG_CALL: 4, + SECOND_MESSAGE: 5, + SECOND_BIZ_REPLY: 6, + THIRD_MESSAGE: 7, + CART_RECEIVED: 8, + ORDER_CREATED: 9, + FIRST_MESSAGE_CONTINUATION: 10, + FIRST_BIZ_REPLY_CONTINUATION: 11, + SECOND_MESSAGE_CONTINUATION: 12, + SECOND_BIZ_REPLY_CONTINUATION: 13, + THIRD_MESSAGE_CONTINUATION: 14 + } + ], + ctwaSignals: [9, 'string'], + deepLinkConversionData: [2, 'string'], + deepLinkConversionSource: [1, 'string'], + isPriority: [7, 'boolean'], + trustBannerAction: [ + 5, + { + VIEWED: 0, + DISMISSED: 1 + } + ], + trustBannerType: [6, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'EditBusinessProfile', + id: 1466, + props: { + businessProfileEntryPoint: [ + 10, + { + REGISTRATION: 1, + SETTINGS: 2, + COMPLIANCE: 3, + QUICK_REPLY_SMART_DEFAULT: 4, + WA_PAGES: 5, + PROFILE_COMPLETENESS: 6, + DIRECTORY_ONBOARDING: 7, + BUSINESS_HOME: 8, + DEEPLINK: 9, + CHAT_BANNER: 10, + BUSINESS_SEARCH: 11, + META_VERIFIED: 12 + } + ], + editBusinessProfileSessionId: [2, 'string'], + editProfileAction: [ + 1, + { + ACTION_OPEN: 1, + ACTION_SAVE: 2, + ACTION_DISCARD: 3, + ACTION_PROFILE_FIELD_OPEN: 4, + ACTION_PROFILE_FIELD_SAVE: 5, + ACTION_PROFILE_FIELD_DISCARD: 6, + ACTION_FACEBOOK_ENABLED: 7, + ACTION_FACEBOOK_DISABLED: 8, + ACTION_INSTAGRAM_ENABLED: 9, + ACTION_INSTAGRAM_DISABLED: 10, + ACTION_FB_IG_POP_SHOWN: 11, + ACTION_EDIT_COVER_PHOTO_CLICK: 12, + ACTION_REMOVE_COVER_PHOTO: 13, + UPGRADE_TO_CUSTOM_LINK_CLICK: 14, + DIALOG_BOX_GEOCODE_IMPRESSION: 15, + DIALOG_BOX_GEOCODE_ACCEPT: 16, + DIALOG_BOX_GEOCODE_REVOKE: 17 + } + ], + editProfileActionField: [ + 9, + { + DESCRIPTION: 1, + HOURS: 2, + ADDRESS: 3, + EMAIL: 4, + WEBSITE: 5, + CATEGORY: 6, + PROFILE: 7, + PIX: 8 + } + ], + hasAddress: [5, 'boolean'], + hasCategory: [4, 'boolean'], + hasDescription: [3, 'boolean'], + hasEmail: [7, 'boolean'], + hasHours: [6, 'boolean'], + hasPaymentInfo: [11, 'boolean'], + hasWebsite: [8, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupExitExperienceGroupAction', + id: 6332, + props: { + psGroupExitExperienceAction: [ + 1, + { + GROUP_DELETED: 0, + GROUP_EXITED: 1 + } + ], + psGroupExitExperienceEnabled: [2, 'boolean'], + psGroupExitExperienceGroupJid: [3, 'string'], + psGroupExitExperienceTouchPoint: [ + 4, + { + CHAT_LIST_LONG_PRESS: 0, + CHAT_OVERFLOW_MENU: 1, + GROUP_INFO: 2, + FGX_CARD: 3, + SUSPICIOUS_CHAT_BANNER: 4, + IOS_SWIPE_MENU: 5, + WEB_CONTEXT_MENU: 6, + ANDROID_MULTIPLE_CHAT_LONG_PRESS: 7, + GROUP_SAFETY_CHECK: 8 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 152546501, + weight: 1 + }, + { + name: 'WebcLinkPreviewDisplay', + id: 3864, + props: { + didFallbackNonHq: [2, 'boolean'], + didRequestHq: [3, 'boolean'], + didRespondHqPreview: [4, 'boolean'], + webcDisplayStatus: [ + 1, + { + SHOWED_PREVIEW_TO_USER: 1, + PREVIEW_TIMEOUT: 2, + PREVIEW_MALFORMED: 3, + PREVIEW_NOT_FOUND: 4, + PREVIEW_GENERAL_ERROR: 5, + PREVIEW_DECRYPTION_ERROR: 6 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdRetryFromUnknownDevice', + id: 2178, + props: { + offline: [2, 'boolean'], + senderType: [ + 1, + { + PRIMARY: 1, + COMPANION: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PinInChatMessageSend', + id: 4438, + props: { + groupRole: [ + 1, + { + ADMIN: 1, + MEMBER: 2 + } + ], + groupTypeClient: [ + 2, + { + REGULAR_GROUP: 1, + SUB_GROUP: 2, + DEFAULT_SUB_GROUP: 3, + PARENT_GROUP: 4 + } + ], + isAGroup: [3, 'boolean'], + isSelfParentMessage: [7, 'boolean'], + isSelfPin: [8, 'boolean'], + mediaType: [ + 4, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + pinInChatExpirySecs: [5, 'integer'], + pinInChatType: [ + 6, + { + PIN_FOR_ALL: 1, + UNPIN_FOR_ALL: 2 + } + ], + timeRemainingToExpirySecs: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'InlineVideoPlaybackClosed', + id: 2032, + props: { + inlineVideoCancelBeforePlayStateT: [7, 'timer'], + inlineVideoComplete: [8, 'boolean'], + inlineVideoCompletionRate: [9, 'integer'], + inlineVideoCtaClick: [ + 10, + { + LOGO: 1, + MUSIC: 2, + AUTHOR: 3, + WATCH_MORE_END: 4 + } + ], + inlineVideoDurationT: [2, 'timer'], + inlineVideoError: [11, 'string'], + inlineVideoHasRcat: [13, 'boolean'], + inlineVideoPlayStartT: [6, 'timer'], + inlineVideoPlayed: [3, 'boolean'], + inlineVideoStallT: [4, 'timer'], + inlineVideoType: [ + 1, + { + FACEBOOK: 1, + FACEBOOK_WATCH: 2, + INSTAGRAM: 3, + YOUTUBE: 4, + STREAMABLE: 5, + NETFLIX: 6, + LASSO: 7, + SHARECHAT: 8, + SPOTIFY: 9, + APPLEMUSIC: 10, + TIDAL: 11, + DEEZER: 12, + SOUNDCLOUD: 13, + QOBUZ: 14, + PANDORA: 15, + TIKTOK: 16, + FACEBOOK_MESSENGER: 17 + } + ], + inlineVideoWatchT: [5, 'timer'], + messageType: [ + 12, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelDirectory', + id: 4544, + props: { + channelCategoryIndex: [11, 'integer'], + channelCategoryName: [12, 'string'], + channelDirectoryAction: [ + 1, + { + DIRECTORY_OPEN_TAP: 1, + DIRECTORY_CLOSED_TAP: 2, + DIRECTORY_SEARCH_TAP: 3, + DIRECTORY_SERVER_ERROR: 4, + DIRECTORY_NAVIGATE_TO_CHANNEL: 5, + DIRECTORY_RETURN_FROM_CHANNEL: 6, + DIRECTORY_FOLLOW_TAP: 7, + DIRECTORY_UNFOLLOW_TAP: 8, + DIRECTORY_SORT_BY_RECENTLY_ADDED: 9, + DIRECTORY_SORT_BY_POPULARITY: 10, + DIRECTORY_SORT_BY_ALPHABETICALLY: 11, + DIRECTORY_IMP: 12, + DIRECTORY_SEARCH_IMP: 13, + DIRECTORY_PILL_SELECTION: 14, + DIRECTORY_COUNTRY_SELECTION: 15, + DIRECTORY_CATEGORY_SEE_ALL: 16, + SEARCH: 17, + SERP_LOADED: 18 + } + ], + channelDirectoryActionSequenceNumber: [5, 'integer'], + channelDirectoryEntryPoint: [ + 2, + { + SUGGESTED_CHANNELS: 1, + FIND_CHANNELS_MENU: 2, + DEEP_LINK: 3, + WAITLIST_NOTIFICATION: 4, + NUX_BANNER: 5, + FIND_CHANNELS_BUTTON: 6, + UPDATES_TAB_SEARCH: 7, + EXPLORE_SECTION_HEADER_BUTTON: 8, + UPDATES_TAB_SEARCH_NULL_STATE: 9 + } + ], + channelDirectorySearchSessionId: [14, 'string'], + channelDirectorySessionId: [3, 'integer'], + channelDirectorySurface: [ + 13, + { + CHANNEL_DIRECTORY_CATEGORIES: 1, + CHANNEL_DIRECTORY: 2 + } + ], + channelIndex: [6, 'integer'], + cid: [4, 'string'], + countrySelector: [8, 'string'], + impReason: [ + 9, + { + PILL_SELECTION: 1, + COUNTRY_SELECTION: 2, + NOT_APPLICABLE: 3 + } + ], + pillSelected: [ + 10, + { + RECOMMENDED: 1, + TRENDING: 2, + FEATURED: 3, + NEW: 4, + POPULAR: 5 + } + ], + searchMode: [7, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'OfflineCountTooHigh', + id: 2638, + props: { + callStanzaType: [ + 7, + { + OFFER: 0, + ACCEPT: 1, + REJECT: 2, + VIDEO: 3, + TERMINATE: 4, + ENC_REKEY: 5, + RELAYLATENCY: 6, + TRANSPORT: 7, + PREACCEPT: 8, + GROUP_UPDATE: 9, + MUTE_V2: 10, + INTERRUPTION: 11, + FLOWCONTROL: 12, + NOTIFY: 13, + OFFER_NOTICE: 14, + CALL_RELAY: 15, + MUTE: 16, + SCREEN_SHARE: 17, + UNKNOWN: 18 + } + ], + invisibleMessageCategory: [ + 8, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + mediaType: [ + 3, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 4, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + notificationStanzaType: [6, 'string'], + offlineCount: [2, 'integer'], + receiptStanzaType: [5, 'string'], + stanzaType: [ + 1, + { + MESSAGE: 1, + RECEIPT: 2, + CALL: 3, + NOTIFICATION: 4, + APPDATA: 5 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GatedMessageReceived', + id: 3152, + props: { + chatGatedReason: [ + 1, + { + TOS3: 1, + COUNTRY: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PrivacyHighlightDaily', + id: 3522, + props: { + dialogAppearCount: [1, 'integer'], + dialogSelectCount: [2, 'integer'], + narrativeAppearCount: [3, 'integer'], + privacyHighlightCategory: [ + 4, + { + E2EE: 0 + } + ], + privacyHighlightSurface: [ + 5, + { + GOLDEN_BOX_CONTACT: 0, + GOLDEN_BOX_GROUP: 1, + GOLDEN_BOX_BROADCAST: 2, + INFO_SCREEN_CONTACT: 3, + INFO_SCREEN_GROUP: 4, + INFO_SCREEN_BROADCAST: 5, + CALLS_LIST: 6, + CHATS_LIST: 7, + STATUS_LIST: 8, + LINKED_DEVICES_SCREEN: 9, + CALLING_SCREEN_AUDIO: 10, + CALLING_SCREEN_VIDEO: 11, + SPLIT_VIEW_HOME_PLACEHOLDER: 12 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'NotificationSetting', + id: 3684, + props: { + groupReactionNotification: [1, 'boolean'], + groupShowNotification: [2, 'boolean'], + groupSoundTone: [ + 3, + { + DEFAULT: 1, + CUSTOM: 2 + } + ], + inAppNotificationAlertStyle: [ + 4, + { + NONE: 1, + BANNERS: 2, + ALERTS: 3 + } + ], + inAppNotificationSound: [5, 'boolean'], + inAppNotificationVibrate: [6, 'boolean'], + messageReactionNotification: [7, 'boolean'], + messageShowNotification: [8, 'boolean'], + messageSoundTone: [ + 9, + { + DEFAULT: 1, + CUSTOM: 2 + } + ], + offlineNotification: [11, 'boolean'], + showPreview: [10, 'boolean'], + statusNotificationPriority: [14, 'boolean'], + statusNotificationVibration: [15, 'boolean'], + statusReactionNotification: [16, 'boolean'], + statusReminderNotification: [12, 'boolean'], + statusShowNotification: [18, 'boolean'], + statusSoundTone: [ + 17, + { + DEFAULT: 1, + CUSTOM: 2 + } + ], + unreadBadgeSetting: [ + 13, + { + CURRENT_UNREAD_COUNT: 0, + CLEAR_ON_APP_OPEN: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcImgError', + id: 1700, + props: { + webcImgErrorCode: [1, 'number'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelMessageVisibilityTracking', + id: 5998, + props: { + cid: [1, 'string'], + isStarredPost: [8, 'boolean'], + isVpvImpression: [7, 'boolean'], + postId: [4, 'string'], + unifiedSessionId: [6, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcQplHealth', + id: 3134, + props: { + webcQplHealthEventData: [1, 'string'], + webcQplHealthEventType: [ + 2, + { + ANNOTATION_SIZE_LIMIT_EXCEEDED: 1, + MAX_POINT_COUNT_EXCEEDED: 2, + MAX_MARKER_COUNT_EXCEEDED: 3, + TOO_MANY_OPEN_MARKERS_TO_WRITE: 4, + POINT_TO_END_AT_NOT_FOUND: 5, + JSON_FORMAT_ERROR: 6, + MAX_STORAGE_EVENT_COUNT_REACHED: 7, + ERROR_UPLOADING_CHUNK: 8, + POINT_NAME_TOO_LONG: 9, + ANNOTATION_KEY_TOO_LONG: 10, + POINT_DATA_TOO_LONG: 11, + ERROR_PARSING_CONFIG: 12 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'StickerError', + id: 5024, + props: { + stickerErrorType: [ + 1, + { + DECOMPRESSION: 2, + SENDER_VALIDATION: 3, + RECEIVER_VALIDATION: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MessageContextMenuActions', + id: 3694, + props: { + isAGroup: [1, 'boolean'], + isMultiAction: [2, 'boolean'], + isOriginalSender: [3, 'boolean'], + messageContextMenuAction: [ + 4, + { + OPEN: 1, + CLICK: 2, + COMPLETE: 3, + CANCEL: 4 + } + ], + messageContextMenuOption: [ + 5, + { + UNKNOWN: 1, + OVERFLOW: 2, + FORWARD: 3, + DELETE: 4, + REPLY: 5, + REPLY_PRIVATELY: 6, + STAR_OR_UNSTAR: 7, + COPY: 8, + REPORT: 9, + MESSAGE_CONTACT: 10, + MESSAGE_INFO: 11, + EDIT: 12, + FORWARD_SELECT_MESSAGES: 13, + DELETE_SELECT_MESSAGES: 14, + SELECT: 15, + ADD_TO_CALENDAR: 16 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'Login', + id: 460, + props: { + androidKeystoreState: [ + 10, + { + NOT_AVAILABLE: 1, + SELF_TEST_FAILURE: 2, + ENC_KEY_READ_FAILURE: 3, + ENC_KEY_STORED_USED: 4, + ENC_KEY_PLAIN_DELETED: 5, + ENC_KEY_PLAIN_RECOVERED: 6 + } + ], + appContext: [20, 'string'], + appContextBitfield: [21, 'integer'], + connectionOrigin: [ + 6, + { + PERSON: 1, + PUSH: 2, + OTHER: 3, + BACKOFF: 4 + } + ], + connectionSequenceStep: [ + 11, + { + PUSH_OVERRIDES: 1, + PRIMARY: 2, + PUSH_FALLBACKS: 4, + HOST_FALLBACK: 5, + NO_DNS: 6, + SOFTLAYER: 7, + PRIMARY_HTTP: 8, + SOFTLAYER_HTTP: 9, + HOST_FALLBACK_HTTP: 10, + NO_DNS_HTTP: 11 + } + ], + connectionT: [5, 'timer'], + dnsResolutionMethod: [ + 12, + { + SYSTEM: 1, + GOOGLE: 2, + HARDCODED: 3, + NO_DNS: 4, + MNS: 5 + } + ], + loginDnsResolver: [ + 13, + { + SYSTEM: 1, + GOOGLE: 2, + HARDCODED: 3, + NO_DNS: 4, + MNS: 5 + } + ], + loginIpSource: [ + 14, + { + PUSH_OVERRIDES: 1, + G_WHATSAPP_NET: 2, + PUSH_FALLBACKS: 3, + G_FALLBACK_WHATSAPP_NET: 4, + HARDCODED_LIST: 5, + EX_WHATSAPP_NET: 6 + } + ], + loginPort: [ + 15, + { + P5222: 1, + P443: 2, + P80: 3, + UNKNOWN: 4 + } + ], + loginResolvedPop: [19, 'string'], + loginResult: [ + 1, + { + OK: 1, + ERROR_UNKNOWN: 2, + SERVER_ERROR: 3, + SERVER_GOAWAY: 4, + NETWORK_ERROR: 5, + ANDROID_KEYSTORE_ERROR: 6, + CERTIFICATE_ERROR: 7 + } + ], + loginSocketProvider: [ + 22, + { + PLATFORM_SOCKET: 1, + MNS_SOCKET: 2 + } + ], + loginT: [3, 'timer'], + logoutSessionId: [18, 'integer'], + longConnect: [4, 'boolean'], + noiseProtocolVersion: [16, 'integer'], + passive: [8, 'boolean'], + pendingAcksCount: [17, 'integer'], + retryCount: [2, 'integer'], + sequenceStep: [7, 'integer'], + serverErrorCode: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GroupProfilePicture', + id: 3652, + props: { + groupCreationDs: [1, 'string'], + groupProfileAction: [ + 7, + { + CHANGE_PROFILE_PHOTO: 1, + TAP_ACTION_ITEM_TAKE_PHOTO: 2, + TAP_ACTION_ITEM_VIEW_PHOTO: 3, + TAP_ACTION_ITEM_EMOJI_STICKER: 4, + TAP_ACTION_ITEM_UPLOAD_PHOTO: 5, + TAP_ACTION_ITEM_REMOVE_PHOTO: 6, + TAP_ACTION_ITEM_WEB_SEARCH: 7, + EMOJI_PANEL_OPEN: 8, + STICKER_PANEL_OPEN: 9, + PROFILE_PIC_UPDATED: 10 + } + ], + hasProfilePicture: [3, 'boolean'], + isAdmin: [4, 'boolean'], + preciseGroupSizeBucket: [ + 5, + { + LT4: 1, + LT8: 2, + LT16: 3, + LT32: 4, + LT64: 5, + LT128: 6, + LT256: 7, + LT512: 8, + LT1000: 9, + LT1500: 10, + LT2000: 11, + LT2500: 12, + LT3000: 13, + LT3500: 14, + LT4000: 15, + LT4500: 16, + LT5000: 17, + LARGEST_BUCKET: 18 + } + ], + profilePictureType: [ + 6, + { + PHOTO_CAMERA: 1, + PHOTO_UPLOAD: 2, + WEB_SEARCH: 3, + EMOJI: 4, + STICKER: 5, + REMOVE_PHOTO: 6 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMediaAnalyzed', + id: 912, + props: { + webcMediaAnalyzeT: [3, 'timer'], + webcMediaExtensions: [2, 'string'], + webcMediaSupported: [1, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'NotificationEngagement', + id: 3796, + props: { + avgNotifEngagementT: [1, 'timer'], + groupSizeBucket: [ + 2, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4, + XX_LARGE: 5, + XXX_LARGE: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + groupTypeClient: [ + 3, + { + REGULAR_GROUP: 1, + SUB_GROUP: 2, + DEFAULT_SUB_GROUP: 3, + PARENT_GROUP: 4 + } + ], + isAGroup: [4, 'boolean'], + isWebBackgroundSyncNotif: [18, 'boolean'], + threadId: [5, 'string'], + totalLinkReshareMessageNotifShown: [19, 'integer'], + totalLinkReshareMessageNotifShownFb: [21, 'integer'], + totalLinkReshareMessageNotifShownIg: [22, 'integer'], + totalLinkReshareMessageNotifTapToOpen: [20, 'integer'], + totalLinkReshareMessageNotifTapToOpenFb: [23, 'integer'], + totalLinkReshareMessageNotifTapToOpenIg: [24, 'integer'], + totalMessageReminderNotifShown: [16, 'integer'], + totalMessageReminderNotifTapToOpen: [17, 'integer'], + totalNotifMarkAsRead: [6, 'integer'], + totalNotifMissedCallVoipCallback: [7, 'integer'], + totalNotifMissedCallVoipMessage: [8, 'integer'], + totalNotifOthers: [9, 'integer'], + totalNotifReply: [10, 'integer'], + totalNotifRtcVoipAccept: [11, 'integer'], + totalNotifRtcVoipDecline: [12, 'integer'], + totalNotifShowPreview: [13, 'integer'], + totalNotifShown: [14, 'integer'], + totalNotifTapToOpen: [15, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatPsaAction', + id: 3572, + props: { + messageMediaType: [ + 1, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + psaCampaignId: [4, 'string'], + psaMessageActionType: [ + 2, + { + SAVE: 1, + FORWARD: 2, + REACT: 3, + LINK_CLICK: 4, + MEDIA_PLAY: 5, + DELETE: 6, + PUSH_NOTIFICATION_CLICK: 7, + PUSH_NOTIFICATION_RENDER: 8 + } + ], + psaMsgId: [5, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MetaAiUpsellCta', + id: 6532, + props: { + metaAiUpsellCtaOperation: [ + 1, + { + IMPRESSION: 1, + BUTTON_CLICK: 2 + } + ], + metaAiUpsellCtaSource: [ + 2, + { + PERSISTENT_CHAT_BANNER: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelMembershipActionEvent', + id: 5762, + props: { + actionResult: [ + 1, + { + FOLLOW_SUCCESS: 1, + UNFOLLOW_SUCCESS: 2, + FOLLOW_SUCCESS_NOTIFICATION: 3, + UNFOLLOW_SUCCESS_NOTIFICATION: 4 + } + ], + cid: [2, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcRawPlatforms', + id: 2416, + props: { + webcRawPlatform: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PnhDaily', + id: 3806, + props: { + communityId: [1, 'string'], + mappingMissing: [7, 'integer'], + pnhIndicatorClicksChat: [2, 'integer'], + pnhIndicatorClicksInfoScreen: [3, 'integer'], + reactionDeleteCount: [4, 'integer'], + reactionOpenTrayCount: [5, 'integer'], + totalContacts: [8, 'integer'], + typeOfGroup: [ + 6, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MessageSend', + id: 854, + props: { + agentEngagementType: [ + 49, + { + DIRECT_CHAT: 0, + INVOKED: 1, + MEMBER: 2 + } + ], + appContext: [72, 'string'], + appContextBitfield: [73, 'integer'], + botType: [ + 55, + { + UNKNOWN: 0, + METABOT: 1, + BOT_1P_BIZ: 2, + BOT_3P_BIZ: 3, + UGC: 4, + META_CHARACTER: 5 + } + ], + chatOrigins: [ + 58, + { + LID_USERNAME: 1, + LID_CTWA: 2, + OTHERS: 3 + } + ], + chatSessionId: [67, 'string'], + deviceCount: [31, 'integer'], + deviceSizeBucket: [ + 25, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + disappearingChatInitiator: [ + 30, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + e2eBackfill: [23, 'boolean'], + e2eCiphertextType: [ + 10, + { + MESSAGE: 0, + PREKEY_MESSAGE: 1, + SENDER_KEY_MESSAGE: 2, + MESSAGE_SECRET_MESSAGE: 3 + } + ], + e2eCiphertextVersion: [9, 'integer'], + e2eFailureReason: [ + 46, + { + INVALID_MESSAGE: 0, + LEGACY_MESSAGE: 1, + INVALID_VERSION: 2, + PRE_KEY_MESSAGE_MISSING_PRE_KEY: 3, + PRE_KEY_MESSAGE_INVALID_KEY: 4, + UNTRUSTED_IDENTITY: 5, + NO_SESSION_AVAILABLE: 6, + PLAINTEXT_BYTE_MISMATCH: 7, + UNKNOWN_CIPHERTEXT_TYPE: 8, + UNKNOWN_CIPHERTEXT_VERSION: 9, + INVALID_PADDING: 10, + INVALID_PROTOCOL_BUFFER: 11, + INVALID_NUMBER_OF_MESSAGE_TYPES: 12, + INVALID_IMAGE_FILE_LENGTH: 13, + INVALID_IMAGE_FILE_SHA256: 14, + INVALID_IMAGE_MEDIA_URL: 15, + INVALID_IMAGE_MEDIA_KEY: 16, + INVALID_IMAGE_MIME_TYPE: 17, + UNKNOWN_V2_TAGS: 18, + INVALID_EDIT_VERSION: 19, + INVALID_HSM_NAMESPACE: 20, + INVALID_HSM_ELEMENT: 21, + UNKNOWN_PROTOCOL_MESSAGE_TYPE: 22, + DUPLICATE_MESSAGE: 23, + FINGERPRINT_IDENTITY_MISMATCH: 24, + FINGERPRINT_VERSION_MISMATCH: 25, + INVALID_ARGUMENT: 26, + INVALID_KEY: 27, + INVALID_KEY_ID: 28, + INVALID_MAC: 29, + NO_MEMORY: 30, + STALE_KEY_EXCHANGE: 31, + VRF_SIGNATURE_VERIFICATION_FAILED: 32, + ERROR_MINIMUM_VALUE: 33, + ERROR_UNKNOWN: 34, + INVALID_BROADCAST_STANZA_ATTRIBUTE: 35, + INVALID_LIST_REPLY_MESSAGE: 36, + INVALID_LIST_REPLY_ROW_IDENTIFIER: 37, + INVALID_BUTTONS_RESPONSE_MESSAGE: 38, + INVALID_BUTTONS_RESPONSE_BUTTON_IDENTIFIER: 39, + INVALID_ORDER_MESSAGE: 40, + ERROR_CANCELLED: 41, + FUTURE_MESSAGE: 42, + INVALID_EMPTY_PROTOBUF_NOT_ALLOWED: 43, + SELF_SEND: 44, + INVALID_MEDIA_MIME_TYPE_TEMPLATE_MESSAGE: 45, + INVALID_MEDIA_ENC_HASH: 46, + INVALID_IDENTITY: 47, + PASSTHROUGH: 48, + NOT_IN_PENDING_DEVICES: 49, + EDIT_TYPE_AND_PROTOCOL_MISMATCH: 50, + DECRYPTION_FAILED: 51, + DESERIALIZE_INVALID_PROTO_FORMAT: 52, + DESERIALIZE_RATCHET_KEY_BAD_FORMAT: 53, + DESERIALIZE_PK_INVALID_PROTO_FORMAT: 54, + DESERIALZE_PK_KEY_BAD_FORMAT: 55, + TOO_MANY_MESSAGES_IN_FUTURE: 56, + EMPTY_VERSION_CONTENT_SUFFIX: 57, + CONTENT_EXCEEDED_EXPECTED_LENGTH: 58, + GRP_INVALID_PROTO_FORMAT: 59, + GRP_INVALID_KEY_FORMAT: 60, + GRP_VERSION_CONTENT_EMPTY: 61, + GRP_INVALID_VERSION_CONTENT_LENGTH: 62, + GRP_SENDER_KEY_INVALID_PROTO_FORMAT: 63, + GRP_SENDER_KEY_PROTO_ERROR: 64, + GRP_TOO_MANY_MESSAGES_IN_FUTURE: 65, + MISSING_MESSAGE_SECRET: 66, + MESSAGE_SECRET_INVALID: 67, + INVALID_REACTION_TEXT: 68, + UNSUPPORTED_MESSAGE_TYPE: 69, + UNSUPPORTED_IN_INTEROP: 70, + TARGET_MESSAGE_NOT_FOUND: 71, + STATUS_FROM_HOSTED_DEVICE_UNSUPPORTED: 72, + GROUP_MESSAGE_FROM_HOSTED_DEVICE_UNSUPPORTED: 73, + BROADCAST_FROM_HOSTED_DEVICE_UNSUPPORTED: 74, + LIVE_LOCATION_FROM_HOSTED_DEVICE_UNSUPPORTED: 75, + MESSAGE_TYPE_MISMATCH: 76, + ERROR_SESSION_STATE_UNACKED_PKMSG_GET_BASE_KEY: 77, + ERROR_SIGNAL_MESSAGE_GET_SENDER_RATCHET_KEY: 78, + ERROR_SESSION_STATE_GET_ROOT_KEY: 79, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY_PAIR: 80, + ERROR_SESSION_STATE_SET_SENDER_CHAIN_KEY: 81, + ERROR_SESSION_STATE_FIND_RECEIVER_CHAIN: 82, + ERROR_SESSION_RECORD_DESERIALIZE: 83, + ERROR_SENDER_KEY_STATE_REMOVE_SENDER_MESSAGE_KEY: 84, + ERROR_EMPTY_PLAINTEXT_DATA: 85, + ERROR_MAC_LEN_MISMATCH: 86, + ERROR_INVALID_MAC_LEN: 87, + ERROR_INVALID_SIGNATURE_LEN: 88, + ERROR_SENDER_KEY_LOAD_KEY: 89, + ERROR_FAST_RATCHET_SENDER_KEY_LOAD_KEY: 90, + ERROR_UNKNOWN_LOAD_KEY: 91, + ERROR_UNKNOWN_LOAD_SESSION: 92, + ERROR_SESSION_RECORD_GET_STATE: 93, + ERROR_SESSION_STATE_GET_SENDER_CHAIN_KEY: 94, + ERROR_INVALID_KEY_MATEIRAL_DATA_LEN: 95, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY: 96, + ERROR_SESSION_STATE_GET_LOCAL_IDENTITY_KEY: 97, + ERROR_SESSION_STATE_GET_REMOTE_IDENTITY_KEY: 98, + ERROR_MEDIA_HASH_VERIFICATION_FAILURE: 99, + ERROR_CIPHERTEXT_TOO_LONG: 100, + ERROR_THUMBNAIL_HASH_VERIFICATION_FAILURE: 101, + ERROR_PARENT_CHILD_SENDER_JID_MISMATCH: 102, + INVALID_EDIT_MESSAGE: 103, + INVALID_SESSION: 104 + } + ], + editDuration: [43, 'integer'], + editType: [ + 44, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + ephemeralityDuration: [21, 'integer'], + ephemeralityInitiator: [ + 47, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + ephemeralityTriggerAction: [ + 48, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + excessPayloadKbSize: [40, 'integer'], + fastForwardEnabled: [15, 'boolean'], + hasUsername: [59, 'boolean'], + hasUsernamePin: [74, 'boolean'], + invisibleMessageCategory: [ + 64, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isAComment: [54, 'boolean'], + isAReply: [35, 'boolean'], + isFromWamsys: [19, 'boolean'], + isLid: [39, 'boolean'], + isPremium: [69, 'boolean'], + isViewOnce: [22, 'boolean'], + isWhatsapiBuild: [75, 'boolean'], + localAddressingMode: [ + 53, + { + PN: 1, + LID: 2 + } + ], + logoutReason: [ + 70, + { + NETWORK_BLOCKED: 1, + WRITING_STANZA_ERROR: 2, + READING_STANZA_ERROR_IO: 3, + READING_STANZA_READING_IS_OVER: 4, + READING_STANZA_ERROR_CORRUPT_STREAM: 5, + PUSH_WITH_SAME_SESSION_ID: 6, + SCHEDULED_LOGOUT: 7, + CLIENT_PING_TIMEOUT: 8, + RECEIPT_TIMEOUT: 9, + ACTIVE_CONNECTION_TIMEOUT: 10, + NETWORK_CHANGED: 11, + SWITCH_ACCOUNT: 12, + DELETE_ACCOUNT: 13, + CHANGE_NUMBER: 14, + MBS_MIGRATION: 15, + REGISTRATION_RELATED: 16, + ROADBLOCKED_DETAIL: 17, + SERVER_ACK_KICK: 18, + SERVER_PING_KICK: 19 + } + ], + mediaCaptionPresent: [8, 'boolean'], + mediaUploadError: [ + 61, + { + OK: 1, + DUPLICATE: 3, + ERROR_UNKNOWN: 2, + ERROR_REQUEST: 4, + ERROR_UPLOAD: 5, + ERROR_OOM: 6, + ERROR_IO: 7, + ERROR_NO_PERMISSIONS: 8, + ERROR_BAD_MEDIA: 9, + ERROR_INSUFFICIENT_SPACE: 10, + ERROR_FNF: 11, + ERROR_CANCEL: 12, + ERROR_SERVER: 13, + ERROR_REQUEST_TIMEOUT: 14, + ERROR_NOT_FINALIZED: 15, + ERROR_OPTIMISTIC_HASH: 16, + ERROR_MEDIA_CONN: 17, + ERROR_DNS: 18, + ERROR_THROTTLE: 19, + ERROR_SSL: 20, + ERROR_NO_CLIENT_NETWORK: 21, + SKIPPED_EP_NOT_ONLINE: 22, + SKIPPED_EP_NOT_1TO1CHAT: 23, + SKIPPED_EP_UPLOAD_FAILED: 24, + SKIPPED_EP_MULTI_CHAT: 25, + SKIPPED_EP_NO_PRIMARY_HOST: 26, + ERROR_CRONET: 27, + ERROR_INCOMPLETE_SERVER_RESPONSE: 28, + ERROR_TRANSCODING: 29, + ERROR_CANCEL_PROGRAMMATIC: 30, + ERROR_NO_ROUTE: 31, + ERROR_TOO_LARGE: 32, + ERROR_CANNOT_TRANSCODE: 33, + ERROR_UNKNOWN_MIMETYPE: 34, + ERROR_UNSUPPORTED_MIMETYPE: 35, + ERROR_SERVER_REJECTED_MEDIA: 36, + ERROR_IO_ENCRYPTION: 37, + ERROR_NO_ENCRYPTION_ALGORITHM: 38, + ERROR_HOST_SWITCH_REQUIRED: 39, + ERROR_WAMSYS: 40, + ERROR_INVALID_URL: 41, + INTEGRITY_CHECK_FAILURE: 42 + } + ], + mediaUploadRetryCount: [62, 'integer'], + messageDistributionType: [ + 41, + { + REGULAR_MESSAGE: 0, + DIRECT_MESSAGE: 1, + SENDER_KEY_DISTRIBUTION_MESSAGE: 2 + } + ], + messageForwardAgeT: [14, 'timer'], + messageIsFanout: [5, 'boolean'], + messageIsFastForward: [13, 'boolean'], + messageIsFirstUserMessage: [26, 'boolean'], + messageIsForward: [4, 'boolean'], + messageIsInternational: [7, 'boolean'], + messageIsInvisible: [29, 'boolean'], + messageIsRevoke: [24, 'boolean'], + messageKeyHash: [57, 'string'], + messageMediaType: [ + 3, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageSendOptUploadEnabled: [12, 'boolean'], + messageSendResult: [ + 1, + { + OK: 1, + ERROR_UNKNOWN: 3, + ERROR_NETWORK: 4, + ERROR_EXPIRED: 5, + ERROR_CANCELLED: 6, + ERROR_UPLOAD: 7, + ERROR_BACKFILL_USYNC_FAILED: 8, + ERROR_PAYLOAD_TOO_BIG: 9, + ERROR_LOCATION: 10, + ERROR_INVALID_MESSAGE: 11, + ERROR_E2EE: 12, + ERROR_INVALID_PROTOBUF: 13, + SERVER_ERROR: 14, + EPHEMERALLY_EXPIRED: 15, + MEDIA_UPLOAD_FAILED: 16, + ERROR_CLIENT_OUT_OF_MEMORY: 17, + ERROR_UPLOAD_CANCELLED_MANUALLY: 18, + ERROR_UPLOAD_CANCELLED_AUTOMATIC: 19 + } + ], + messageSendResultIsTerminal: [17, 'boolean'], + messageSendSource: [ + 66, + { + NONE: 1, + UNANSWERED_CALL_UPSELL: 2, + UNANSWERED_CALL_UPSELL_REST: 3, + VIEW_ALL_REPLIES: 4 + } + ], + messageSendT: [11, 'timer'], + messageType: [ + 2, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + networkWasDisconnected: [37, 'boolean'], + oppositeVisibleIdentification: [ + 60, + { + PHONE_NUMBER: 1, + SAVED_CONTACT_NAME: 2, + USERNAME: 3, + MASKED_PHONE_NUMBER: 4, + VERIFIED_BUSINESS_NAME: 5, + PLACEHOLDER: 6, + PUSHNAME: 7 + } + ], + overallMediaSize: [42, 'number'], + pairedMediaType: [ + 71, + { + SD_PHOTO: 0, + HD_PHOTO: 1, + SD_VIDEO: 2, + HD_VIDEO: 3, + MOTION_PHOTO_PARENT: 4, + MOTION_PHOTO_CHILD: 5 + } + ], + participantCount: [32, 'integer'], + receiverDefaultDisappearingDuration: [28, 'integer'], + resendCount: [16, 'integer'], + retryCount: [6, 'integer'], + revokeDuration: [33, 'integer'], + revokeType: [ + 34, + { + SENDER: 0, + ADMIN: 1 + } + ], + runningTasks: [63, 'string'], + sendButtonPressT: [45, 'integer'], + senderDefaultDisappearingDuration: [27, 'integer'], + serverErrorCode: [56, 'integer'], + stickerIsAi: [50, 'boolean'], + stickerIsAvatar: [38, 'boolean'], + stickerIsFirstParty: [18, 'boolean'], + stickerIsFromStickerMaker: [51, 'boolean'], + stickerMakerSourceType: [ + 52, + { + CUTOUT_IMAGE: 1, + WEB_STICKER_MAKER: 2, + IOS_STICKER_MAKER: 3, + ANDROID_STICKER_MAKER: 4, + TRANSPARENT_IMAGE: 5, + GIF: 6 + } + ], + thumbSize: [20, 'number'], + typeOfGroup: [ + 36, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ], + unifiedSessionId: [68, 'string'], + userToDeviceSizeBucket: [65, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcNavbar', + id: 5258, + props: { + webcNavbarItemLabel: [ + 1, + { + CHATS: 1, + COMMUNITIES: 2, + NEWSLETTERS: 3, + STATUS: 4, + STARRED: 5, + ARCHIVED: 6, + SETTINGS_HELP: 7, + SETTINGS: 8, + PROFILE: 9, + ADS_CREATION: 10, + BUSINESS_TOOLS: 11 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'StickerCommonQueryToStaticServer', + id: 2740, + props: { + httpResponseCode: [2, 'integer'], + params: [3, 'string'], + queryLatencyMs: [4, 'timer'], + queryType: [ + 1, + { + STICKER_STORE_DATA: 0, + PREVIEW_IMAGE_DOWNLOAD: 1, + STICKER_PACK_DATA: 2, + STICKER_SEARCH: 3, + DISCOVERY_PACK: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PaidMessagingUserInteractionsLogger', + id: 4740, + props: { + pmxActionTarget: [ + 1, + { + NONE: 0, + HEADER: 1, + CTA_COPY_CODE: 2, + CTA_URL: 3, + QUICK_REPLY: 4, + CTA_CALL: 5, + CTA_REMINDER: 6, + SEE_ALL: 7, + THUMBNAIL: 8, + VIEW_PRODUCT: 9, + URL: 10, + CTA_APP: 11, + IMAGE_HEADER_URL: 12, + FULLSCREEN_IMAGE_CTA_URL: 13, + FULLSCREEN_VIDEO_CTA_URL: 14, + TEXT_HEADER_URL: 15 + } + ], + pmxActionType: [ + 2, + { + VIEW: 0, + CLICK: 1, + READ: 2, + FORWARD: 3, + MEDIA_PLAYBACK: 4 + } + ], + pmxComponentType: [ + 3, + { + NONE: 0, + HEADER: 1, + BUTTON: 2, + BODY: 3, + FOOTER: 4 + } + ], + pmxHashedMessageId: [13, 'string'], + pmxHashedMessageKey: [11, 'integer'], + pmxHeaderMediaType: [ + 4, + { + TEXT: 0, + IMAGE: 1, + VIDEO: 2, + LOCATION: 3, + DOCUMENT: 4, + GIF: 5 + } + ], + pmxHostStorage: [ + 8, + { + NONE: 0, + ON_PREMISE: 1, + FACEBOOK: 2 + } + ], + pmxMarketingFormat: [ + 5, + { + CAROUSEL: 0, + MPM: 1, + CUSTOM: 2 + } + ], + pmxMessageDeliveredTs: [10, 'integer'], + pmxMessageStanzaAcceptedTs: [12, 'integer'], + pmxQueryParams: [6, 'string'], + pmxSenderCountryCode: [9, 'string'], + templateId: [7, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'WebcProgressiveImage', + id: 2226, + props: { + webcFirstRenderScans: [1, 'integer'], + webcFirstRenderT: [2, 'timer'], + webcFullQualityT: [4, 'timer'], + webcMidQualityT: [3, 'timer'] + }, + wamChannel: 'regular', + weight: 10 + }, + { + name: 'CrashLog', + id: 494, + props: { + activeSubfunnelId: [20, 'string'], + activeSubfunnelType: [ + 21, + { + TEXT: 1, + PTT: 2, + REACTION: 3, + SHARE_CONTENT: 4, + EXPRESSION_TRAY: 5, + MEDIA_SHARING: 6, + QUOTED_MESSAGE: 7, + FORWARD_ACTION: 8 + } + ], + appContext: [32, 'string'], + appContextBitfield: [33, 'integer'], + chatSessionId: [22, 'string'], + crashApplicationState: [ + 23, + { + FOREGROUND: 1, + BACKGROUND: 2, + APP_INIT: 3 + } + ], + crashContext: [3, 'string'], + crashCount: [5, 'integer'], + crashLogProductArea: [ + 28, + { + UNKNOWN: 1, + COMMUNITIES: 2, + CHAT_LIST: 3, + BROADCAST: 4, + GROUP_INFO: 5, + EVENTS: 6, + CALLING: 7, + CHANNEL: 8, + STATUS: 9, + REACTION: 10, + CHAT_VIEW: 11, + CONTACT_INFO: 12, + FORWARD_PICKER: 13, + MEDIA: 14, + CAMERA: 15, + SETTING_PAGE: 16, + CATALOG: 17, + FLOW: 18, + PAYMENT: 19, + NOTIFICATION: 20, + MESSAGE_ACTIONS: 21, + PARTICIPANT_PICKER: 22, + GROUP: 23, + SEARCH: 24, + BUSINESS_PROFILE: 25, + AI: 26, + PROFILE: 27, + CONTACTS: 28, + REGISTRATION: 29, + STICKER: 31, + WALLPAPER: 32, + LIVE_LOCATION: 33, + BACKUP: 34, + COMPANION: 35, + FAVORITE: 36, + BANNER: 37, + VIEW_ONCE: 38, + DISAPPEARING_MESSAGE: 39, + BLOCK_AND_REPORT: 40, + EDUCATION: 41, + DEBUG: 42, + POLL: 43, + ORDER: 44, + EMOJI: 45, + CHANGE_NUMBER: 46, + REG: 47, + OTHER_PLATFORM: 48, + CHAT_LOCK: 49, + PTV: 50, + SMB: 51, + ACCOUNT_DELETION: 52, + CTWA: 53, + PRIVACY: 54, + AVATARS: 55, + MEDIA_PREVIEW: 56, + MEDIA_PICKER: 57, + MEDIA_BROWSER: 58, + PTT: 59, + CRITICAL_LOW_STORAGE: 60, + WAFFLE: 61 + } + ], + crashLogTimeSpentViewName: [27, 'string'], + crashReason: [2, 'string'], + crashTimeout: [24, 'integer'], + crashType: [ + 6, + { + CRASH: 0, + OOM: 1, + MAIN_THREAD_STALL_3_SECONDS: 15, + MAIN_THREAD_STALL_5_SECONDS: 21, + MAIN_THREAD_STALL_30_SECONDS: 2, + MAIN_THREAD_STALL_60_SECONDS: 16, + MAIN_THREAD_STALL_POKED: 17, + MAIN_THREAD_STALL_DEBUG: 3, + AUDIO_TRANSCODING_ERROR: 4, + VIDEO_TRANSCODING_ERROR: 5, + ANR: 6, + CRITICAL_EVENT: 7, + UNHANDLED_EXCEPTION: 8, + APP_CRASH: 9, + NATIVE_CRASH: 10, + UFAD: 11, + UX_BREAKING_EXCEPTION: 13, + UX_GRACEFUL_RECOVERY_EXCEPTION: 14, + WEB_UI_COMPONENT_FAILURE: 18, + WEB_BROKEN_USER_EXPERIENCE: 19, + WEB_FORCED_LOGOUT: 20, + THREADPOOL_NOT_RESPONDING: 22, + DISPATCHER_NOT_RESPONDING: 23, + MS_CRASH: 24, + MAIN_THREAD_STALL: 25 + } + ], + iphoneProcessNonGlobal: [ + 30, + { + MAIN: 1, + SHARE_EXT: 2 + } + ], + iphoneTimeSpentSurfaceId: [ + 26, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + lowPowerModeEnabled: [31, 'boolean'], + peripheralConnected: [19, 'string'], + processIdentifier: [18, 'integer'], + runningTasks: [16, 'string'], + ufadReportType: [ + 29, + { + NSUSERDEFAULT: 1, + MMAP: 2, + NSUSERDEFAULT_AND_MMAP: 3 + } + ], + unifiedSessionId: [25, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsStructuredMessageInteraction', + id: 3052, + props: { + bizPlatform: [ + 1, + { + UNKNOWN: 1, + SMB: 2, + ENT: 3, + CLOUDAPI: 4 + } + ], + businessOwnerJid: [7, 'string'], + messageClass: [ + 3, + { + HSM: 0, + BUTTON: 1, + LIST: 2, + PRODUCT_LIST: 3, + BUTTON_NFM: 4, + PRODUCT_ITEM: 5, + SHOP_STOREFRONT: 6 + } + ], + messageClassAttributes: [5, 'string'], + messageInteraction: [ + 4, + { + USER_START: 0, + USER_CANCEL: 1, + FLOW_SUCCESS: 2, + FLOW_ERROR: 3, + USER_VIEW: 4, + USER_PAY_NOW: 5, + USER_VIEW_BASKET: 6, + CLICK_PAYMENT_DETAILS: 7, + CLICK_MESSAGE_BUSINESS: 8, + MODIFY_PAYMENT_METHOD: 9, + CONFIRM_PAYMENT_METHOD: 10, + USER_VIEW_SUMMARY: 11, + USER_PAY_NOW_QUICK_BUY: 12, + USER_SEND_PAYMENT: 13, + USER_SEND_PAYMENT_QUICK_BUY: 14, + CLICK_HELP: 15, + CLICK_ORDER_SUMMARY: 16, + USER_CONFIRM: 17, + CLICK_REPORT_THIS_TRANSACTION: 18, + USER_COMPLETED_PAYMENT_INTENT: 19, + USER_SHARE_MENU_OPEN: 20, + USER_OPEN_BROWSER: 21, + USER_COPY_LINK: 22, + USER_SHARE_LINK: 23, + USER_SHARE_MENU_CANCEL: 24, + USER_REFRESH: 25, + USER_FORWARD: 26, + USER_BACK: 27, + VIEW_EVENT_SHARING_TOS_ALERT: 28, + DISMISS_EVENT_SHARING_TOS_ALERT: 29, + CLICK_EVENT_SHARING_TOS: 30, + ACCEPT_EVENT_SHARING_TOS: 31, + REJECT_EVENT_SHARING_TOS: 32, + CLICK_TO_VIEW_EVENT_SHARING_TOS_ALERT: 33, + START_CHAT_FROM_CTWA: 34, + CLICK_CONFIRM_PENDING_PAYMENT: 35, + COPY_PIX_CODE: 36, + COPY_PIX_KEY: 37, + USER_VIEW_PAYMENT_COMPLETE: 38, + USER_VIEW_ATTACHMENT: 39, + USER_DOWNLOAD_ATTACHMENT: 40, + COPY_BOLETO_CODE: 41, + WEBVIEW_ERROR: 42, + USER_GRANT_CAMERA_PERMISSION: 43, + USER_DENY_CAMERA_PERMISSION: 44, + CAMERA_PERMISSION_REQUEST_DIALOG_POP_UP: 45, + USER_APP_REDIRECT_ACCEPT: 46, + USER_APP_REDIRECT_DENY: 47, + USER_RESTORE: 48, + CLICK_PAY_WITH_PIX: 49, + PIX_CHANGE_BANK: 50, + PIX_SELECT_BANK_VIEW: 51, + PIX_SELECT_BANK: 52, + PAY_WITH_PIX: 53, + PAY_WITH_PIX_STATUS: 54, + PIX_ENTER_AMOUNT: 55, + PAY_WITH_PIX_VIEW: 56, + PIX_ADD_CPF_VIEW: 57, + PIX_ADD_CPF: 58, + PAY_WITH_PIX_DI: 59, + COPY_PIX_CODE_DI: 60 + } + ], + messageMediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + templateId: [8, 'string'], + threadIdHmac: [9, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'DeepLinkMsgSent', + id: 3198, + props: { + deepLinkAction: [ + 1, + { + MSG_SENT: 1 + } + ], + deepLinkSessionId: [2, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ReactionActions', + id: 3184, + props: { + mediaType: [ + 3, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 1, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + reactionAction: [ + 2, + { + OPEN_TRAY: 1, + DELETE: 2, + UPDATE: 3 + } + ] + }, + wamChannel: 'regular', + weight: 20 + }, + { + name: 'MediaUpload2', + id: 1588, + props: { + appContext: [63, 'string'], + appContextBitfield: [64, 'integer'], + batchSize: [57, 'integer'], + connectionType: [ + 43, + { + HOSTNAME: 0, + IP4: 1, + IP6: 2 + } + ], + debugMediaException: [34, 'string'], + debugMediaIp: [32, 'string'], + debugUrl: [33, 'string'], + estimatedBandwidth: [45, 'number'], + estimatedBandwidthV2: [61, 'number'], + fileHeight: [55, 'integer'], + fileWidth: [56, 'integer'], + finalizeConnectT: [28, 'timer'], + finalizeHttpCode: [31, 'integer'], + finalizeIsReuse: [30, 'boolean'], + finalizeNetworkT: [29, 'timer'], + httpProtocolVersionType: [ + 51, + { + HTTP1: 0, + HTTP2: 1, + HTTP3: 2 + } + ], + isViewOnce: [49, 'boolean'], + mediaCollectionId: [60, 'integer'], + mediaId: [46, 'integer'], + messageKeyHash: [58, 'string'], + networkStack: [ + 42, + { + NATIVE: 0, + OK_HTTP: 1, + LIGER: 2, + APACHE: 3, + WATLS: 4, + CRONET: 5 + } + ], + originalSize: [53, 'integer'], + overallAttemptCount: [4, 'integer'], + overallConnBlockFetchT: [10, 'timer'], + overallConnectionClass: [41, 'string'], + overallCumT: [37, 'timer'], + overallCumUserVisibleT: [38, 'timer'], + overallDomain: [5, 'string'], + overallEncryptT: [50, 'timer'], + overallIsFinal: [36, 'boolean'], + overallIsForward: [16, 'boolean'], + overallIsManual: [13, 'boolean'], + overallLastUploadRetryPhase: [ + 11, + { + RESUME_CHECK: 1, + UPLOAD: 2, + FINALIZE: 3 + } + ], + overallMediaKeyReuse: [ + 40, + { + NONE_NEW_CONTENT: 1, + NONE_EXPIRED: 2, + REUSED: 3, + NONE_WAS_STATUS: 4 + } + ], + overallMediaSize: [7, 'number'], + overallMediaType: [ + 1, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + overallMmsVersion: [6, 'integer'], + overallOptimisticFlag: [ + 12, + { + NONE: 0, + OPTIMISTIC: 1, + OPT_USED: 2, + OPT_TAKEOVER: 3, + OPT_DISABLED: 4 + } + ], + overallQueueT: [9, 'timer'], + overallRetryCount: [3, 'integer'], + overallT: [8, 'timer'], + overallTranscodeT: [15, 'timer'], + overallUploadMode: [ + 39, + { + REGULAR: 1, + FAST_FORWARD_EXIST_CHECK: 2, + VIDEO_EXIST_CHECK: 3, + PRODUCT: 4, + MEDIA_RETRY: 5, + WEB_REUPLOAD: 6, + THUMBNAIL: 7, + EXPRESS_PATH_UPLOAD: 8 + } + ], + overallUploadOrigin: [ + 44, + { + UNKNOWN: 1, + CHAT_PERSONAL: 2, + CHAT_GROUP: 3, + STATUS_USER: 4, + PRODUCT_CATALOG: 5, + STICKER_WEB: 6, + PAYMENTS_KYC: 7, + MESSAGE_HISTORY_SYNC: 8, + COMMUNITY: 9, + CHANNEL: 10, + BROADCAST: 11, + MULTI_CHAT: 12, + INTEROP: 13 + } + ], + overallUploadResult: [ + 35, + { + OK: 1, + DUPLICATE: 3, + ERROR_UNKNOWN: 2, + ERROR_REQUEST: 4, + ERROR_UPLOAD: 5, + ERROR_OOM: 6, + ERROR_IO: 7, + ERROR_NO_PERMISSIONS: 8, + ERROR_BAD_MEDIA: 9, + ERROR_INSUFFICIENT_SPACE: 10, + ERROR_FNF: 11, + ERROR_CANCEL: 12, + ERROR_SERVER: 13, + ERROR_REQUEST_TIMEOUT: 14, + ERROR_NOT_FINALIZED: 15, + ERROR_OPTIMISTIC_HASH: 16, + ERROR_MEDIA_CONN: 17, + ERROR_DNS: 18, + ERROR_THROTTLE: 19, + ERROR_SSL: 20, + ERROR_NO_CLIENT_NETWORK: 21, + SKIPPED_EP_NOT_ONLINE: 22, + SKIPPED_EP_NOT_1TO1CHAT: 23, + SKIPPED_EP_UPLOAD_FAILED: 24, + SKIPPED_EP_MULTI_CHAT: 25, + SKIPPED_EP_NO_PRIMARY_HOST: 26, + ERROR_CRONET: 27, + ERROR_INCOMPLETE_SERVER_RESPONSE: 28, + ERROR_TRANSCODING: 29, + ERROR_CANCEL_PROGRAMMATIC: 30, + ERROR_NO_ROUTE: 31, + ERROR_TOO_LARGE: 32, + ERROR_CANNOT_TRANSCODE: 33, + ERROR_UNKNOWN_MIMETYPE: 34, + ERROR_UNSUPPORTED_MIMETYPE: 35, + ERROR_SERVER_REJECTED_MEDIA: 36, + ERROR_IO_ENCRYPTION: 37, + ERROR_NO_ENCRYPTION_ALGORITHM: 38, + ERROR_HOST_SWITCH_REQUIRED: 39, + ERROR_WAMSYS: 40, + ERROR_INVALID_URL: 41, + INTEGRITY_CHECK_FAILURE: 42 + } + ], + overallUserVisibleT: [14, 'timer'], + pairedMediaType: [ + 62, + { + SD_PHOTO: 0, + HD_PHOTO: 1, + SD_VIDEO: 2, + HD_VIDEO: 3, + MOTION_PHOTO_PARENT: 4, + MOTION_PHOTO_CHILD: 5 + } + ], + photoQualitySetting: [ + 52, + { + AUTO: 0, + DATA_SAVER: 1, + HIGH_QUALITY: 2, + HIGHEST_QUALITY: 3 + } + ], + resumeConnectT: [17, 'timer'], + resumeHttpCode: [20, 'integer'], + resumeIsReuse: [19, 'boolean'], + resumeNetworkT: [18, 'timer'], + uploadBytesTransferred: [27, 'number'], + uploadConnectT: [22, 'timer'], + uploadHttpCode: [25, 'integer'], + uploadIsReuse: [24, 'boolean'], + uploadIsStreaming: [26, 'boolean'], + uploadNetworkT: [23, 'timer'], + uploadResumePoint: [21, 'integer'], + uploadSource: [ + 48, + { + OTHER: 1, + CAMERA: 2, + GALLERY: 3, + SHARE: 4 + } + ], + usedFallbackHint: [47, 'string'], + videoQualitySetting: [ + 54, + { + AUTO: 0, + DATA_SAVER: 1, + HIGH_QUALITY: 2, + HIGHEST_QUALITY: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdAppStateDirtyBits', + id: 2520, + props: { + dirtyBitsFalsePositive: [2, 'boolean'] + }, + wamChannel: 'regular', + weight: 1000 + }, + { + name: 'AutomaticEventsUserJourney', + id: 6636, + props: { + automaticEventsTargetComponent: [ + 1, + { + SYSTEM_MESSAGE: 0, + LEARN_MORE: 1, + NUX_SCREEN: 2, + NUX_SCREEN_OK: 3, + NUX_SCREEN_META_BUSINESS_SUITE: 4 + } + ], + smbUserActionType: [ + 2, + { + VIEW: 0, + CLICK: 1, + ENTER: 2, + SCROLL: 3, + SCAN: 4, + API: 5, + EDIT: 6, + DELETE: 7, + SEARCH: 8, + DISMISS: 9 + } + ], + surface: [ + 3, + { + CHAT: 1, + CHATLIST: 2, + GALLERY: 3, + COMMUNITY_HOME: 4, + COMMUNITY_TAB: 5, + COMMUNITY_NAV: 6, + COMMUNITY_NAV_SHEET: 7, + COMMUNITY_SETTINGS: 8, + GROUP_INFO: 9, + NOTIFICATION: 10, + EXPRESSIONS_EMOJI: 11, + INVITE_NON_WA_CONTACT: 12, + CHAT_INFO_PAGE: 13, + NOTES_PROMPT: 14, + CHAT_THREAD: 15, + SEARCH_FILTER: 16, + TOOL_LIST_ITEM: 17, + GEN_AI_AGENT_NUX_SCREEN: 18, + GEN_AI_AGENT_NUX_TOS_SCREEN: 19, + GEN_AI_AGENT_NUX_BIZ_INFO_SCREEN: 20, + GEN_AI_AGENT_NUX_AUTHENTICATION_SCREEN: 21, + GEN_AI_MORE_BIZ_INFO_SCREEN: 22, + GEN_AI_AUTOMATIC_REPLIES_SCREEN: 23, + GEN_AI_COMMON_QUESTIONS_SCREEN: 24, + GEN_AI_READY_SCREEN: 25, + OVERFLOW_MENU: 26, + BROADCAST_LIST_LANDING_PAGE: 27, + BANNER_FROM_EXISTING_BCL: 28, + BANNER_FROM_NEW_BCL: 29, + COMPOSER: 30, + CONFIRM_EXIT_NOTE_DIALOGUE: 31, + VERIFY_EMAIL: 32, + EMAIL_VERIFICATION_CODE_SEND_ERROR_PROMPT: 33, + INCORRECT_EMAIL_VERIFICATION_CODE_PROMPT: 34, + EMAIL_CODE_VERIFICATION_ERROR_PROMPT: 35, + EMAIL_VERIFICATION: 36, + NOT_MY_EMAIL_PROMPT: 37, + REMOVE_EMAIL_ERROR_PROMPT: 38, + REMOVE_EMAIL: 39, + STICKER_TRAY_IN_CHAT: 40, + STICKER_SEARCH_CHAT: 41, + BUSINESS_HOME_PAGE: 42, + BROADCAST_LIST_AUDIENCE_PAGE: 43, + GEN_AI_WEB_ONBOARDING_EDUCATION: 44, + GEN_AI_WEB_ONBOARDING_QR_CODE: 45, + GEN_AI_WEB_ONBOARDING_SUCCESS: 46, + GEN_AI_SETTINGS_HOME_SCREEN: 47, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_SCREEN: 48, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_EDIT_SCREEN: 49, + GEN_AI_SETTINGS_BIZ_INFO_SCREEN: 50, + GEN_AI_SETTINGS_BIZ_INFO_EDIT_SCREEN: 51, + GEN_AI_SETTINGS_AUTO_REPLY_SCREEN: 52, + GEN_AI_SETTINGS_ATUO_REPLY_TYPE_EDIT_SCREEN: 53, + GEN_AI_SETTINGS_AUTO_REPLY_TIME_EDIT_SCREEN: 54, + GEN_AI_SETTINGS_FAQ_SCREEN: 55, + GEN_AI_SETTINGS_FAQ_EDIT_INFO_SCREEN: 56, + GEN_AI_SETTINGS_ADD_NEW_CONTACT_SCREEN: 57, + GEN_AI_SETTINGS_ADD_NEW_BUSINESS_INFO: 58, + GEN_AI_SETTINGS_DISCONNECT: 59, + ACCOUNT_SETTINGS: 60, + CREATE_BIZ_PROFILE: 61, + CREATE_PASS_KEY: 62, + ADD_EMAIL: 63, + VERIFY_NEW_EMAIL: 64, + INITIALIZING_ACCOUNT: 65, + GEN_AI_SETTINGS_DYI: 66, + GEN_AI_SETTINGS_LEAD_GEN_QUESTIONS: 67, + CATALOG_MANAGER: 68, + CATALOG_SETTINGS: 69, + FB_ACCOUNT_CONFIRMATION_BOTTOM_SHEET: 70, + CONNECT_CATALOG_SELECTION: 71, + REPLACE_CATALOG_CONFIRMATION_PROMPT: 72, + FB_LOGIN_BOTTOM_SHEET: 73, + CONNECTED_CATALOG_DETAILS_BOTTOM_SHEET: 74, + CONFIRM_DISCONNECT_CATALOG_BOTTOM_SHEET: 75, + GIF_EXPRESSIONS_TRAY: 76, + BUSINESS_PROFILE_DESCRIPTION_GENAI_LOADING: 77, + BUSINESS_PROFILE_DESCRIPTION_GENAI: 78, + SELECT_BIZ_CATEGORY: 79, + SEARCH_BIZ_CATEGORY_BOTTOM_SHEET: 80, + ADD_BIZ_HOURS: 81, + SELECT_BIZ_HOURS_BOTTOM_SHEET: 82, + ADD_PROFILE_PHOTO: 83, + ADD_BIZ_DISCOVERY_INFO: 84, + ADD_BIZ_DESCRIPTION: 85, + GEN_AI_WEB_ONBOARDING_AUTHENTICATION: 86, + GEN_AI_COACHING: 87, + PRODUCT_DETAILS: 88, + ORIGIN_COUNTRY: 89, + IMPORTER_INFO: 90, + IMPORTER_COUNTRY: 91, + EDIT_BIZ_PROFILE: 92, + GEN_AI_LEARNING_SUMMARY: 93, + GEN_AI_KNOWLEDGE_EDIT: 94, + ADD_ITEM: 95, + EDIT_ITEM: 96, + GEN_AI_AI_HUB_CHECKLIST: 97, + GEN_AI_AI_HUB_CHAT: 98, + GEN_AI_AI_HUB_HOME: 99, + GEN_AI_AI_HUB_ADD_BUSINESS_INFO: 100, + GEN_AI_AI_HUB_ADD_PRODUCT_INFO: 101, + GEN_AI_AI_HUB_ADD_PURCHASING_INFO: 102, + GEN_AI_AGENT_EDIT_FIELD_BOTTOM_SHEET: 103, + GEN_AI_AI_HUB_KNOWLEDGE_REPO: 104, + CONNECT_CATALOG_NUX_BOTTOM_SHEET: 105, + GENAI_AGENT_AUTO_REPLY_CONFIRMATION_DIALOG: 106, + GENAI_AGENT_AUTO_REPLY_ERROR_DIALOG: 107, + FB_WEB_LOGIN: 108, + GENAI_AGENT_COACHING_INDICATOR_BOTTOMSHEET: 109, + WATCH_LEARNING_VIDEO: 110, + GEN_AI_BESTSELLERS: 111, + GEN_AI_AI_HUB_KNOWLEDGE_RESOURCE: 112, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_SELECTION: 113, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_MANUAL: 114, + DIRECT_MIGRATION_AVAILABILITY: 115, + ACCESS_CONTACT_AND_MEDIA_PROMPT: 116, + ACCESS_CONTACT_PROMPT: 117, + ACCESS_AUDIO_MEDIA_PROMPT: 118, + ACCESS_VISUAL_MEDIA_PROMPT: 119, + NOT_ENOUGH_SPACE_WARNING: 120, + VERIFY_OTP: 121, + DIRECT_MIGRATION_IN_PROGRESS: 122, + DIRECT_MIGRATION_FAILED: 123, + ACCOUNT_BACKUP_CHECK: 124, + ACCESS_BACKUP_PERMISSION_PROMPT: 125, + RESTORE_OR_TRANFER_CHAT: 126, + ENTER_PHONE_NUMBER: 127, + CHECK_USERNAME_AND_PIN: 128, + CHECK_USERNAME: 129, + ONBOARDING_USERNAME_UPDATE_TOAST: 130, + ONBOARDING_USERNAME_PIN_REMOVE_TOAST: 131, + LABEL_LIST: 132, + LABEL_DETAILS: 133, + LABEL_APPLICATION: 134, + GEN_AI_AGENT_HANDOFF_LIST_CONFIG: 135, + DOCUMENTS_PICKER: 136, + DOCUMENTS_PREVIEW: 137 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsBufferUpload', + id: 2244, + props: { + applicationState: [ + 6, + { + FOREGROUND: 1, + BACKGROUND: 2 + } + ], + isFromWamsys: [12, 'boolean'], + isRealtime: [15, 'boolean'], + isUserSampled: [14, 'boolean'], + psBufferSequenceNumber: [13, 'integer'], + psBufferUploadHttpResponseCode: [3, 'integer'], + psBufferUploadResult: [ + 1, + { + SUCCESS: 1, + ERROR_PARSING: 2, + ERROR_DECODING: 3, + ERROR_CREDENTIAL: 4, + ERROR_OTHER: 5, + ERROR_CLIENT_NETWORK: 6, + ERROR_WAIT_FOR_TOKEN: 7, + ERROR_SERVER_OTHER: 8, + SKIPPED_NO_NETWORK: 9, + SKIPPED_NO_DATA: 10, + ERROR_ACCESS_TOKEN: 11 + } + ], + psBufferUploadT: [2, 'timer'], + psDitheredT: [11, 'integer'], + psForceUpload: [10, 'boolean'], + psTokenNotReadyReason: [ + 4, + { + NO_REASON: 0, + REASON_UNKNOWN: 1, + REASON_WAIT_FOR_FIRST_TOKEN: 2, + REASON_INVALID_SHARED_KEY: 3, + REASON_INVALID_FACTOR: 4, + REASON_GEN_FACTOR_FAILURE: 5, + REASON_COMPUTE_HMAC_FAILURE: 6, + REASON_BLIND_FAILURE: 7, + REASON_UNBLIND_FAILURE: 8, + REASON_LAST_SIGNREQ_NETWORK_FAILURE: 9, + REASON_LAST_SIGNREQ_SERVER_ERROR: 10, + REASON_LAST_SIGNREQ_BAD_REQUEST: 11, + REASON_LAST_SIGNREQ_OTHER_ERROR: 12, + REASON_WAIT_FOR_GEN_TOKEN: 13, + REASON_GEN_SHAREDKEY_FAILURE: 14, + REASON_WAIT_FOR_GEN_FIRST_TOKEN: 15 + } + ], + psUploadReason: [ + 9, + { + REASON_PS_PINGER: 0, + REASON_PS_OFFCYCLE: 1 + } + ], + waConnectedToChatd: [5, 'boolean'] + }, + wamChannel: 'regular', + weight: 100 + }, + { + name: 'CtwaConsumerDisclosure', + id: 4406, + props: { + ctwaConsumerDisclosureVersion: [3, 'integer'], + disclosureAction: [ + 1, + { + SCREEN_VIEW: 0, + CLICK_ON_CONTINUE: 1, + CANCEL: 2, + BACK_BUTTON_TOOLBAR: 3, + BACK_BUTTON_SYSTEM: 4, + DISMISS: 5, + DISCLOSURE_INFO_VIEW: 6 + } + ], + disclosureContext: [ + 5, + { + PREFILL_TEXT: 0, + EMPTY_PREFILL_TEXT: 1, + ICEBREAKERS: 2, + NOT_APPLICABLE: 3 + } + ], + disclosureEntryPoint: [ + 4, + { + PRE_THREAD: 0, + ON_THREAD_ENTRY: 1, + SEND_FROM_THREAD: 2, + SEND_FROM_THREAD_KEYBOARD: 3, + ICEBREAKERS: 4, + THREAD_ATTACHMENT_BAR: 5, + THREAD_EMOJI_BAR: 6, + AUDIO_VIDEO_CALL_FROM_THREAD: 7, + AUDIO_CALL_FROM_THREAD: 8, + VIDEO_CALL_FROM_THREAD: 9, + AUDIO_NOTE_FROM_THREAD: 10, + VIDEO_NOTE_FROM_THREAD: 11, + CAMERA_MEDIA_SELECTION: 12, + CALL_FROM_PROFILE: 13, + OVERFLOW_SEND_ORDER: 14, + MESSAGE_FROM_PROFILE: 15, + VIDEO_CALL_FROM_PROFILE: 16, + CALL_FROM_BUSINESS_DETAILS_CARD: 17, + TEXT_ENTRY_FROM_THREAD: 18, + VIEW_CATALOG_FROM_THREAD: 19, + VIEW_CATALOG_FROM_PROFILE: 20 + } + ], + disclosureType: [ + 2, + { + NON_BLOCKING: 0, + BLOCKING: 1, + INFO: 2, + IN_THREAD_BLOCKING: 3, + IN_THREAD_BLOCKING_WITH_BACK: 4 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'GroupJoinC', + id: 158, + props: {}, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WaFsGroupJoinRequestAction', + id: 3944, + props: { + groupJid: [1, 'string'], + groupJoinRequestAction: [ + 2, + { + MEMBERSHIP_REQUEST_CREATE: 1, + VIEW_PENDING_PARTICIPANTS: 2, + MEMBERSHIP_REQUEST_APPROVAL_MODE_ON: 3, + MEMBERSHIP_REQUEST_APPROVAL_MODE_OFF: 4, + MEMBERSHIP_REQUEST_APPROVE: 5, + MEMBERSHIP_REQUEST_REJECT: 6, + MEMBERSHIP_REQUEST_CANCEL: 7 + } + ], + groupJoinRequestGroupsInCommon: [5, 'integer'], + isSuccessful: [3, 'boolean'], + serverResponseTime: [4, 'timer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'TestAnonymousIdLess', + id: 3004, + props: { + psTimeSinceLastEventInMin: [1, 'integer'] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'MessageDeleteActions', + id: 3626, + props: { + deleteActionType: [ + 1, + { + DELETE_FOR_ME: 0, + DELETE_FOR_EVERYONE: 1 + } + ], + isAGroup: [2, 'boolean'], + mediaType: [ + 6, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messagesDeleted: [3, 'integer'], + threadId: [4, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcLogin', + id: 1664, + props: { + webcBrowserNetworkType: [14, 'string'], + webcBrowserStorageQuotaBytes: [15, 'integer'], + webcBrowserStorageQuotaUsedBytes: [16, 'integer'], + webcLoginT: [3, 'timer'], + webcPersistentLoginEnabled: [17, 'boolean'], + webcQrCodes: [1, 'integer'], + webcQrLoadT: [2, 'timer'], + webcSyncChatCount: [8, 'integer'], + webcSyncChatSize: [10, 'integer'], + webcSyncChatT: [9, 'timer'], + webcSyncContactCount: [11, 'integer'], + webcSyncContactSize: [13, 'integer'], + webcSyncContactT: [12, 'timer'], + webcSyncMessageCount: [5, 'integer'], + webcSyncMessageSize: [7, 'integer'], + webcSyncMessageT: [6, 'timer'], + webcSyncT: [4, 'timer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CtwaUserJourney', + id: 3466, + props: { + adId: [1, 'string'], + businessJid: [2, 'string'], + ctwaChatCreationMode: [ + 6, + { + JID: 0, + LID: 1 + } + ], + ctwaUserJourneyMetadata: [12, 'string'], + ctwaUserJourneyOperation: [ + 3, + { + LAND_ON_WHATSAPP: 1, + GET_CONTEXT_CALL_INITIATED: 2, + GET_CONTEXT_CALL_SUCCESS: 3, + AD_CONTEXT_FALLBACK_RENDERED: 4, + AD_CONTEXT_DISMISSED: 5, + KILL_APP: 6, + BACK_BUTTON_CLICKED: 7, + CALL_BUSINESS_BUTTON_CLICKED: 8, + VIEW_CATALOG_BUTTON_CLICKED: 9, + PROFILE_PHOTO_CLICKED: 10, + BIZ_PROFILE_CLICKED: 11, + GET_CONTEXT_CALL_FAILED: 12, + CHAT_SETTINGS_CLICKED: 13, + FIRST_CUSTOM_MESSAGE_SENT_WITH_AD_CONTEXT: 14, + FIRST_CUSTOM_MESSAGE_SENT_WITHOUT_AD_CONTEXT: 15, + ICEBREAKER_SENT: 16, + AD_CONTEXT_FULLPREVIEW_RENDERED: 17, + TRUST_BANNER_SHOWN: 18, + TRUST_BANNER_DISMISSED: 19, + CTWA_ADD_CONTACT_DIALOG_OPEN: 20, + CTWA_ADD_CONTACT_CREATE_NEW: 21, + CTWA_ADD_CONTACT_EXISTING: 22, + CTWA_ARCHIVE_THREAD: 23, + CTWA_DELETE_THREAD: 24, + CTWA_PARSE_DEEP_LINK_START: 25, + CTWA_PARSE_DEEP_LINK_SUCCESS: 26, + CTWA_PARSE_DEEP_LINK_FAILURE: 27, + CTWA_CONSUMER_DISCLOSURE_SHOWN_BLOCKING: 28, + CTWA_CONSUMER_DISCLOSURE_SHOWN_NONBLOCKING: 29, + CTWA_CONSUMER_DISCLOSURE_NOT_SHOWN_ACCEPTED: 30, + CTWA_CONSUMER_DISCLOSURE_NOT_SHOWN_COOLDOWN: 31, + CTWA_CONSUMER_DISCLOSURE_NOT_SHOWN_OTHER: 32, + CTWA_CONSUMER_DISCLOSURE_ACCEPTED: 33, + CTWA_CONSUMER_DISCLOSURE_NOT_ACCEPTED: 34, + FIRST_MESSAGE_SENT_WITHOUT_AD_PAYLOAD: 35, + FIRST_MESSAGE_SENT_WITH_AD_PAYLOAD: 36, + CALL_SENT_WITHOUT_AD_PAYLOAD: 37, + CALL_SENT_WITH_AD_PAYLOAD: 38, + CTWA_CONSUMER_DISCLOSURE_SHOWN_INTHREAD_BLOCKING: 39, + CONSUMER_DISCLOSURE_NOT_SHOWN_EXEMPT: 40, + AGM_SPINNER_HIDES_FROM_GET_CONTEXT_COMPLETION: 41, + AGM_SPINNER_HIDES_FROM_USER_ACTION: 42, + AGM_SPINNER_HIDES_FROM_MAX_LOADING_TIME: 43, + AGM_INJECTED: 44, + AGM_CTA_CLICKED: 45, + AGM_VIEW_DETAILS_CLICKED: 46, + AGM_BOTTOMSHEET_SHOWN: 47, + AGM_BOTTOMSHEET_CLOSED: 48, + AGM_BOTTOMSHEET_EXTERNAL_NAVIGATION: 49, + DUPLICATED_AGM_NOT_INJECTED: 50, + AGM_WELCOME_MESSAGE_NULL: 51, + AGM_INVALID_CTA_TYPE_FROM_ACTION_LINK: 52, + AGM_INVALID_CTA_PAYLOAD_FROM_ACTION_LINK: 53, + AGM_INVALID_SOURCE_APP_FROM_ACTION_LINK: 54, + AGM_BOTTOMSHEET_IMAGE_ERROR: 55, + AGM_BOTTOMSHEET_TEXT_ERROR: 56, + AGM_SPINNER_SHOWN: 57, + LAND_ON_CHAT_THREAD: 58, + AD_CONTEXT_PREVIEW_CLICKED: 60, + BIZ_CONTEXT_CARD_CLICKED: 61, + BIZ_CONTEXT_CARD_INSERTED: 62, + BIZ_CONTEXT_CARD_EXIST: 63, + LAND_ON_EMPTY_CHAT_THREAD: 64, + AGM_NOT_INJECTED_TIMEOUT: 65, + AGM_NOT_INJECTED_OTHER: 66, + AGM_AD_PREVIEW_OPENED: 67, + AGM_AD_PREVIEW_CLOSED: 68 + } + ], + elapsedTimeInMs: [13, 'integer'], + featureEnabled: [9, 'string'], + icebreakersShown: [4, 'boolean'], + sequenceNumber: [5, 'integer'], + threadCreationDate: [10, 'string'], + threadIdHmac: [11, 'string'], + trustBannerAction: [ + 7, + { + VIEWED: 0, + DISMISSED: 1 + } + ], + trustBannerType: [8, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'MdBootstrapHistoryDataStartDownloading', + id: 4650, + props: { + historySyncChunkOrder: [1, 'integer'], + historySyncStageProgress: [2, 'integer'], + mdBootstrapHistoryPayloadType: [ + 3, + { + INITIAL: 1, + RECENT_HISTORY: 2, + FULL_HISTORY: 3, + PUSHNAME: 4, + STATUS_V3: 5, + NON_BLOCKING_DATA: 6, + ON_DEMAND: 7 + } + ], + mdBootstrapPayloadSize: [4, 'integer'], + mdBootstrapPayloadType: [ + 5, + { + CRITICAL: 1, + NON_CRITICAL: 2 + } + ], + mdBootstrapStepDuration: [6, 'integer'], + mdSessionId: [7, 'string'], + mdTimestamp: [8, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ReportingTokenValidationFailureSender', + id: 6094, + props: { + clientMessageId: [1, 'string'], + e2eReceiverType: [ + 2, + { + PRIMARY: 1, + COMPANION: 2 + } + ], + e2eSenderType: [ + 3, + { + MY_PRIMARY: 1, + OTHER_PRIMARY: 2, + MY_COMPANION: 3, + OTHER_COMPANION: 4, + MY_HOSTED_COMPANION: 5, + OTHER_HOSTED_COMPANION: 6 + } + ], + editType: [ + 4, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + isLid: [5, 'boolean'], + isMessageMediaRetry: [14, 'boolean'], + isMessageRetry: [6, 'boolean'], + isSecretEncryptedMsg: [12, 'boolean'], + messageIsForward: [15, 'boolean'], + messageMediaType: [ + 7, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 8, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + offline: [9, 'boolean'], + reportingTokenValidationFailureReason: [ + 10, + { + MISSING_MESSAGE_SECRET: 0, + EMPTY_REPORTING_TOKEN_CONTENT: 1, + MISMATCH_REPORTING_TOKEN: 2, + UNSUPPORTED_VERSION: 3 + } + ], + reportingTokenVersion: [13, 'integer'], + senderJid: [11, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'Ctwa3pdConversion', + id: 5138, + props: { + ctwa3pdConversionMetadata: [1, 'string'], + ctwa3pdConversionSubtype: [2, 'string'], + ctwa3pdConversionType: [3, 'string'], + ctwa3pdSchemaVersion: [4, 'integer'], + ctwa3pdSurfaceType: [5, 'string'], + ctwaSignals: [7, 'string'], + ctwaTrackingPayload: [6, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BusinessToolsImpression', + id: 2220, + props: { + businessToolsEntryPoint: [ + 4, + { + ENTRY_BANNER: 0, + ENTRY_REGISTRATION_ONBOARDING: 1, + ENTRY_CONVERSATIONS: 2, + ENTRY_SETTINGS: 3, + ENTRY_DEEPLINK: 4, + ENTRY_STATUS_TAB_MENU: 5, + ENTRY_CALLS_TAB_MENU: 6, + ENTRY_BUSINESS_TOOLS_TAB: 7 + } + ], + businessToolsSequenceNumber: [2, 'integer'], + businessToolsSessionId: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'UnknownStanza', + id: 3448, + props: { + unknownStanzaTag: [1, 'string'], + unknownStanzaType: [2, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PrivacyTipAction', + id: 4794, + props: { + privacyTipActionType: [ + 1, + { + VIEW: 1, + CLICK_PRIVACY_TIP: 2, + CLICK_OK: 3, + CLICK_OUTSIDE: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcLinkPreviewResponseHandle', + id: 3860, + props: { + didRespondHqPreview: [5, 'boolean'], + isPreviewSuccess: [2, 'boolean'], + previewDurationMs: [4, 'integer'], + previewSessionId: [3, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ListUpdate', + id: 5830, + props: { + groupsAdded: [9, 'integer'], + groupsAfterUpdate: [10, 'integer'], + listAction: [ + 1, + { + CREATE: 1, + DELETE: 2, + UNDELETE: 3, + RENAME: 4, + UPDATE_MEMBERS: 5, + MUTE: 6, + UNMUTE: 7 + } + ], + listId: [2, 'integer'], + listType: [ + 3, + { + NONE: 0, + UNREAD: 1, + GROUP: 2, + FAVORITE: 3, + PREDEFINED: 4, + CUSTOM: 5, + COMMUNITY: 6, + BUSINESS_AI: 7, + DRAFTS: 8 + } + ], + predefinedId: [13, 'integer'], + updateEntryPoint: [ + 8, + { + CONTACT_INFO: 1, + GROUP_INFO: 2, + CHAT_MORE_OPTIONS: 3, + CHAT_LONG_PRESS_OPTIONS: 4, + FILTER_CONTEXT_MENU: 5, + ADD_LIST_FILTER: 6, + LIST_SETTINGS: 7, + LIST_NUX: 8, + DEEPLINK: 9, + PIN_ALERT: 10 + } + ], + usersAdded: [11, 'integer'], + usersAfterUpdate: [12, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdCriticalEvent', + id: 2746, + props: { + collection: [ + 2, + { + REGULAR: 1, + REGULAR_LOW: 2, + REGULAR_HIGH: 3, + CRITICAL_BLOCK: 4, + CRITICAL_UNBLOCK_LOW: 5 + } + ], + mdCriticalEventCode: [ + 1, + { + MESSAGE_RANGE_UNSET: 1, + MESSAGE_RANGE_LAST_SYSTEM_MESSAGE_TIMESTAMP_SET: 2, + MESSAGE_RANGE_MESSAGES_UNSET: 3, + MESSAGE_RANGE_MESSAGES_EMPTY: 4, + MESSAGE_RANGE_MESSAGES_CROSS_LIMIT: 5, + MESSAGE_RANGE_MESSAGE_KEY_UNSET: 6, + MESSAGE_RANGE_MESSAGE_KEY_REMOTE_JID_UNSET: 7, + MESSAGE_RANGE_MESSAGE_KEY_FROM_ME_UNSET: 8, + MESSAGE_RANGE_MESSAGE_KEY_STANZA_ID_UNSET: 9, + MESSAGE_RANGE_MESSAGE_KEY_REMOTE_JID_INVALID: 10, + MESSAGE_RANGE_MESSAGE_KEY_PARTICIPANT_UNSET: 11, + MALFORMED_PENDING_MUTATION: 12, + ACTION_INVALID_INDEX_DATA: 13, + MISSING_MUTATION_TO_REMOVE: 14, + LTHASH_INCONSISTENCY_ON_DAILY_CHECK: 15, + LTHASH_INCONSISTENCY_ON_SNAPSHOT_MAC_MISMATCH: 16 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'OrderDetailsActionsSmb', + id: 3456, + props: { + acceptedPayMethods: [1, 'string'], + actionCategory: [2, 'string'], + entryPointConversionSource: [13, 'string'], + extraAttributes: [3, 'string'], + hasAddedPrice: [4, 'boolean'], + hasCatalog: [5, 'boolean'], + hasNote: [6, 'boolean'], + lastMessageDirection: [ + 14, + { + OPPOSITE_PARTY_INITIATED: 0, + SELF_INITIATED: 1 + } + ], + messageDepth: [15, 'integer'], + orderDetailEntryPoint: [7, 'string'], + orderDetailsCreationAction: [ + 8, + { + CLICK_VIEW_RECEIVED_CART: 1, + SEND_DECLINE_CART: 2, + USER_DELETED_CART: 3, + CLICK_CREATE_ORDER_DETAILS_FROM_CART: 4, + CLICK_ORDER_FROM_ICON_MENU: 5, + CLICK_CREATE_ORDER_DETAILS_FROM_FAB: 6, + SEND_ORDER_DETAILS: 7, + VIEW_ORDER_DETAILS_HUB: 8, + VIEW_ORDER_DETAILS: 9, + CLICK_SORT_ORDERS: 10, + CLICK_UPDATE_ORDER_STATUS: 11, + SEND_ORDER_STATUS: 12, + CLICK_PAYMENT_DETAILS: 13, + SEND_MARK_AS_PAID: 14, + SEND_MARK_AS_UNPAID: 15, + CLICK_HELP: 16, + CLICK_MESSAGE_CUSTOMER: 17, + CLICK_ADD_PAYMENT_OPTION: 18, + CLICK_SAVE_ADD_PAYMENT_OPTION: 19, + CLICK_SAVE_EDIT_PAYMENT_OPTION: 20, + CLICK_EDIT_PAYMENT_OPTION: 21, + CLICK_DELETE_PAYMENT_OPTION: 22, + CLICK_GET_PAID_ON_WA: 23, + CLICK_SEE_ALL_OTHER_ORDERS: 24, + ADD_PAYMENT_OPTION_TO_OD: 25, + EDIT_PAYMENT_OPTION_IN_OD: 26, + CLICK_ADD_CUSTOM_ITEM_TO_ORDER: 27, + ADD_ADDITIONAL_CHARGES_TO_ORDER: 28, + CLICK_ADD_ITEM: 29, + CLICK_ADD_ADDITIONAL_CHARGES: 30, + VIEW_EPHEMERAL_MESSAGES_PROMPT: 31, + CONFIRM_SENDING_ORDER_DETAILS: 32, + CANCEL_SENDING_ORDER_DETAILS: 33, + DO_NOT_SHOW_EPHEMERAL_MESSAGES_PROMPT: 34, + DISMISS_EPHEMERAL_MESSAGES_PROMPT: 35, + VIEW_EVENT_SHARING_TOS_PROMPT: 37, + DISMISS_EVENT_SHARING_TOS_PROMPT: 38, + CLICK_EVENT_SHARING_TOS: 39, + ACCEPT_EVENT_SHARING_TOS: 40, + REJECT_EVENT_SHARING_TOS: 41, + VIEW_CREATE_ORDER: 42, + DISPLAY_ORDER_STATUS_SHARING_TOS: 43, + CLICK_ORDER_STATUS_SHARING_TOS: 44, + CLICK_EDIT_INSTALLMENTS: 45, + VIEW_EDIT_INSTALLMENTS_PROMPT: 46, + SET_DEFAULT_INSTALLMENTS: 47, + SAVE_DEFAULT_INSTALLMENTS: 48, + DISMISS_EDIT_INSTALLMENTS_PROMPT: 49, + VIEW_ORDERS_VALUE_PROP: 50, + CONTINUE_FROM_ORDERS_VALUE_PROP: 51, + DISMISS_ORDERS_VALUE_PROP: 52, + CLICK_SEE_ALL_ORDER_REQUESTS: 53, + BIZ_ACTION_BAR: 54, + CLICK_ADD_ITEMS: 55, + CANCEL_ORDER_REQUEST: 56, + CONTINUE_ORDER_REQUEST: 57, + VIEW_PROMPT: 58, + CLICK_PROCEED_WITHOUT_CATALOG: 59, + CLICK_CREATE_ORDER_DETAILS_FROM_PAYMENT_METHOD_ADDED_PROMPT: 60, + VIEW_UPDATE_STATUS: 61 + } + ], + orderEligibleToSend: [11, 'boolean'], + paymentStatus: [9, 'boolean'], + paymentType: [10, 'string'], + sharingOrderStatusEvents: [12, 'boolean'], + threadIdHmac: [16, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CtwaLabelSignal', + id: 4662, + props: { + ctwaLabelSignalVersion: [1, 'integer'], + ctwaLabelTarget: [ + 2, + { + CHAT: 0, + MESSAGE: 1 + } + ], + ctwaLabelType: [ + 3, + { + NEW_ORDER: 0, + PENDING_PAYMENT: 1, + PAID: 2, + ORDER_COMPLETE: 3, + NEW_CUSTOMER: 4, + DELIVERED: 5, + LEAD: 6, + FOLLOW_UP: 7, + APPOINTMENT: 8, + IMPORTANT: 9 + } + ], + ctwaSignalMetadata: [9, 'string'], + customerAdsSharingSettingEnabled: [ + 10, + { + UNSET: 0, + TRUE: 1, + FALSE: 2 + } + ], + deepLinkConversionData: [4, 'string'], + deepLinkConversionSource: [5, 'string'], + eventSharingSettingEnabled: [6, 'boolean'], + globalSharingSettingEnabled: [7, 'boolean'], + threadIdHmac: [8, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'EphemeralOutOfSyncInfo', + id: 3892, + props: { + groupSizeBucket: [ + 1, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4, + XX_LARGE: 5, + XXX_LARGE: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + incomingMessageEphemeralityDuration: [2, 'integer'], + isAGroup: [3, 'boolean'], + isNewThreadForUser: [5, 'boolean'], + otherDefaultModeDuration: [6, 'integer'], + threadEphemeralityDuration: [7, 'integer'], + threadId: [8, 'string'], + userDefaultModeDuration: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcChatCreate', + id: 6132, + props: { + creationMethod: [ + 1, + { + MISSING_WHEN_SAVING_MESSAGE: 0 + } + ], + noCreated: [2, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdChatAssignmentSecondaryAction', + id: 3716, + props: { + mdChatAssignmentSecondaryActionAgentId: [1, 'string'], + mdChatAssignmentSecondaryActionAssignmentType: [ + 8, + { + ASSIGNED: 0, + UNASSIGNED: 1 + } + ], + mdChatAssignmentSecondaryActionBrowserId: [2, 'string'], + mdChatAssignmentSecondaryActionChatType: [ + 3, + { + GROUP: 0, + BROADCAST_LIST: 1, + INDIVIDUAL: 2, + COMMUNITY: 3, + CHANNEL: 4, + INTEROP: 5 + } + ], + mdChatAssignmentSecondaryActionError: [ + 4, + { + ERROR_FETCHING_AGENT_NAME: 0, + ERROR_FETCHING_CHAT: 1, + ERROR_OTHER: 2 + } + ], + mdChatAssignmentSecondaryActionMdId: [5, 'integer'], + mdChatAssignmentSecondaryActionSource: [ + 6, + { + NONE: 0, + BOOTSTRAP: 1 + } + ], + mdChatAssignmentSecondaryActionType: [ + 7, + { + ACTION_SYSTEM_MESSAGE_ADDED_TO_CHAT_HISTORY: 0, + ACTION_SYSTEM_MESSAGE_CREATION_ERROR: 1, + ACTION_SYSTEM_MESSAGE_RENDERED: 2, + ACTION_CHAT_STATUS_TICKER_SHOWN: 3, + ACTION_TOOLTIP_SHOWN: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ClockSkewDifferenceT', + id: 3178, + props: { + clockSkewHourly: [1, 'integer'] + }, + wamChannel: 'private', + privateStatsIdInt: 37887164, + weight: 10000 + }, + { + name: 'BugReportSession', + id: 3850, + props: { + bugReportErrorMessage: [2, 'string'], + bugReportFlowAction: [ + 1, + { + NO_INTERNET_CONNECTION_IMPRESSION: 1, + BUG_REPORT_FORM_IMPRESSION: 2, + CANCEL_CLICK: 3, + ADD_SCREENSHOT_CLICK: 4, + REMOVE_SCREENSHOT_CLICK: 5, + SUBMIT_CLICK: 6, + SUCCESS_VIEW_IMPRESSION: 7, + ERROR_VIEW_IMPRESSION: 8, + SUBMISSION_FAILED: 9, + SUBMISSION_SUCCESSFUL: 10, + DEVICE_LOG_UPLOAD_FAILED: 11, + DEVICE_LOG_UPLOAD_SUCCESSFUL: 12, + MEDIA_UPLOAD_FAILED: 13, + MEDIA_UPLOAD_SUCCESSFUL: 14, + MEDIA_UPLOAD_RETRY_CLICK: 15, + SUBMIT_BUG_WITHOUT_FAILED_MEDIA_CLICK: 16, + SUBMIT_BUG_WITHOUT_FAILED_MEDIA_CANCEL_CLICK: 17, + SUBMIT_BUG_RETRY_CLICK: 18, + SUBMIT_BUG_RETRY_VIA_EMAIL_CLICK: 19, + SUBMIT_BUG_RETRY_CANCEL_CLICK: 20, + SUBMIT_BUG_CATEGORY_CLICK: 21 + } + ], + bugReportImageCount: [8, 'integer'], + bugReportMediaCount: [3, 'integer'], + bugReportNumberOfChars: [9, 'integer'], + bugReportNumberOfWords: [10, 'integer'], + bugReportTaskId: [7, 'string'], + bugReportVideoCount: [11, 'integer'], + bugReportingEntryPoint: [ + 12, + { + BUG_REPORT_ENTRY_POINT_SETTINGS: 1, + BUG_REPORT_ENTRY_POINT_HELP: 2, + BUG_REPORT_ENTRY_POINT_RAGE_SHAKE: 3, + BUG_REPORT_ENTRY_POINT_REPORT_MESSAGE: 4, + BUG_REPORT_ENTRY_POINT_VOIP_BUGNUB: 5, + BUG_REPORT_ENTRY_POINT_VOIP_CALL_MENU: 6, + BUG_REPORT_ENTRY_POINT_BLOKS: 7 + } + ], + submitBugCategory: [6, 'string'], + submitBugContainsTitle: [5, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcJobInfo', + id: 3054, + props: { + jobName: [1, 'string'], + jobPriority: [2, 'string'], + jobResultType: [ + 5, + { + COMPLETED: 0, + ERROR: 1, + TIMEOUT: 2, + ABORTED: 3 + } + ], + pendingJobsCount: [4, 'integer'], + scenario: [ + 3, + { + INITIAL_PAIRING: 0, + OFFLINE_RESUME: 1, + IDLE: 2, + RECENT_HISTORY_SYNC: 3, + CHAT_NAVIGATION: 4 + } + ], + webcJobAddedT: [6, 'integer'], + webcJobCompletedT: [8, 'integer'], + webcJobStartedT: [7, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMenu', + id: 2504, + props: { + webcMenuAction: [ + 2, + { + THREADS_SCREEN_CLICK: 1, + CHAT_SCREEN_CLICK: 2, + SETTINGS_SCREEN_CLICK: 3 + } + ], + webcMenuItemLabel: [ + 3, + { + NEW_GROUP: 1, + CREATE_A_ROOM: 2, + PROFILE: 3, + CATALOG: 4, + ARCHIVED: 5, + STARRED: 6, + LABELS: 7, + SETTINGS: 8, + LOG_OUT: 9, + CONTACT_INFO: 10, + SELECT_MESSAGES: 11, + CLOSE_CHAT: 12, + MUTE_NOTIFICATIONS: 13, + CLEAR_MESSAGES: 14, + DELETE_CHAT: 15, + REPORT_BUSINESS: 16, + BLOCK: 17, + SETTINGS_NOTIFICATIONS: 18, + SETTINGS_THEME: 19, + SETTINGS_CHAT_WALLPAPER: 20, + SETTINGS_BLOCKED: 21, + SETTINGS_HELP: 22, + OPEN: 23, + CLOSE: 24, + BUSINESS_TOOLS: 25 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SettingsClick', + id: 2214, + props: { + isBookmarkAppInstalled: [4, 'boolean'], + settingsClickEntryPoint: [ + 2, + { + SETTINGS_SCREEN: 0, + SETTINGS_SEARCH: 1, + DEEP_LINK: 2, + PRIVACY_CHECKUP: 3, + METAB_SCREEN: 4 + } + ], + settingsItem: [ + 1, + { + PROFILE: 0, + BUSINESS_TOOLS: 1, + ACCOUNT: 2, + CHATS: 3, + NOTIFICATIONS: 4, + DATA_STORAGE_USAGE: 5, + HELP: 6, + INVITE_FRIEND: 7, + STARRED_MESSAGES: 8, + WHATSAPP_WEB: 9, + PREMIUM_SUBSCRIPTION: 10, + PRIVACY: 11, + SECURITY: 12, + THEME: 13, + CHAT_WALLPAPER: 14, + MEDIA_AUTO_DOWNLOAD: 15, + REQUEST_ACCOUNT_INFO: 16, + KEYBOARD_SHORTCUTS: 17, + DEVELOPER: 18, + DATA_SHARING: 19, + DESKTOP_SETTINGS: 20, + LINKED_DEVICES: 21, + UNKNOWN: 22, + QR_CODE: 23, + DEVICES: 24, + PROFILE_CARD: 25, + PRIVACY_CARD: 26, + CONTACTS_CARD: 27, + AVATAR: 28, + PAYMENTS: 29, + LOGOUT: 30, + META_VERIFIED: 31, + TEXT_STATUS: 32, + THIRD_PARTY: 33, + IG_BOOKMARK: 34, + FB_BOOKMARK: 35, + FAVORITES: 36, + THREADS_BOOKMARK: 37, + LISTS: 38, + PROFILE_LINKS: 39, + WAFFLE: 40 + } + ], + settingsPageType: [ + 3, + { + SETTINGS: 0, + ME_TAB: 1, + AVATAR_COINFLIP: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'TestAnonymousDaily', + id: 2328, + props: {}, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'KeepInChatNux', + id: 3486, + props: { + chatEphemeralityDuration: [1, 'integer'], + kicNuxActionName: [ + 2, + { + FIRST_DM_NUX_IMPRESSION: 1, + KIC_NUX_IMPRESSION: 2, + KIC_NUX_LEARN_MORE_TAP: 3, + KIC_SYSTEM_MESSAGE_GENERATE: 4 + } + ], + threadId: [3, 'string'], + trigger: [ + 4, + { + CHAT_ENTRY: 1, + SYSTEM_MESSAGE: 2, + KEEP_MESSAGE_FIRST_TIME: 3, + USER_MESSAGE_KEPT: 4, + KEPT_FOLDER_TAP_FIRST_TIME: 5, + UNKEEP_MESSAGE_FIRST_TIME: 6, + EPHEMERAL_SETTINGS: 7 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WefrClientExposure', + id: 5504, + props: { + exposureKey: [1, 'string'], + sentWithDaily: [3, 'boolean'] + }, + wamChannel: 'realtime', + weight: 1 + }, + { + name: 'MessageHighRetryCount', + id: 3132, + props: { + deviceSizeBucket: [ + 5, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + e2eSenderType: [ + 3, + { + MY_PRIMARY: 1, + OTHER_PRIMARY: 2, + MY_COMPANION: 3, + OTHER_COMPANION: 4, + MY_HOSTED_COMPANION: 5, + OTHER_HOSTED_COMPANION: 6 + } + ], + invisibleMessageCategory: [ + 6, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isReceiverLidBased: [7, 'boolean'], + isSenderLidBased: [8, 'boolean'], + mediaType: [ + 1, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 4, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + retryCount: [2, 'integer'] + }, + wamChannel: 'regular', + weight: 20 + }, + { + name: 'TestAnonymousDailyId', + id: 2958, + props: { + psTestEnumField: [ + 1, + { + TEST_VALUE1: 1, + TEST_VALUE2: 2 + } + ], + psTestFloatField: [2, 'number'] + }, + wamChannel: 'private', + privateStatsIdInt: 248614979, + weight: 1 + }, + { + name: 'WebcPageLoad', + id: 642, + props: { + webcAppcacheStatus: [ + 29, + { + UNCACHED: 0, + IDLE: 1, + CHECKING: 2, + DOWNLOADING: 3, + UPDATEREADY: 4, + OBSOLETE: 5 + } + ], + webcCached: [30, 'boolean'], + webcConnectEnd: [10, 'timer'], + webcConnectStart: [9, 'timer'], + webcDomComplete: [19, 'timer'], + webcDomContentLoadedEventEnd: [18, 'timer'], + webcDomContentLoadedEventStart: [17, 'timer'], + webcDomInteractive: [16, 'timer'], + webcDomLoading: [15, 'timer'], + webcDomainLookupEnd: [8, 'timer'], + webcDomainLookupStart: [7, 'timer'], + webcExeDone: [23, 'timer'], + webcExeStart: [22, 'timer'], + webcFetchStart: [6, 'timer'], + webcInitialMountT: [38, 'timer'], + webcInitialNavMountT: [39, 'timer'], + webcInitialPanel: [42, 'string'], + webcInitialPanelMountStartT: [43, 'timer'], + webcInitialPanelMountT: [40, 'timer'], + webcInitialPanelRenderT: [46, 'timer'], + webcJsLoadT: [37, 'timer'], + webcLoadEventEnd: [21, 'timer'], + webcLoadEventStart: [20, 'timer'], + webcLoadInForeground: [53, 'boolean'], + webcMainScriptEnd: [45, 'timer'], + webcMainScriptStart: [44, 'timer'], + webcNativeLoadT: [36, 'timer'], + webcNavigation: [ + 32, + { + NAVIGATE_NEXT: 0, + RELOAD: 1, + BACK_FORWARD: 2, + UNDEFINED: 255 + } + ], + webcPageLoadId: [54, 'string'], + webcPageLoadT: [34, 'timer'], + webcParallellyFetched: [41, 'boolean'], + webcQrCode: [31, 'boolean'], + webcRedirectCount: [33, 'number'], + webcRedirectEnd: [5, 'timer'], + webcRedirectStart: [4, 'timer'], + webcRequestStart: [12, 'timer'], + webcResponseEnd: [14, 'timer'], + webcResponseStart: [13, 'timer'], + webcSecureConnectionStart: [11, 'timer'], + webcUnloadEventEnd: [3, 'timer'], + webcUnloadEventStart: [2, 'timer'], + webcWsAttempts: [28, 'number'], + webcWsNormal: [27, 'timer'], + webcWsOpening: [24, 'timer'], + webcWsPairing: [25, 'timer'], + webcWsSyncing: [26, 'timer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MessageSecretErrors', + id: 3686, + props: { + messageMediaType: [ + 3, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageSecretAllowedList: [ + 1, + { + MESSAGE_POLL: 0, + MESSAGE_EDIT: 1, + REACTION: 2, + COMMENT: 3, + EVENT_RESPONSE: 4, + MESSAGE_EVENT_EDIT: 5, + MESSAGE_REPORTING_TOKEN: 6 + } + ], + messageSecretError: [ + 2, + { + MISSING_MESSAGE_SECRET: 0, + WRONG_LENGTH: 1, + ENCRYPTION_ERROR: 2, + DECRYPTION_ERROR: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'EditMessageSend', + id: 3990, + props: { + editDuration: [1, 'integer'], + editType: [ + 2, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + mediaType: [ + 8, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageSendResultIsTerminal: [3, 'boolean'], + messageType: [ + 4, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + resendCount: [5, 'integer'], + retryCount: [6, 'integer'], + typeOfGroup: [ + 9, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupSafetyCheckUiInteractions', + id: 6242, + props: { + integrityGroupUserHashedId: [3, 'string'], + psSafetyCheckGroupJid: [1, 'string'], + psSafetyCheckInteraction: [ + 2, + { + SEE_CHAT: 0, + EXIT_GROUP: 1, + EXIT_COMMUNITY: 2, + SEE_SCAM_EXAMPLES: 3, + PRIVACY_SETTINGS: 4, + HOW_TO_REPORT: 5, + DOUBLE_CHECK_LINKS: 6, + DISMISS: 7, + DRAG_DISMISS: 8, + X_BUTTON: 9, + BACK_BUTTON: 10 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 216763284, + weight: 1 + }, + { + name: 'GifSearchNoResults', + id: 1128, + props: { + gifSearchProvider: [ + 1, + { + GIPHY: 0, + TENOR: 1 + } + ], + inputLanguageCode: [3, 'string'], + languageCode: [2, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcAssetLoad', + id: 1358, + props: { + webcAssetCacheType: [ + 4, + { + UNCACHED: 0, + IDB: 1, + SW: 2 + } + ], + webcAssetFromCache: [2, 'boolean'], + webcAssetLoadT: [3, 'timer'], + webcAssetName: [1, 'string'], + webcAssetSize: [5, 'number'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CatalogBiz', + id: 1722, + props: { + adId: [19, 'string'], + cartToggle: [13, 'boolean'], + catalogAppealReason: [4, 'string'], + catalogBizAction: [ + 1, + { + ACTION_PRODUCT_ADD_CLICKED: 1, + ACTION_PRODUCT_ADD_SUCCESS: 2, + ACTION_PRODUCT_ADD_FAILED: 3, + ACTION_PRODUCT_EDIT_CLICKED: 4, + ACTION_PRODUCT_EDIT_SUCCESS: 5, + ACTION_PRODUCT_EDIT_FAILED: 6, + ACTION_PRODUCT_DELETE_CLICKED: 7, + ACTION_PRODUCT_DELETE_SUCCESS: 8, + ACTION_PRODUCT_DELETE_FAILED: 9, + ACTION_APPEAL_PRODUCT_CLICKED: 10, + ACTION_APPEAL_PRODUCT_SUCCESS: 11, + ACTION_APPEAL_PRODUCT_FAILED: 12, + ACTION_CREATE_PRODUCT_CATALOG: 13, + ACTION_CREATE_PRODUCT_CATALOG_SUCCESS: 14, + ACTION_CREATE_PRODUCT_CATALOG_FAILED: 15, + ACTION_CATALOG_MENU_ITEM_CLICKED: 16, + ACTION_PRODUCT_RESUBMIT_CLICKED: 17, + ACTION_START_IMPORT_FLOW: 18, + ACTION_IMPORT_POST: 19, + ACTION_CARD_ITEM_CLICK: 21, + ACTION_CARD_MORE_CLICK: 22, + ACTION_LIST_IMPRESSION: 23, + ACTION_DETAIL_IMAGE_CLICK: 25, + ACTION_DETAIL_LINK_CLICK: 26, + ACTION_FULL_IMAGE_SWIPE: 30, + ACTION_DETAIL_IMPRESSION: 31, + ACTION_QUOTED_PRODUCT_IN_CONVERSATION_CLICK: 32, + ACTION_PRODUCT_IN_CONVERSATION_CLICK: 33, + ACTION_SEND_PRODUCT_MESSAGE: 34, + ACTION_ONBOARD_IMPRESSION: 35, + ACTION_SHARE_CATALOG_LINK_CLICK: 36, + ACTION_SHARE_PRODUCT_LINK_CLICK: 37, + ACTION_CATALOG_IN_CONVERSATION_CLICK: 38, + ACTION_SHARE_CATALOG_VIA_WA_LINK_CLICK: 39, + ACTION_SHARE_PRODUCT_VIA_WA_LINK_CLICK: 40, + ACTION_SHARE_CATALOG_COPY_LINK_CLICK: 41, + ACTION_SHARE_PRODUCT_COPY_LINK_CLICK: 42, + ACTION_SEND_CATALOG_CLICK: 43, + ACTION_ORDER_MESSAGE_CLICK: 44, + ACTION_ORDER_LIST_IMPRESSION: 45, + ACTION_ORDER_LIST_ITEM_CLICK: 46, + ACTION_MESSAGE_BUSINESS_BUTTON_CLICK: 47, + ACTION_QUOTED_PRODUCT_MESSAGE_SEND: 48, + ACTION_CART_ADD_PRODUCT: 49, + ACTION_CART_ICON_CLICK: 50, + ACTION_CART_SNACKBAR_CLICK: 51, + ACTION_CART_LIST_IMPRESSION: 52, + ACTION_CART_EDIT_PRODUCT: 53, + ACTION_CART_DELETE_PRODUCT: 54, + ACTION_CART_ABANDON: 55, + ACTION_SEND_ORDER_MESSAGE: 56, + ACTION_MENU_CLICK: 57, + ACTION_PRODUCT_HIDE_CLICKED: 58, + ACTION_PRODUCT_HIDE_SUCCESS: 59, + ACTION_PRODUCT_HIDE_CANCELLED: 60, + ACTION_PRODUCT_HIDE_FAILED: 61, + ACTION_PRODUCT_UNHIDE_CLICKED: 62, + ACTION_PRODUCT_UNHIDE_SUCCESS: 63, + ACTION_PRODUCT_UNHIDE_CANCELLED: 64, + ACTION_PRODUCT_UNHIDE_FAILED: 65, + ACTION_CATALOG_LIST_MENU_CLICKED: 66, + ACTION_CATALOG_LIST_MENU_CLICKED_WITH_ADVERTISE_SHOWN: 67, + ACTION_COLLECTION_CREATE_CLICKED: 68, + ACTION_COLLECTION_CREATED: 69, + ACTION_MENU_COLLECTIONS_CLICK: 70, + ACTION_COLLECTION_RENAME_CLICKED: 71, + ACTION_COLLECTION_RENAME_CANCELLED: 72, + ACTION_COLLECTION_RENAMED: 73, + ACTION_COLLECTION_DELETE_CLICKED: 74, + ACTION_COLLECTION_DELETE_CANCELLED: 75, + ACTION_COLLECTION_DELETED: 76, + ACTION_COLLECTION_ASSIGN_ITEMS: 77, + ACTION_COLLECTION_UNASSIGN_ITEMS: 78, + ACTION_COLLECTION_CHANGE_ORDER: 80, + ACTION_COLLECTION_ITEM_CHANGE_ORDER: 81, + ACTION_ERROR_SAVING_ITEM: 82, + ACTION_MEDIA_DELETE_SUCCESS: 83, + ACTION_SAVING_PRODUCT_PROGRESS_BAR: 84, + ACTION_CONTINUE_SAVING_PRODUCT: 85, + ACTION_ABORT_SAVING_PRODUCT: 86, + ACTION_CLICK_SAVE_PRODUCT: 87, + ACTION_CHOOSE_PRODUCT_INTENT: 88, + ACTION_DETAIL_VIDEO_CLICK: 89, + ACTION_WATCH_PRODUCT_VIDEO: 90, + ACTION_FULL_VIDEO_SWIPE: 91, + ACTION_PROCEED_TO_REPLACE_MEDIA: 92, + ACTION_PRODUCT_LINK_SHARE_TO_STATUS_BTN_IMPRESSION: 93, + ACTION_PRODUCT_LINK_SHARE_TO_STATUS_BTN_CLICKED: 94, + ACTION_CATALOG_LINK_SHARE_TO_STATUS_BTN_IMPRESSION: 95, + ACTION_CATALOG_LINK_SHARE_TO_STATUS_BTN_CLICKED: 96 + } + ], + catalogEntryPoint: [ + 7, + { + CATALOG_ENTRY_POINT_PROFILE: 1, + CATALOG_ENTRY_POINT_SETTINGS: 2, + CATALOG_ENTRY_POINT_MESSAGE: 3, + CATALOG_ENTRY_POINT_ATTACHMENT_PANEL: 4, + CATALOG_ENTRY_POINT_NUX: 5, + CATALOG_ENTRY_POINT_DEEPLINK: 6, + CATALOG_ENTRY_POINT_CHAT: 7, + CATALOG_ENTRY_POINT_ORDER_MESSAGE: 8, + CATALOG_ENTRY_POINT_INVOICE_ATTACHMENT_PANEL: 9, + CATALOG_ENTRY_POINT_PRODUCT_LIST_MESSAGE: 10, + CATALOG_ENTRY_POINT_TOP_BAR: 11, + CATALOG_ENTRY_POINT_PROFILE_ITEM_CLICK: 12, + CATALOG_ENTRY_POINT_PROFILE_SEE_ALL: 13, + CATALOG_ENTRY_POINT_QUOTED_PRODUCT: 14, + CATALOG_ENTRY_POINT_CATALOG_MESSAGE: 15, + CATALOG_ENTRY_QBM: 16, + CATALOG_ENTRY_POINT_ADS_DEEPLINK: 17, + CATALOG_ENTRY_POINT_WA_PAGES: 18, + CATALOG_ENTRY_POINT_DIRECTORY_BARE_TIPS: 19, + CATALOG_ENTRY_POINT_BIZ_ACTION_BAR: 20, + CATALOG_ENTRY_POINT_BIZ_ONBOARDING: 21, + CATALOG_ENTRY_POINT_TRUST_CARD: 22, + CATALOG_ENTRY_POINT_FLOWS: 23, + CATALOG_ENTRY_POINT_BIZ_AI_HOME: 24 + } + ], + catalogSessionId: [3, 'string'], + collectionCount: [18, 'integer'], + collectionId: [14, 'string'], + collectionIndex: [15, 'string'], + deepLinkOpenFrom: [ + 8, + { + DEEP_LINK_EXTERNAL: 1, + DEEP_LINK_WA_LINK_CLICK: 2, + QR_CODE_SHEET: 3, + DEEP_LINK_BANNER: 4, + DEEP_LINK_SMB_NOTIFICATION: 5, + DEEP_LINK_MESSENGER_APP: 6 + } + ], + entryPointConversionSource: [20, 'string'], + errorCode: [5, 'integer'], + extraAttributes: [24, 'string'], + isOrderMsgAttached: [10, 'boolean'], + lastMessageDirection: [ + 21, + { + OPPOSITE_PARTY_INITIATED: 0, + SELF_INITIATED: 1 + } + ], + messageDepth: [22, 'integer'], + orderId: [9, 'string'], + productCount: [6, 'integer'], + productId: [2, 'string'], + productIds: [12, 'string'], + productIndex: [16, 'string'], + quantity: [11, 'integer'], + threadIdHmac: [23, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelSimilarChannels', + id: 5202, + props: { + bannerStatus: [ + 1, + { + DISPLAYED: 0, + HIDDEN: 1, + CLOSED: 2 + } + ], + bannerStatusReason: [ + 2, + { + NO_SIMILAR_CHANNELS_FOUND: 0, + NOT_ENOUGH_SIMILAR_CHANNELS: 1, + SIMILAR_CHANNELS_FOUND: 2, + CLOSE_TAP: 3, + UNFOLLOW_TAP: 4 + } + ], + cid: [3, 'string'], + similarChannelDisplayRank: [4, 'integer'], + similarChannelEventSurface: [ + 5, + { + CHANNEL_UPDATES_HOME: 1, + CHANNEL_THREAD: 2, + CHANNEL_DIRECTORY: 3, + CHANNEL_DIRECTORY_SEARCH: 4, + CHANNEL_PROFILE: 5, + CHANNEL_UPDATES_HOME_SEARCH: 6, + CHANNEL_DIRECTORY_CATEGORIES: 7, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 8 + } + ], + similarChannelId: [6, 'string'], + similarChannelRank: [7, 'integer'], + similarChannelUserType: [ + 9, + { + OWNER: 1, + ADMIN: 2, + FOLLOWER: 3, + GUEST: 4 + } + ], + similarChannelsSessionId: [10, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'OfflineResume', + id: 3112, + props: { + affectedBySleepMode: [35, 'boolean'], + appContext: [49, 'string'], + appContextBitfield: [50, 'integer'], + attemptNumber: [36, 'integer'], + chatThreadCount: [1, 'integer'], + dbDurationT: [39, 'timer'], + dbMainThreadDurationT: [40, 'timer'], + dbMainThreadReadsCount: [41, 'integer'], + dbMainThreadWritesCount: [42, 'integer'], + dbReadsCount: [43, 'integer'], + dbWritesCount: [44, 'integer'], + disconnected: [45, 'boolean'], + expectedOfflineCallCount: [23, 'integer'], + expectedOfflineMessageCount: [17, 'integer'], + expectedOfflineNotificationCount: [18, 'integer'], + expectedOfflineReceiptCount: [19, 'integer'], + isOfflineCompleteMissed: [2, 'boolean'], + isResumeInForeground: [13, 'boolean'], + isResumeStartedInForeground: [37, 'boolean'], + isRunningFromServiceExtension: [22, 'boolean'], + lastStanzaT: [3, 'timer'], + logoutSessionId: [38, 'integer'], + mailboxAge: [14, 'integer'], + mainScreenLoadT: [4, 'timer'], + nseMergeT: [54, 'timer'], + offlineCallCount: [24, 'integer'], + offlineDecryptErrorCount: [5, 'integer'], + offlineMessageCount: [6, 'integer'], + offlineNotificationCount: [7, 'integer'], + offlinePreviewT: [8, 'timer'], + offlineProcessingT: [20, 'timer'], + offlineReceiptCount: [9, 'integer'], + offlineResumeResult: [ + 21, + { + COMPLETE: 1, + INCOMPLETE_UNKNOWN_ERROR: 2, + INCOMPLETE_DISCONNECT: 3, + INCOMPLETE_APP_RESTART: 4 + } + ], + offlineSessionT: [46, 'timer'], + offlineSizeBytes: [10, 'integer'], + onTrickleMode: [15, 'boolean'], + pageLoadT: [11, 'timer'], + passiveModeT: [25, 'timer'], + preackCallCount: [26, 'integer'], + preackMessageCount: [27, 'integer'], + preackNotificationCount: [28, 'integer'], + preackReceiptCount: [29, 'integer'], + preacksCount: [47, 'integer'], + processedCallCount: [30, 'integer'], + processedMessageCount: [31, 'integer'], + processedNotificationCount: [32, 'integer'], + processedReceiptCount: [33, 'integer'], + queuedMessageCount: [51, 'integer'], + queuedNotificationCount: [52, 'integer'], + queuedReceiptCount: [53, 'integer'], + runningTasks: [48, 'string'], + socketConnectT: [12, 'timer'], + transientOfflineSessionId: [34, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcPageLoad2', + id: 5392, + props: { + webcPageLoadId: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'RevokeMessageSend', + id: 3656, + props: { + messageSendResultIsTerminal: [1, 'boolean'], + messageType: [ + 2, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + resendCount: [3, 'integer'], + retryCount: [4, 'integer'], + revokeDuration: [5, 'integer'], + revokeType: [ + 6, + { + SENDER: 0, + ADMIN: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'UiMessageYourselfAction', + id: 3780, + props: { + uiMessageYourselfActionSessionId: [1, 'string'], + uiMessageYourselfActionType: [ + 2, + { + NEW_CHAT_PRESSED: 1, + YOU_SELECTED: 2, + SEARCH_BAR_PRESSED: 3, + SEARCH_FULL_NAME_YOU_SELECTED: 4, + NEW_NTS_CREATED: 5, + EXISTING_NTS_OPENED: 6 + } + ], + uiMessageYourselfFunnelName: [ + 3, + { + NEW_CHAT: 1, + CONTACT_AND_GLOBAL_SEARCH: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ScreenLockSettingsData', + id: 4802, + props: { + screenAutoLockDuration: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'DisappearingModeSettingEvents', + id: 3446, + props: { + disappearingModeEntryPoint: [ + 5, + { + ACCOUNT_SETTINGS: 1, + SYSTEM_MESSAGE: 2, + INDIVIDUAL_CHAT_DISAPPEARING_MESSAGES_SETTING: 3, + GROUP_CHAT_DISAPPEARING_MESSAGES_SETTING: 4, + DEEP_LINK: 5, + STORAGE_SETTINGS: 6, + PRIVACY_SETTINGS: 7 + } + ], + disappearingModeSettingEventName: [ + 1, + { + DEFAULT_MESSAGE_TIMER_OPEN: 1, + DEFAULT_MESSAGE_TIMER_SET: 2, + DEFAULT_MESSAGE_TIMER_EXIT: 3, + LEARN_MORE_CLICK: 4 + } + ], + lastToggleTimestamp: [2, 'integer'], + newEphemeralityDuration: [3, 'integer'], + previousEphemeralityDuration: [4, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GroupCreateC', + id: 156, + props: {}, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdChatAssignment', + id: 3752, + props: { + assignerAgentId: [1, 'string'], + assignerBrowserId: [2, 'string'], + assignerMdId: [3, 'integer'], + chatAssignmentAction: [ + 4, + { + ACTION_ASSIGNED: 0, + ACTION_UNASSIGNED: 1, + ACTION_REASSIGNED: 2 + } + ], + chatAssignmentAgentId: [5, 'string'], + chatAssignmentBrowserId: [6, 'string'], + chatAssignmentChatType: [ + 7, + { + INDIVIDUAL: 0, + GROUP: 1, + COMMUNITY: 2, + CHANNEL: 3 + } + ], + chatAssignmentEntryPoint: [ + 8, + { + CONVERSATION_OVERFLOW_MENU: 0, + CONTACT_INFO_SCREEN: 1, + MULTI_SELECT: 2, + SYSTEM_MESSAGE: 3, + CHAT_LIST_SWIPE: 4, + AI_REPLIES: 5 + } + ], + chatAssignmentMdId: [9, 'integer'], + chatsCnt: [10, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'E2eMessageRecv', + id: 478, + props: { + agentEngagementType: [ + 15, + { + DIRECT_CHAT: 0, + INVOKED: 1, + MEMBER: 2 + } + ], + botType: [ + 19, + { + UNKNOWN: 0, + METABOT: 1, + BOT_1P_BIZ: 2, + BOT_3P_BIZ: 3, + UGC: 4, + META_CHARACTER: 5 + } + ], + e2eCiphertextType: [ + 5, + { + MESSAGE: 0, + PREKEY_MESSAGE: 1, + SENDER_KEY_MESSAGE: 2, + MESSAGE_SECRET_MESSAGE: 3 + } + ], + e2eCiphertextVersion: [6, 'integer'], + e2eDestination: [ + 4, + { + INDIVIDUAL: 0, + GROUP: 1, + LIST: 2, + STATUS: 3, + CHANNEL: 4, + INTEROP: 5 + } + ], + e2eFailureReason: [ + 2, + { + INVALID_MESSAGE: 0, + LEGACY_MESSAGE: 1, + INVALID_VERSION: 2, + PRE_KEY_MESSAGE_MISSING_PRE_KEY: 3, + PRE_KEY_MESSAGE_INVALID_KEY: 4, + UNTRUSTED_IDENTITY: 5, + NO_SESSION_AVAILABLE: 6, + PLAINTEXT_BYTE_MISMATCH: 7, + UNKNOWN_CIPHERTEXT_TYPE: 8, + UNKNOWN_CIPHERTEXT_VERSION: 9, + INVALID_PADDING: 10, + INVALID_PROTOCOL_BUFFER: 11, + INVALID_NUMBER_OF_MESSAGE_TYPES: 12, + INVALID_IMAGE_FILE_LENGTH: 13, + INVALID_IMAGE_FILE_SHA256: 14, + INVALID_IMAGE_MEDIA_URL: 15, + INVALID_IMAGE_MEDIA_KEY: 16, + INVALID_IMAGE_MIME_TYPE: 17, + UNKNOWN_V2_TAGS: 18, + INVALID_EDIT_VERSION: 19, + INVALID_HSM_NAMESPACE: 20, + INVALID_HSM_ELEMENT: 21, + UNKNOWN_PROTOCOL_MESSAGE_TYPE: 22, + DUPLICATE_MESSAGE: 23, + FINGERPRINT_IDENTITY_MISMATCH: 24, + FINGERPRINT_VERSION_MISMATCH: 25, + INVALID_ARGUMENT: 26, + INVALID_KEY: 27, + INVALID_KEY_ID: 28, + INVALID_MAC: 29, + NO_MEMORY: 30, + STALE_KEY_EXCHANGE: 31, + VRF_SIGNATURE_VERIFICATION_FAILED: 32, + ERROR_MINIMUM_VALUE: 33, + ERROR_UNKNOWN: 34, + INVALID_BROADCAST_STANZA_ATTRIBUTE: 35, + INVALID_LIST_REPLY_MESSAGE: 36, + INVALID_LIST_REPLY_ROW_IDENTIFIER: 37, + INVALID_BUTTONS_RESPONSE_MESSAGE: 38, + INVALID_BUTTONS_RESPONSE_BUTTON_IDENTIFIER: 39, + INVALID_ORDER_MESSAGE: 40, + ERROR_CANCELLED: 41, + FUTURE_MESSAGE: 42, + INVALID_EMPTY_PROTOBUF_NOT_ALLOWED: 43, + SELF_SEND: 44, + INVALID_MEDIA_MIME_TYPE_TEMPLATE_MESSAGE: 45, + INVALID_MEDIA_ENC_HASH: 46, + INVALID_IDENTITY: 47, + PASSTHROUGH: 48, + NOT_IN_PENDING_DEVICES: 49, + EDIT_TYPE_AND_PROTOCOL_MISMATCH: 50, + DECRYPTION_FAILED: 51, + DESERIALIZE_INVALID_PROTO_FORMAT: 52, + DESERIALIZE_RATCHET_KEY_BAD_FORMAT: 53, + DESERIALIZE_PK_INVALID_PROTO_FORMAT: 54, + DESERIALZE_PK_KEY_BAD_FORMAT: 55, + TOO_MANY_MESSAGES_IN_FUTURE: 56, + EMPTY_VERSION_CONTENT_SUFFIX: 57, + CONTENT_EXCEEDED_EXPECTED_LENGTH: 58, + GRP_INVALID_PROTO_FORMAT: 59, + GRP_INVALID_KEY_FORMAT: 60, + GRP_VERSION_CONTENT_EMPTY: 61, + GRP_INVALID_VERSION_CONTENT_LENGTH: 62, + GRP_SENDER_KEY_INVALID_PROTO_FORMAT: 63, + GRP_SENDER_KEY_PROTO_ERROR: 64, + GRP_TOO_MANY_MESSAGES_IN_FUTURE: 65, + MISSING_MESSAGE_SECRET: 66, + MESSAGE_SECRET_INVALID: 67, + INVALID_REACTION_TEXT: 68, + UNSUPPORTED_MESSAGE_TYPE: 69, + UNSUPPORTED_IN_INTEROP: 70, + TARGET_MESSAGE_NOT_FOUND: 71, + STATUS_FROM_HOSTED_DEVICE_UNSUPPORTED: 72, + GROUP_MESSAGE_FROM_HOSTED_DEVICE_UNSUPPORTED: 73, + BROADCAST_FROM_HOSTED_DEVICE_UNSUPPORTED: 74, + LIVE_LOCATION_FROM_HOSTED_DEVICE_UNSUPPORTED: 75, + MESSAGE_TYPE_MISMATCH: 76, + ERROR_SESSION_STATE_UNACKED_PKMSG_GET_BASE_KEY: 77, + ERROR_SIGNAL_MESSAGE_GET_SENDER_RATCHET_KEY: 78, + ERROR_SESSION_STATE_GET_ROOT_KEY: 79, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY_PAIR: 80, + ERROR_SESSION_STATE_SET_SENDER_CHAIN_KEY: 81, + ERROR_SESSION_STATE_FIND_RECEIVER_CHAIN: 82, + ERROR_SESSION_RECORD_DESERIALIZE: 83, + ERROR_SENDER_KEY_STATE_REMOVE_SENDER_MESSAGE_KEY: 84, + ERROR_EMPTY_PLAINTEXT_DATA: 85, + ERROR_MAC_LEN_MISMATCH: 86, + ERROR_INVALID_MAC_LEN: 87, + ERROR_INVALID_SIGNATURE_LEN: 88, + ERROR_SENDER_KEY_LOAD_KEY: 89, + ERROR_FAST_RATCHET_SENDER_KEY_LOAD_KEY: 90, + ERROR_UNKNOWN_LOAD_KEY: 91, + ERROR_UNKNOWN_LOAD_SESSION: 92, + ERROR_SESSION_RECORD_GET_STATE: 93, + ERROR_SESSION_STATE_GET_SENDER_CHAIN_KEY: 94, + ERROR_INVALID_KEY_MATEIRAL_DATA_LEN: 95, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY: 96, + ERROR_SESSION_STATE_GET_LOCAL_IDENTITY_KEY: 97, + ERROR_SESSION_STATE_GET_REMOTE_IDENTITY_KEY: 98, + ERROR_MEDIA_HASH_VERIFICATION_FAILURE: 99, + ERROR_CIPHERTEXT_TOO_LONG: 100, + ERROR_THUMBNAIL_HASH_VERIFICATION_FAILURE: 101, + ERROR_PARENT_CHILD_SENDER_JID_MISMATCH: 102, + INVALID_EDIT_MESSAGE: 103, + INVALID_SESSION: 104 + } + ], + e2eSenderType: [ + 8, + { + MY_PRIMARY: 1, + OTHER_PRIMARY: 2, + MY_COMPANION: 3, + OTHER_COMPANION: 4, + MY_HOSTED_COMPANION: 5, + OTHER_HOSTED_COMPANION: 6 + } + ], + e2eSuccessful: [1, 'boolean'], + editType: [ + 13, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + groupEncryptionState: [ + 23, + { + E2EE: 1, + HOSTED: 2 + } + ], + invisibleMessageCategory: [ + 22, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isHostedChat: [20, 'boolean'], + isLid: [11, 'boolean'], + localAddressingMode: [ + 16, + { + PN: 1, + LID: 2 + } + ], + messageAddressingMode: [ + 17, + { + PN: 1, + LID: 2 + } + ], + messageDistributionType: [ + 21, + { + REGULAR_MESSAGE: 0, + DIRECT_MESSAGE: 1, + SENDER_KEY_DISTRIBUTION_MESSAGE: 2 + } + ], + messageMediaType: [ + 7, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + offline: [9, 'boolean'], + retryCount: [3, 'integer'], + revokeType: [ + 10, + { + SENDER: 0, + ADMIN: 1 + } + ], + serverAddressingMode: [ + 18, + { + PN: 1, + LID: 2 + } + ], + stanzaType: [ + 14, + { + MESSAGE: 1, + RECEIPT: 2, + CALL: 3, + NOTIFICATION: 4, + APPDATA: 5 + } + ], + typeOfGroup: [ + 12, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 20 + }, + { + name: 'Daily', + id: 1158, + props: { + accessibilityVoiceover: [108, 'boolean'], + addressbookSize: [11, 'integer'], + addressbookWhatsappSize: [12, 'integer'], + aiMemorySavedCnt: [223, 'integer'], + aiWidgetInstalled: [210, 'boolean'], + androidAdvertisingId: [135, 'string'], + androidKeystoreState: [ + 139, + { + NOT_AVAILABLE: 1, + SELF_TEST_FAILURE: 2, + ENC_KEY_READ_FAILURE: 3, + ENC_KEY_STORED_USED: 4, + ENC_KEY_PLAIN_DELETED: 5, + ENC_KEY_PLAIN_RECOVERED: 6 + } + ], + androidXmppWorkersRuntime: [167, 'integer'], + appCodeHash: [103, 'string'], + appLastOpenTimestamp: [212, 'integer'], + appStandbyBucket: [121, 'integer'], + autoDlAudioCellular: [90, 'boolean'], + autoDlAudioRoaming: [91, 'boolean'], + autoDlAudioWifi: [89, 'boolean'], + autoDlDocCellular: [96, 'boolean'], + autoDlDocRoaming: [97, 'boolean'], + autoDlDocWifi: [95, 'boolean'], + autoDlImageCellular: [87, 'boolean'], + autoDlImageRoaming: [88, 'boolean'], + autoDlImageWifi: [86, 'boolean'], + autoDlVideoCellular: [93, 'boolean'], + autoDlVideoRoaming: [94, 'boolean'], + autoDlVideoWifi: [92, 'boolean'], + backupNetworkSetting: [ + 10, + { + WIFI_ONLY: 0, + WIFI_OR_CELLULAR: 1 + } + ], + backupRestoreEncryptionVersion: [138, 'integer'], + backupSchedule: [ + 9, + { + OFF: 0, + DAILY: 1, + WEEKLY: 2, + MONTHLY: 3, + MANUAL: 4 + } + ], + channelsMediaFolderSize: [186, 'integer'], + chatDatabaseSize: [19, 'integer'], + chatLockFolderCount: [168, 'integer'], + contactsCreatedOnWhatsappSize: [200, 'integer'], + contactsPermissionAuthorizationStatus: [ + 201, + { + NOT_DETERMINED: 1, + RESTRICTED: 2, + DENIED: 3, + AUTHORIZED: 4, + LIMITED: 5 + } + ], + count1on1Threads: [216, 'integer'], + countEphemeralThreads: [181, 'integer'], + countEphemeralThreadsEnabledByMe: [182, 'integer'], + countGroupThreads: [217, 'integer'], + countLimitSharing1on1Threads: [218, 'integer'], + countLimitSharingGroupThreads: [219, 'integer'], + dbAddressbookTableSize: [206, 'integer'], + defaultDisappearingDuration: [140, 'integer'], + defenseMode: [214, 'integer'], + deprecatedContactsSize: [228, 'integer'], + deviceLanguage: [153, 'string'], + emailState: [ + 174, + { + NOT_ADDED: 1, + UNVERIFIED: 2, + VERIFIED: 3 + } + ], + entSecurityNotificationsEnabled: [134, 'boolean'], + experimentTmoPreloadGroupDaily: [166, 'integer'], + favoritedAnimatedStickerCount: [113, 'integer'], + favoritedFirstPartyStickerCount: [112, 'integer'], + favoritedTotalStickerCount: [111, 'integer'], + galleryPermission: [ + 164, + { + FULL: 1, + PARTIAL: 2, + NONE: 3 + } + ], + hasTextstatusEmojiModified24h: [175, 'boolean'], + hasTextstatusModified24h: [176, 'boolean'], + hasTextstatusTextModified24h: [177, 'boolean'], + hasUsername: [187, 'boolean'], + hasUsernamePin: [222, 'boolean'], + inNetworkContactsSize: [190, 'integer'], + installedAnimatedStickerPackCount: [116, 'integer'], + installedAnimatedThirdPartyStickerPackCount: [137, 'integer'], + installedFirstPartyStickerPackCount: [115, 'integer'], + installedTotalStickerPackCount: [114, 'integer'], + isContactSyncToOsDefaultOn: [202, 'boolean'], + isDefaultDisappearingMessagingUser: [183, 'boolean'], + isEphemeralMessagingUser: [184, 'boolean'], + isProfilePhotoSet: [195, 'boolean'], + keyboardLanguage: [154, 'string'], + languageCode: [5, 'string'], + lastBackupTimestamp: [63, 'integer'], + lastCloudBackupSize: [185, 'integer'], + locationCode: [6, 'string'], + lockFolderHidden: [171, 'boolean'], + lowestAppStandbyBucket: [160, 'integer'], + mdPairTime: [124, 'integer'], + mediaFolderFileCount: [21, 'integer'], + mediaFolderSize: [20, 'integer'], + mediaQualitySetting: [ + 188, + { + AUTO: 0, + DATA_SAVER: 1, + HIGH_QUALITY: 2, + HIGHEST_QUALITY: 3 + } + ], + metaAiModelActual: [ + 198, + { + BASE: 0, + PREMIUM: 1 + } + ], + metaAiModelSelected: [ + 199, + { + BASE: 0, + PREMIUM: 1 + } + ], + metaAiVoiceDefaultOn: [220, 'boolean'], + metaAiVoiceSelection: [221, 'string'], + modifiedInternalProps: [155, 'boolean'], + nativeContactsGlobalSettingEnabled: [205, 'boolean'], + networkIsRoaming: [7, 'boolean'], + networkOperatorName: [159, 'string'], + numAccounts: [163, 'integer'], + numContactsWithTextstatus24h: [178, 'integer'], + numContactsWithTextstatusEmoji24h: [179, 'integer'], + numContactsWithTextstatusText24h: [180, 'integer'], + osBuildNumber: [4, 'string'], + osNotificationSetting: [ + 118, + { + ALLOWED: 1, + BLOCKED: 2, + UNKNOWN: 3 + } + ], + outOfNetworkContactsSize: [191, 'integer'], + packageName: [102, 'string'], + passkeyExists: [165, 'boolean'], + paymentsIsEnabled: [100, 'boolean'], + peripheralConnected: [209, 'string'], + peripheralLinkedProductLine: [229, 'string'], + permissionAccessCoarseLocation: [57, 'integer'], + permissionAccessFineLocation: [58, 'integer'], + permissionCamera: [56, 'integer'], + permissionContacts: [104, 'boolean'], + permissionReadExternalStorage: [53, 'integer'], + permissionRecordAudio: [55, 'integer'], + phoneCores: [156, 'integer'], + phoneyid: [162, 'string'], + preloadsAppManagerId: [224, 'string'], + preloadsAttributionJson: [227, 'string'], + privacySettingsAbout: [ + 141, + { + NOBODY: 1, + ONLY_SHARE_WITH: 2, + MY_CONTACTS: 3, + MY_CONTACTS_EXCEPT: 4, + EVERYONE: 5, + KNOWN: 6 + } + ], + privacySettingsAboutExceptNum: [ + 142, + { + B0: 1, + B1: 2, + B5: 3, + B10: 4, + B15: 5, + B20: 6, + B30: 7, + B40: 8, + B50: 9, + B60: 10, + B70: 11, + B80: 12, + B90: 13, + B100: 14 + } + ], + privacySettingsGroups: [ + 143, + { + NOBODY: 1, + ONLY_SHARE_WITH: 2, + MY_CONTACTS: 3, + MY_CONTACTS_EXCEPT: 4, + EVERYONE: 5, + KNOWN: 6 + } + ], + privacySettingsGroupsExceptNum: [ + 144, + { + B0: 1, + B1: 2, + B5: 3, + B10: 4, + B15: 5, + B20: 6, + B30: 7, + B40: 8, + B50: 9, + B60: 10, + B70: 11, + B80: 12, + B90: 13, + B100: 14 + } + ], + privacySettingsLastSeen: [ + 145, + { + NOBODY: 1, + ONLY_SHARE_WITH: 2, + MY_CONTACTS: 3, + MY_CONTACTS_EXCEPT: 4, + EVERYONE: 5, + KNOWN: 6 + } + ], + privacySettingsLastSeenExceptNum: [ + 146, + { + B0: 1, + B1: 2, + B5: 3, + B10: 4, + B15: 5, + B20: 6, + B30: 7, + B40: 8, + B50: 9, + B60: 10, + B70: 11, + B80: 12, + B90: 13, + B100: 14 + } + ], + privacySettingsProfileLinks: [ + 225, + { + NOBODY: 1, + ONLY_SHARE_WITH: 2, + MY_CONTACTS: 3, + MY_CONTACTS_EXCEPT: 4, + EVERYONE: 5, + KNOWN: 6 + } + ], + privacySettingsProfileLinksExceptNum: [ + 226, + { + B0: 1, + B1: 2, + B5: 3, + B10: 4, + B15: 5, + B20: 6, + B30: 7, + B40: 8, + B50: 9, + B60: 10, + B70: 11, + B80: 12, + B90: 13, + B100: 14 + } + ], + privacySettingsProfilePhoto: [ + 147, + { + NOBODY: 1, + ONLY_SHARE_WITH: 2, + MY_CONTACTS: 3, + MY_CONTACTS_EXCEPT: 4, + EVERYONE: 5, + KNOWN: 6 + } + ], + privacySettingsProfilePhotoExceptNum: [ + 148, + { + B0: 1, + B1: 2, + B5: 3, + B10: 4, + B15: 5, + B20: 6, + B30: 7, + B40: 8, + B50: 9, + B60: 10, + B70: 11, + B80: 12, + B90: 13, + B100: 14 + } + ], + privacySettingsStatus: [ + 150, + { + NOBODY: 1, + ONLY_SHARE_WITH: 2, + MY_CONTACTS: 3, + MY_CONTACTS_EXCEPT: 4, + EVERYONE: 5, + KNOWN: 6 + } + ], + privacySettingsStatusExceptNum: [ + 151, + { + B0: 1, + B1: 2, + B5: 3, + B10: 4, + B15: 5, + B20: 6, + B30: 7, + B40: 8, + B50: 9, + B60: 10, + B70: 11, + B80: 12, + B90: 13, + B100: 14 + } + ], + privacySettingsStatusShareNum: [ + 152, + { + B0: 1, + B1: 2, + B5: 3, + B10: 4, + B15: 5, + B20: 6, + B30: 7, + B40: 8, + B50: 9, + B60: 10, + B70: 11, + B80: 12, + B90: 13, + B100: 14 + } + ], + profileLinksCount: [211, 'integer'], + receiptsEnabled: [8, 'boolean'], + secretCodeActive: [172, 'boolean'], + showMetaAiButtonSetting: [173, 'boolean'], + simMcc: [2, 'integer'], + simMnc: [3, 'integer'], + storageAvailSize: [31, 'integer'], + storageTotalSize: [32, 'integer'], + supportedDecoders: [169, 'string'], + supportedEncoders: [170, 'string'], + syncedInNetworkContactsSize: [192, 'integer'], + totalCountInNetworkUniquePhoneNumber: [193, 'integer'], + totalCountSyncedInNetworkUniquePhoneNumber: [194, 'integer'], + trafficAnonymization: [215, 'integer'], + unreadBadgeFrequency: [213, 'integer'], + videoFolderFileCount: [23, 'integer'], + videoFolderSize: [22, 'integer'], + webcContactsTableSize: [207, 'integer'], + webcFilteredContactsSize: [208, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'StructuredMessageReceive', + id: 3222, + props: { + bizPlatform: [ + 1, + { + UNKNOWN: 1, + SMB: 2, + ENT: 3, + CLOUDAPI: 4 + } + ], + businessOwnerJid: [2, 'string'], + entryPointConversationInitiated: [ + 7, + { + BUSINESS_INITIATED: 0, + CONSUMER_INITIATED: 1, + NO_MESSAGES_LAST_24H: 2 + } + ], + entryPointConversionApp: [8, 'string'], + entryPointConversionSource: [9, 'string'], + lastMessageDirection: [ + 10, + { + OPPOSITE_PARTY_INITIATED: 0, + SELF_INITIATED: 1 + } + ], + messageClass: [ + 3, + { + HSM: 0, + BUTTON: 1, + LIST: 2, + PRODUCT_LIST: 3, + BUTTON_NFM: 4, + PRODUCT_ITEM: 5, + SHOP_STOREFRONT: 6 + } + ], + messageClassAttributes: [4, 'string'], + messageDepth: [11, 'integer'], + messageMediaType: [ + 5, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + templateId: [6, 'string'], + threadIdHmac: [12, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'StatusReply', + id: 1180, + props: { + isMentioned: [7, 'boolean'], + isPosterBiz: [4, 'boolean'], + isPosterInAddressBook: [6, 'boolean'], + isRecentQuickReplyUsed: [16, 'boolean'], + isReplyBarBelowCanvas: [9, 'boolean'], + isReplyBarOverMedia: [10, 'boolean'], + mediaHeight: [11, 'integer'], + mediaWidth: [12, 'integer'], + postContainedPrompt: [15, 'boolean'], + replyEntryMethod: [ + 13, + { + SWIPE_UP: 1, + TAP_REPLY_BAR: 2 + } + ], + replyExitMethod: [ + 14, + { + BACK_BUTTON: 1, + SWIPE_DOWN: 2, + TAP_SCREEN: 3, + OTHER: 4 + } + ], + statusContentType: [ + 8, + { + PHOTO: 1, + TEXT: 2, + URL: 3, + VIDEO: 4, + GIF: 5, + VOICE: 6 + } + ], + statusReplyMessageType: [ + 3, + { + UNKNOWN: 1, + TEXT: 2, + IMAGE: 3, + VOICE: 4, + DOCUMENT: 5, + AUDIO: 6, + STICKER: 7, + LOCATION: 8, + PRODUCT: 9, + CONTACT: 10, + CONTACT_ARRAY: 11, + CAMERA_CAPTURE_IMAGE: 12, + MEDIA_GALLERY: 13, + GIF_VIDEO: 14, + QUICK_REPLY: 15, + POLL: 16, + AVATAR_QUICK_REPLY: 17, + STICKER_QUICK_REPLY: 18 + } + ], + statusReplyResult: [ + 2, + { + OK: 1, + CANCELLED: 2, + ERROR_UNKNOWN: 3 + } + ], + statusSessionId: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'LidMigrationDaily', + id: 5842, + props: { + completedMigrations: [1, 'string'], + lidMigrationSource: [ + 7, + { + PEER: 1, + HISTORY: 2 + } + ], + numberOfPnChatsWithoutMapping: [5, 'integer'], + numberOfPnhCtwaThreadsKnownMapping: [2, 'integer'], + numberOfPnhCtwaThreadsMissingMapping: [3, 'integer'], + numberOfSplitThreads: [4, 'integer'], + numberOfUserChatsWithoutAccountLid: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ListUpdateUserJourney', + id: 5958, + props: { + listAction: [ + 1, + { + CREATE: 1, + DELETE: 2, + UNDELETE: 3, + RENAME: 4, + UPDATE_MEMBERS: 5, + MUTE: 6, + UNMUTE: 7 + } + ], + listId: [2, 'integer'], + listType: [ + 3, + { + NONE: 0, + UNREAD: 1, + GROUP: 2, + FAVORITE: 3, + PREDEFINED: 4, + CUSTOM: 5, + COMMUNITY: 6, + BUSINESS_AI: 7, + DRAFTS: 8 + } + ], + listUpdateUserJourneyAction: [ + 4, + { + START: 0, + SELECT_PREDEFINED: 1, + CREATE_LIST: 2 + } + ], + predefinedId: [5, 'integer'], + updateEntryPoint: [ + 6, + { + CONTACT_INFO: 1, + GROUP_INFO: 2, + CHAT_MORE_OPTIONS: 3, + CHAT_LONG_PRESS_OPTIONS: 4, + FILTER_CONTEXT_MENU: 5, + ADD_LIST_FILTER: 6, + LIST_SETTINGS: 7, + LIST_NUX: 8, + DEEPLINK: 9, + PIN_ALERT: 10 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdSyncdMutation', + id: 5970, + props: { + appSessionId: [1, 'string'], + companionSessionIds: [2, 'string'], + contentLength: [3, 'integer'], + isInBootstrap: [4, 'boolean'], + isUsingLid: [5, 'boolean'], + mutationBundle: [ + 6, + { + SNAPSHOT: 0, + PATCH: 1 + } + ], + mutationDirection: [ + 7, + { + INCOMING: 0, + OUTGOING: 1 + } + ], + mutationMac: [8, 'string'], + mutationName: [9, 'string'], + mutationOperation: [ + 10, + { + SET: 0, + REMOVE: 1 + } + ], + patchMac: [15, 'string'], + seqNumber: [11, 'integer'], + syncdCollection: [ + 12, + { + REGULAR: 1, + REGULAR_LOW: 2, + REGULAR_HIGH: 3, + CRITICAL_BLOCK: 4, + CRITICAL_UNBLOCK_LOW: 5 + } + ], + syncdKeyhash: [13, 'string'], + syncdKeyid: [14, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SystemMessageClick', + id: 5082, + props: { + isAGroup: [1, 'boolean'], + isANewThread: [2, 'boolean'], + systemMessageCategory: [ + 3, + { + PRIVACY: 1, + GROUPS: 2 + } + ], + systemMessageType: [ + 4, + { + E2E_ENCRYPTED_MESSAGES_CALLS: 1, + E2E_ENCRYPTED_MESSAGES: 2, + E2E_ENCRYPTED_BROADCAST_LIST: 3, + E2E_ENCRYPTED_MESSAGE_YOURSELF: 4, + OFFICIAL_ACCOUNT_INFO: 8, + GROUP_ADD: 9, + GROUP_RESET_INVITE: 10, + COMMUNITY_DESCRIPTION_CHANGED: 11, + GROUP_DESCRIPTION_CHANGED: 12, + GROUP_PARTICIPANTS_CHANGED: 13, + COMMUNITY_MEMBERS_CHANGED: 14, + GROUP_INVITE_LINK_UNAVAILABLE: 15, + GROUP_INVITE_LINK_AVAILABLE: 16, + GROUP_JOIN_REQUEST: 17, + GROUP_SUGGEST: 18 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CommunityTabAction', + id: 3496, + props: { + communityNoActionTabViews: [4, 'integer'], + communityTabGroupNavigations: [1, 'integer'], + communityTabToHomeViews: [2, 'integer'], + communityTabViews: [3, 'integer'], + communityTabViewsViaContextMenu: [5, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ContactUsSession', + id: 470, + props: { + contactUsAutomaticEmail: [3, 'boolean'], + contactUsExitState: [ + 1, + { + PROBLEM_DESCRIPTION: 1, + SUGGESTED_FAQ: 2, + EMAIL_SEND: 3, + IN_APP_FAQ: 4, + CANCELLED: 5, + FAQ: 6 + } + ], + contactUsFaq: [2, 'boolean'], + contactUsLogs: [4, 'boolean'], + contactUsMenuFaqT: [12, 'timer'], + contactUsOutage: [5, 'boolean'], + contactUsOutageEmail: [6, 'boolean'], + contactUsScreenshotC: [19, 'number'], + contactUsT: [11, 'timer'], + languageCode: [21, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MessagingUserJourney', + id: 5134, + props: { + appSessionId: [1, 'string'], + isSelfPin: [8, 'boolean'], + mediaType: [ + 9, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messagingActionType: [ + 2, + { + NOT_NOW: 0, + ALLOW: 1, + CONTINUE: 2, + RESTORE: 3, + SKIP: 4, + NEXT: 5, + TAPPED: 6, + NO_TAP: 7, + SET_PHOTO: 8, + DID_NOT_SET: 9, + SUCCESSFUL: 10, + FAILED: 11, + UNKNOWN: 12, + GOOGLE_MIGRATE_CONFIRM_SKIP_IMPORT: 13, + GOOGLE_MIGRATE_ATTEMPT_TO_SKIP_IMPORT: 14, + GOOGLE_MIGRATE_CONFIRM_CONTINUE_IMPORT: 15, + GOOGLE_MIGRATE_ACCEPTED_PERMISSION: 16, + GOOGLE_MIGRATE_IMPORT_COMPLETE_NEXT: 17, + GOOGLE_MIGRATE_REJECTED_CONTACT_AND_STORAGE_PERMISSION: 18, + GOOGLE_MIGRATE_REJECTED_CONTACT_PERMISSION: 19, + GOOGLE_MIGRATE_REJECTED_STORAGE_PERMISSION: 20, + AD_TIMEOUT: 21, + CONFIRM_WITH_SECOND_SMS: 22, + BACK: 23, + EULA_TOS_ACCEPTED: 24, + MIGRATE_PHONE_NUMBER_ACCEPT: 25, + MIGRATE_PHONE_NUMBER_SKIP_NEW: 26, + CLICK_VERIFICATION_COMPLETE_DIALOG_LEARN_MORE: 27, + CLICK_VERIFICATION_COMPLETE_DIALOG_CONTINUE: 28, + TRY_AGAIN: 29, + WRONG_NUMBER: 30, + VERIFY_WITH_SMS: 31, + CLICK_EMAIL_OTP_DEEP_LINK: 32, + VERIFY_ANOTHER_WAY: 33, + WFS_FB: 34, + WFS_IG: 35, + LOGIN_WFS: 36, + CLICK_PIN: 37, + DISPLAY: 38, + SELECT_OPTION: 39, + CLICK_UNPIN: 40, + SEND_SMS_TAPPED: 41, + VIEW: 42, + NO_ACTION: 43, + SELECT: 44, + PASS: 45, + FAIL: 46, + ACCEPT: 47, + DECLINE: 48, + CLICK: 49, + KEEP: 50, + DELETE: 51, + EDIT: 52, + LANGUAGE_SELECTED: 53, + SMS_TO_WA_SENT: 54, + SEND_CODE_TAPPED: 55, + AUDIO_GUIDANCE_AUTOPLAY_ON: 56, + AUDIO_GUIDANCE_AUTOPLAY_OFF: 57, + AUDIO_GUIDANCE_ACCESSIBILITY_ENABLED: 58, + AUDIO_GUIDANCE_UNSUPPORTED_LOCALE: 59, + BLOCK: 60, + CLICK_ADD_TO_CALENDAR: 61, + TOKEN_FOUND: 62 + } + ], + pinInChatExpirySecs: [3, 'integer'], + threadType: [ + 4, + { + GROUP: 1, + BROADCAST: 2, + INDIVIDUAL: 3, + STATUS: 4, + CHANNEL: 5, + SUB_GROUP: 6, + DEFAULT_SUB_GROUP: 7, + PARENT_GROUP: 8, + BOT: 9 + } + ], + uiSurface: [ + 5, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + unifiedSessionId: [10, 'string'], + userJourneyFunnelId: [6, 'string'], + userRole: [ + 7, + { + MEMBER: 0, + ADMIN: 1, + CADMIN: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MarketingMessageUserControlsJourney', + id: 6070, + props: { + businessPhoneNumber: [9, 'integer'], + isSuccess: [1, 'boolean'], + mmUserControlsAction: [ + 2, + { + INTERESTED: 1, + NOT_INTERESTED: 2, + STOP: 3, + BLOCK: 4, + BLOCK_AND_REPORT: 5, + RESUME: 6, + DISMISS: 7, + UNDO: 8, + IMPRESSION: 9, + STOP_CONFIRMATION: 10, + RESUME_CONFIRMATION: 11, + FEEDBACK: 12, + LEARN_MORE: 13 + } + ], + mmUserControlsEntryPoint: [ + 3, + { + MESSAGE_BUBBLE: 1, + BOTTOM_SHEET: 2, + SYSTEM_MESSAGE: 3, + FMX_CARD: 4, + BUSINESS_PROFILE: 5, + TOAST: 6, + BLOCK_BOTTOM_SHEET_OTHER: 7, + BLOCK_BOTTOM_SHEET_CHAT_LIST: 8, + BLOCK_BOTTOM_SHEET_PROFILE: 9, + BLOCK_BOTTOM_SHEET_FMX: 10 + } + ], + mmUserControlsErrorType: [4, 'string'], + mmUserControlsRolloutVariant: [5, 'integer'], + sequenceNumber: [6, 'integer'], + templateId: [7, 'string'], + unifiedSessionId: [8, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'SettingsSearchTap', + id: 4016, + props: { + tapItemName: [1, 'string'], + topLevelParentSetting: [ + 2, + { + PROFILE: 0, + BUSINESS_TOOLS: 1, + ACCOUNT: 2, + CHATS: 3, + NOTIFICATIONS: 4, + DATA_STORAGE_USAGE: 5, + HELP: 6, + INVITE_FRIEND: 7, + STARRED_MESSAGES: 8, + WHATSAPP_WEB: 9, + PREMIUM_SUBSCRIPTION: 10, + PRIVACY: 11, + SECURITY: 12, + THEME: 13, + CHAT_WALLPAPER: 14, + MEDIA_AUTO_DOWNLOAD: 15, + REQUEST_ACCOUNT_INFO: 16, + KEYBOARD_SHORTCUTS: 17, + DEVELOPER: 18, + DATA_SHARING: 19, + DESKTOP_SETTINGS: 20, + LINKED_DEVICES: 21, + UNKNOWN: 22, + QR_CODE: 23, + DEVICES: 24, + PROFILE_CARD: 25, + PRIVACY_CARD: 26, + CONTACTS_CARD: 27, + AVATAR: 28, + PAYMENTS: 29, + LOGOUT: 30, + META_VERIFIED: 31, + TEXT_STATUS: 32, + THIRD_PARTY: 33, + IG_BOOKMARK: 34, + FB_BOOKMARK: 35, + FAVORITES: 36, + THREADS_BOOKMARK: 37, + LISTS: 38, + PROFILE_LINKS: 39, + WAFFLE: 40 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebWamForceFlush', + id: 3264, + props: {}, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupExitExperienceExitDialogInteraction', + id: 6318, + props: { + psExitExperienceReportingEnabled: [1, 'boolean'], + psGroupExitExperienceEnabled: [2, 'boolean'], + psGroupExitExperienceExitDialogAction: [ + 3, + { + GROUP_EXIT_EXPERIENCE_DIALOG_OPEN: 0, + GROUP_EXIT_EXPERIENCE_DIALOG_OLD_EXIT_TAPPED: 1, + GROUP_EXIT_EXPERIENCE_DIALOG_OLD_EXIT_AND_REPORT_TAPPED: 2, + GROUP_EXIT_EXPERIENCE_DIALOG_OLD_ARCHIVE_TAPPED: 3, + GROUP_EXIT_EXPERIENCE_DIALOG_NEW_EXIT_TAPPED: 4, + GROUP_EXIT_EXPERIENCE_DIALOG_NEW_EXIT_AND_DELETE_TAPPED: 5, + GROUP_EXIT_EXPERIENCE_DIALOG_NEW_LEARN_MORE_TAPPED: 6, + GROUP_EXIT_EXPERIENCE_DIALOG_CANCELLED: 7 + } + ], + psGroupExitExperienceGroupJid: [4, 'string'], + psGroupExitExperienceTouchPoint: [ + 6, + { + CHAT_LIST_LONG_PRESS: 0, + CHAT_OVERFLOW_MENU: 1, + GROUP_INFO: 2, + FGX_CARD: 3, + SUSPICIOUS_CHAT_BANNER: 4, + IOS_SWIPE_MENU: 5, + WEB_CONTEXT_MENU: 6, + ANDROID_MULTIPLE_CHAT_LONG_PRESS: 7, + GROUP_SAFETY_CHECK: 8 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 152546501, + weight: 1 + }, + { + name: 'SmbDataSharingConsentScreen', + id: 3972, + props: { + smbDataSharingConsentScreenEntryPoint: [ + 3, + { + NEW_ORDER: 0, + CART: 1, + LABEL_CHAT: 2, + LABEL_MESSAGE: 3, + BLOCK: 4, + REPORT: 5, + CTWA_CHAT: 6, + DATA_SHARING_TOOLS: 7, + CONTACT_INFO_CARD: 8 + } + ], + smbDataSharingConsentScreenType: [ + 1, + { + SMB_DATA_SHARING_CONSENT_SCREEN_VIEW: 0, + SMB_DATA_SHARING_CONSENT_SCREEN_AGREE: 1, + SMB_DATA_SHARING_CONSENT_SCREEN_DISAGREE: 2, + SMB_DATA_SHARING_CONSENT_SCREEN_CANCEL: 3 + } + ], + smbDataSharingConsentScreenVersion: [2, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebDbVersionNonAnonymous', + id: 4816, + props: { + webDbName: [ + 1, + { + MODEL_STORAGE: 1, + FTS_STORAGE: 2, + JOBS_STORAGE: 3, + LOADGEN_STORAGE: 4, + LRU_MEDIA_STORAGE_IDB: 5, + OFFD_STORAGE: 6, + QPL_STORAGE: 7, + SIGNAL_STORAGE: 8, + WORKER_STORAGE: 9, + SW: 10, + WAWC: 11, + WAWC_DB_ENC: 12, + STATUS_STORAGE: 13 + } + ], + webDbVersionNumber: [2, 'integer'] + }, + wamChannel: 'regular', + weight: 20 + }, + { + name: 'PttPlayback', + id: 2044, + props: { + pttDuration: [12, 'timer'], + pttMainThreadBlock: [7, 'boolean'], + pttMiniPlayerClick: [15, 'integer'], + pttMiniPlayerClose: [16, 'boolean'], + pttMiniPlayerPauseCnt: [17, 'integer'], + pttPlayRequestT: [1, 'timer'], + pttPlaybackFailed: [8, 'boolean'], + pttPlaybackOverallT: [4, 'timer'], + pttPlaybackSpeed: [ + 10, + { + SPEED_1: 0, + SPEED_1_5: 1, + SPEED_2: 2 + } + ], + pttPlaybackSpeedCnt: [11, 'integer'], + pttPlayedOutOfChat: [18, 'boolean'], + pttPlayedPct: [14, 'number'], + pttPlayer: [ + 9, + { + AUDIO_QUEUE: 0, + AVPLAYER: 1, + AVAUDIOPLAYER: 2, + OPUSPLAYER: 3, + ANDROIDPLAYER: 4, + EXOPLAYER: 5, + UWPPLAYER: 6, + VOIPPLAYER: 7 + } + ], + pttPlayerInitT: [2, 'timer'], + pttPlayerPlayT: [3, 'timer'], + pttSeekCnt: [13, 'integer'], + pttTrigger: [ + 5, + { + MANUAL: 0, + SEQUENTIAL: 1 + } + ], + pttType: [ + 6, + { + UNKNOWN: 0, + AAC: 1, + MP3: 2, + AMR_NB: 3, + AMR_WB: 4, + OPUS: 5, + MULTIPLE_TRACKS: 6 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupSafetyCheckEnabled', + id: 6238, + props: { + didJoinByGil: [3, 'boolean'], + integrityGroupUserHashedId: [4, 'string'], + psSafetyCheckGroupJid: [1, 'string'], + psWasSafetyCheckGroupInitiallyMuted: [2, 'boolean'], + wasAddedByContact: [5, 'boolean'], + willSafetyCheckBeSeen: [6, 'boolean'] + }, + wamChannel: 'private', + privateStatsIdInt: 216763284, + weight: 1 + }, + { + name: 'WebcBackgroundSyncAdoption', + id: 5302, + props: { + offboardSource: [ + 1, + { + IN_APP_SETTING: 1, + OS_SETTING: 2 + } + ], + onboardSource: [ + 2, + { + DEFAULT: 1, + BACKGROUND_SYNC_BUTTERBAR: 2, + WEB_NOTIFICATION_BUTTERBAR: 3, + IN_APP_SETTING: 4, + AUTO_ENABLE: 5 + } + ], + pushNotificationInteraction: [ + 3, + { + SHOWN: 1, + CLICKED: 2 + } + ], + webOsNotificationSetting: [ + 4, + { + ALLOWED: 1, + BLOCKED: 2, + UNKNOWN: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GifSearchResultTapped', + id: 1122, + props: { + gifSearchProvider: [ + 1, + { + GIPHY: 0, + TENOR: 1 + } + ], + rank: [2, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'UserActivity', + id: 1384, + props: { + userActivityBitmapHigh: [4, 'integer'], + userActivityBitmapLen: [5, 'integer'], + userActivityBitmapLow: [3, 'integer'], + userActivitySessionCum: [7, 'integer'], + userActivitySessionId: [1, 'string'], + userActivitySessionSeq: [6, 'integer'], + userActivityStartTime: [2, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'StickerLatency', + id: 5026, + props: { + size: [1, 'integer'], + stickerLatencyAction: [ + 2, + { + DECOMPRESSION: 2 + } + ], + stickerLatencyTtAction: [3, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'TsBitArray', + id: 4332, + props: { + bitarrayHigh: [1, 'integer'], + bitarrayLength: [2, 'integer'], + bitarrayLow: [3, 'integer'], + cumulativeBits: [4, 'integer'], + relativeTimestampMs: [5, 'integer'], + sessionSeq: [6, 'integer'], + tsSessionId: [7, 'integer'], + tsTimestampMs: [8, 'integer'], + unifiedSessionId: [9, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatFolderOpen', + id: 2808, + props: { + activityIndicatorCount: [2, 'integer'], + folderType: [1, 'string'], + hasImportantMessages: [3, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ViewBusinessProfile', + id: 1522, + props: { + bizFbSize: [ + 9, + { + B0: 1, + B1: 2, + B2: 3, + B11: 4, + B51: 5, + B101: 6, + B501: 7, + B1K: 8, + B10K: 9, + B100K: 10, + B1M: 11 + } + ], + bizIgSize: [ + 10, + { + B0: 1, + B1: 2, + B2: 3, + B11: 4, + B51: 5, + B101: 6, + B501: 7, + B1K: 8, + B10K: 9, + B100K: 10, + B1M: 11 + } + ], + businessProfileJid: [3, 'string'], + catalogSessionId: [6, 'string'], + hasCoverPhoto: [12, 'boolean'], + isProfileLinked: [11, 'boolean'], + isSelfView: [7, 'boolean'], + linkedAccount: [ + 5, + { + FACEBOOK: 0, + INSTAGRAM: 1 + } + ], + profileEntryPoint: [ + 8, + { + CONTACT_CARD: 1, + CHAT_HEADER: 2, + CHAT_MENU: 3, + GROUP_MEMBERSHIP_SCREEN: 4, + STATUS: 5, + CALLS: 6, + BROADCAST_LIST: 7, + PRODUCT: 8, + CATALOG: 9, + SETTINGS: 10, + SPAM_BLOCK: 11, + CHATS_HOME: 12, + SHOPS: 13, + MENTION: 14, + EPHEMERAL_SETTINGS_MESSAGE: 15, + MAP: 16, + SEARCH: 17, + PAYMENT_TRANSACTION_DETAILS: 18, + CUSTOM_URL_LINK: 19, + CUSTOM_URL_QR_CODE: 20, + NOTIFICATION_BLOCK_ACTION: 21, + REPORT_TO_ADMIN_PARTICIPANTS_SCREEN: 22, + MISSED_CALL_NOTIFICATION_BLOCK_ACTION: 23, + INTEROP: 24, + FORWARDED_BIZ_MSG_DIRECT_TAP: 25, + FORWARDED_BIZ_MSG_CHAT_HEADER: 26, + ADD_MSG_TO_NOTE_TOAST: 27, + SENDER_PROFILE_PICTURE_IN_GROUP_CHAT: 28, + IMMERSIVE_CHAT_HEADER: 29 + } + ], + scrollDepth: [4, 'integer'], + viewBusinessProfileAction: [ + 1, + { + ACTION_IMPRESSION: 1, + ACTION_CLICK_WEBSITE: 2, + ACTION_CLICK_LOCATION: 3, + ACTION_CLICK_HOURS: 4, + ACTION_CLICK_DESCRIPTION: 5, + ACTION_CLICK_EMAIL: 6, + ACTION_CLICK_ADDTOCONTACT: 7, + ACTION_CLICK_MORE_BIZ_PROFILE: 8, + ACTION_CLICK_MESSAGE: 9, + ACTION_CLICK_VOICE_CALL: 10, + ACTION_CLICK_VIDEO_CALL: 11, + ACTION_CLICK_FORWARD: 12, + ACTION_CLICK_CATALOG_ICON: 13, + ACTION_CLICK_SHOPS_ICON: 14, + ACTION_CLICK_APP_LINK: 15, + ACTION_APP_IMPRESSION: 16, + ACTION_CLICK_STATUS: 17, + ACTION_EXIT: 18, + ACTION_COVER_PHOTO_IMPRESSION: 19, + ACTION_CLICK_VERIFIED_BADGE: 20, + ACTION_LOAD: 21 + } + ], + websiteSource: [ + 2, + { + SOURCE_OTHER: 1, + SOURCE_INSTAGRAM: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'E2eRetryReject', + id: 3578, + props: { + invisibleMessageCategory: [ + 6, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + mediaType: [ + 7, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 1, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + msgRetryCount: [2, 'integer'], + retryRejectReason: [ + 3, + { + OTHER: 0, + DOUBLE_CHECKMARK: 1, + IDENTITY_CHANGE: 2, + MESSAGE_NOT_EXIST: 3, + HIGH_RETRY_COUNT: 4 + } + ], + retryRevoke: [4, 'boolean'], + senderDeviceType: [ + 5, + { + PRIMARY: 1, + COMPANION: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdFatalError', + id: 2304, + props: { + appContext: [46, 'string'], + appContextBitfield: [47, 'integer'], + appSessionId: [41, 'string'], + collection: [ + 2, + { + REGULAR: 1, + REGULAR_LOW: 2, + REGULAR_HIGH: 3, + CRITICAL_BLOCK: 4, + CRITICAL_UNBLOCK_LOW: 5 + } + ], + companionSessionIds: [42, 'string'], + currentPrimaryAppVersion: [14, 'string'], + daysSinceLastPeriodicSync: [11, 'integer'], + didBootstrapFromSnapshot: [38, 'boolean'], + hoursSinceFirstFiniteFailure: [12, 'integer'], + isBootstrap: [3, 'boolean'], + isFatal: [16, 'boolean'], + isPatchSenderPrimary: [23, 'boolean'], + isPreviousPatchAnIncomingPatch: [24, 'boolean'], + isPreviousPatchSenderPrimary: [25, 'boolean'], + isSenderIndexSameAsPreviousSenderIndex: [39, 'boolean'], + isThereAnotherSyncdCompanion: [40, 'boolean'], + isWebLthashConsistent: [17, 'boolean'], + macFatalCollectionNameMismatch: [18, 'boolean'], + macFatalCurrentLthashMismatch: [19, 'boolean'], + macFatalDidPreviousPatchFailPostSaveValidation: [26, 'boolean'], + macFatalDidUseMacFetchFallback: [36, 'boolean'], + macFatalFirstTwoBytesFromAHashOfSnapshotMacKeyMismatch: [20, 'boolean'], + macFatalHasMissingRemove: [37, 'boolean'], + macFatalNewLthashMismatch: [21, 'boolean'], + macFatalNewLthashSubtractMismatch: [27, 'boolean'], + macFatalNumberAddMismatch: [28, 'boolean'], + macFatalNumberHasOverrideMutation: [29, 'boolean'], + macFatalNumberNumAddMutation: [30, 'integer'], + macFatalNumberNumRemoveMutation: [31, 'integer'], + macFatalNumberOverrideMismatch: [32, 'boolean'], + macFatalNumberRemoveMismatch: [33, 'boolean'], + macFatalPatchVersionMismatch: [22, 'boolean'], + macFatalPreviousPatchNewLthashToCurrentPatchCurrentLthash: [34, 'boolean'], + macFatalSenderCurrentLthashToLocalCalculatedCurrentLthashMismatch: [35, 'boolean'], + mailboxAgeDays: [13, 'integer'], + mdCompanionDeviceAccountType: [ + 43, + { + E2EE_DEVICE: 1, + HOSTED_DEVICE: 2 + } + ], + mdFatalErrorCode: [ + 1, + { + TOO_MANY_INTERNAL_SERVER_ERRORS_IN_7D: 1, + SERVER_DATA_MISMATCH: 2, + PROTOBUF_DESERIALIZATION_FAILED: 3, + EXTERNAL_PATCH_EXPIRED: 4, + MISSING_OR_EMPTY_INDEX: 5, + SAME_INDEX_FOR_MULTIPLE_MUTATIONS_IN_PATCH: 6, + DECRYPTION_FAILED: 7, + MISSING_PATCH_VERSION: 8, + DUPLICATE_PATCH_VERSION_IN_COLLECTION: 9, + ENCRYPTION_FAILED: 10, + MISSING_MUTATION_VERSION: 11, + MISSING_MUTATION_VALUE: 12, + INVALID_MUTATION_INDEX: 13, + PATCH_WITH_BOTH_INLINE_AND_EXTERNAL_MUTATIONS: 14, + MISSING_MUTATION_OPERATION: 15, + MISSING_MUTATION_RECORD: 16, + MISSING_MUTATION_KEY_ID: 17, + PATCH_PROTOBUF_DESERIALIZATION_FAILED: 18, + ACTION_DATA_PROTOBUF_DESERIALIZATION_FAILED: 19, + MISSING_MUTATION_INDEX: 20, + MISSING_ACTION_INDEX: 21, + INVALID_ACTION_INDEX: 22, + MISSING_ACTION_VALUE: 23, + MISSING_ACTION_VERSION: 24, + MISSING_ACTION_TIMESTAMP: 25, + MUTATIONS_PROTOBUF_DESERIALIZATION_FAILED: 26, + MUTATIONS_PROTOBUF_SERIALIZATION_FAILED: 27, + PATCH_PROTOBUF_SERIALIZATION_FAILED: 28, + ACTION_DATA_PROTOBUF_SERIALIZATION_FAILED: 29, + MISSING_KEY_ON_ALL_CLIENTS: 30, + TIMEOUT_WHILE_WAITING_FOR_MISSING_KEY: 31, + MAC_MISMATCH_SNAPSHOT: 33, + MAC_MISMATCH_PATCH: 34, + DB_STORE_NOT_READY: 35, + TERMINAL_PATCH_MISSING_DATA: 36, + TERMINAL_PATCH_DESERIALIZATION_ERROR: 37, + TERMINAL_PATCH_UNKNOWN: 38, + CYCLIC_MUTATION_DEPENDENCY_IN_PATCH: 39, + MISSING_SNAPSHOT_VERSION: 45, + MISSING_SNAPSHOT_MAC: 46, + MISSING_PATCH_SNAPSHOT_MAC: 47, + MISSING_PATCH_MAC: 48, + MISSING_EXTERNAL_BLOB_REFERENCE_MEDIA_KEY: 49, + MISSING_EXTERNAL_BLOB_REFERENCE_DIRECT_PATH: 50, + MISSING_EXTERNAL_BLOB_REFERENCE_FILE_SHA256: 51, + MISSING_EXTERNAL_BLOB_REFERENCE_FILE_ENC_SHA256: 52, + INVALID_KEY_SHARE_KEY_ID: 53, + MISSING_PATCH_KEY_ID: 56, + INVALID_KEY_SHARE_KEY_DATA: 57, + SNAPSHOT_EXPIRED: 58, + MISSING_SNAPSHOT_KEY_ID: 59, + SNAPSHOT_MAC_MISMATCH_IN_PATCH: 60, + SNAPSHOT_MAC_MISMATCH_IN_SNAPSHOT: 61, + XMPP_BAD_REQUEST_FOR_COLLECTION: 62, + XMPP_NOT_FOUND_FOR_COLLECTION: 63, + XMPP_BAD_REQUEST_GLOBAL_ERROR: 64, + XMPP_NOT_FOUND_GLOBAL_ERROR: 65, + XMPP_BAD_METHOD_GLOBAL_ERROR: 66, + XMPP_NOT_ACCEPTABLE_GLOBAL_ERROR: 67, + SAME_INDEX_FOR_MULTIPLE_MUTATIONS_IN_SNAPSHOT: 68, + EXTERNAL_BLOB_REFERENCE_PROTOBUF_DESERIALIZATION_FAILED: 69, + SNAPSHOT_PROTOBUF_DESERIALIZATION_FAILED: 70, + REQUESTING_MISSING_KEY_WITH_NO_CLIENTS: 71, + DB_STORE_NOT_READY_LOW_DISK_SPACE: 72, + SERVER_DID_NOT_SEND_ALL_PATCHES: 73, + SERVER_SENT_EARLIER_PATCH: 74, + MISSING_KEY_FOR_MUTATION_IN_LOCAL_SNAPSHOT: 75, + MISSING_ACTIVE_KEY_AFTER_ROTATION: 76, + MISSING_ACTIVE_KEY_FOR_ENCRYPTION: 77, + MISSING_CURRENT_EPOCH_FOR_ACTIVE_KEY_VALIDATION: 78, + SAME_INDEX_FOR_MULTIPLE_MUTATIONS_IN_OUTGOING_PATCH: 79, + INVALID_SNAPSHOT_RECORDS: 80, + MISSING_EXTERNAL_BLOB_REFERENCE_HANDLE: 81, + INVALID_EXTERNAL_BLOB_REFERENCE_UPLOADED: 82, + INVALID_PATCH_KEY_ID_SIZE: 83, + INVALID_PATCH_MAC_SIZE: 84, + INVALID_PATCH_SNAPSHOT_MAC_SIZE: 85, + INVALID_COLLECTION_SNAPSHOT_HASH_SIZE: 86, + MISSING_COLLECTION_SNAPSHOT_HASH: 87, + INVALID_PATCH_KEY_ID_DEVICE_ID: 88, + INVALID_PATCH_KEY_ID_EPOCH: 89, + DECRYPTION_FAILED_KEY_ID_MISMATCH: 90, + DECRYPTION_FAILED_VALUE_MAC_MISMATCH: 91, + DECRYPTION_FAILED_INDEX_MAC_MISMATCH: 92, + EXTERNAL_PATCH_MISSING_BLOB: 93, + COLLECTION_PULL_REQUEST_RECEIVED_PUSH_RESPONSE_WITH_UPDATED_VERSION: 94, + COLLECTION_PUSH_REQUEST_RECEIVED_RESPONSE_WITH_VERSION_MISMATCH: 95, + MMS_ERROR_INVALID_FILEHASH: 96, + UNKNOWN: 97, + MALFORMED_MUTATION_CLEAR_CHAT: 98, + MALFORMED_MUTATION_DELETE_CHAT: 99, + FAILED_MUTATION_CLEAR_CHAT: 100, + FAILED_MUTATION_DELETE_CHAT: 101, + CHAT_DB_CORRUPTION: 102 + } + ], + mdRegAttemptId: [44, 'string'], + patchSnapshotMutationCount: [9, 'integer'], + patchVersion: [5, 'integer'], + seqNumber: [45, 'integer'], + sessionStartPrimaryAppVersion: [15, 'string'], + sourceType: [ + 10, + { + SNAPSHOT: 1, + EXTERNAL_PATCH: 2, + INLINE_PATCH: 3 + } + ], + timeSincePairingMs: [6, 'integer'], + timeSinceRefreshMs: [7, 'integer'], + timeSinceTabTakeoverMs: [8, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'FmxAction', + id: 4444, + props: { + commonGroupNum: [1, 'integer'], + countryShown: [2, 'boolean'], + fmxEntryPoint: [ + 3, + { + FMX_CARD: 0, + SAFETY_TOOLS: 1 + } + ], + fmxEvent: [ + 4, + { + BLOCK: 0, + ADD_CONTACT: 1, + REPORT: 2, + SAFETY_TOOLS: 3, + COMMON_GROUPS: 4, + CONTACT_INFO: 5, + FMX_CARD_INSERTED: 6, + FMX_CARD_VIEWED: 7, + LEARN_MORE: 8, + HIGHLIGHT_GROUP_NAME: 9, + FMX_CARD_TRUST_SIGNALS_FB_IG_VIEWED: 10, + STOP_MARKETING_MSG_OFFERS: 11 + } + ], + highlightGroupType: [ + 6, + { + UNKNOWN: 0, + SINGLE: 1, + CREATOR: 2, + ADMIN: 3, + SAVED_CONTACTS: 4, + PARTICIPANTS: 5, + MORE: 6 + } + ], + isSenderSmb: [7, 'boolean'], + notAContactShown: [5, 'boolean'], + threadIdHmac: [8, 'string'], + trustSignals: [9, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GroupCatchUp', + id: 3058, + props: { + mentionsCountPendingPercentage: [4, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatPsaRemove', + id: 3582, + props: { + lastReceivedMediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + lastReceivedMessageTs: [4, 'timer'], + lastReceivedMsgId: [8, 'string'], + psaBlockReason: [ + 10, + { + OTHER: 0, + MESSAGES_ARENT_HELPFUL: 1, + TOO_MANY_MESSAGES: 2, + IT_LOOKS_SUSPICIOUS: 3 + } + ], + psaCampaignId: [9, 'string'], + psaMessageRemoveAction: [ + 5, + { + BLOCK: 1, + UNBLOCK: 2, + ARCHIVE: 3, + UNARCHIVE: 4, + CLEAR: 5, + DELETE_ALL: 6 + } + ], + psaMessageRemoveEntryPoint: [ + 6, + { + BLOCK_FROM_CONTACT_INFO: 1, + BLOCK_FROM_CHAT: 2, + UNBLOCK_FROM_CONTACT_INFO: 3, + UNBLOCK_FROM_CHAT: 4, + UNBLOCK_FROM_PRIVACY_SETTINGS: 5, + ARCHIVE_FROM_CHAT_LIST: 6, + ARCHIVE_FROM_DELETE_OPTION: 7, + UNARCHIVE_FROM_ARCHIVED_CHAT_LIST: 8, + CLEAR_FROM_CONTACT_INFO: 9, + CLEAR_FROM_CHAT_LIST: 10, + DELETE_ALL_FROM_CHAT_LIST: 11, + DELETE_ALL_FROM_CONTACT_INFO: 12, + DELETE_ALL_FROM_CONVERSATION: 13, + CLEAR_FROM_CONVERSATION: 14, + BLOCK_FROM_CONSENT_MODAL: 15 + } + ], + waOfficialAccountName: [ + 7, + { + WHATSAPP_CHATPSA: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcStatusSession', + id: 1880, + props: { + webcStatusMutedItemCount: [4, 'integer'], + webcStatusMutedRowCount: [7, 'integer'], + webcStatusRecentItemCount: [2, 'integer'], + webcStatusRecentRowCount: [5, 'integer'], + webcStatusSessionId: [1, 'integer'], + webcStatusViewedItemCount: [3, 'integer'], + webcStatusViewedRowCount: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'LabelEvent', + id: 1422, + props: { + customLabelTitle: [9, 'string'], + entryPointConversionSource: [10, 'string'], + itemsLabeledCount: [5, 'integer'], + labelCount: [4, 'integer'], + labelOperation: [ + 2, + { + ADD: 1, + EDIT: 2, + DELETE: 3, + VIEW: 4, + CLICK_POSITIVE: 5, + CLICK_NEGATIVE: 6, + UPDATE_LABEL_COUNT: 7, + AUTO_ADDED: 8, + REORDER: 9 + } + ], + labelOperationEntryPoint: [6, 'string'], + labelTarget: [ + 1, + { + LABEL: 1, + MESSAGE: 2, + CONTACT: 3, + LABELS_SCREEN: 4, + LABEL_DETAILS_SCREEN: 5, + EDIT_LABEL_DIALOG: 6, + DELETE_LABEL_DIALOG: 7, + LABEL_MESSAGE_DIALOG: 8, + LABEL_CHAT_DIALOG: 9, + ADD_LABEL_DIALOG: 10, + BULK_UNLABEL_DIALOG: 11, + LABEL_COMBINED_DIALOG: 12, + GROUP: 13, + BROADCAST: 14 + } + ], + lastMessageDirection: [ + 14, + { + OPPOSITE_PARTY_INITIATED: 0, + SELF_INITIATED: 1 + } + ], + messageDepth: [15, 'integer'], + predefinedLabelNumber: [3, 'integer'], + threadCreationDate: [11, 'string'], + threadId: [12, 'string'], + threadIdHmac: [13, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BusinessInteraction', + id: 3450, + props: { + businessInteractionAction: [ + 1, + { + ACTION_CLICK: 1, + ACTION_MSG_SENT: 2 + } + ], + businessInteractionTargetScreen: [ + 2, + { + INDIVIDUAL_CHAT: 1, + LANDING_PAGE: 2, + OTHER: 3 + } + ], + businessJid: [3, 'string'], + entryPointApp: [ + 4, + { + FACEBOOK: 1, + INSTAGRAM: 2, + WHATSAPP: 3, + EXTERNAL: 4 + } + ], + entryPointSource: [ + 5, + { + CLICK_TO_CHAT_LINK: 1, + MESSAGE_SHORT_LINK: 2, + QR_CODE: 3, + CUSTOM_LINK: 4, + CUSTOM_QR_CODE_LINK: 5 + } + ], + internalEntryPoint: [ + 6, + { + STATUS: 1, + INDIVIDUAL_CHAT: 2, + GROUP: 3, + OTHER: 4, + OUTSIDE_OF_WA: 5, + CHANNEL: 6 + } + ], + sequenceNumber: [7, 'integer'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'WebcNativeUpsellCta', + id: 3934, + props: { + webcNativeUpsellCtaEventType: [ + 2, + { + IMPRESSION: 1, + CTA_BTN_CLICK: 2, + CTA_DISMISS: 3 + } + ], + webcNativeUpsellCtaIsBetaUser: [5, 'boolean'], + webcNativeUpsellCtaQrScreenExperimentGroup: [ + 3, + { + NONE: 1, + TEST_BANNER_SLIM: 2, + TEST_BANNER_LARGE: 3, + CONTROL: 4 + } + ], + webcNativeUpsellCtaReleaseChannel: [ + 4, + { + PRODUCTION: 1, + BETA: 2 + } + ], + webcNativeUpsellCtaSource: [ + 1, + { + INTRO_PANEL: 1, + CHATLIST_DROPDOWN: 2, + BUTTERBAR: 3, + QR_BANNER: 4, + SEARCH_RESULTS: 5, + CALL_BTN_MODAL: 6, + CALL_BTN_MODAL_2: 7, + MISSED_CALL_MODAL: 8, + MISSED_CALL_MODAL_2: 9, + QR_BANNER_2: 10, + QR_DOWNLOAD_BUTTON: 11, + QR_SLIM_BANNER: 12, + QR_LARGE_BANNER: 13, + SETTINGS: 14, + SETTINGS_HELP: 15 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebDbTableUsage', + id: 5074, + props: { + offlineSessionId: [1, 'string'], + webScenario: [ + 2, + { + OFFLINE_RESUME: 0 + } + ], + webTable: [3, 'string'], + webTableLogReason: [ + 4, + { + BASE: 0, + EXCEEDED_THRESHOLD: 1 + } + ], + webTableReadCount: [5, 'integer'], + webTableWriteCount: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 100 + }, + { + name: 'TsExternal', + id: 4574, + props: { + relativeTimestampMs: [1, 'integer'], + tsDuration: [2, 'integer'], + tsExternalEventSource: [ + 3, + { + CALL: 1, + VIDEO: 2, + PTT_RECORD: 3, + PTT_PLAY: 4 + } + ], + tsSessionId: [4, 'integer'], + tsTimestampMs: [5, 'integer'], + unifiedSessionId: [6, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'UiAction', + id: 472, + props: { + agentEngagementType: [ + 9, + { + DIRECT_CHAT: 0, + INVOKED: 1, + MEMBER: 2 + } + ], + appContext: [21, 'string'], + appContextBitfield: [22, 'integer'], + botType: [ + 11, + { + UNKNOWN: 0, + METABOT: 1, + BOT_1P_BIZ: 2, + BOT_3P_BIZ: 3, + UGC: 4, + META_CHARACTER: 5 + } + ], + dbBgThreadReadsDurationT: [17, 'timer'], + dbBgThreadWritesDurationT: [18, 'timer'], + dbMainThreadCount: [13, 'integer'], + dbMainThreadReadsDurationT: [19, 'timer'], + dbMainThreadWritesDurationT: [20, 'timer'], + dbReadsCount: [14, 'integer'], + dbWritesCount: [15, 'integer'], + deviceCount: [5, 'integer'], + isLid: [8, 'boolean'], + isLowPowerMode: [23, 'boolean'], + localAddressingMode: [ + 10, + { + PN: 1, + LID: 2 + } + ], + participantCount: [6, 'integer'], + peripheralConnected: [16, 'string'], + sizeBucket: [ + 4, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + uiActionChatType: [ + 7, + { + INDIVIDUAL: 1, + GROUP: 2, + SUBGROUP: 3, + DEFAULT_SUBGROUP: 4, + CHANNEL: 5 + } + ], + uiActionPreloaded: [2, 'boolean'], + uiActionT: [3, 'timer'], + uiActionTtrcSurfaceName: [12, 'string'], + uiActionType: [ + 1, + { + OTHER: 1, + APP_OPEN: 2, + CHAT_OPEN: 3, + IMAGE_OPEN: 4, + FIRST_FTS_RESULT: 5, + CONTACTS_OPEN: 6, + GROUP_INFO_OPEN: 7, + MSG_INFO_OPEN: 8, + COMMUNITY_INFO_OPEN: 9, + DEFAULT_SUBGROUP_INFO_OPEN: 10, + COMMUNITY_CREATE: 11, + COMMUNITY_LINK: 12, + EMOJI_OBI_DECOMPRESSION: 13, + EMOJI_PNG_DECOMPRESSION: 14, + CHAT_LIST_OPEN: 15, + CALL_LIST_OPEN: 16, + CHANNEL_INFO_OPEN: 17, + TTRC: 18, + PTT_START_LATENCY: 19, + VIDEO_OPEN: 20, + GIF_OPEN: 21, + GALLERY_OPEN: 22, + REACTION_TRAY_START_LATENCY: 23, + PTT_STOP_LATENCY: 24, + PTT_LOCKED_VIEW_OPEN: 25, + PTT_PLAYBACK_START: 26, + PTV_PLAYBACK_START: 27, + PTV_RECORDING_START: 28, + PTV_RECORDING_STOP: 29, + PTV_RECORDING_DISCARD: 30, + PTV_RECORDING_SEND: 31, + EMOJI_PICKER_START: 32, + MESSAGE_FORWARD: 33 + } + ] + }, + wamChannel: 'regular', + weight: 5000 + }, + { + name: 'CtwaActionBannerUnderstand', + id: 3586, + props: { + bannerIdentifier: [1, 'string'], + bannerLocale: [2, 'string'], + clientLocale: [3, 'string'], + hasLocalLink: [4, 'boolean'], + hasUniversalLink: [5, 'boolean'], + invalidLink: [6, 'string'], + lwiFlowIdentifier: [7, 'string'], + preferredLink: [ + 8, + { + LOCAL: 0, + UNIVERSAL: 1 + } + ], + validLocale: [9, 'boolean'], + validNotification: [10, 'boolean'] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'CriticalEvent', + id: 1684, + props: { + context: [2, 'string'], + crashApplicationState: [ + 8, + { + FOREGROUND: 1, + BACKGROUND: 2, + APP_INIT: 3 + } + ], + crashlogType: [ + 6, + { + UNKNOWN: 0, + ZERO_EVENT_EXPECTED: 1, + TRACKING: 2 + } + ], + debug: [3, 'string'], + extraDebug: [7, 'string'], + mobileBuildId: [5, 'string'], + name: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'TestAnonymousWeeklyId', + id: 2956, + props: { + psTestBooleanField: [2, 'boolean'], + psTestStringField: [3, 'string'], + psTimeSinceLastEventInMin: [1, 'integer'] + }, + wamChannel: 'private', + privateStatsIdInt: 42196056, + weight: 1 + }, + { + name: 'EphemeralSettingChange', + id: 2370, + props: { + chatEphemeralityDuration: [1, 'integer'], + ephemeralSettingEntryPoint: [ + 3, + { + CHAT_INFO: 1, + SYSTEM_MESSAGE: 2, + CHAT_OVERFLOW: 3, + CHAT_PICKER: 4, + EPHEMERAL_NUX: 5, + CHAT_PICKER_DISAPPEARING_MODE_TIMER: 6, + CHAT_PICKER_STORAGE_SETTING: 7 + } + ], + ephemeralSettingGroupSize: [ + 5, + { + LT4: 1, + LT8: 2, + LT16: 3, + LT32: 4, + LT64: 5, + LT128: 6, + LT256: 7, + LT512: 8, + LT1000: 9, + LT1500: 10, + LT2000: 11, + LT2500: 12, + LT3000: 13, + LT3500: 14, + LT4000: 15, + LT4500: 16, + LT5000: 17, + LARGEST_BUCKET: 18 + } + ], + previousEphemeralityDuration: [2, 'integer'], + threadId: [6, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdGroupParticipantMissAck', + id: 4146, + props: { + groupSizeBucket: [ + 1, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4, + XX_LARGE: 5, + XXX_LARGE: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + isLid: [2, 'boolean'], + messageIsRevoke: [3, 'boolean'], + participantAddCount: [4, 'integer'], + participantRemoveCount: [5, 'integer'], + typeOfGroup: [ + 6, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMediaLoad', + id: 1202, + props: { + webcMediaLoadResult: [ + 2, + { + SUCCESS: 0, + SILENCE: 1, + ZEROWIDTH: 2 + } + ], + webcMediaLoadT: [1, 'timer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdBadDeviceSentMessage', + id: 2176, + props: { + dsmError: [ + 2, + { + INVALID_SENDER: 1, + MISSING_DSM: 2, + INVALID_DSM: 3 + } + ], + editType: [ + 3, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + isLid: [4, 'boolean'], + mediaType: [ + 5, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 6, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + peerType: [ + 1, + { + PRIMARY: 1, + COMPANION: 2 + } + ], + revokeType: [ + 7, + { + SENDER: 0, + ADMIN: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ViewOnceScreenshotActions', + id: 3606, + props: { + isAGroup: [1, 'boolean'], + threadId: [2, 'string'], + voMessageType: [ + 3, + { + PHOTO: 1, + VIDEO: 2, + PTT: 3 + } + ], + voSsAction: [ + 4, + { + SENDER_NUX_TYPE_C_IMPRESSION: 1, + SENDER_NUX_TYPE_D_IMPRESSION: 2, + SCREENSHOT_SENDER_NUX_TYPE_D_IMPRESSION: 3, + RECIPIENT_OPEN_NUX_TYPE_C_IMPRESSION: 4, + RECIPIENT_OPEN_NUX_TYPE_D_IMPRESSION: 5, + SENDER_NUX_TYPE_C_LEARN_MORE_TAP: 6, + SENDER_NUX_TYPE_D_LEARN_MORE_TAP: 7, + SCREENSHOT_SENDER_NUX_TYPE_D_LEARN_MORE_TAP: 8, + RECIPIENT_OPEN_NUX_TYPE_C_LEARN_MORE_TAP: 9, + RECIPIENT_OPEN_NUX_TYPE_D_LEARN_MORE_TAP: 10, + SCREENSHOT_BLOCKED: 11, + SCREENSHOT_TAKEN: 12, + SCREEN_RECORDING_BLOCKED: 13, + SCREEN_RECORDING_STARTED: 14, + PLACEHOLDER_MESSAGE_LEARN_MORE_TAP: 15 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcPageResume', + id: 884, + props: { + webcResumeCount: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GifSearchSessionStarted', + id: 1134, + props: { + gifSearchProvider: [ + 1, + { + GIPHY: 0, + TENOR: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'LimitSharingSettingUpdate', + id: 6390, + props: { + threadId: [1, 'string'], + toggleUpdateAction: [ + 2, + { + TURN_ON: 0, + TURN_OFF: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'LwiEntryTap', + id: 2770, + props: { + businessToolsSessionId: [4, 'string'], + catalogSessionId: [2, 'string'], + itemsCount: [11, 'integer'], + lwiEntryPoint: [ + 3, + { + SMB_CATALG_LIST_LWI_ADVERTISE_BANNER: 1, + SMB_CATALOG_LIST_ADVERTISE_MENU_ITEM: 2, + SMB_BUSINESS_TOOLS_ADVERTISE_LIST_ITEM: 3, + SMB_STATUS_DETAILS_ADVERTISE_MENU_ITEM: 4, + SMB_STATUS_PREVIEW_ADVERTISE_MENU_ITEM: 5, + SMB_CONVERSATIONS_LIST_BANNER_WITH_VALID_PRODUCT: 6, + SMB_CONVERSATIONS_LIST_BANNER_WITHOUT_VALID_PRODUCT: 7, + SMB_STATUS_3DTOUCH_ADVERTISE_MENU_ITEM: 8, + SMB_HOME_SCREEN_OVERFLOW_MENU_ITEM: 9, + SMB_BUSINESS_TOOLS_ADVERTISE_LIST_FIRST_ITEM: 10, + SMB_SETTINGS_ADVERTISE_LIST_ITEM: 11, + SMB_ADVERTISE_FROM_NOTIFICATION: 12, + SMB_ADVERTISE_FROM_BANNER: 13, + SMB_ADVERTISE_FROM_DEEP_LINK: 14, + SMB_BUSINESS_TOOLS_TAB_ADVERTISE: 15, + SMB_CATALOG_LIST_ADVERTISE_BUTTON: 16, + SMB_PRODUCT_DETAILS_ADVERTISE_BUTTON: 17, + SMB_ADVERTISE_FROM_STATUS_MESSAGE: 18, + SMB_HOME_SCREEN_ICON: 19, + SMB_HOME_BANNER: 20, + SMB_ADVERTISE_FROM_STATUS_MESSAGE_SELF_VIEW: 21, + SMB_STATUS_MAIN_TAB_ADVERTISE: 22, + SMB_STATUS_MAIN_TAB_BANNER: 23, + SMB_BUSINESS_HOME_CARD_CREATE_FIRST_AD: 24, + SMB_BUSINESS_HOME_CARD_CREATE_RETURNING_AD: 25, + SMB_MEDIA_SHARE_VIA_GROUP: 26, + SMB_MEDIA_SHARE_VIA_BROADCAST: 27, + STATUS_PLAYBACK_SCREEN_ICON: 28, + CATALOG_SHARED_IN_GROUP: 29, + CATALOG_SHARED_IN_BROADCAST_LIST: 30, + CATALOG_SHARED_IN_SINGLE_CHAT: 31, + PRODUCT_SHARED_IN_SINGLE_CHAT: 32, + PRODUCT_SHARED_IN_BROADCAST_LIST: 33, + PRODUCT_SHARED_IN_GROUP: 34, + PRODUCT_LINK_SHARED_IN_SINGLE_CHAT: 35, + PRODUCT_LINK_SHARED_IN_BROADCAST_LIST: 36, + PRODUCT_LINK_SHARED_IN_GROUP: 37, + SMB_MESSAGING_GUIDE_AD_CREATION: 38, + SMB_BUSINESS_HOME_ADVERTISE_FROM_BANNER: 39, + SMB_STATUS_UPSELL_BOTTOM_SHEET: 40, + BUSINESS_PROFILE: 41, + SMB_BUSINESS_HOME_CARD_ACTIVE_AD: 42, + SMB_STATUS_CHANNELS_TAB_ADVERTISE: 43, + SMB_STATUS_CHANNELS_TAB_BANNER: 44, + SMB_PRODUCT_UPSELL_BOTTOM_SHEET: 45, + SMB_STATUS_CHANNELS_UPSELL_BOTTOM_SHEET: 46, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_INDIVIDUAL: 47, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_GROUP: 48, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_BROADCAST: 49, + SMB_BUSINESS_HOME_CARD_ACTIVE_AD_DISMISS: 50, + SMB_BUSINESS_HOME_CARD_DRAFT_AD: 51, + SMB_BUSINESS_HOME_MANAGE_AD: 52, + SMB_BUSINESS_TOOLS_MANAGE_AD: 53, + SMB_HOME_SCREEN_OVERFLOW_MANAGE_ITEM: 54, + SMB_BUSINESS_HOME_QP_CARD: 55, + SMB_CREATED_AD: 56, + SMB_BUSINESS_HOME_CARD_COUPON_PROMOTION: 57, + SMB_SETTINGS_MANAGE_AD: 58, + SMB_BUSINESS_HOME_IG_FIRST: 59, + SMB_BUSINESS_ADS_HUB_OVERVIEW: 60, + SMB_BUSINESS_DRAFT_AD_NUX: 61, + SMB_ADS_CREDIT_BLOKS_CTWA: 62, + SMB_ARCHIVE_STATUS_MAIN_TAB_BOOST: 80, + SMB_PRODUCT_DETAILS_ADVERTISE_AGAIN_BUTTON: 81, + SMB_ADVERTISE_FROM_MANAGE_ADS_CREATE_AD_BUTTON: 82, + SMB_ADVERTISE_FROM_AD_DETAILS_RECREATE_AD_BUTTON: 83, + SMB_BUSINESS_HOME_LEARNING_HUB: 84, + SMB_AUTOMATOR_UPSELL: 85, + SMB_ADVERTISE_FROM_MANAGE_ADS_OVERFLOW_MENU_ITEM_RECREATE_AD_BUTTON: 86 + } + ], + lwiFlowId: [1, 'string'], + lwiSubEntryPoint: [ + 7, + { + SMB_HOME_SCREEN_CONVERSATIONS_TAB: 1, + SMB_HOME_SCREEN_STATUS_TAB: 2, + SMB_HOME_SCREEN_CALL_HISTORY_TAB: 3, + SMB_HOME_SCREEN_COMMUNITIES_TAB: 4, + SMB_HOME_SCREEN_BIZ_HOME_TAB: 5 + } + ], + statusSessionId: [6, 'integer'], + statusTypeMedia: [ + 12, + { + IMAGE: 1, + VIDEO: 2 + } + ], + userHasLinkedFbPage: [5, 'boolean'], + waCampaignId: [10, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMediaRmr', + id: 1906, + props: { + messageMediaType: [ + 10, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + webcBrowserNetworkType: [2, 'string'], + webcBrowserStorageQuotaBytes: [11, 'integer'], + webcBrowserStorageQuotaUsedBytes: [12, 'integer'], + webcChatPosition: [1, 'integer'], + webcChatType: [ + 9, + { + INDIVIDUAL: 0, + GROUP: 1, + BROADCAST_LIST: 2, + COMMUNITY: 3, + NEWSLETTER: 4 + } + ], + webcMediaRmrError: [8, 'boolean'], + webcMediaRmrT: [6, 'timer'], + webcMediaSize: [7, 'integer'], + webcMessageIndex: [3, 'integer'], + webcMessageT: [5, 'timer'], + webcRmrReason: [ + 14, + { + OTHER: 0, + MSG_CLICK: 1, + STICKER_PANEL_ICON: 2, + MEDIA_VIEWER: 3, + VIDEO_STREAMING: 4, + STATUS_V3: 5, + MULTI_SELECT_DOWNLOAD: 6, + DOCUMENT_DOWNLOAD: 7, + PIP: 8, + STICKER_PANEL_STICKER: 9, + SEND_TO_CHAT: 10, + UPLOAD: 11, + MSG_INIT: 12, + MSG_UPDATE: 13, + MSG_DELETE: 14, + MSG_RENDER: 15 + } + ], + webcRmrStatusCode: [13, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MediaPicker', + id: 1038, + props: { + audienceSelectorClicked: [24, 'boolean'], + audienceSelectorUpdated: [25, 'boolean'], + autoScaleCount: [51, 'integer'], + captionPositions: [37, 'string'], + chatRecipients: [16, 'integer'], + hasCollectionCaption: [38, 'boolean'], + hdToggleChange: [34, 'integer'], + hdToggleEligible: [35, 'boolean'], + hdToggleState: [ + 36, + { + AUTO: 0, + DATA_SAVER: 1, + HIGH_QUALITY: 2, + HIGHEST_QUALITY: 3 + } + ], + isSentInLandscape: [41, 'boolean'], + isViewOnce: [22, 'boolean'], + itemCaptionCount: [39, 'integer'], + mediaPickerArBackground: [42, 'integer'], + mediaPickerArFilter: [43, 'integer'], + mediaPickerArFunEffect: [44, 'integer'], + mediaPickerAvatarStickers: [33, 'integer'], + mediaPickerChanged: [4, 'integer'], + mediaPickerCroppedRotated: [10, 'integer'], + mediaPickerDeleted: [3, 'integer'], + mediaPickerDrawing: [11, 'integer'], + mediaPickerFilter: [18, 'integer'], + mediaPickerHasLocationSticker: [26, 'boolean'], + mediaPickerIgluLowlight: [47, 'integer'], + mediaPickerIgluTouchup: [48, 'integer'], + mediaPickerLikeDoc: [19, 'integer'], + mediaPickerNotLikeDoc: [20, 'integer'], + mediaPickerOrigin: [ + 14, + { + CHAT_PHOTO_LIBRARY: 1, + CAMERA_TAB_CAPTURE: 2, + FORWARD: 3, + PASTE: 4, + SHARE_EXTENSION: 5, + EXPORT: 6, + MENU_CAMERA_CAPTURE: 7, + EXTERNAL_CAMERA: 8, + LINK_PREVIEW_DOWNLOAD: 9, + CAMERA_TAB_MEDIA_STRIP: 10, + CAMERA_TAB_PHOTO_LIBRARY: 11, + CHAT_BUTTON_CAMERA_CAPTURE: 12, + CHAT_BUTTON_CAMERA_MEDIA_STRIP: 13, + CHAT_BUTTON_CAMERA_PHOTO_LIBRARY: 14, + STATUS_TAB_CAMERA_CAPTURE: 15, + STATUS_TAB_CAMERA_MEDIA_STRIP: 16, + STATUS_TAB_CAMERA_PHOTO_LIBRARY: 17, + STATUS_REPLY_CAMERA_CAPTURE: 18, + STATUS_REPLY_CAMERA_MEDIA_STRIP: 19, + STATUS_REPLY_CAMERA_PHOTO_LIBRARY: 20, + MENU_CAMERA_PHOTO_LIBRARY: 21, + CHAT_GIF_INAPP: 22, + CHAT_GIF_EXTERNAL: 23, + STATUS_REPLY_GIF_INAPP: 24, + STATUS_REPLY_GIF_EXTERNAL: 25, + SMB_QUICK_REPLY_EDIT: 26, + SMB_QUICK_REPLY_SEND: 27, + MEDIA_BROWSER: 28, + CHAT_QUICK_EDIT: 29, + CAMERA_TAB_GIF: 30, + STATUS_TAB_GIF: 31, + PAYMENT_COMPOSER: 32, + PHOTO_RECEIVED: 33, + PHOTO_RECEIVED_GALLERY: 34, + AD_CREATION: 35, + EXTERNAL_DROP: 36, + IN_APP_BROWSER: 37, + PREMIUM_MESSAGE_COMPOSER: 38, + DOCUMENT_PICKER: 39, + IN_APP_BUG_REPORTING: 40, + STICKER_TRAY_CREATE_STICKER: 41, + STICKER_TRAY_EDIT_STICKER: 42, + STICKER_MESSAGE_CREATE_YOUR_OWN: 43, + STICKER_MESSAGE_EDIT_STICKER: 44, + MEDIA_VIEWER_CREATE_STICKER: 45, + STATUS_NEWSLETTER_CARD: 46, + CUTOUT_IMAGE_EDIT_STICKER: 47, + STICKER_TRAY_CREATE_STICKER_CAPTURE: 48, + THUNDERSTORM_IN_APP_PHOTO_LIBRARY: 49, + TRANSPARENT_IMAGE_EDIT_STICKER: 50, + BUSINESS_FLOWS: 51, + SYSTEM_INTENT: 52, + SMB_CATALOG_CAMERA: 53, + SMB_CATALOG_VIDEO_UPLOAD: 54, + STATUS_MENTION_RESHARE: 55, + MY_STATUS_FAB_CAMERA_CAPTURE: 56, + MY_STATUS_FAB_CAMERA_MEDIA_STRIP: 57, + STATUS_TAB_FAB_CAMERA_CAPTURE: 58, + STATUS_TAB_FAB_CAMERA_MEDIA_STRIP: 59, + HOME_TOOLBAR_CHATS_CAMERA_CAPTURE: 60, + HOME_TOOLBAR_CHATS_CAMERA_MEDIA_STRIP: 61, + HOME_TOOLBAR_CHATS_CAMERA_PHOTO_LIBRARY: 62, + HOME_TOOLBAR_STATUS_CAMERA_CAPTURE: 63, + HOME_TOOLBAR_STATUS_CAMERA_MEDIA_STRIP: 64, + HOME_TOOLBAR_STATUS_CAMERA_PHOTO_LIBRARY: 65, + HOME_TOOLBAR_CALLS_CAMERA_CAPTURE: 66, + HOME_TOOLBAR_CALLS_CAMERA_MEDIA_STRIP: 67, + HOME_TOOLBAR_CALLS_CAMERA_PHOTO_LIBRARY: 68, + HOME_TOOLBAR_COMMUNITY_CAMERA_CAPTURE: 69, + HOME_TOOLBAR_COMMUNITY_CAMERA_MEDIA_STRIP: 70, + HOME_TOOLBAR_COMMUNITY_CAMERA_PHOTO_LIBRARY: 71, + STATUS_TAB_SELF_POG_CAMERA_MEDIA_STRIP: 72, + STATUS_TAB_SELF_POG_CAMERA_CAPTURE: 73, + CHATS_TAB_CAMERA_MEDIA_STRIP: 74, + CHATS_TAB_CAMERA_CAPTURE: 75, + SELF_POG_ON_STATUS_VIEWER: 76, + STICKER_MAKER_CAMERA_CAPTURE: 77, + UPDATES_TAB_CREATE_STATUS_CAMERA_BUTTON: 78, + UPDATES_TAB_CREATE_STATUS_UNIFIED_BUTTON: 79, + MY_STATUS_ADD_STATUS_BUTTON: 80, + UNIFIED_CREATION_QUICK_ACTION_CAMERA: 81, + UNIFIED_CREATION_MENU_CAMERA: 82, + UNIFIED_CREATION_MENU_GALLERY: 83, + SHARE_EXTENSION_STATUS_IG_STORY_SELF_VIEWER: 84, + SHARE_EXTENSION_STATUS_IG_REELS_SHARE: 85, + STATUS_POST_RESHARE: 86, + POLL_CREATION: 87, + MUSIC_ATTRIBUTION: 88, + MUSIC_STANDALONE_TYPE: 89, + STATUS_PROMPT_RESPONSE: 90, + STATUS_LAYOUTS_ACTION: 91, + STATUS_LAYOUTS_EDITOR: 92, + AI_IMAGINE_BOTTOM_SHEET: 93, + AI_IMAGINE_MESSAGE_QUICK_ACTION: 94, + MAIBA_KNOWLEDGE: 95, + FORWARD_FROM_STATUS: 96, + AI_COMPOSER_CAMERA: 97, + AI_ATTACHMENT_TRAY_CAMERA: 98, + AI_ATTACHMENT_TRAY_GALLERY: 99 + } + ], + mediaPickerOriginThirdParty: [21, 'boolean'], + mediaPickerSent: [2, 'integer'], + mediaPickerSentUnchanged: [5, 'integer'], + mediaPickerSessionId: [29, 'string'], + mediaPickerStickers: [12, 'integer'], + mediaPickerT: [15, 'timer'], + mediaPickerText: [13, 'integer'], + mediaType: [ + 1, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + motionPhotoImpressionCount: [31, 'integer'], + motionPhotoSentCount: [32, 'integer'], + numberOfArPostCapture: [45, 'integer'], + numberOfArPreCapture: [46, 'integer'], + numberOfIgluPostCapture: [49, 'integer'], + numberOfIgluPreCapture: [50, 'integer'], + photoGalleryDurationT: [23, 'timer'], + photoQualitySetting: [ + 27, + { + AUTO: 0, + DATA_SAVER: 1, + HIGH_QUALITY: 2, + HIGHEST_QUALITY: 3 + } + ], + pickerSessionId: [30, 'integer'], + statusRecipients: [17, 'integer'], + transformCount: [52, 'integer'], + videoQualitySetting: [ + 28, + { + AUTO: 0, + DATA_SAVER: 1, + HIGH_QUALITY: 2, + HIGHEST_QUALITY: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PollsActions', + id: 3676, + props: { + chatType: [ + 8, + { + OTHER: 0, + INDIVIDUAL: 1, + GROUP: 2, + STATUS: 3, + BROADCAST: 4, + CHANNEL: 5 + } + ], + groupSizeBucket: [ + 1, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4, + XX_LARGE: 5, + XXX_LARGE: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + isAGroup: [6, 'boolean'], + isAdmin: [2, 'boolean'], + pollAction: [ + 3, + { + OPEN_CREATE_MODAL: 1, + CREATE_POLL: 2, + VIEW_RESULTS_MODAL: 4, + REMOVE_VOTE: 5, + VOTE: 6, + CHANGE_VOTE: 7 + } + ], + pollCreationDs: [4, 'integer'], + pollOptionsCount: [5, 'integer'], + typeOfGroup: [ + 7, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatLockDaily', + id: 4214, + props: { + folderChatsCount: [1, 'integer'], + folderOpenCount: [2, 'integer'], + lockFolderHidden: [5, 'boolean'], + newAddChatCount: [3, 'integer'], + newRemoveChatCount: [4, 'integer'], + secretCodeActive: [6, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelLinkShare', + id: 4728, + props: { + channelLinkShareDirection: [ + 1, + { + WHATSAPP: 1, + STATUS: 2, + EXTERNAL: 3, + QR_CODE: 4 + } + ], + channelLinkShareEntryPoint: [ + 2, + { + CHANNEL_INFO_PAGE: 1, + CHANNEL_THREAD: 2, + PRODUCER_CONTEXT_CARD: 3, + UPDATES_TAB: 4, + SHARE_LINK_SCREEN: 5 + } + ], + channelLinkShareScreen: [ + 4, + { + CONTEXT_CARD: 1, + CHANNEL_INFO: 2, + CHANNEL_THREAD: 3, + SHARE_LINK_SCREEN: 4, + UPDATES_TAB: 5, + QR_CODE_SCREEN: 6 + } + ], + cid: [3, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ReportingTokenValidationFailure', + id: 5466, + props: { + editType: [ + 1, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + isLid: [5, 'boolean'], + isMessageMediaRetry: [10, 'boolean'], + isMessageRetry: [6, 'boolean'], + isSecretEncryptedMsg: [8, 'boolean'], + messageIsForward: [11, 'boolean'], + messageMediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 3, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + offline: [7, 'boolean'], + reportingTokenValidationFailureReason: [ + 4, + { + MISSING_MESSAGE_SECRET: 0, + EMPTY_REPORTING_TOKEN_CONTENT: 1, + MISMATCH_REPORTING_TOKEN: 2, + UNSUPPORTED_VERSION: 3 + } + ], + reportingTokenVersion: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsIdUpdate', + id: 2862, + props: { + isFromWamsys: [4, 'boolean'], + psIdAction: [ + 2, + { + CREATED: 1, + ROTATED: 2, + DELETED: 3 + } + ], + psIdKey: [1, 'integer'], + psIdRotationFrequence: [3, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'GatedChatOpened', + id: 3150, + props: { + chatGatedReason: [ + 1, + { + TOS3: 1, + COUNTRY: 2 + } + ], + selfInitiated: [2, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'OfflineResumeStage', + id: 3536, + props: { + attemptId: [13, 'integer'], + chatThreadCount: [4, 'integer'], + currentOfflineStage: [ + 1, + { + PAGE_LOAD: 1, + SOCKET_CONNECT: 2, + PROCESS_COMPLETE: 3, + SCREEN_LOAD: 4, + OFFLINE_PREVIEW: 5, + OFFLINE_COMPLETE_RECEIVED: 6, + PREACKS_SENT: 7 + } + ], + isResumeInForeground: [5, 'boolean'], + isResumeStartedInForeground: [14, 'boolean'], + lastPushTimestampMs: [12, 'integer'], + mailboxAge: [6, 'integer'], + offlineCallCount: [15, 'integer'], + offlineDecryptErrorCount: [7, 'integer'], + offlineMessageCount: [8, 'integer'], + offlineNotificationCount: [9, 'integer'], + offlineReceiptCount: [10, 'integer'], + offlineResumeMode: [ + 11, + { + RESUME_FROM_RESTART: 1, + RESUME_FROM_OPEN_TAB: 2, + UNKNOWN: 3, + CONNECT_REASON_USER: 4, + CONNECT_REASON_PUSH: 5, + CONNECT_REASON_BACKOFF: 6 + } + ], + offlineSessionId: [2, 'string'], + offlineSizeBytes: [16, 'integer'], + offlineStageTimestampMs: [3, 'integer'], + passiveModeT: [17, 'timer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsChannelsSnaplEvent', + id: 6254, + props: { + appId: [2, 'integer'], + videoEventJson: [1, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'MdBootstrapHistorySyncStatusAfterPairing', + id: 4652, + props: { + activeTimeAfterPairing: [ + 1, + { + MINS_10: 1, + MINS_20: 2, + MINS_40: 3, + MINS_60: 4, + MINS_5: 5 + } + ], + isLoopRunning: [12, 'boolean'], + lastProcessedNotificationChunkOrder: [2, 'integer'], + lastProcessedNotificationChunkProgress: [3, 'integer'], + mdBootstrapHistoryPayloadType: [ + 4, + { + INITIAL: 1, + RECENT_HISTORY: 2, + FULL_HISTORY: 3, + PUSHNAME: 4, + STATUS_V3: 5, + NON_BLOCKING_DATA: 6, + ON_DEMAND: 7 + } + ], + mdHistorySyncStatusResult: [ + 5, + { + SUCCESS: 1, + UNFINISHED: 2, + FAIL_TO_DOWNLOAD: 3, + MISSING_CHUNK: 4, + PROTOBUF_ERROR: 5, + FAIL_TO_STORE: 6, + OTHER_ERROR: 7, + IN_PROGRESS: 8, + FAIL_TO_RECEIVE: 9, + FAIL_TO_STORE_CHUNK: 10, + FAIL_TO_FETCH: 11, + FAIL_TO_PREPROCESS: 12, + FAIL_TO_ENCRYPT: 13 + } + ], + mdSessionId: [6, 'string'], + mdTimestamp: [7, 'integer'], + missingNotificationCount: [8, 'integer'], + nextNotificationChunkOrder: [9, 'integer'], + totalProcessedMessageCount: [10, 'integer'], + unprocessedNotificationCount: [11, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PnhRequestRevealAction', + id: 3808, + props: { + pnhAction: [ + 1, + { + SEE_MASKED_PN_AT_CHAT_CREATION: 1, + REQUEST_DIALOG_APPEAR: 2, + SEND_REQUEST: 3, + SHARE_PN_SHEET_APPEAR: 4, + DISMISS: 5, + SHARE_NUMBER: 6 + } + ], + pnhChatParty: [ + 2, + { + BIZ: 1, + CONSUMER: 2 + } + ], + pnhChatType: [ + 3, + { + CTWA: 1 + } + ], + pnhEntryPoint: [ + 4, + { + CHAT_CREATION: 1, + CHAT_INFO_REQUEST: 2, + AUDIO: 3, + VIDEO: 4, + PN_REQUEST: 5, + SYSTEM_MESSAGE: 6, + CHAT_INFO_PN_VISIBILITY: 7 + } + ], + threadId: [5, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatAction', + id: 2312, + props: { + chatActionChatType: [ + 3, + { + INDIVIDUAL: 1, + GROUP: 2, + BUSINESS: 3, + BROADCAST_LIST: 4 + } + ], + chatActionEntryPoint: [ + 2, + { + CONVERSATION_LIST: 1, + CONTACT_INFO: 2, + GROUP_INFO: 3, + SEARCH_LIST: 4, + CONVERSATION_LIST_BULK_EDIT: 5, + CONVERSATION_MENU: 6, + WEB_ACTION: 7, + SYSTEM_NOTIFICATIONS: 8, + SPAM_FOLDER: 9 + } + ], + chatActionMuteDuration: [4, 'timer'], + chatActionType: [ + 1, + { + MUTE: 1, + UNMUTE: 2, + ARCHIVE: 3, + CLEAR: 4, + EXIT_GROUP: 5, + DELETE: 6, + PIN: 7, + UNREAD: 8, + READ: 9, + SUSPEND_CHAT_DELETE: 10 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdAppStateKeyRotation', + id: 2518, + props: { + appSessionId: [2, 'string'], + companionSessionIds: [3, 'string'], + mdAppStateKeyRotationReason: [ + 1, + { + APP_STATE_SYNC_KEY_EXPIRY: 1, + DEVICE_DEREGISTERATION: 2, + NO_KEYS: 3 + } + ], + oldSyncdKeyhash: [6, 'string'], + oldSyncdKeyid: [7, 'string'], + seqNumber: [8, 'integer'], + syncdKeyhashAfterRotation: [9, 'string'], + syncdKeyidAfterRotation: [10, 'string'] + }, + wamChannel: 'regular', + weight: 1000 + }, + { + name: 'PlaceholderActivity', + id: 1980, + props: { + deviceCount: [9, 'integer'], + deviceSizeBucket: [ + 8, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + e2eSenderType: [ + 16, + { + MY_PRIMARY: 1, + OTHER_PRIMARY: 2, + MY_COMPANION: 3, + OTHER_COMPANION: 4, + MY_HOSTED_COMPANION: 5, + OTHER_HOSTED_COMPANION: 6 + } + ], + isHostedChat: [19, 'boolean'], + isLid: [12, 'boolean'], + localAddressingMode: [ + 20, + { + PN: 1, + LID: 2 + } + ], + messageBeforeReg: [15, 'boolean'], + messageIsRevoke: [7, 'boolean'], + messageKeyHash: [14, 'string'], + messageMediaType: [ + 6, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 5, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + participantCount: [10, 'integer'], + placeholderActionInd: [ + 2, + { + OTHER: 0, + ADD: 1, + VIEW: 2, + POPULATE: 3 + } + ], + placeholderAddReason: [ + 11, + { + OTHER: 0, + SIGNAL_NO_SESSION: 1, + DEVICE_VERIFICATION_FAILURE: 2, + UNKNOWN_SELF_DEVICE: 3, + SIGNAL_INVALID_KEY: 4, + SIGNAL_INVALID_KEY_ID: 5, + SIGNAL_INVALID_MESSAGE: 6, + DEVICE_VERIFICATION_FAILURE_SELF_PEER: 7, + UNKNOWN_COMPANION_NO_PREKEY: 8, + BAD_EPHEMERAL_SETTING: 9, + SIGNAL_FUTURE_MESSAGE: 10, + SIGNAL_INVALID_SIGNATURE: 11, + SIGNAL_BAD_MAC: 12, + SIGNAL_INVALID_SESSION: 13 + } + ], + placeholderChatTypeInd: [ + 3, + { + OTHER: 0, + INDIVIDUAL: 1, + GROUP: 2, + STATUS: 3, + BROADCAST: 4, + CHANNEL: 5, + INTEROP: 6 + } + ], + placeholderPopulationType: [ + 17, + { + OTHER: 0, + RETRY: 1, + PEER_MESSAGE: 2, + RESEND: 3 + } + ], + placeholderTimePeriod: [4, 'integer'], + placeholderTypeInd: [ + 1, + { + OTHER: 0, + CIPHERTEXT: 1, + FANOUT: 2, + DOWNGRADE: 3, + FIXED_CONTENT: 4, + TEMPORARY: 5, + DROP: 6 + } + ], + typeOfGroup: [ + 13, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SettingsSearchInitiate', + id: 4014, + props: { + settingsPageType: [ + 1, + { + SETTINGS: 0, + ME_TAB: 1, + AVATAR_COINFLIP: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SmbUserJourney', + id: 5462, + props: { + actionType: [ + 1, + { + OPEN: 1, + SELECT_FILTER: 2, + SEARCH_WITH_FILTER: 3, + SEARCH: 4, + SEARCH_ITEM_SELECTED: 5, + SEARCH_MSG_SENT: 6, + UNSELECT_FILTER: 7, + AUTO_CLEAR_FILTER: 8, + VIEW: 9, + GROUP_NAVIGATION: 10, + GROUP_DISCOVERY: 11, + GROUP_JOIN: 12, + SUBGROUP_SWITCHER_CLICK: 13, + SUBGROUP_MENTION_CLICK: 14, + COMMUNITY_RICH_SYSTEM_MESSAGE_CLICK: 15, + GROUP_SYSTEM_MESSAGE_CLICK: 16, + NESTING_VIEW_COMMUNITY_CLICK: 17, + SELECT_COMMUNITY_ADMINS_CAN_ADD_GROUPS: 18, + SELECT_EVERYONE_CAN_ADD_GROUPS: 19, + GROUP_JOIN_REQUEST: 20, + NOTIFICATION_RECEIVED: 21, + NOTIFICATION_RENDERED: 22, + TAP_TO_OPEN: 23, + TAP_TO_REPLY: 24, + VOIP_CALLBACK: 25, + VOIP_MESSAGE: 26, + VOIP_DECLINE: 27, + MARK_AS_READ: 28, + AI_NEW_CHAT_CLICK: 29, + AI_TAB_SELECTION_CLICK: 30, + AI_PERSONA_SELECTION_CLICK: 31, + AI_TOS_VIEW: 32, + AI_TOS_ACCEPT_CLICK: 33, + AI_TOS_DISMISS_CLICK: 34, + AI_NEW_UGC_CLICK: 35, + AI_UGC_CREATION_START_CLICK: 36, + AI_GENDER_AGE_SELECTION_CLICK: 37, + AI_PERSONALITY_SELECTION_CLICK: 38, + AI_INTEREST_SELECTION_CLICK: 39, + AI_AVATAR_SELECTION_CLICK: 40, + AI_NAME_SELECTION_CLICK: 41, + AI_UGC_CREATION_FINISH_CLICK: 42, + REQUEST_WAITLIST_DIALOG_APPEAR: 43, + REQUEST_WAITLIST_SELECT: 44, + FILTER_VIEWED: 45, + FILTER_EMPTY_STATE_VIEWED: 46, + BUSINESS_SERP_LOADED: 47, + BIZ_SEE_MORE_CLICKED: 48, + IMPRESSION: 49, + BIZ_SEARCH_SET_LOCATION_CLICKED: 50, + CLOSE_BTN_CLICKED: 51, + AI_CHAT_CLICK: 52, + NEW_CHAT_CLICK: 53, + SERP_LOADED: 54, + CLICK: 55, + ENTER: 56, + DISMISS: 57, + SEND_MESSAGE_SUCCESS: 58, + META_AI_MODEL_SETTING_SHOW: 59, + META_AI_MODEL_UPDATE: 60, + AI_CHARACTER_EXPLORE_CLICK: 61, + AI_CHARACTER_EXISTING_CHAT_CLICK: 62, + AI_CHARACTER_PREVIEWED: 63, + AI_CHARACTER_PROMPT_CLICK: 64, + AI_CHARACTER_START_CHATTING_CLICK: 65, + AI_CHARACTER_SHARE_CLICKED: 66, + AI_CHARACTER_CREATOR_PROFILE_CLICK: 67, + AI_TOS_DISMISS_NOT_ACCEPTED: 68, + AI_TOS_DISMISS_AUTO_ACCEPTED: 69, + AI_CHARACTER_CHAT_CLICK: 70, + AI_HOME_IMPRESSION: 71, + AI_VOICE_NUX_VIEW: 72, + AI_VOICE_NUX_ALLOW: 73, + AI_VOICE_NUX_DISMISS: 74, + AI_VOICE_MIC_PERMISSION_VIEW: 75, + AI_VOICE_MIC_PERMISSION_ALLOW: 76, + AI_VOICE_MIC_PERMISSION_DISMISS: 77, + AI_VOICE_AUDIO_RECORDING_PERMISSION_VIEW: 78, + AI_VOICE_AUDIO_RECORDING_PERMISSION_WHILE_USING_THE_APP_CLICK: 79, + AI_VOICE_AUDIO_RECORDING_PERMISSION_ONLY_THIS_TIME_CLICK: 80, + AI_VOICE_HALF_SHEET_VIEW: 81, + AI_VOICE_HALF_SHEET_CONNECT: 82, + AI_VOICE_FULL_SHEET_VIEW: 83, + SCAN: 84, + AI_VOICE_MIC_PERMISSION_REDIRECT_TO_SETTING: 85, + AI_VOICE_SEARCH_CHATS_LIST_CLICK: 86, + AI_VOICE_CHAT_THREAD_CLICK: 87, + AI_VOICE_FAB_CLICK: 88, + XMA_REELS_PLUGIN_PREVIEWED: 89, + XMA_REELS_CLICKED: 90, + AI_MEMORY_DELETE: 91, + AI_MEMORY_ALL_DELETE: 92, + AI_MEMORY_DISMISS_CLICK: 93, + AI_MEMORY_BOTTOM_SHEET_VIEW_ALL_CLICK: 94, + AI_MEMORY_VIEW: 95, + AI_MULTIMODAL_SESSION_BEGIN: 96, + AI_VOICE_TO_TEXT_TRANSITION: 97, + AI_VOICE_CONNECTION_ERROR: 98, + AI_VOICE_TAP_ICEBREAKER: 99, + AI_MULTIMODAL_HISTORY_FETCH: 100, + AI_LISTENING_ENABLE: 101, + AI_LISTENING_DISABLE: 102, + AI_TAB_CLICK: 103, + AI_TAB_IMPRESSION: 104, + AI_DISCOVERY_CLICK: 105, + AI_DISCOVERY_PREVIEW: 106, + AI_CHARACTER_AUDIO_MUTED: 107, + AI_CHARACTER_AUDIO_UNMUTED: 108, + AI_TAB_CHARACTER_PREVIEWED: 109, + AI_CHARACTER_IMPRESSION: 110, + AI_INLINE_TOS_RENDERED: 111, + AI_INLINE_TOS_VIEWED_ATTEMPT: 112, + AI_INLINE_TOS_VIEWED: 113, + AI_INITIATION_CONTINUE_ACCEPTED: 114, + NOVICE_AI_TAB_CLICK: 115, + AI_VOICE_BACKGROUND_CALL: 116, + AI_VOICE_FOREGROUND_CALL: 119, + AI_VOICE_START_CALL: 120, + AI_VOICE_END_CALL: 121, + AI_VOICE_AUTO_END_CALL: 122, + AI_NULL_STATE_PROMPT_SEND: 125, + AI_NULL_STATE_HISTORY_FETCH: 126, + AI_VOICE_CONVERSATION_STARTER_CLICK: 127, + AI_VOICE_START_VOICE_MODE: 128, + AI_VOICE_SEND_TEXT: 129, + AI_TOS_NOTICE_ID_ERROR: 130, + AI_HOME_PULL_TO_REFRESH: 131, + AI_VOICE_VIEW_VOICE_SELECTION: 132, + AI_VOICE_SKIP_VOICE_SELECTION: 133, + AI_VOICE_CANCEL_VOICE_SELECTION: 134, + AI_VOICE_SELECT_VOICE_SELECTION: 135, + AI_VOICE_ON_DEFAULT_ENABLED: 136, + AI_VOICE_ON_DEFAULT_DISABLED: 137, + AI_MEMORY_UPDATED: 138, + AI_CREATION_BUTTON_CLICK: 139, + AI_CREATION_TOS_PREVIEWED: 140, + AI_CREATION_PREVIEW: 141, + AI_CREATION_DESCRIPTION_SUBMIT: 142, + AI_CREATION_PERSONALITY_CATEGORY_PREVIEW: 143, + AI_CREATION_PERSONALITY_SUBMIT: 144, + AI_CREATION_AVATAR_CREATE_PREVIEWED: 145, + AI_CREATION_AVATAR_SUBMIT: 146, + AI_CREATION_AUDIENCE_PUBLIC: 147, + AI_CREATION_AUDIENCE_ONLY_ME: 148, + AI_CREATION_CONFIRMED: 149, + AI_CREATION_DELETION_STARTED: 150, + AI_CREATION_DELETION_COMPLETED: 151, + AI_CREATION_REPORT_STARTED: 152, + AI_CREATION_REPORT_COMPLETED: 153, + AI_CREATION_NAMING_PREVIEWED: 154, + AI_CREATION_NAMING_SUBMIT: 155, + AI_CREATION_INTRO_PREVIEWED: 156, + AI_CREATION_INTRO_SUBMIT: 157, + AI_CREATION_REVIEW_PREVIEWED: 158, + AI_CREATION_SUBMIT: 159, + AI_CHAT_THREAD_VOICE_VIEW: 160, + AI_VOICE_CONVERSATION_STARTER_VIEW: 161, + AI_HIDE_REQUEST_SUBMITTED: 162, + AI_CHARACTER_EXPLORE_VIEWED: 163, + META_AI_CHAT_THREAD_VIEWED_TEXT: 164, + META_AI_CHAT_THREAD_VIEWED_VOICE: 165, + TAP_TO_FORWARD: 166, + TAP_TO_COPY: 167, + TAP_TO_STAR: 168, + TAP_TO_DELETE: 169, + TAP_TO_REACT: 170, + SWIPE_TO_REPLY: 171, + AI_CREATION_AVATAR_EDIT_CLICK: 172, + AI_CREATION_AVATAR_CREATE_NEW: 173, + AI_CREATION_VOICE_SELECTION_PREVIEWED: 174, + AI_CREATION_NAMING_EDIT_SAVED: 175, + AI_CREATION_DESCRIPTION_EDIT_SAVED: 176, + AI_CREATION_INTRODUCTION_EDIT_SAVED: 177, + AI_CREATION_WELCOME_MSG_SAVED: 178, + AI_CREATION_ICEBREAKER_SAVED: 179, + AI_CREATION_INSTRUCTIONS_SAVED: 180, + AI_CREATION_INSTRUCTIONS_DELETED: 181, + AI_CREATION_EXAMPLE_DIALOG_SAVED: 182, + AI_CREATION_EXAMPLE_DIALOG_DELETED: 183, + AI_CREATION_ADVANCED_SETTINGS_PREVIEWED: 184, + AI_CREATION_VOICE_PREVIEWED: 185, + AI_CREATION_VOICE_SUBMIT: 186, + AI_VOICE_TOS_ACCEPT_CLICK: 187, + AI_VOICE_TOS_VIEW: 188, + AI_CREATION_AVATAR_REGENERATION: 189, + AI_VOICE_RING_TAP_CLICK: 190, + AI_VOICE_RING_UNDO_MUTE_UNMUTE: 191, + AI_HOME_BOUNCE: 192, + AI_CREATION_AVATAR_EDIT_BUTTON_CLICK: 193, + AI_CREATION_AVATAR_EDIT_DONE: 194, + AI_CREATION_AVATAR_EDIT_SUBMIT: 195, + AI_CREATION_AVATAR_CROP_CLICK: 196, + AI_CREATION_AVATAR_CROP_DONE: 197, + AI_CREATION_IMAGE_UPLOAD_CLICK: 198, + AI_CREATION_IMAGE_UPLOAD_DONE: 199, + AI_CREATION_AVATAR_EDIT_PREVIEWED: 200 + } + ], + contactIsSaved: [2, 'boolean'], + entryPoint: [ + 3, + { + SETTINGS_CONTACTS: 1, + CONTACTS_LIST: 2, + CONTACTS_MENU: 3, + CONTACTPICKER_LIST: 4, + CONTACTPICKER_MENU: 5, + EMPTY_CONVERSATIONS: 6, + EMPTY_CONTACTS: 7, + INVITE_NON_WA_CONTACT: 8, + EMPTY_CALLS: 9, + CHATS_LIST: 10, + CHANNEL_THREAD: 11, + CHANNEL_INFO: 12, + CHAT_THREAD: 13, + CHAT_HOME: 14, + CHAT_INFO_PAGE: 15, + SEARCH_FILTER: 16, + BUSINESS_HOME: 17, + OVERFLOW_MENU: 18, + BUSINESS_TOOLS: 19, + SETTINGS: 20, + APP_STORE: 21, + ACCOUNT_SETTINGS: 22, + CHAT_LONG_PRESS_OPTIONS: 23, + CHAT_SELECT_OPTIONS: 24, + CHAT_SWIPE: 25, + CHAT_MORE_OPTIONS: 26, + DEEP_LINK: 27, + ALERT: 28, + KEYBOARD_SHORTCUTS: 29, + ADD_EDIT_PRODUCT: 30, + AI_HUB_CHAT: 31, + TOPICS_CHECKLIST: 32, + LEARNING_SUMMARY: 33, + CATALOG_PRODUCT_DETAILS: 34, + AI_HOME: 35, + MESSAGE: 36, + KNOWLEDGE_REPO: 37, + COACHING_INDICATOR: 38, + SPAM_FOLDER: 39, + SAMPLE_RESPONSE_BOTTOMSHEET: 40, + CHAT_BANNER: 41 + } + ], + extraAttributes: [4, 'string'], + oppositePlatform: [ + 5, + { + CONSUMER: 0, + BUSINESS: 1 + } + ], + prevSurface: [ + 14, + { + CHAT: 1, + CHATLIST: 2, + GALLERY: 3, + COMMUNITY_HOME: 4, + COMMUNITY_TAB: 5, + COMMUNITY_NAV: 6, + COMMUNITY_NAV_SHEET: 7, + COMMUNITY_SETTINGS: 8, + GROUP_INFO: 9, + NOTIFICATION: 10, + EXPRESSIONS_EMOJI: 11, + INVITE_NON_WA_CONTACT: 12, + CHAT_INFO_PAGE: 13, + NOTES_PROMPT: 14, + CHAT_THREAD: 15, + SEARCH_FILTER: 16, + TOOL_LIST_ITEM: 17, + GEN_AI_AGENT_NUX_SCREEN: 18, + GEN_AI_AGENT_NUX_TOS_SCREEN: 19, + GEN_AI_AGENT_NUX_BIZ_INFO_SCREEN: 20, + GEN_AI_AGENT_NUX_AUTHENTICATION_SCREEN: 21, + GEN_AI_MORE_BIZ_INFO_SCREEN: 22, + GEN_AI_AUTOMATIC_REPLIES_SCREEN: 23, + GEN_AI_COMMON_QUESTIONS_SCREEN: 24, + GEN_AI_READY_SCREEN: 25, + OVERFLOW_MENU: 26, + BROADCAST_LIST_LANDING_PAGE: 27, + BANNER_FROM_EXISTING_BCL: 28, + BANNER_FROM_NEW_BCL: 29, + COMPOSER: 30, + CONFIRM_EXIT_NOTE_DIALOGUE: 31, + VERIFY_EMAIL: 32, + EMAIL_VERIFICATION_CODE_SEND_ERROR_PROMPT: 33, + INCORRECT_EMAIL_VERIFICATION_CODE_PROMPT: 34, + EMAIL_CODE_VERIFICATION_ERROR_PROMPT: 35, + EMAIL_VERIFICATION: 36, + NOT_MY_EMAIL_PROMPT: 37, + REMOVE_EMAIL_ERROR_PROMPT: 38, + REMOVE_EMAIL: 39, + STICKER_TRAY_IN_CHAT: 40, + STICKER_SEARCH_CHAT: 41, + BUSINESS_HOME_PAGE: 42, + BROADCAST_LIST_AUDIENCE_PAGE: 43, + GEN_AI_WEB_ONBOARDING_EDUCATION: 44, + GEN_AI_WEB_ONBOARDING_QR_CODE: 45, + GEN_AI_WEB_ONBOARDING_SUCCESS: 46, + GEN_AI_SETTINGS_HOME_SCREEN: 47, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_SCREEN: 48, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_EDIT_SCREEN: 49, + GEN_AI_SETTINGS_BIZ_INFO_SCREEN: 50, + GEN_AI_SETTINGS_BIZ_INFO_EDIT_SCREEN: 51, + GEN_AI_SETTINGS_AUTO_REPLY_SCREEN: 52, + GEN_AI_SETTINGS_ATUO_REPLY_TYPE_EDIT_SCREEN: 53, + GEN_AI_SETTINGS_AUTO_REPLY_TIME_EDIT_SCREEN: 54, + GEN_AI_SETTINGS_FAQ_SCREEN: 55, + GEN_AI_SETTINGS_FAQ_EDIT_INFO_SCREEN: 56, + GEN_AI_SETTINGS_ADD_NEW_CONTACT_SCREEN: 57, + GEN_AI_SETTINGS_ADD_NEW_BUSINESS_INFO: 58, + GEN_AI_SETTINGS_DISCONNECT: 59, + ACCOUNT_SETTINGS: 60, + CREATE_BIZ_PROFILE: 61, + CREATE_PASS_KEY: 62, + ADD_EMAIL: 63, + VERIFY_NEW_EMAIL: 64, + INITIALIZING_ACCOUNT: 65, + GEN_AI_SETTINGS_DYI: 66, + GEN_AI_SETTINGS_LEAD_GEN_QUESTIONS: 67, + CATALOG_MANAGER: 68, + CATALOG_SETTINGS: 69, + FB_ACCOUNT_CONFIRMATION_BOTTOM_SHEET: 70, + CONNECT_CATALOG_SELECTION: 71, + REPLACE_CATALOG_CONFIRMATION_PROMPT: 72, + FB_LOGIN_BOTTOM_SHEET: 73, + CONNECTED_CATALOG_DETAILS_BOTTOM_SHEET: 74, + CONFIRM_DISCONNECT_CATALOG_BOTTOM_SHEET: 75, + GIF_EXPRESSIONS_TRAY: 76, + BUSINESS_PROFILE_DESCRIPTION_GENAI_LOADING: 77, + BUSINESS_PROFILE_DESCRIPTION_GENAI: 78, + SELECT_BIZ_CATEGORY: 79, + SEARCH_BIZ_CATEGORY_BOTTOM_SHEET: 80, + ADD_BIZ_HOURS: 81, + SELECT_BIZ_HOURS_BOTTOM_SHEET: 82, + ADD_PROFILE_PHOTO: 83, + ADD_BIZ_DISCOVERY_INFO: 84, + ADD_BIZ_DESCRIPTION: 85, + GEN_AI_WEB_ONBOARDING_AUTHENTICATION: 86, + GEN_AI_COACHING: 87, + PRODUCT_DETAILS: 88, + ORIGIN_COUNTRY: 89, + IMPORTER_INFO: 90, + IMPORTER_COUNTRY: 91, + EDIT_BIZ_PROFILE: 92, + GEN_AI_LEARNING_SUMMARY: 93, + GEN_AI_KNOWLEDGE_EDIT: 94, + ADD_ITEM: 95, + EDIT_ITEM: 96, + GEN_AI_AI_HUB_CHECKLIST: 97, + GEN_AI_AI_HUB_CHAT: 98, + GEN_AI_AI_HUB_HOME: 99, + GEN_AI_AI_HUB_ADD_BUSINESS_INFO: 100, + GEN_AI_AI_HUB_ADD_PRODUCT_INFO: 101, + GEN_AI_AI_HUB_ADD_PURCHASING_INFO: 102, + GEN_AI_AGENT_EDIT_FIELD_BOTTOM_SHEET: 103, + GEN_AI_AI_HUB_KNOWLEDGE_REPO: 104, + CONNECT_CATALOG_NUX_BOTTOM_SHEET: 105, + GENAI_AGENT_AUTO_REPLY_CONFIRMATION_DIALOG: 106, + GENAI_AGENT_AUTO_REPLY_ERROR_DIALOG: 107, + FB_WEB_LOGIN: 108, + GENAI_AGENT_COACHING_INDICATOR_BOTTOMSHEET: 109, + WATCH_LEARNING_VIDEO: 110, + GEN_AI_BESTSELLERS: 111, + GEN_AI_AI_HUB_KNOWLEDGE_RESOURCE: 112, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_SELECTION: 113, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_MANUAL: 114, + DIRECT_MIGRATION_AVAILABILITY: 115, + ACCESS_CONTACT_AND_MEDIA_PROMPT: 116, + ACCESS_CONTACT_PROMPT: 117, + ACCESS_AUDIO_MEDIA_PROMPT: 118, + ACCESS_VISUAL_MEDIA_PROMPT: 119, + NOT_ENOUGH_SPACE_WARNING: 120, + VERIFY_OTP: 121, + DIRECT_MIGRATION_IN_PROGRESS: 122, + DIRECT_MIGRATION_FAILED: 123, + ACCOUNT_BACKUP_CHECK: 124, + ACCESS_BACKUP_PERMISSION_PROMPT: 125, + RESTORE_OR_TRANFER_CHAT: 126, + ENTER_PHONE_NUMBER: 127, + CHECK_USERNAME_AND_PIN: 128, + CHECK_USERNAME: 129, + ONBOARDING_USERNAME_UPDATE_TOAST: 130, + ONBOARDING_USERNAME_PIN_REMOVE_TOAST: 131, + LABEL_LIST: 132, + LABEL_DETAILS: 133, + LABEL_APPLICATION: 134, + GEN_AI_AGENT_HANDOFF_LIST_CONFIG: 135, + DOCUMENTS_PICKER: 136, + DOCUMENTS_PREVIEW: 137 + } + ], + recipientSize: [12, 'integer'], + seqId: [7, 'integer'], + smbFeatureName: [ + 8, + { + NOTES: 0, + GEN_AI_AGENT: 1, + BROADCAST_LIST: 2, + BIZ_APP_ONBOARDING: 3, + BUSINESS_TOOLS_HOME: 4, + CATALOG: 5, + BUSINESS_PROFILE: 6, + LEARNING_HUB: 7 + } + ], + smbUserActionType: [ + 13, + { + VIEW: 0, + CLICK: 1, + ENTER: 2, + SCROLL: 3, + SCAN: 4, + API: 5, + EDIT: 6, + DELETE: 7, + SEARCH: 8, + DISMISS: 9 + } + ], + smbUserSessionId: [9, 'string'], + surface: [ + 10, + { + CHAT: 1, + CHATLIST: 2, + GALLERY: 3, + COMMUNITY_HOME: 4, + COMMUNITY_TAB: 5, + COMMUNITY_NAV: 6, + COMMUNITY_NAV_SHEET: 7, + COMMUNITY_SETTINGS: 8, + GROUP_INFO: 9, + NOTIFICATION: 10, + EXPRESSIONS_EMOJI: 11, + INVITE_NON_WA_CONTACT: 12, + CHAT_INFO_PAGE: 13, + NOTES_PROMPT: 14, + CHAT_THREAD: 15, + SEARCH_FILTER: 16, + TOOL_LIST_ITEM: 17, + GEN_AI_AGENT_NUX_SCREEN: 18, + GEN_AI_AGENT_NUX_TOS_SCREEN: 19, + GEN_AI_AGENT_NUX_BIZ_INFO_SCREEN: 20, + GEN_AI_AGENT_NUX_AUTHENTICATION_SCREEN: 21, + GEN_AI_MORE_BIZ_INFO_SCREEN: 22, + GEN_AI_AUTOMATIC_REPLIES_SCREEN: 23, + GEN_AI_COMMON_QUESTIONS_SCREEN: 24, + GEN_AI_READY_SCREEN: 25, + OVERFLOW_MENU: 26, + BROADCAST_LIST_LANDING_PAGE: 27, + BANNER_FROM_EXISTING_BCL: 28, + BANNER_FROM_NEW_BCL: 29, + COMPOSER: 30, + CONFIRM_EXIT_NOTE_DIALOGUE: 31, + VERIFY_EMAIL: 32, + EMAIL_VERIFICATION_CODE_SEND_ERROR_PROMPT: 33, + INCORRECT_EMAIL_VERIFICATION_CODE_PROMPT: 34, + EMAIL_CODE_VERIFICATION_ERROR_PROMPT: 35, + EMAIL_VERIFICATION: 36, + NOT_MY_EMAIL_PROMPT: 37, + REMOVE_EMAIL_ERROR_PROMPT: 38, + REMOVE_EMAIL: 39, + STICKER_TRAY_IN_CHAT: 40, + STICKER_SEARCH_CHAT: 41, + BUSINESS_HOME_PAGE: 42, + BROADCAST_LIST_AUDIENCE_PAGE: 43, + GEN_AI_WEB_ONBOARDING_EDUCATION: 44, + GEN_AI_WEB_ONBOARDING_QR_CODE: 45, + GEN_AI_WEB_ONBOARDING_SUCCESS: 46, + GEN_AI_SETTINGS_HOME_SCREEN: 47, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_SCREEN: 48, + GEN_AI_SETTINGS_ADDITIONAL_BIZ_INFO_EDIT_SCREEN: 49, + GEN_AI_SETTINGS_BIZ_INFO_SCREEN: 50, + GEN_AI_SETTINGS_BIZ_INFO_EDIT_SCREEN: 51, + GEN_AI_SETTINGS_AUTO_REPLY_SCREEN: 52, + GEN_AI_SETTINGS_ATUO_REPLY_TYPE_EDIT_SCREEN: 53, + GEN_AI_SETTINGS_AUTO_REPLY_TIME_EDIT_SCREEN: 54, + GEN_AI_SETTINGS_FAQ_SCREEN: 55, + GEN_AI_SETTINGS_FAQ_EDIT_INFO_SCREEN: 56, + GEN_AI_SETTINGS_ADD_NEW_CONTACT_SCREEN: 57, + GEN_AI_SETTINGS_ADD_NEW_BUSINESS_INFO: 58, + GEN_AI_SETTINGS_DISCONNECT: 59, + ACCOUNT_SETTINGS: 60, + CREATE_BIZ_PROFILE: 61, + CREATE_PASS_KEY: 62, + ADD_EMAIL: 63, + VERIFY_NEW_EMAIL: 64, + INITIALIZING_ACCOUNT: 65, + GEN_AI_SETTINGS_DYI: 66, + GEN_AI_SETTINGS_LEAD_GEN_QUESTIONS: 67, + CATALOG_MANAGER: 68, + CATALOG_SETTINGS: 69, + FB_ACCOUNT_CONFIRMATION_BOTTOM_SHEET: 70, + CONNECT_CATALOG_SELECTION: 71, + REPLACE_CATALOG_CONFIRMATION_PROMPT: 72, + FB_LOGIN_BOTTOM_SHEET: 73, + CONNECTED_CATALOG_DETAILS_BOTTOM_SHEET: 74, + CONFIRM_DISCONNECT_CATALOG_BOTTOM_SHEET: 75, + GIF_EXPRESSIONS_TRAY: 76, + BUSINESS_PROFILE_DESCRIPTION_GENAI_LOADING: 77, + BUSINESS_PROFILE_DESCRIPTION_GENAI: 78, + SELECT_BIZ_CATEGORY: 79, + SEARCH_BIZ_CATEGORY_BOTTOM_SHEET: 80, + ADD_BIZ_HOURS: 81, + SELECT_BIZ_HOURS_BOTTOM_SHEET: 82, + ADD_PROFILE_PHOTO: 83, + ADD_BIZ_DISCOVERY_INFO: 84, + ADD_BIZ_DESCRIPTION: 85, + GEN_AI_WEB_ONBOARDING_AUTHENTICATION: 86, + GEN_AI_COACHING: 87, + PRODUCT_DETAILS: 88, + ORIGIN_COUNTRY: 89, + IMPORTER_INFO: 90, + IMPORTER_COUNTRY: 91, + EDIT_BIZ_PROFILE: 92, + GEN_AI_LEARNING_SUMMARY: 93, + GEN_AI_KNOWLEDGE_EDIT: 94, + ADD_ITEM: 95, + EDIT_ITEM: 96, + GEN_AI_AI_HUB_CHECKLIST: 97, + GEN_AI_AI_HUB_CHAT: 98, + GEN_AI_AI_HUB_HOME: 99, + GEN_AI_AI_HUB_ADD_BUSINESS_INFO: 100, + GEN_AI_AI_HUB_ADD_PRODUCT_INFO: 101, + GEN_AI_AI_HUB_ADD_PURCHASING_INFO: 102, + GEN_AI_AGENT_EDIT_FIELD_BOTTOM_SHEET: 103, + GEN_AI_AI_HUB_KNOWLEDGE_REPO: 104, + CONNECT_CATALOG_NUX_BOTTOM_SHEET: 105, + GENAI_AGENT_AUTO_REPLY_CONFIRMATION_DIALOG: 106, + GENAI_AGENT_AUTO_REPLY_ERROR_DIALOG: 107, + FB_WEB_LOGIN: 108, + GENAI_AGENT_COACHING_INDICATOR_BOTTOMSHEET: 109, + WATCH_LEARNING_VIDEO: 110, + GEN_AI_BESTSELLERS: 111, + GEN_AI_AI_HUB_KNOWLEDGE_RESOURCE: 112, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_SELECTION: 113, + GEN_AI_AI_HUB_SAMPLE_RESPONSE_MANUAL: 114, + DIRECT_MIGRATION_AVAILABILITY: 115, + ACCESS_CONTACT_AND_MEDIA_PROMPT: 116, + ACCESS_CONTACT_PROMPT: 117, + ACCESS_AUDIO_MEDIA_PROMPT: 118, + ACCESS_VISUAL_MEDIA_PROMPT: 119, + NOT_ENOUGH_SPACE_WARNING: 120, + VERIFY_OTP: 121, + DIRECT_MIGRATION_IN_PROGRESS: 122, + DIRECT_MIGRATION_FAILED: 123, + ACCOUNT_BACKUP_CHECK: 124, + ACCESS_BACKUP_PERMISSION_PROMPT: 125, + RESTORE_OR_TRANFER_CHAT: 126, + ENTER_PHONE_NUMBER: 127, + CHECK_USERNAME_AND_PIN: 128, + CHECK_USERNAME: 129, + ONBOARDING_USERNAME_UPDATE_TOAST: 130, + ONBOARDING_USERNAME_PIN_REMOVE_TOAST: 131, + LABEL_LIST: 132, + LABEL_DETAILS: 133, + LABEL_APPLICATION: 134, + GEN_AI_AGENT_HANDOFF_LIST_CONFIG: 135, + DOCUMENTS_PICKER: 136, + DOCUMENTS_PREVIEW: 137 + } + ], + userActionTarget: [11, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'LwiScreen', + id: 2772, + props: { + adContentRecommendation: [ + 41, + { + REGULAR: 1, + RECOMMENDED: 2 + } + ], + adMediaTemplateName: [61, 'string'], + adMediaTypeSelected: [ + 40, + { + IMAGE: 1, + VIDEO: 2 + } + ], + adsContentSelected: [ + 42, + { + LWI_ADS_CONTENT_TYPE_PRODUCT: 1, + LWI_ADS_CONTENT_TYPE_STATUS: 2, + LWI_ADS_CONTENT_TYPE_DEVICE_MEDIA: 3, + LWI_ADS_CONTENT_TYPE_BUSINESS_PROFILE_PIC: 4, + LWI_ADS_CONTENT_TYPE_CAMERA: 9, + LWI_ADS_CONTENT_TYPE_RECENTLY_USED_MEDIA: 10, + LWI_ADS_CONTENT_TYPE_CATALOGS_ALL: 11, + LWI_ADS_CONTENT_TYPE_STATUSES_ALL: 12, + LWI_ADS_CONTENT_TYPE_RECREATION_MEDIA: 13, + LWI_ADS_CONTENT_DRAFT_AD_NUX: 14 + } + ], + alertCount: [33, 'integer'], + audienceType: [ + 45, + { + REGION: 1, + MAP: 2 + } + ], + billingStatus: [ + 36, + { + UNKNOWN: 1, + NO_ACTION_REQUIRED: 2, + HAS_PENDING_ACTIONS: 3 + } + ], + createAdEnabled: [12, 'boolean'], + ctwaAdAccountType: [ + 58, + { + CTWA_FB_PAGE_LINKED_ACCOUNT: 0, + CTWA_FB_PAGELESS_ACCOUNT: 1, + CTWA_WA_AD_ACCOUNT: 2 + } + ], + ctwaLoginType: [ + 59, + { + CTWA_LOGIN_TYPE_FB_NATIVE: 0, + CTWA_LOGIN_TYPE_FB_WEB: 1, + CTWA_LOGIN_TYPE_WA_AD_ACCOUNT: 2 + } + ], + defaultAdsContentSelected: [ + 9, + { + LWI_ADS_CONTENT_TYPE_PRODUCT: 1, + LWI_ADS_CONTENT_TYPE_STATUS: 2, + LWI_ADS_CONTENT_TYPE_DEVICE_MEDIA: 3, + LWI_ADS_CONTENT_TYPE_BUSINESS_PROFILE_PIC: 4, + LWI_ADS_CONTENT_TYPE_CAMERA: 9, + LWI_ADS_CONTENT_TYPE_RECENTLY_USED_MEDIA: 10, + LWI_ADS_CONTENT_TYPE_CATALOGS_ALL: 11, + LWI_ADS_CONTENT_TYPE_STATUSES_ALL: 12, + LWI_ADS_CONTENT_TYPE_RECREATION_MEDIA: 13, + LWI_ADS_CONTENT_DRAFT_AD_NUX: 14 + } + ], + defaultAudienceLocationType: [ + 57, + { + CITY_LEVEL: 1, + COUNTRY_LEVEL: 2 + } + ], + itemCount: [39, 'integer'], + lwiAdCampaignId: [46, 'string'], + lwiAdsIdentityType: [ + 22, + { + PAGE: 1, + WHATSAPP: 2 + } + ], + lwiAlertReason: [ + 6, + { + LWI_ERROR_CATALOG_LIST_FB_PAGE_NOT_LINKED: 1, + LWI_ERROR_CATALOG_LIST_EMPTY: 2, + LWI_ERROR_CATALOG_LIST_NO_ELIGIBLE_PRODUCT: 3, + LWI_ERROR_UNSUPPORTED_OLD_FB_VERSION: 4, + LWI_ERROR_STATUS_EMPTY: 5, + LWI_NONCE_ERROR: 6, + LWI_ERROR_AD_ACCOUNT_CURRENCY_MISMATCH: 7, + LWI_AD_CREATION_ERROR: 8, + LWI_MISSING_PAYMENT_METHOD: 9, + LWI_NO_INTERNET_CONNECTION: 10, + LWI_SPECIAL_ADS_CATEGORY: 11, + LWI_LOGIN_ON_FACEBOOK: 12, + LWI_REMOVE_FB_ACCOUNT: 13, + LWI_WEBSITE_NOT_SAFE: 14, + LWI_WEBSITE_NOT_AVAILABLE: 15, + LWI_NON_HTTPS: 16, + LWI_FB_WEB_LOGIN_TOKEN_FETCH_ERROR: 17, + LWI_RETRY_WEB_LOGIN_DIALOG_ERROR: 18, + LWI_UNABLE_TO_REDIRECT_BROWSER_NOT_FOUND: 19, + LWI_AD_ACCOUNT_SWITCH_ERROR: 20, + LWI_POLICY_REVIEW_REQUIRED: 21, + LWI_SOMETHING_WENT_WRONG: 22, + LWI_MAXIMUM_RETRY_CODE_REACH: 23, + LWI_ERROR_WRONG_CODE: 24, + LWI_ERROR_INCORRECT_EMAIL_FORMAT: 25, + LWI_NO_RESULTS_FOUND: 26, + LWI_ACTION_ESTIMATED_REACH_FAILED_TO_LOAD: 27, + LWI_ACTION_INVALID_USER: 28, + LWI_LOCATION_ACCESS_PERMISSION: 29, + LWI_ACTION_INVALID_MEDIA_SELECTION: 30, + LWI_ACTION_SCREEN_DESTROYED: 31, + LWI_ACTION_INFO_BUTTON_TAPPED: 32, + LWI_INTEGRITY_ERROR: 33, + LWI_INVALID_STATE: 34, + LWI_FAILED_TO_ENROLL_COUPON: 35, + LWI_CHANGES_NOT_SAVED: 36, + LWI_LOCATION_SYSTEM_SETTING_RESOLUTION_REQUIRED: 37, + LWI_ACTION_CURRENT_LOCATION_FAILED: 38, + LWI_BILLING_RESOURCE_HTTP_ERROR: 39, + LWI_BILLING_WEBVIEW_NETWORK_ERROR_SCREEN_SHOWN: 40, + LWI_BILLING_EXCEPTION_SERIALIZING_RESPONSE: 41, + LWI_BILLING_EXCEPTION_FETCHING_RESOURCE_FROM_CACHE_OR_NETWORK: 42, + LWI_GRAPHQL_ERROR: 43, + LWI_EDIT_GOAL_ALERT: 45, + LWI_ACTION_ESTIMATED_CONVERSATIONS_FAILED_TO_LOAD: 46, + LWI_UPLOAD_MEDIA_FAILED: 47 + } + ], + lwiBudgetInLocal: [15, 'integer'], + lwiBudgetOptionsInLocal: [54, 'string'], + lwiCtwaAdCtaType: [ + 24, + { + PROMOTE_AGAIN: 1, + PAUSE_AD: 2, + RESUME_AD: 3, + ADD_BUDGET: 4, + VIEW_AD: 5, + COMPLETE_PAYMENT: 6, + RECREATE_AD_WITH_RECOMMENDATION: 7, + EDIT_AD_WITH_RECOMMENDATION: 8, + DELETE_AD: 9 + } + ], + lwiCtwaAdStatusType: [ + 25, + { + ACTIVE: 1, + SCHEDULED: 2, + PAUSED: 3, + NOT_DELIVERING: 4, + REJECTED: 5, + FINISHED: 6, + IN_REVIEW: 7, + COMPLETED: 8, + EXTENDABLE: 9, + UNABLE_TO_CREATE: 10, + LIMITED_DELIVERY: 11 + } + ], + lwiCurrency: [16, 'string'], + lwiDefaultBudgetInLocal: [17, 'integer'], + lwiDefaultDurationInDays: [18, 'integer'], + lwiDefaultTargetingSpec: [ + 19, + { + UNKOWN: 1, + MATCHES_TARGETING_SPEC: 2, + DIFFERS_FROM_TARGETING_SPEC: 3 + } + ], + lwiDurationInDays: [20, 'integer'], + lwiEventSequenceNumber: [2, 'integer'], + lwiExtras: [30, 'string'], + lwiFlowId: [1, 'string'], + lwiIsFbAppInstalled: [27, 'boolean'], + lwiIsIgAppInstalled: [51, 'boolean'], + lwiLocationTypesSetOnAudienceSelection: [55, 'string'], + lwiMaxDurationInDays: [52, 'integer'], + lwiMinDurationInDays: [53, 'integer'], + lwiScreenAction: [ + 5, + { + LWI_ACTION_VIEW: 1, + LWI_ACTION_BACK_BUTTON_TAPPED: 2, + LWI_ACTION_CREATE_ADS_TAPPED: 3, + LWI_ACTION_MANAGE_ADS_TAPPED: 4, + LWI_ACTION_LEARN_MORE_TAPPED: 5, + LWI_ACTION_PRODUCT_SELECTED: 6, + LWI_ACTION_CONTINUE_TAPPED: 7, + LWI_MANAGE_ADS_DISPLAYED: 8, + LWI_ALERT: 9, + LWI_ACTION_PROMOTE_CATALOG_ITEMS_TAPPED: 10, + LWI_ACTION_PROMOTE_STATUSES_TAPPED: 11, + LWI_ACTION_PROMOTE_NEW_CONTENT_TAPPED: 12, + LWI_ACTION_CONTACT_US_TAPPED: 13, + LWI_ACTION_HELP_TAPPED: 14, + LWI_ACTION_STATUS_SELECTED: 15, + LWI_ACTION_PRODUCT_DESELECTED: 16, + LWI_ACTION_NUX_CONTINUE_TAPPED: 17, + LWI_ACTION_RECOMMENDED_CATALOG_ITEM_SELECTED: 18, + LWI_ACTION_RECOMMENDED_STATUS_ITEM_SELECTED: 19, + LWI_ACTION_NO_CATALOG_TO_ADVERTISE_TAPPED: 20, + LWI_ACTION_NO_STATUS_TO_ADVERTISE_TAPPED: 21, + LWI_CREATE_AD_DISPLAYED: 22, + LWI_ACTION_CONTINUE_TO_MEDIA_SELECTOR_TAPPED: 23, + LWI_ACTION_AD_DESCRIPTION_TAPPED: 24, + LWI_ACTION_AD_DESCRIPTION_SAVE_TAPPED: 25, + LWI_ACTION_AD_DESCRIPTION_CANCEL_TAPPED: 26, + LWI_ACTION_EDIT_BUDGET_TAPPED: 27, + LWI_ACTION_DAILY_BUDGET_SELECTED: 28, + LWI_ACTION_CUSTOM_DAILY_BUDGET_TAPPED: 29, + LWI_ACTION_CUSTOM_DAILY_BUDGET_SAVE_TAPPED: 30, + LWI_ACTION_CUSTOM_DAILY_BUDGET_CANCEL_TAPPED: 31, + LWI_ACTION_AD_DURATION_UPDATED: 32, + LWI_ACTION_EDIT_AUDIENCE_TAPPED: 33, + LWI_ACTION_EDIT_AUDIENCE_LOCATION_TAPPED: 34, + LWI_ACTION_AUDIENCE_LOCATION_SELECTED: 35, + LWI_ACTION_AUDIENCE_LOCATION_DESELECTED: 36, + LWI_ACTION_AUDIENCE_AGE_RANGE_UPDATED: 37, + LWI_ACTION_AUDIENCE_GENDER_SELECTED: 38, + LWI_ACTION_SPECIAL_ADS_CATEGORY_TAPPED: 39, + LWI_ACTION_SPECIAL_ADS_CATEGORY_CONTINUE_TAPPED: 40, + LWI_ACTION_SPECIAL_ADS_CATEGORY_CANCEL_TAPPED: 41, + LWI_ACTION_ADD_PAYMENT_TAPPED: 42, + LWI_ACTION_CREATE_AD_TAPPED: 43, + LWI_ACTION_EDIT_ACCOUNT_TAPPED: 44, + LWI_ACTION_EDIT_PAYMENT_TAPPED: 45, + LWI_ACTION_REMOVE_ACCOUNT_TAPPED: 46, + LWI_ACTION_REMOVE_ACCOUNT_REMOVE_TAPPED: 47, + LWI_ACTION_REMOVE_ACCOUNT_CANCEL_TAPPED: 48, + LWI_ACTION_CONSENT_CONTINUE_TAPPED: 49, + LWI_ACTION_AD_CREATED_BANNER_IMPRESSION: 50, + LWI_ACTION_AD_CREATED_BANNER_CLICK: 51, + LWI_ACTION_AD_CREATED_BANNER_DISMISS: 52, + LWI_ACTION_AD_SETTINGS_TAPPED: 53, + LWI_ACTION_REFRESH_AD_DETAILS_SCREEN: 54, + LWI_ACTION_CONTINUE_TO_AD_SETTINGS_WITH_RECOMMENDED_STATUS_SELECTED: 55, + LWI_ACTION_CONTINUE_TO_AD_SETTINGS_WITH_PHONE_MEDIA_SELECTED: 56, + LWI_ACTION_MEDIA_SELECTION_COMPLETE: 57, + LWI_ACTION_CROP_IMAGE_DONE: 58, + LWI_ACTION_CONSENT_NOT_YOU_TAPPED: 59, + LWI_ACTION_SWITCH_ACCOUNT_TAPPED: 60, + LWI_ACTION_SWITCH_ACCOUNT_SWITCH_TAPPED: 61, + LWI_ACTION_SWITCH_ACCOUNT_CANCEL_TAPPED: 62, + LWI_ACTION_WEB_LOGIN_PAGE_LOADED: 63, + LWI_ACTION_WEB_LOGIN_SUCCESS: 64, + LWI_ACTION_CONSENT_LOGIN_TAPPED: 65, + LWI_ACTION_WEB_LOGIN_CANCELLED: 66, + LWI_ACTION_WEB_LOGIN_TRY_AGAIN: 67, + LWI_NEW_MANAGE_ADS_TAB_ADS_LOADED: 68, + LWI_NEW_MANAGE_ADS_TAB_AD_CLICKED: 69, + LWI_NEW_MANAGE_ADS_TAB_AD_CTA_MENU_CLICKED: 70, + LWI_NEW_MANAGE_ADS_TAB_AD_CTA_ITEM_CLICKED: 71, + LWI_NEW_MANAGE_ADS_TAB_EDUCATION_BANNER_SHOWN: 72, + LWI_NEW_MANAGE_ADS_TAB_EDUCATION_BANNER_CANCELLED: 73, + LWI_NEW_MANAGE_ADS_TAB_CONSENT_SHOWN: 74, + LWI_NEW_MANAGE_ADS_TAB_CONSENT_ACCEPTED: 75, + LWI_NEW_MANAGE_ADS_TAB_CONSENT_DIFFERENT_USER_SIGN_IN: 76, + LWI_NEW_MANAGE_ADS_TAB_WEB_LOGIN_CONSENT_SCREEN_SHOWN: 77, + LWI_NEW_MANAGE_ADS_TAB_CONSENT_WEB_LOGIN_SIGN_IN: 78, + LWI_NEW_MANAGE_ADS_TAB_WEB_LOGIN_SUCCESSFUL: 79, + LWI_MANAGE_ADS_TAPPED_V2: 80, + LWI_NEW_MANAGE_ADS_TAB_AD_CREATED_BANNER_CANCELLED: 81, + LWI_NEW_MANAGE_ADS_TAB_AD_CREATED_BANNER_BACK_PRESED: 82, + LWI_NO_PERMISSION_TO_MANAGE_ADS_DIALOG_SHOWN: 83, + LWI_SWITCH_ACCCOUNT_ON_NO_MANAGE_ADS_PERMISSION_DIALOG_PRESSED: 84, + LWI_LOGIN_PRESSED_ON_SESSION_EXPIRED: 85, + LWI_ASYNC_DATA: 86, + LWI_ACTION_AD_ACCOUNTS_TAPPED: 87, + LWI_ACTION_AD_ACCOUNT_SELECTED: 88, + LWI_ACTION_AD_ACCOUNT_SWITCH_SUCCESS: 89, + LWI_ACTION_AD_ACCOUNT_SWITCH_CANCELLED: 90, + LWI_ACTION_SELECT_SAVED_AUDIENCE: 91, + LWI_ACTION_SELECT_DEFAULT_AUDIENCE: 92, + LWI_ACTION_EDIT_DEFAULT_AUDIENCE: 93, + LWI_ACTION_NON_DISCRIMINATION_POLICY_ACCEPT_TAPPED: 94, + LWI_ACTION_POLICY_REVIEW_REQUIRED_EXIT_TAPPED: 95, + LWI_ACTION_POLICY_REVIEW_REQUIRED_REVIEW_TAPPED: 96, + LWI_ACTION_NON_DISCRIMINATION_POLICY_ACCEPT_SUCCESS: 97, + LWI_ACTION_NON_DISCRIMINATION_POLICY_CANCELLED: 98, + LWI_ACTION_NON_DISCRIMINATION_POLICY_TRY_AGAIN: 99, + LWI_ACTION_LOADED: 100, + LWI_CTA_MENU_CLICKED: 101, + LWI_ACTION_CTA_ITEM_CLICKED: 102, + LWI_ACTION_AD_PREVIEW_TAPPED: 103, + LWI_AD_PREVIEW_STARTED: 104, + LWI_BILLING_LOADED: 105, + LWI_BILLING_ERROR: 106, + LWI_IMAGE_URL_DETAILS_LOADED: 107, + LWI_ACTION_BILLING_RETRY_TAPPED: 108, + LWI_ACTION_VIEW_DETAILED_INSIGHTS_TAPPED: 109, + LWI_ACTION_VIEW_ADVANCED_AUDIENCE_TAPPED: 110, + LWI_ACTION_PROMOTE_AGAIN_TAPPED: 111, + LWI_ACTION_EDIT_ON_FACEBOOK_TAPPED: 113, + LWI_ACTION_SWIPE_REFRESH: 114, + LWI_ACTION_VIEW_FACEBOOK_AD_PREVIEW: 115, + LWI_ACTION_VIEW_INSTAGRAM_AD_PREVIEW: 116, + LWI_ACTION_NEXT_BUTTON_TAPPED: 117, + LWI_ACTION_LOADING_ERROR: 118, + LWI_ACTION_DIALOG_DISMISSED: 119, + LWI_NETWORK_ERROR_SHOWN: 120, + LWI_GENERIC_ERROR_SHOWN: 121, + LWI_RETRY_BUTTON_TAPPED: 122, + LWI_ACTION_RECOMMENDED_BUINESS_POFILE_ITEM_SELECTED: 123, + LWI_ACTION_BUINESS_POFILE_ITEM_SELECTED: 124, + LWI_ACTION_CONTINUE_TO_AD_SETTINGS_WITH_RECOMMENDED_BUSINESS_PROFILE_SELECTED: 125, + LWI_ACTION_CONTINUE_TO_AD_SETTINGS_WITH_BUSINESS_PROFILE_SELECTED: 126, + LWI_ACTION_EDIT_IMAGE_DONE: 127, + LWI_ACTION_WA_PAGELESS_BUTTON_TAPPED: 128, + LWI_ACTION_SWITCH_FACEBOOK_ACCOUNT_BUTTON_TAPPED: 129, + LWI_ACTION_TRY_AGAIN_DIALOG_BUTTON_TAPPED: 130, + LWI_ACTION_CANCEL_DIALOG_BUTTON_TAPPED: 131, + LWI_PAGE_PERMISSION_ERROR_RESOLVED: 132, + LWI_PAGE_PERMISSION_ERROR_UNRESOLVED: 133, + LWI_ACTION_PROMOTE_TEXT_TAPPED: 134, + LWI_ACTION_EXIT_CONF_SHOWN: 135, + LWI_ACTION_EXIT_CONF_EXIT_TAPPED: 136, + LWI_ACTION_EXIT_CONF_RETURN_TO_AD_TAPPED: 137, + AD_WITH_ALERT_DISPLAYED: 138, + LWI_ACTION_CONTINUE_TO_AD_SETTINGS_WITH_CAMERA_SELECTED: 139, + LWI_ACTION_CONTINUE_TO_AD_SETTINGS_WITH_GALLERY_SELECTED: 140, + LWI_ACTION_CAMERA_ITEM_SELECTED: 141, + LWI_ACTION_GALLERY_ITEM_SELECTED: 142, + LWI_ACTION_CHOOSE_DIFFERENT_MEDIA_CLICKED: 143, + LWI_ACTION_GET_STARTED_CLICKED: 144, + LWI_ACTION_SELECT_PHOTO_FROM_GALLERY: 145, + LWI_ACTION_PUBLISH_FB_PAGE_BUTTON_TAPPED: 146, + LWI_ACTION_ADMIN_RIGHTS_SUB_STEP_VIEW: 147, + LWI_ACTION_SEND_CODE_BUTTON_TAPPED: 148, + LWI_ACTION_OPEN_EMAIL_APP_TAPPED: 149, + LWI_ACTION_CHANGE_EMAIL_TAPPED: 150, + LWI_ACTION_RESEND_TAPPED: 151, + LWI_ACTION_NONCE_SUBMIT: 152, + LWI_ACTION_VERIFY_SUCCESS: 153, + LWI_ACTION_CODE_FIELD_TAPPED: 154, + LWI_ACTION_AD_ACC_SETTINGS_MENU_OPT_TAPPED: 155, + LWI_ACTION_AD_PAYMENTS_ROW_TAPPED: 156, + LWI_ACTION_AD_DESIGN_UPDATE_TAPPED: 157, + LWI_ACTION_AD_SETTINGS_UPDATE_TAPPED: 158, + LWI_ACTION_CANCEL_BUTTON_TAPPED: 159, + LWI_ACTION_SAVE_BUTTON_TAPPED: 160, + LWI_EDIT_AD_ACC_EMAIL_SUCCESS: 161, + LWI_ACTION_AD_APPEAL_BANNER_SHOWN: 164, + LWI_ACTION_APPEAL_REQUEST_REVIEW_TAPPED: 165, + LWI_ACTION_APPEAL_VIEW_STATUS_TAPPED: 166, + LWI_ACTION_APPEAL_LEARN_MORE_TAPPED: 167, + LWI_ACTION_AD_ACCOUNT_APPEAL_BANNER_SHOWN: 168, + LWI_ACTION_SUBMIT_TAPPED: 169, + LWI_MEDIA_PARSING_STARTED: 170, + LWI_MEDIA_PARSING_SUCCESS: 171, + LWI_MEDIA_PARSING_FAILURE: 172, + LWI_ACTION_VIDEO_AD_PREVIEW_AUDIO_MUTE_TAPPED: 174, + LWI_ACTION_VIDEO_AD_PREVIEW_AUDIO_UNMUTE_TAPPED: 175, + SMB_STATUS_UPSELL_BOTTOM_SHEET_DISMISS: 178, + LWI_ACTION_ITEM_SELECTED: 179, + LWI_ACTION_CONTEXTUAL_HELP_OPENED: 180, + LWI_ACTION_EMAIL_INPUT_STARTED: 181, + LWI_ACTION_SEARCH_ADDRESS_TAPPED: 182, + LWI_ACTION_SAVE_MAP_AUDIENCE_TAPPED: 183, + LWI_ACTION_MAP_RADIUS_SELECTED: 184, + LWI_ACTION_MAP_LOCATION_ITEM_TAPPED: 185, + LWI_ACTION_SAVE_MAP_AUDIENCE_SUCCESS: 186, + LWI_ACTION_AUDIENCE_REGION_OPTION_SELECTED: 187, + LWI_ACTION_AUDIENCE_MAP_OPTION_SELECTED: 188, + LWI_ACTION_EDIT_MAP_AUDIENCE_TAPPED: 189, + LWI_ACTION_ESTIMATED_REACH_SUCCESS: 190, + LWI_ACTION_CONTINUE_TO_STATUS_PICKER_SELECTED: 191, + LWI_ACTION_ITEM_DESELECT: 192, + LWI_ACTION_EDIT_MEDIA_CLICKED: 193, + LWI_ACTION_EDIT_MEDIA_COMPLETE: 194, + LWI_ACTION_EDIT_MEDIA_CANCELLED: 195, + LWI_ACTION_AD_CREATION_HUB_DRAFT_AD_TAP: 196, + LWI_ACTION_AD_CREATION_DRAFT_AD_SAVED: 197, + LWI_NEW_MANAGE_ADS_TAB_STARTED_LOADING_ADS: 198, + LWI_MANAGE_ADS_ITEM_MAIN_CTA_IMPRESSION: 199, + LWI_MANAGE_ADS_ITEM_MAIN_CTA_TAP: 200, + LWI_ACTION_WEB_LINK_CLICKED: 201, + LWI_ACTION_NON_DISCRIMINATION_POLICY_HEC_CLICKED: 202, + LWI_ACTION_NON_DISCRIMINATION_POLICY_FULL_CLICKED: 203, + LWI_ACTION_BUDGET_DURATION_INFO_ICON_TAPPED: 204, + LWI_ACTION_AUDIENCE_INFO_ICON_TAPPED: 205, + LWI_ACTION_REVIEW_AD_TAPPED: 206, + LWI_SIMPLIFIED_LOADER_AUTO_DISMISSED: 207, + LWI_PENDING_PAYMENT_REQUEST_STARTED: 208, + LWI_ACTION_LOGIN_PROMPT_FOR_MAP_OPTION_SHOWN: 209, + LWI_ACTION_MAP_USE_CURRENT_LOCATION_TAPPED: 210, + LWI_ACTION_LOCATION_PERMISSION_ACCESS_ALLOW_TAPPED: 211, + LWI_ACTION_LOCATION_PERMISSION_ACCESS_DENY_TAPPED: 212, + LWI_ACTION_ITEM_DESELECTED: 213, + LWI_ACTION_MEDIA_FILTER_APPLIED: 214, + LWI_ACTION_MEDIA_FILTER_CLEARED: 215, + LWI_ACTION_SCREEN_DESTROYED: 216, + LWI_ACTION_GALLERY_REQUEST_PERMISSION_DIALOG_SHOWN: 217, + LWI_ACTION_GALLERY_REQUEST_GRANTED: 218, + LWI_ACTION_GALLERY_REQUEST_DENIED: 219, + LWI_FAST_TRACK_STEP_LOADED: 220, + LWI_FAST_TRACK_STEP_CLOSED: 221, + LWI_CUSTOM_TAB_OPENED: 222, + LWI_CUSTOM_TAB_REDIRECT_RECEIVED: 223, + LWI_ACTION_CURRENT_LOCATION_APPLIED: 224, + LWI_ACTION_PADDED_STATUS_IMAGE_DISPLAYED: 225, + LWI_ACTION_GOOGLE_DIALOG_CANCELLED: 226, + LWI_ACTION_GOOGLE_ACCOUNT_SELECTED: 227, + LWI_ACTION_GOOGLE_SIGNIN_TAPPED: 228, + LWI_ACTION_GOOGLE_ACCOUNT_SELECTION_FAILED: 229, + LWI_ACTION_GOOGLE_ACCOUNT_ONBOARDING_FAILED: 230, + LWI_ACTION_GOOGLE_ACCOUNT_ONBOARDING_SUCCESS: 231, + LWI_ACTION_AD_STATUS_ISSUE_BANNER_SHOWN: 232, + LWI_ACTION_AD_STATUS_ISSUE_BANNER_LEARN_MORE_TAPPED: 233, + LWI_ACTION_CROP_MEDIA_CLICKED: 234, + LWI_ACTION_CROP_MEDIA_COMPLETE: 235, + LWI_ACTION_CROP_MEDIA_CANCELLED: 236, + LWI_ACTION_USE_EMAIL_TAPPED: 237, + LWI_ACTION_USE_FB_TAPPED: 238, + LWI_ACTION_COUPON_PROMOTION_NUX_CONTINUE_TAPPED: 239, + LWI_ACTION_SAVE_CHANGES_DIALOG_OPTION_TAPPED: 240, + LWI_ACTION_GO_BACK_DIALOG_OPTION_TAPPED: 241, + LWI_ACTION_LOCATION_SYSTEM_SETTING_TURN_ON_OK_TAPPED: 242, + LWI_ACTION_LOCATION_SYSTEM_SETTING_TURN_ON_NO_THANKS_TAPPED: 243, + LWI_ACTION_TAP_TO_PAUSE: 244, + LWI_ACTION_RELEASE_TO_RESUME: 245, + LWI_ACTION_NUX_VIDEO_IMPRESSION: 246, + LWI_ACTION_NUX_VIDEO_PLAY_STARTED: 247, + LWI_ACTION_NUX_VIDEO_MUTED: 248, + LWI_ACTION_NUX_VIDEO_UNMUTED: 249, + LWI_ACTION_NUX_VIDEO_PAUSED: 250, + LWI_ACTION_NUX_VIDEO_RESUMED: 251, + LWI_ACTION_NUX_VIDEO_PLAYER_FAILED: 252, + LWI_ACTION_RECOMMENDATION_CARD_SHOWN: 253, + LWI_ACTION_APPLY_RECOMMENDATION_CLICKED: 254, + LWI_ACTION_CANCEL_RECOMMENDATION_CLICKED: 255, + LWI_ACTION_PERFORMACE_INFO_CLICKED: 256, + LWI_ACTION_MAP_PREVIEW_IMPRESSION: 257, + LWI_ACTION_MAP_PREVIEW_SELECTED: 258, + LWI_ACTION_MAP_ZOOM: 259, + LWI_ACTION_MAP_PAN: 260, + LWI_ACTION_AD_GENAI_TAPPED: 261, + LWI_ACTION_VIEW_AD_PREVIEWS_TAPPED: 262, + LWI_ACTION_ADD_MEDIA_TAPPED: 263, + LWI_ACTION_DISCLAIMER_TIP_DISPLAYED: 264, + LWI_ACTION_DISCLAIMER_TIP_CLICKED: 265, + LWI_ACTION_IG_FIRST_BOTTOM_SHEET_DISPLAYED: 266, + LWI_ACTION_IG_FIRST_BOTTOM_SHEET_DISMISSED: 267, + LWI_ACTION_IG_FIRST_BOTTOM_SHEET_LEARN_MORE_TAPPED: 268, + LWI_ACTION_IG_PREVIEW_TAB_DISPLAYED: 269, + LWI_ACTION_IG_FIRST_NUX_DISPLAYED: 270, + LWI_ACTION_IG_DISCLAIMER_TIP_DISMISSED: 271, + LWI_ACTION_IG_FIRST_DISCLAIMER_TIP_DISPLAYED: 272, + LWI_ACTION_IG_FIRST_DISCLAIMER_TIP_CLICKED: 273, + LWI_ACTION_PAYMENT_PENDING_AD_MANAGE_ADS_DISPLAYED: 274, + LWI_ACTION_PAYMENT_PENDING_MANAGE_ADS_CTA_CLICKED: 275, + LWI_ACTION_PAYMENT_PENDING_AD_CREATION_HUB_DISPLAYED: 276, + LWI_ACTION_PAYMENT_PENDING_AD_CREATION_HUB_CLICKED: 277, + LWI_ACTION_TYPEAHEAD_LOADED: 278, + LWI_ACTION_TYPEAHEAD_ERROR: 279, + LWI_ACTION_SUGGESTION_LOADED: 280, + LWI_ACTION_SUGGESTION_ERROR: 281, + LWI_ACTION_TYPEAHEAD_RESULT_TAPPED: 282, + LWI_ACTION_SUGGESTION_RESULT_TAPPED: 283, + LWI_ACTION_INTEREST_UNSELECTED: 284, + LWI_ACTION_ADD_INTEREST_TAPPED: 285, + LWI_ACTION_BOOSTED_COMPONENT_LOADER_SHOWN: 286, + LWI_ACTION_BOOSTED_COMPONENT_LOADER_DISMISSED: 287, + LWI_ACTION_INTEREST_ROW_SHOWN: 288, + LWI_ACTION_SEARCH_TEXT_UPDATED: 289, + LWI_ACTION_TAIWAN_COMPLIANCE_LEARN_MORE_TAPPED: 290, + LWI_ACTION_TAIWAN_COMPLIANCE_ACKNOWLEDGED: 291, + LWI_ACTION_SINGAPORE_COMPLIANCE_MBS_REDIRECT_TAPPED: 292, + LWI_ACTION_SINGAPORE_COMPLIANCE_FB_REDIRECT_TAPPED: 293, + LWI_ACTION_SINGAPORE_COMPLIANCE_CANCEL_TAPPED: 294, + LWI_ACTION_TAIWAN_COMPLIANCE_FINANCE_TOGGLE_SHOWN: 295, + LWI_ACTION_AD_CREATION_FAB_TAPPED: 296, + LWI_NEW_MANAGE_ADS_TAB_AD_CTA_MENU_AD_DETAILS_CLICKED: 297, + LWI_NEW_MANAGE_ADS_TAB_AD_CTA_MENU_EDIT_ON_FACEBOOK_CLICKED: 298, + LWI_NEW_MANAGE_ADS_TAB_AD_CTA_MENU_PAUSE_CLICKED: 299, + LWI_NEW_MANAGE_ADS_TAB_AD_CTA_MENU_RESUME_CLICKED: 300, + LWI_ACTION_PREVIEW_CLICKED: 301, + LWI_ACTION_SEE_ALL_CLICKED: 302, + LWI_ACTION_AD_ACCOUNT_CLICKED: 303, + LWI_ACTION_PAYMENT_METHOD_CLICKED: 304, + LWI_NEW_MANAGE_ADS_TAB_AD_CTA_MENU_DELETE_CLICKED: 305, + LWI_ACTION_LIST_LOAD_ERROR: 306, + LWI_ACTION_SCROLL_TO_END: 307, + LWI_ACTION_RECOMMENDATION_CARD_LOAD_ERROR: 308, + LWI_ACTION_SEE_DETAILS_TAPPED: 309, + LWI_ACTION_INSIGHTS_TILE_TAPPED: 310, + LWI_ACTION_AUDIENCE_TAB_TAPPED: 311, + LWI_ACTION_INTERACTIONS_TAB_TAPPED: 312, + LWI_ACTION_CONVERSATIONS_METRICS_INFO_TAPPED: 313, + LWI_ACTION_LINKS_METRICS_INFO_TAPPED: 314, + LWI_ACTION_REACH_METRICS_INFO_TAPPED: 315, + LWI_ACTION_LOCATION_METRICS_INFO_TAPPED: 316, + LWI_ACTION_GOAL_CHOICE_SCREEN_DISPLAYED: 317, + LWI_ACTION_AWARENESS_GOAL_SELECTED: 318, + LWI_ACTION_ENGAGEMENT_GOAL_SELECTED: 319, + LWI_ACTION_SALES_GOAL_SELECTED: 320, + LWI_ACTION_WESBITE_LINK_SUBMITTED: 321, + LWI_ACTION_CATALOG_LINK_SUBMITTED: 322, + LWI_ACTION_ERROR_ON_WEBSITE_ENTRY: 323, + LWI_ACTION_DRAFT_AD_NUX_VISIBLE: 324, + LWI_ACTION_CONTINUE_DRAFT_AD_CLICKED: 325, + LWI_ACTION_CREATE_NEW_AD_CLICKED: 326, + LWI_ACTION_WESBITE_LINK_SELECTED: 327, + LWI_ACTION_CATALOG_LINK_SELECTED: 328, + LWI_ACTION_CONFIRM_BUTTON_PRESSED: 329, + LWI_ACTION_OUTCOME_WEBSITE_LINK_ENTRY_ERROR: 330, + LWI_ACTION_BUDGET_PRESETS_SHOWN: 332, + LWI_ACTION_BUDGET_PRESET_SELECTED: 333, + LWI_ACTION_BUDGET_PRESETS_NOT_AVAILABLE: 334, + LWI_ACTION_CONSENT_SKIP_TAPPED: 335, + LWI_ADS_HUB_OVERVIEW_PERF_SUMMARY_LOADED: 336, + LWI_ADS_HUB_OVERVIEW_PERF_SUMMARY_LOAD_ERROR: 337, + LWI_ACTION_ADS_HUB_PERF_SUMMARY_DATE_TAPPED: 338, + LWI_ACTION_SKIP_TAPPED: 339, + LWI_ACTION_LOGIN_WITH_FB_TAPPED: 340, + LWI_ACTION_EDIT_GOAL_TAPPED: 341, + LWI_ACTION_EDIT_GOAL_DIALOG_OPTION_TAPPED: 342, + LWI_PAUSE_AD_GATING_BOTTOMSHEET_IMPRESSION: 343, + LWI_PAUSE_AD_GATING_BOTTOMSHEET_PAUSE_AD_TAPPED: 344, + LWI_PAUSE_AD_GATING_BOTTOMSHEET_DISMISSED: 345, + LWI_ACTION_RESUME_AD_TAPPED: 346, + LWI_ACTION_ESTIMATED_CONVERSATIONS_SUCCESS: 347, + LWI_ACTION_TRY_TEMPLATE_CLICKED: 348, + LWI_ACTION_TEMPLATE_APPLIED: 349, + LWI_RESOLVE_PAYMENT_ISSUE_REQUEST_STARTED: 350, + LWI_RESOLVE_PAYMENT_ISSUE_REQUEST_LOADED: 351, + LWI_RESOLVE_PAYMENT_ISSUE_NO_ACTION_REQUIRED: 352, + LWI_SUBMIT_AD_CREATION: 353, + LWI_DRAFT_AD_QP_CARD_DISPLAYED: 354, + LWI_ACTION_DRAFT_AD_QP_CARD_TAP: 355, + LWI_ACTION_DISMISS_DRAFT_AD_QP_CARD: 356, + LWI_ACTION_DRAFT_AD_DISPLAYED: 357, + LWI_ACTION_PRE_BLOKS_LOAD_STARTED: 358 + } + ], + lwiScreenReference: [ + 4, + { + LWI_SCREEN_ADSCREATION_HUB: 1, + LWI_SCREEN_PRODUCT_SELECTOR: 2, + LWI_SCREEN_CATALOG_LIST: 3, + LWI_SCREEN_CONTENT_SELECTOR: 4, + LWI_SCREEN_HELP: 5, + LWI_SCREEN_STATUS_SELECTOR: 6, + LWI_SCREEN_MULTI_PRODUCT_SELECTOR: 7, + LWI_SCREEN_NUX_EDUCATION: 8, + LWI_SCREEN_ADSCREATION_HUB_V2: 9, + LWI_SCREEN_AD_DETAILS: 10, + LWI_SCREEN_FB_CONSENT_CONFIRM: 11, + LWI_SCREEN_ADSCREATION_HUB_MANAGE: 12, + LWI_SCREEN_INSTAGRAM_AD_PREVIEW: 13, + LWI_SCREEN_AD_BUDGET: 14, + LWI_SCREEN_AD_AUDIENCE: 15, + LWI_SCREEN_AD_AUDIENCE_LOCATION: 16, + LWI_SCREEN_AD_SETTINGS: 17, + LWI_SCREEN_WEB_PAYMENT: 18, + LWI_SCREEN_MEDIA_SELECTION_FLOW: 19, + LWI_SCREEN_IMAGE_CROPPING: 20, + LWI_SCREEN_FB_WEB_LOGIN_CONSENT_CONFIRM: 21, + LWI_SCREEN_FB_WEB_LOGIN: 22, + LWI_MANAGE_ADS_TAB: 23, + LWI_MANAGE_ADS_FB_CONSENT: 24, + LWI_MANAGE_ADS_FB_CONSENT_NOT_LOGGED_IN: 25, + LWI_SCREEN_AD_AUDIENCE_LIST: 26, + LWI_SCREEN_NATIVE_NON_DISCRIMINATION_CERTIFICATION: 27, + LWI_MANAGE_AD_DETAILS_PAGE: 28, + LWI_SCREEN_AD_PREVIEW: 29, + LWI_NATIVE_ADS_STEPPED_FLOW_DESIGN_AD: 30, + LWI_NATIVE_ADS_STEPPED_FLOW_AD_SETTINGS: 31, + LWI_NATIVE_ADS_STEPPED_FLOW_AD_REVIEW: 32, + LWI_SCREEN_IMAGE_EDITING: 33, + LWI_FAST_TRACK_PAGE_PERMISSION: 34, + LWI_FAST_TRACK_HOST: 35, + LWI_NATIVE_ADS_NUX_EDUCATION_WITH_MEDIA: 36, + LWI_PUBLISH_FB_PAGE: 37, + LWI_SCREEN_AD_ACCOUNT_EMAIL_SUBMIT: 38, + LWI_SCREEN_NONCE_SUBMIT: 39, + LWI_SCREEN_AD_ACCOUNTS_SETTINGS: 40, + LWI_SCREEN_BILLING_HUB: 41, + LWI_SCREEN_EDIT_AD_ACC_EMAIL: 42, + LWI_SCREEN_RECOVERY_AD_ACCOUNT: 43, + LWI_SCREEN_MULTI_STATUS_SELECTOR: 44, + LWI_SCREEN_APPEAL_REJECTED_AD: 45, + LWI_SCREEN_APPEAL_AD_ACCOUNT_BAN: 46, + LWI_SCREEN_AD_APPEAL_STATUS: 47, + LWI_SCREEN_AD_ACCOUNT_APPEAL_STATUS: 48, + LWI_DIALOG_GALLERY_MEDIA_SOURCE_SELECTOR: 49, + LWI_SCREEN_NATIVE_EDIT_MAP_AUDIENCE: 50, + LWI_SCREEN_MEDIA_PICKER_RECENTLY_USED: 51, + LWI_SCREEN_MEDIA_PICKER_STATUSES: 52, + LWI_SCREEN_MEDIA_PICKER_CATALOG: 53, + LWI_NEW_MANAGE_ADS: 54, + LWI_SCREEN_NON_DISCRIMINATION_NATIVE: 55, + LWI_SCREEN_NON_DISCRIMINATION_HEC_NATIVE: 56, + LWI_SCREEN_NON_DISCRIMINATION_FULL_NATIVE: 57, + LWI_SCREEN_SIMPLIFIED_LOADER: 58, + LWI_SCREEN_SIMPLIFIED_EXPLAINER: 59, + LWI_SCREEN_PENDING_AD_VALIDATION: 60, + LWI_SCREEN_MESSAGING_GUIDE: 61, + LWI_SCREEN_MULTISOURCE_PICKER: 62, + LWI_SCREEN_PAYMENT_SUMMARY: 63, + LWI_SCREEN_EDUCATIVE_LOADER: 64, + LWI_SCREEN_FB_LOGIN_APP_REDIRECT_CONSENT: 65, + LWI_SCREEN_BENEFICIARY_INFO_SCREEN: 66, + LWI_SCREEN_FB_LOGIN_APP_REDIRECT_CONSENT_MANAGE_ADS: 67, + LWI_SCREEN_FB_CUSTOM_TAB_WEB_LOGIN: 68, + LWI_SCREEN_GOOGLE_AUTH_SYSTEM_DIALOG: 69, + LWI_WA_AD_ACCOUNT_RECOVERY_PLACEHOLDER: 70, + LWI_SCREEN_CONSENT_HOST: 71, + LWI_SCREEN_COUPON_PROMOTION_NUX: 72, + LWI_DIALOG_LOCATION_PERMISSION: 73, + LWI_DIALOG_SYSTEM_LOCATION_SETTINGS_RESOLUTION: 74, + LWI_PAYMENT_INFO_SCREEN: 75, + LWI_GENAI_DESCRIPTION_SCREEN: 76, + LWI_INTEREST_SEARCH_SCREEN: 77, + LWI_SCREEN_BLOKS_PAYMENT: 78, + LWI_NEW_MANAGE_ADS_DETAILS: 79, + LWI_ADS_HUB_OVERVIEW: 80, + LWI_AD_PERFORMANCE_DETAILS: 81, + LWI_OBJECTIVE_CHOICE_SCREEN: 82, + LWI_WEBSITE_LINK_ENTRY_SCREEN: 83, + LWI_DRAFT_AD_NUX: 84, + LWI_OUTCOME_LINK_ENTRY_SCREEN: 85, + LWI_WEBSITE_LINK_ENTRY_BOTTOM_SHEET: 86, + LWI_SCREEN_BLOKS_INITIATED_FB_WEB_LOGIN: 87, + LWI_SCREEN_RESOLVE_PAYMENT_ISSUE_VALIDATION: 88, + LWI_SCREEN_PRE_BLOKS_SCREEN: 89 + } + ], + lwiTargetingSpec: [21, 'string'], + lwiTotalCtwaAds: [26, 'integer'], + lwiViewerHasEditPermission: [28, 'boolean'], + lwiViewerHasPromotePermission: [32, 'boolean'], + mediaEdited: [49, 'boolean'], + onboardingEntryPoint: [ + 38, + { + ONBOARDING_ENTRY_POINT_FAST_TRACK: 1, + ONBOARDING_ENTRY_POINT_AD_REVIEW_SCREEN: 2, + ONBOARDING_ENTRY_POINT_CONSENT_HOST: 3 + } + ], + paymentMethodSet: [13, 'boolean'], + productId: [3, 'string'], + selectedProductsIdsList: [8, 'string'], + totalMediaCount: [50, 'integer'], + usedSavedAudience: [31, 'boolean'], + userHasAdvancedAudience: [35, 'boolean'], + userHasBpCredentials: [43, 'boolean'], + userHasCatalogItemsToPromote: [10, 'boolean'], + userHasChangedDefaultCityLevelAudience: [56, 'boolean'], + userHasLinkedFbPage: [7, 'boolean'], + userHasMultisourceMedia: [60, 'boolean'], + userHasSeenRecommendedBudget: [34, 'boolean'], + userHasStatusToPromote: [11, 'boolean'], + userProvidedFbConsent: [14, 'boolean'], + userWentThroughFbWebLogin: [23, 'boolean'], + validationStatus: [ + 37, + { + UNKNOWN: 1, + NO_ACTION_REQUIRED: 2, + HAS_ERRORS: 3 + } + ], + waAdAccountId: [44, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdBootstrapDataApplied', + id: 2298, + props: { + appContext: [22, 'string'], + appContextBitfield: [23, 'integer'], + applicationState: [ + 21, + { + FOREGROUND: 1, + BACKGROUND: 2 + } + ], + chunkChatsApplied: [15, 'integer'], + chunkMsgsApplied: [16, 'integer'], + collection: [ + 5, + { + REGULAR: 1, + REGULAR_LOW: 2, + REGULAR_HIGH: 3, + CRITICAL_BLOCK: 4, + CRITICAL_UNBLOCK_LOW: 5 + } + ], + historySyncChunkOrder: [14, 'integer'], + historySyncStageProgress: [11, 'integer'], + mdBootstrapChatsCount: [17, 'integer'], + mdBootstrapContactsCount: [8, 'integer'], + mdBootstrapHistoryPayloadType: [ + 10, + { + INITIAL: 1, + RECENT_HISTORY: 2, + FULL_HISTORY: 3, + PUSHNAME: 4, + STATUS_V3: 5, + NON_BLOCKING_DATA: 6, + ON_DEMAND: 7 + } + ], + mdBootstrapMessagesCount: [18, 'integer'], + mdBootstrapPayloadType: [ + 3, + { + CRITICAL: 1, + NON_CRITICAL: 2 + } + ], + mdBootstrapSource: [ + 2, + { + APP_STATE: 1, + HISTORY: 2 + } + ], + mdBootstrapStepDuration: [6, 'integer'], + mdBootstrapStepResult: [ + 12, + { + SUCCESS: 1, + FAILURE: 2 + } + ], + mdDroppedMsgType: [19, 'string'], + mdRegAttemptId: [9, 'string'], + mdSessionId: [1, 'string'], + mdSyncFailureReason: [20, 'string'], + mdTimestamp: [4, 'integer'], + sentViaMms: [13, 'boolean'], + usedSnapshot: [7, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MexEvent', + id: 3782, + props: { + isMex: [1, 'boolean'], + mexEventData: [2, 'string'], + mexEventDurationT: [12, 'timer'], + mexEventEndTime: [3, 'integer'], + mexEventEnvelopeResponseStatus: [13, 'integer'], + mexEventOperation: [7, 'string'], + mexEventPayloadResponseStatus: [14, 'integer'], + mexEventRequestSize: [8, 'integer'], + mexEventResponseSize: [9, 'integer'], + mexEventRetries: [10, 'integer'], + mexEventStartTime: [11, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ManageAdsEntryPointImpression', + id: 4124, + props: { + manageAdsEntryPoint: [ + 1, + { + WEB_OVERFLOW_MENU: 1, + SMB_CHAT_LIST_CTWA_BANNER: 2, + SMB_NATIVE_ADS_MANAGEMENT: 3, + SMB_BUSINESS_TOOLS_MANAGE_ADS_LIST_ITEM: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdBootstrapHistoryDataReceived', + id: 2998, + props: { + historySyncChunkOrder: [6, 'integer'], + historySyncStageProgress: [5, 'integer'], + mdBootstrapHistoryPayloadType: [ + 3, + { + INITIAL: 1, + RECENT_HISTORY: 2, + FULL_HISTORY: 3, + PUSHNAME: 4, + STATUS_V3: 5, + NON_BLOCKING_DATA: 6, + ON_DEMAND: 7 + } + ], + mdBootstrapPayloadType: [ + 2, + { + CRITICAL: 1, + NON_CRITICAL: 2 + } + ], + mdSessionId: [1, 'string'], + mdTimestamp: [4, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SnackbarDeleteUndo', + id: 3628, + props: { + isAGroup: [1, 'boolean'], + mediaType: [ + 6, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messagesUndeleted: [2, 'integer'], + snackbarActionType: [ + 3, + { + SNACKBAR_SHOWN: 0, + MESSAGE_UNDELETE: 1 + } + ], + threadId: [4, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsChannelPostForward', + id: 4746, + props: { + channelForwardContentType: [ + 6, + { + UPDATE: 0, + UPDATE_CARD: 1 + } + ], + channelForwardGroupType: [ + 1, + { + OTHER: 0, + INDIVIDUAL: 1, + GROUP: 2, + STATUS: 3, + BROADCAST: 4, + CHANNEL: 5 + } + ], + cid: [2, 'string'], + destinationChannelId: [7, 'string'], + destinationPostId: [8, 'string'], + mediaType: [ + 3, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + postId: [4, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'WebcDbOpen', + id: 1940, + props: { + webcDbName: [1, 'string'], + webcDbOpenNumAttempts: [3, 'integer'], + webcDbOpenWasSuccess: [2, 'boolean'] + }, + wamChannel: 'regular', + weight: 2000 + }, + { + name: 'MdAppStateSyncDaily', + id: 2300, + props: { + crossIndexConflictCount: [11, 'integer'], + invalidActionCount: [4, 'integer'], + keyRotationRemoveCount: [12, 'integer'], + missingKeyCount: [9, 'integer'], + mutationCount: [1, 'integer'], + storedMutationCount: [7, 'integer'], + unsetActionCount: [8, 'integer'], + unsupportedActionCount: [5, 'integer'], + uploadConflictCount: [10, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ReportToAdminEvents', + id: 4420, + props: { + reportToAdminInteraction: [ + 1, + { + CLICK_OPEN_ADMIN_DASHBOARD: 0, + CLICK_SEND_FOR_ADMIN_REVIEW: 1, + CLICK_CONFIRM_SEND_FOR_ADMIN_REVIEW: 2, + CLICK_CANCEL_SEND_FOR_ADMIN_REVIEW: 3 + } + ], + rtaGroupId: [2, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelProducerInsightsNavigation', + id: 5626, + props: { + channelProducerInsightsActionTarget: [ + 1, + { + REACH_TAB: 0, + GROWTH_TAB: 1, + FOLLOWERS_TAB: 2, + ACCOUNTS_REACHED_INFO_ICON: 3, + TOP_REGIONS_REACH_INFO_ICON: 4, + GROWTH_CHART_INFO_ICON: 5, + TOP_REGIONS_FOLLOWERS_INFO_ICON: 6, + HELP_CENTER_DATA_UNAVAILABLE_ARTICLE: 7, + HELP_CENTER_CHANNEL_METRICS_ARTICLE: 8, + WIDGET_INFO_ICON: 9, + TOTAL_FOLLOWERS_INFO_ICON: 10 + } + ], + channelProducerInsightsActionType: [ + 2, + { + WIDGET_IMPRESSION: 0, + OPEN: 1, + CLOSE: 2, + NAVIGATION_TAP: 3, + INFO_ICON_TAP: 4, + LINK_CLICK: 5 + } + ], + channelProducerInsightsEntryPoint: [ + 3, + { + PROFILE_SEE_ALL: 0, + PROFILE_ACCOUNTS_REACHED: 1, + PROFILE_NET_FOLLOWS: 2 + } + ], + channelProducerInsightsSequenceNumber: [4, 'integer'], + channelProducerInsightsSurface: [ + 5, + { + CHANNEL_INFO: 0, + REACH_TAB: 1, + GROWTH_TAB: 2, + FOLLOWERS_TAB: 3 + } + ], + cid: [6, 'string'], + producerInsightsSessionId: [7, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelDyi', + id: 4726, + props: { + channelDyiEventType: [ + 1, + { + CHANNEL_REPORT_REQUEST: 1, + CHANNEL_REPORT_DOWNLOAD: 2, + CHANNEL_REPORT_EXPORT: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BusinessToolsClick', + id: 2218, + props: { + businessToolsEntryPoint: [ + 5, + { + ENTRY_BANNER: 0, + ENTRY_REGISTRATION_ONBOARDING: 1, + ENTRY_CONVERSATIONS: 2, + ENTRY_SETTINGS: 3, + ENTRY_DEEPLINK: 4, + ENTRY_STATUS_TAB_MENU: 5, + ENTRY_CALLS_TAB_MENU: 6, + ENTRY_BUSINESS_TOOLS_TAB: 7 + } + ], + businessToolsItem: [ + 3, + { + OVERFLOW: 0, + PROFILE: 1, + CATALOG: 2, + AWAY_MESSAGE: 3, + GREETING_MESSAGE: 4, + QUICK_REPLIES: 5, + LABELS: 6, + LINKED_ACCOUNTS: 7, + SHORT_LINK: 8, + STATISTICS: 9, + CREATE_ACCOUNT_LINK: 10, + MANAGE_CTA: 11, + CREATE_AD: 12, + CONTINUE_PROMPT: 13, + ADVERTISE_LIST_ITEM: 14, + SHOPS: 15, + DISABLED_CATALOG: 16, + BANNED_SHOP: 17, + PREMIUM_TOOLS: 18, + BUSINESS_DIRECTORY: 19, + MANAGE_ADS: 20, + META_VERIFIED: 21, + AI_FROM_META: 22, + ORDERS: 23, + MARKETING_MESSAGES: 24, + BUSINESS_BROADCAST: 25 + } + ], + businessToolsSequenceNumber: [2, 'integer'], + businessToolsSessionId: [1, 'string'], + linkingTarget: [ + 4, + { + FACEBOOK: 0, + INSTAGRAM: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'StatusItemView', + id: 1658, + props: { + externalSourceDomainType: [ + 34, + { + FACEBOOK: 1, + FACEBOOK_WATCH: 2, + INSTAGRAM: 3, + YOUTUBE: 4, + STREAMABLE: 5, + NETFLIX: 6, + LASSO: 7, + SHARECHAT: 8, + SPOTIFY: 9, + APPLEMUSIC: 10, + TIDAL: 11, + DEEZER: 12, + SOUNDCLOUD: 13, + QOBUZ: 14, + PANDORA: 15, + TIKTOK: 16, + FACEBOOK_MESSENGER: 17 + } + ], + isAlreadyDownloaded: [35, 'boolean'], + isForwardable: [44, 'boolean'], + isForwarded: [45, 'boolean'], + isPosterBiz: [23, 'boolean'], + isPosterInAddressBook: [25, 'boolean'], + isResharable: [37, 'boolean'], + isReshare: [40, 'boolean'], + isViewedInLandscape: [29, 'boolean'], + mediaType: [ + 4, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + musicBlocked: [32, 'boolean'], + pairedMediaType: [ + 38, + { + SD_PHOTO: 0, + HD_PHOTO: 1, + SD_VIDEO: 2, + HD_VIDEO: 3, + MOTION_PHOTO_PARENT: 4, + MOTION_PHOTO_CHILD: 5 + } + ], + psaCampaignId: [17, 'string'], + psaCampaignItemIndex: [18, 'integer'], + psaLinkAvailable: [19, 'boolean'], + psaLinkClick: [22, 'boolean'], + psaLinkLoadTime: [21, 'timer'], + psaLinkOpenResult: [ + 20, + { + SUCCESS: 1, + CANCEL: 2, + ERROR: 3 + } + ], + reshareSource: [ + 41, + { + MENTIONS_RESHARE: 1, + STATUS_RESHARE: 2, + FORWARDED_FROM_STATUS: 3 + } + ], + statusContainsMusic: [30, 'boolean'], + statusItem3sViewCount: [31, 'integer'], + statusItemImpressionCount: [14, 'integer'], + statusItemIndex: [16, 'integer'], + statusItemLength: [7, 'timer'], + statusItemLoadTime: [5, 'timer'], + statusItemReplied: [8, 'integer'], + statusItemUnread: [9, 'boolean'], + statusItemViewCount: [10, 'integer'], + statusItemViewResult: [ + 3, + { + OK: 1, + CANCELLED: 2, + ERROR_UNKNOWN: 3, + MEDIA_ERROR_UNKNOWN: 4, + MEDIA_ERROR_DNS: 5, + MEDIA_ERROR_TIMEOUT: 6, + MEDIA_ERROR_INSUFFICIENT_SPACE: 7, + MEDIA_ERROR_TOO_OLD: 8, + MEDIA_ERROR_CANNOT_RESUME: 9, + MEDIA_ERROR_HASH_MISMATCH: 10, + MEDIA_ERROR_INVALID_URL: 11, + MEDIA_ERROR_OUTPUT_STREAM: 12, + MEDIA_ERROR_MEDIA_CONN: 13, + MEDIA_ERROR_THROTTLE: 14, + MEDIA_DOWNLOAD_CANCEL: 15, + MEDIA_PREFETCH_END: 16, + MEDIA_ERROR_WATLS: 17, + MEDIA_ERROR_SERVER: 18, + MEDIA_ERROR_WAMSYS: 19, + MEDIA_ERROR_NETWORK: 20, + MEDIA_ERROR_CONNECT: 21, + MEDIE_HOST_SWTICH_REQUIRED: 22, + MEDIA_INVALID_CODE: 23, + MEDIA_SUSPICIOUS_CONTENT: 24, + MEDIA_ERROR_CRONET: 25, + PARTIAL_IMAGE_DOWNLOAD: 26 + } + ], + statusItemViewTime: [6, 'timer'], + statusMediaHeight: [42, 'integer'], + statusMediaWidth: [43, 'integer'], + statusPairedMediaQuality: [ + 39, + { + SD: 0, + HD: 1 + } + ], + statusRowIndex: [2, 'integer'], + statusRowSection: [ + 11, + { + RECENT_STORIES: 1, + PREVIOUS_STORIES: 2, + MUTED_STORIES: 3, + MY_STATUS: 4, + CHAT_LIST: 5, + GROUP_PARTICIPANT: 6, + CONTACT_CARD: 7, + PROFILE_PAGE: 8, + CHAT_LIST_SEARCH: 9, + UPDATES_TAB_SEARCH: 10, + CHAT_TOP_BAR: 11, + SEE_ALL_RECENT: 12, + SEE_ALL_VIEWED: 13, + SEE_ALL_MUTED: 14, + SEE_ALL_SEARCH: 15, + NOTIFICATION: 16, + STATUS_VIEWER_SHEET: 17, + WAMO_PREVIEW: 18 + } + ], + statusType: [ + 36, + { + IMAGE: 1, + VIDEO: 2, + GIF: 3, + AUDIO: 4, + TEXT: 5, + MUSIC_STANDALONE: 6 + } + ], + statusViewerSessionId: [1, 'integer'], + urlStatusClicked: [ + 26, + { + ONE_CLICK: 1, + TWO_CLICKS: 2, + NO_CLICK: 3 + } + ], + urlStatusType: [ + 27, + { + NO_PREVIEW: 1, + TRUNCATED: 2, + NON_TRUNCATED: 3, + INTERACTABLE: 4, + TOP_BAR_ATTRIBUTION: 5 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PrekeysDepletion', + id: 3014, + props: { + deviceSizeBucket: [ + 3, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + messageType: [ + 2, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + prekeysFetchReason: [ + 1, + { + SEND_MESSAGE: 1, + GET_VNAME_CERTIFICATE: 2, + SEND_LIVE_LOCATION_RETRY: 3, + SEND_LIVE_LOCATION_KEY: 4, + SEND_PEER_MESSAGE: 5, + MULTI_DEVICE_CALL: 6, + CALL_PEER_E2E_FAIL: 7, + IDENTITY_CHANGE_NOTIFICATION: 8, + BACK_OFF: 9, + USER_INTENT_PREFETCH: 10, + RESEND_MESSAGE: 11, + RETRY_MESSAGE: 12, + USER_INTENT_STATUS_PREFETCH: 13 + } + ] + }, + wamChannel: 'regular', + weight: 20 + }, + { + name: 'NotificationDelivery', + id: 3748, + props: { + clientMessageId: [1, 'string'], + notificationAction: [ + 2, + { + SHOW: 1, + REMOVE: 2 + } + ], + notificationDeliveryT: [3, 'integer'], + notificationDestination: [ + 4, + { + INDIVIDUAL: 1, + GROUP: 2, + OTHER: 3, + CHANNEL: 4, + INTEROP: 5, + STATUS: 6 + } + ], + notificationId: [5, 'string'], + notificationSource: [ + 6, + { + PUSH_TRIGGERED: 1, + MAIN_APP: 2, + IN_APP: 3 + } + ], + threadId: [7, 'string'], + uiNotificationType: [ + 8, + { + TEXT_MESSAGE: 1, + VOICE_MESSAGE: 2, + FILE_MESSAGE: 3, + PHOTO_MESSAGE: 4, + VIDEO_MESSAGE: 5, + MISSED_VOICE_CALL: 6, + MISSED_VIDEO_CALL: 7, + STICKER_MESSAGE: 8, + REACTION_MESSAGE: 9, + GROUP_INVITE_MESSAGE: 10, + REQUEST_MEDIA_REUPLOAD: 11, + WEB_CLIENT_LOGIN: 12, + BACKUP: 13, + KEEP_IN_CHAT: 14, + PAYMENT: 15, + POLL_MESSAGE: 16, + LOCATION_MESSAGE: 17, + WEB_PAGE_MESSAGE: 18, + FAILED_UPLOAD: 19, + GDPR_REPORT: 20, + INCOMING_VOICE_CALL: 21, + INCOMING_VIDEO_CALL: 22, + VIDEO_CALL_UPGRADE: 23, + WAFFLE: 24, + XPLAT_MIGRATION: 25, + OTHER: 26, + INVITE_JOINED: 27, + SCHEDULED_CALL_LOCAL_REMINDER: 28, + PTV_MESSAGE: 29, + STATUS_MENTION: 30, + STATUS_REACTION: 31, + STICKER_PACK_MESSAGE: 32, + POLL_RESULT_SNAPSHOT_MESSAGE: 33, + CALL_LINK_CREATOR: 34, + STATUS_PROMPT_RESPONSE: 35, + LINK_CREATOR_CALL_STARTED: 36, + LINK_CREATOR_CALL_CONNECTED: 37, + LINK_CREATOR_CALL_MISSED: 38, + STATUS_POST_RESHARE: 39 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelAdmin', + id: 4556, + props: { + adminFlowActionSequenceNumber: [1, 'integer'], + adminFlowType: [ + 2, + { + CREATION: 1, + EDIT: 2 + } + ], + channelAdminAction: [ + 3, + { + CHANNEL_CREATION_TAP: 1, + CHANNEL_CREATE_LAUNCH_SUCCESS: 2, + CHANNEL_CREATE_LAUNCH_ERROR: 3, + CHANNEL_CREATE_LAUNCH_BLOCKED: 4, + EDIT_CHANNEL_TAP: 5, + CHANNEL_NAME_SET: 6, + CHANNEL_ICON_SET_CAMERA: 7, + CHANNEL_ICON_SET_GALLERY: 8, + CHANNEL_ICON_SET_EMOJI_STICKER: 9, + CHANNEL_ICON_SET_WEB: 10, + CHANNEL_DESCRIPTION_SET: 11, + CHANNEL_ADMIN_FLOW_CONFIRMATION_TAP: 12, + CHANNEL_ADMIN_FLOW_SUCCESS: 13, + CHANNEL_ADMIN_FLOW_FAILURE: 14, + SEARCH_FOLLOWER: 15, + REACTIONS_SET_TO_ANY_EMOJI: 16, + REACTIONS_SET_TO_DEFAULT_EMOJI: 17, + REACTIONS_SET_TO_NONE_EMOJI: 18 + } + ], + channelAdminSessionId: [4, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CtwaBizUserJourney', + id: 5992, + props: { + adId: [3, 'string'], + bizFeatureEnabled: [4, 'string'], + businessPhoneNumber: [5, 'integer'], + ctwaBizUserJouneryEntryPoint: [6, 'string'], + ctwaBizUserJourneyMetadata: [1, 'string'], + ctwaBizUserJourneyOperation: [ + 2, + { + AGM_INJECTED: 1, + AGM_CTA_CLICKED: 2, + AGM_VIEW_DETAILS_CLICKED: 3, + AGM_BOTTOMSHEET_SHOWN: 4, + AGM_BOTTOMSHEET_CLOSED: 5, + AGM_BOTTOMSHEET_EXTERNAL_NAVIGATION: 6, + DUPLICATED_AGM_NOT_INJECTED: 7, + AGM_WELCOME_MESSAGE_NULL: 8, + AGM_INVALID_CTA_TYPE_FROM_MESSAGE: 9, + AGM_INVALID_CTA_PAYLOAD_FROM_MESSAGE: 10, + AGM_INVALID_SOURCE_APP_FROM_MESSAGE: 11, + AGM_BOTTOMSHEET_IMAGE_ERROR: 12, + AGM_BOTTOMSHEET_TEXT_ERROR: 13 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PrivacySettingsClick', + id: 3726, + props: { + privacyControlEntryPoint: [ + 1, + { + PRIVACY_SETTINGS: 0, + PROFILE_PHOTO_JIT: 1, + SETTINGS_SEARCH: 2, + DEEP_LINK: 3, + PRIVACY_CHECKUP_BANNER: 4, + PRIVACY_CHECKUP_DEEP_LINK: 5, + PRIVACY_CHECKUP_WA_CHAT: 6, + PRIVACY_CHECKUP_SETTINGS_SEARCH: 7, + DEFENSE_MODE_LOCKED_INTERSTITIAL: 8, + STICKER_INFO_SHEET: 9 + } + ], + privacyControlItem: [ + 2, + { + LAST_SEEN_AND_ONLINE: 0, + PROFILE_PHOTO: 1, + ABOUT: 2, + GROUPS: 3, + STATUS: 4, + READ_RECEIPT: 5, + BLOCKED: 6, + LIVE_LOCATION: 7, + SCREEN_LOCK: 8, + DDM_TIMER: 9, + CALLS: 10, + FINGERPRINT_LOCK: 11, + DISAPPEARING_MESSAGES: 12, + UNKNOWN: 13, + CHECKUP: 14, + SHOW_PREVIEW: 15, + E2EE_BACKUPS: 16, + TWO_STEP_VERIFICATION: 17, + FACE_AND_HAND_EFFECTS: 18, + ADVANCED: 19, + CHAT_LOCK: 20, + AVATAR: 21, + CONTACTS: 22, + PRIVACY_CHECKUP: 23, + PIX: 24, + DEFENSE_MODE: 25, + PROFILE_LINKS: 26, + PASSKEY: 27, + EMAIL: 28, + CHANNELS: 29 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BotBizJourney', + id: 4868, + props: { + appSessionId: [1, 'string'], + botBizActionType: [ + 5, + { + BOT_BIZ_CARD_CLICK: 1, + BOT_BIZ_CARD_MESSAGE_CLICK: 2, + BOT_BIZ_CARD_VIEW_AI_CLICK: 3, + BOT_BIZ_DEEPLINK_CLICK: 4, + BOT_BIZ_NUX_APPEAR: 5, + BOT_BIZ_NUX_DISMISS: 6, + BOT_BIZ_NUX_SELECT: 7, + BOT_BIZ_INFO_CHAT_CLICK: 8, + BOT_BIZ_NUX_CONTINUE_CLICKED: 9, + BOT_BIZ_NUX_DISMISS_AUTO_ACCEPT: 10, + BOT_BIZ_NUX_APPEAR_MERGED: 11, + BOT_BIZ_NUX_APPEAR_NEW: 12 + } + ], + botBizEntryPoint: [ + 6, + { + SHARED_BOT_BIZ_CARD: 1, + SHARED_BOT_BIZ_DEEPLINK: 2, + BOT_BIZ_CHAT: 3 + } + ], + botBizType: [ + 7, + { + BOT_BIZ_3P: 1, + BOT_BIZ_1P: 2 + } + ], + botType: [ + 4, + { + UNKNOWN: 0, + METABOT: 1, + BOT_1P_BIZ: 2, + BOT_3P_BIZ: 3, + UGC: 4, + META_CHARACTER: 5 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupExitExperienceExitDeleteConfirmationDialogUiInteraction', + id: 6316, + props: { + psGroupExitExperienceDeleteConfirmationDialogAction: [ + 1, + { + GROUP_EXIT_EXPERIENCE_DELETE_CONFIRMATION_DIALOG_DELETE_TAPPED: 0, + GROUP_EXIT_EXPERIENCE_DELETE_CONFIRMATION_DIALOG_CANCELLED: 1 + } + ], + psGroupExitExperienceGroupJid: [2, 'string'], + psGroupExitExperienceTouchPoint: [ + 4, + { + CHAT_LIST_LONG_PRESS: 0, + CHAT_OVERFLOW_MENU: 1, + GROUP_INFO: 2, + FGX_CARD: 3, + SUSPICIOUS_CHAT_BANNER: 4, + IOS_SWIPE_MENU: 5, + WEB_CONTEXT_MENU: 6, + ANDROID_MULTIPLE_CHAT_LONG_PRESS: 7, + GROUP_SAFETY_CHECK: 8 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 152546501, + weight: 1 + }, + { + name: 'PsPhoneNumberHyperlink', + id: 3266, + props: { + isPhoneNumHyperlinkOwner: [1, 'boolean'], + phoneNumHyperlinkAction: [ + 2, + { + PHONE_NUM_HYPERLINK_MSG_RECEIVED: 1, + LONG_PRESS_PHONE_NUM_HYPERLINK: 2, + CLICK_PHONE_NUM_HYPERLINK: 3, + CLICK_CALL: 4, + CLICK_ADD_TO_CONTACTS: 5, + CLICK_MESSAGE_ON_WHATSAPP: 6, + CLICK_COPY_PHONE_NUMBER: 7, + CLOSE_DIALOG_BOX: 8, + MESSAGE_SENT: 9, + CLICK_CALL_ON_WHATSAPP: 10, + CLICK_INVITE_TO_WHATSAPP: 11 + } + ], + phoneNumberStatusOnWa: [3, 'boolean'], + sequenceNumber: [4, 'integer'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'NativeContactsNuxEvent', + id: 5788, + props: { + nativeContactsNuxEntryPoint: [ + 3, + { + UNKNOWN: 0, + NEW_CONTACT: 1, + CONTACT_HEADER: 2, + GROUP: 3, + SHARED_CONTACT: 4, + CONTACT_SETTINGS: 5, + CHANGE_NUMBER_BANNER: 6, + MESSAGE_SENDER: 7, + SPAM_PROMPT: 8, + CONVERSATION_ROW: 9, + CHAT_SEARCH: 10, + CHAT: 11, + CALL_HISTORY: 12, + STATUS: 13, + BROADCAST_PART_LIST: 14, + PRODUCT: 15, + BLACKLIST: 16, + NEW_CHAT_SEARCH: 17, + CALL_GRID: 18, + CALL_HISTORY_NEW_CALL: 19, + CONTACT_LIST: 20, + DIALER: 21, + CONTACT_QR_CODE: 22, + APP_STARTUP: 23 + } + ], + nativeContactsNuxEventType: [ + 1, + { + VIEW_NATIVE_CONTACTS_NUX: 1, + VIEW_MANAGE_CONTACTS_FROM_COMPANION: 2, + VIEW_MANAGE_CONTACTS_FROM_COMPANION_NATIVE_CONTACTS_SETTING_OFF: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcChatOpen', + id: 864, + props: { + webcChatOpenBeforePaintT: [7, 'timer'], + webcChatOpenPaintedT: [6, 'timer'], + webcChatOpenT: [2, 'timer'], + webcFinalRenderedMessageCount: [5, 'integer'], + webcRenderedMessageCount: [4, 'integer'], + webcUnreadCount: [1, 'number'], + webcWindowHeightFloat: [8, 'number'] + }, + wamChannel: 'regular', + weight: 5 + }, + { + name: 'NonMessagePeerDataMediaUpload', + id: 3902, + props: { + peerDataErrorCount: [1, 'integer'], + peerDataExistingDataNoUploadCount: [2, 'integer'], + peerDataNotFoundCount: [3, 'integer'], + peerDataRequestCount: [4, 'integer'], + peerDataRequestSessionId: [5, 'string'], + peerDataRequestType: [ + 6, + { + UPLOAD_STICKER: 0, + SEND_RECENT_STICKER_BOOTSTRAP: 1, + GENERAL_LINK_PREVIEW: 2, + HISTORY_SYNC_ON_DEMAND: 3, + PLACEHOLDER_MESSAGE_RESEND: 4, + WAFFLE_LINKING_NONCE_FETCH: 5, + SYNCD_SNAPSHOT_RECOVERY: 6 + } + ], + peerDataResponseResult: [ + 8, + { + SUCCESS: 1, + OTHER_ERROR: 2, + REQUEST_TARGET_NOT_FOUND: 3, + REQUEST_INVALID: 4, + FAIL_TO_UPLOAD: 5, + FAIL_TO_SEND_RESPONSE: 6, + REQUEST_TOO_OLD: 7 + } + ], + peerDataSuccessInlineNoUploadCount: [9, 'integer'], + peerDataSuccessUploadCount: [7, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PsGroupSafetyCheckExitDialog', + id: 6252, + props: { + integrityGroupUserHashedId: [3, 'string'], + psGroupSafetyCheckExitDialogAction: [ + 1, + { + GROUP_EXIT_DIALOG_DISMISS: 0, + GROUP_EXIT_DIALOG_EXIT: 1, + GROUP_EXIT_DIALOG_EXIT_AND_REPORT: 2, + COMMUNITY_EXIT_DIALOG_DISMISS: 3, + COMMUNITY_EXIT_DIALOG_EXIT: 4, + COMMUNITY_EXIT_DIALOG_EXIT_AND_DELETE: 5 + } + ], + psSafetyCheckGroupJid: [2, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 216763284, + weight: 1 + }, + { + name: 'MessagingFavoritesUpdate', + id: 5460, + props: { + contactFavCountAfterUpdate: [1, 'integer'], + contactFavCountBeforeUpdate: [2, 'integer'], + favoritesUpdateEntryPoint: [ + 3, + { + CONTACT_INFO: 1, + GROUP_INFO: 2, + CHAT_MORE_OPTIONS: 3, + CHAT_LONG_PRESS_OPTIONS: 4, + MESSAGE_FAVORITES_CONTACT_PICKER: 5, + FAVORITE_SETTINGS: 6, + FILTER_CONTEXT_MENU: 7, + FILTER_EMPTY_STATE_ACTION: 8, + FILTER_MANAGE_FAVORITE_ACTION: 9, + CALLING_TAB_FAVORITE_PICKER: 10, + CALLING_TAB_FAVORITE_EDIT: 11, + CHAT_CONTEXT_MENU: 12, + CHAT_HEADER_CONTEXT_MENU: 13 + } + ], + groupFavCountAfterUpdate: [4, 'integer'], + groupFavCountBeforeUpdate: [5, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'LockFolderUnlock', + id: 4218, + props: { + landingSurface: [ + 1, + { + THREAD: 0, + FOLDER: 1, + CHAT_INFO: 2 + } + ], + totalChatCount: [2, 'integer'], + unlockEntryPoint: [ + 3, + { + CHAT_LIST: 0, + NOTIFICATION: 1, + PRIVATE_REPLY: 2, + STATUS_REPLY: 3, + CHAT_INFO: 4, + CONTACT_PICKER: 5, + LOCK_CHAT_HELPER: 6, + SEARCH: 7, + UNKNOWN: 8, + DIRECT_MESSAGE: 9 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'AppLaunch', + id: 1094, + props: { + appContext: [22, 'string'], + appContextBitfield: [23, 'integer'], + appLaunchCpuT: [2, 'timer'], + appLaunchDestination: [ + 7, + { + CHATLIST: 1, + CHAT: 2, + SHARE: 3, + CALL: 4, + CHANNEL: 5 + } + ], + appLaunchMainPreT: [3, 'timer'], + appLaunchMainRunT: [4, 'timer'], + appLaunchT: [1, 'timer'], + appLaunchTypeT: [ + 5, + { + COLD: 1, + WARM: 2, + LUKEWARM: 3 + } + ], + dbBgThreadReadsDurationT: [17, 'timer'], + dbBgThreadWritesDurationT: [18, 'timer'], + dbMainThreadCount: [10, 'integer'], + dbMainThreadReadsDurationT: [19, 'timer'], + dbMainThreadWritesDurationT: [20, 'timer'], + dbReadsCount: [8, 'integer'], + dbWritesCount: [9, 'integer'], + lowPowerModeEnabled: [12, 'boolean'], + peripheralConnected: [16, 'string'], + processIdentifier: [15, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CompanionsContactEvent', + id: 5718, + props: { + companionAddContactActionType: [ + 1, + { + OPEN: 0, + SAVE: 1, + CANCEL: 2, + DELETE: 3, + CREATE_DUPLICATE: 4 + } + ], + companionAddContactEventType: [ + 2, + { + CREATE_NEW: 0, + EDIT: 1 + } + ], + companionAddContactSessionId: [3, 'string'], + companionAddContactSource: [ + 4, + { + CONTACT_INFO: 0, + VCARD: 1, + CONTACT_LIST: 2, + NEW_CHAT: 3, + PHONE_NUMBER_DIALER: 4 + } + ], + companionContactSaveResult: [ + 5, + { + SUCCESS: 0, + NETWORK_UNAVAILABLE: 1, + USYNC_UNAVAILABLE: 2, + CLIENT_ERROR: 3 + } + ], + companionFnameEdited: [6, 'boolean'], + companionIsContactSyncToOs: [7, 'boolean'], + companionLnameEdited: [8, 'boolean'], + companionPhNumberEdited: [9, 'boolean'], + companionSyncSettingChanged: [10, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SettingsChange', + id: 6396, + props: { + currentSettingValue: [4, 'string'], + previousSettingValue: [2, 'string'], + settingType: [ + 3, + { + HYBRID_START_UP: 0, + HYBRID_SYSTEM_TRAY: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'Lid11MigrationLifecycle', + id: 6154, + props: { + chatNotInMappingCount: [1, 'integer'], + companionHasADifferentMappingCount: [2, 'integer'], + currentLocalTimeSeconds: [10, 'integer'], + fakeLidCount: [3, 'integer'], + isStageInOfflineResume: [11, 'boolean'], + isSyncdLidSession: [4, 'boolean'], + latestMappingCount: [5, 'integer'], + mappingCount: [6, 'integer'], + migratedThreadCount: [7, 'integer'], + migrationStage: [ + 8, + { + GOT_ABPROP: 1, + PRIMARY_LOCAL_MIGRATION_STARTED: 2, + PRIMARY_LOCAL_MIGRATION_ENDED: 3, + PRIMARY_LOCAL_MIGRATION_FAILED: 4, + PRIMARY_SENT_PEER_MESSAGE: 5, + COMPANION_RECEIVED_PEER_MESSAGE: 6, + COMPANION_LOCAL_MIGRATION_STARTED: 7, + COMPANION_LOCAL_MIGRATION_ENDED: 8, + COMPANION_LOCAL_MIGRATION_FAILED: 9, + COMPANION_MIGRATED_ON_NEW_PAIRING: 10, + COMPANION_RECEIVED_DEVICE_CAPABILITY: 11, + COMPANION_EXTRACTED_AND_SAVED_PEER_MESSAGE: 12 + } + ], + peerMappingBytesLength: [12, 'integer'], + primaryMigrationTimeSeconds: [13, 'integer'], + stageFailureReason: [ + 9, + { + MALFORMED_PEER_MESSAGE: 1, + INITIATED_LOGOUT_BASED_ON_MAPPING: 2, + DID_NOT_GET_PEER_MESSAGE_ON_TIME: 3, + DID_NOT_COMPLETE_MIGRATION_ON_TIME: 4, + COMPANION_UNSUPPORTED_VERSION: 5, + INTERNAL_ERROR: 6, + COMPANION_TIMEOUT_BASED_ON_DEVICE_CAPABILITY: 7 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MerchantCommerceEvent', + id: 4688, + props: { + acceptedPaymentMethods: [1, 'string'], + adId: [2, 'string'], + appSessionId: [3, 'string'], + bizPlatform: [ + 4, + { + UNKNOWN: 1, + SMB: 2, + ENT: 3, + CLOUDAPI: 4 + } + ], + commerceExperience: [6, 'string'], + commerceFlowId: [20, 'string'], + commerceInteractionAction: [7, 'string'], + commerceInteractionActionType: [21, 'string'], + commerceOrderStatus: [22, 'string'], + commercePaymentStatus: [8, 'string'], + commerceSessionId: [9, 'string'], + commerceSurface: [10, 'string'], + extraAttributes: [11, 'string'], + isCtwaOriginated: [12, 'boolean'], + isEligibleForAdSignal: [13, 'boolean'], + merchantHasCatalog: [14, 'boolean'], + merchantIsDiscoverable: [15, 'boolean'], + p2mFlow: [17, 'string'], + referral: [18, 'string'], + sequenceId: [19, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'AndroidMessageSendPerf', + id: 1994, + props: { + agentEngagementType: [ + 47, + { + DIRECT_CHAT: 0, + INVOKED: 1, + MEMBER: 2 + } + ], + appRestart: [16, 'boolean'], + bucketedSenderKeyDistributionCountPercentage: [32, 'integer'], + bucketedSenderKeyDistributionHashTime: [35, 'integer'], + deviceCount: [36, 'integer'], + deviceSizeBucket: [ + 26, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + durationAbs: [11, 'timer'], + durationRelative: [12, 'timer'], + durationT: [1, 'timer'], + editType: [ + 42, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + fetchPrekeys: [15, 'boolean'], + fetchPrekeysPercentage: [21, 'integer'], + groupSizeBucket: [ + 17, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4, + XX_LARGE: 5, + XXX_LARGE: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + invisibleMessageCategory: [ + 45, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isDirectedMessage: [33, 'boolean'], + isE2eBackfill: [27, 'boolean'], + isLid: [41, 'boolean'], + isMessageFanout: [9, 'boolean'], + isMessageForward: [8, 'boolean'], + isRevokeMessage: [24, 'boolean'], + isViewOnce: [29, 'boolean'], + jobsInQueue: [18, 'integer'], + mediaType: [ + 3, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageIsFirstUserMessage: [30, 'boolean'], + messageIsInvisible: [31, 'boolean'], + messageType: [ + 4, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + networkWasDisconnected: [14, 'boolean'], + participantCount: [37, 'integer'], + phoneCores: [34, 'integer'], + prekeysEligibleForPrallelProcessing: [28, 'boolean'], + receiverDeviceCount: [39, 'integer'], + runningTasks: [44, 'string'], + sendCount: [13, 'integer'], + sendRetryCount: [10, 'integer'], + sendStage: [ + 2, + { + CLIENT_RENDERED: 1, + CLIENT_SAVED: 2, + CLIENT_WRITTEN_WIRE: 3, + CLIENT_QUEUED: 4, + CLIENT_WAITING_TO_ENCRYPT: 5, + CLIENT_READY_TO_SEND: 6, + CLIENT_ENCRYPT: 7, + CLIENT_PREKEYS_FETCH: 8 + } + ], + senderDeviceCount: [40, 'integer'], + senderKeyDistributionCountPercentage: [23, 'integer'], + sessionsMissingWhenComposing: [25, 'boolean'], + targetDeviceGroupSizeBucket: [ + 20, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4, + XX_LARGE: 5, + XXX_LARGE: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + threadsInExecution: [19, 'integer'], + typeOfGroup: [ + 38, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ], + userToDeviceSizeBucket: [46, 'string'] + }, + wamChannel: 'regular', + weight: 2000 + }, + { + name: 'HfmTextSearchComplete', + id: 2186, + props: {}, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WamClientErrors', + id: 1144, + props: { + isFromWamsys: [27, 'boolean'], + wamClientBufferDropErrorCount: [28, 'integer'], + wamClientBufferFetchErrorCount: [29, 'integer'], + wamClientBufferRotateErrorCount: [43, 'integer'], + wamClientBufferStoreErrorCount: [30, 'integer'], + wamClientCorruptedBuffersCount: [42, 'integer'], + wamClientDroppedEventCount: [2, 'integer'], + wamClientDroppedEventCountNoEnoughStorage: [41, 'integer'], + wamClientDroppedEventSize: [3, 'integer'], + wamClientErrorFlags: [1, 'boolean'], + wamClientMetadataReadErrorCount: [37, 'integer'], + wamClientMetadataWriteErrorCount: [38, 'integer'], + wamClientPrivateDroppedEventCount: [24, 'integer'], + wamClientPrivateDroppedEventSize: [25, 'integer'], + wamClientPrivateRealtimeDroppedEventCount: [34, 'integer'], + wamClientPrivateRealtimeDroppedEventSize: [35, 'integer'], + wamClientPrivateRealtimeRejectedEventCount: [36, 'integer'], + wamClientPrivateRejectedEventCount: [31, 'integer'], + wamClientRealtimeDroppedEventCount: [22, 'integer'], + wamClientRealtimeDroppedEventSize: [23, 'integer'], + wamClientRealtimeRejectedEventCount: [32, 'integer'], + wamClientRejectedEventCount: [33, 'integer'], + wamErrorBadCurrentEventBufferChecksum: [18, 'boolean'], + wamErrorBadEventBuffer: [16, 'boolean'], + wamErrorBadFileHeader: [15, 'boolean'], + wamErrorBadFileSize: [8, 'boolean'], + wamErrorBadHeaderChecksum: [17, 'boolean'], + wamErrorBadRotatedEventBufferChecksum: [19, 'boolean'], + wamErrorCloseFile: [11, 'boolean'], + wamErrorCreateWamFile: [14, 'boolean'], + wamErrorFseekFile: [9, 'boolean'], + wamErrorOpenFile: [10, 'boolean'], + wamErrorOpenPsUploadQueueFile: [26, 'boolean'], + wamErrorOpenWamFile: [13, 'boolean'], + wamErrorPersistence: [20, 'boolean'], + wamErrorReadFile: [7, 'boolean'], + wamErrorRemoveFile: [12, 'boolean'], + wamErrorWriteEventBuffer: [6, 'boolean'], + wamErrorWriteFile: [4, 'boolean'], + wamErrorWriteHeader: [5, 'boolean'], + wamFirstErrorReadMetadata: [39, 'boolean'], + wamFirstErrorWriteMetadata: [40, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BlockEventsFs', + id: 4288, + props: { + blockEntryPoint: [ + 1, + { + OTHER: 0, + CHAT: 1, + PROFILE: 2, + BLOCK_LIST: 3, + TRIGGERED_BLOCK: 4, + ACCOUNT_INFO: 5, + CALL_LOG: 6, + OVERFLOW_MENU: 7, + GROUP_INFO: 8, + BLOCK_DIALOG: 9, + MESSAGE_MENU: 10, + MEDIA_VIEWER: 11, + OVERFLOW_MENU_BLOCK: 12, + ONE_TO_ONE_OLD_SPAM_BANNER_BLOCK: 13, + ONE_TO_ONE_SPAM_BANNER_BLOCK: 14, + BIZ_SPAM_BANNER_BLOCK: 15, + BLOCK_HEADER_CHAT: 16, + OVERFLOW_MENU_REPORT: 17, + ACCOUNT_INFO_REPORT: 18, + BIZ_OLD_SPAM_BANNER_BLOCK: 19, + CHAT_LIST_BLOCK: 20, + CHAT_LIST_NOINSUB_BLOCK: 21, + CHAT_LIST_CONTEXT_MENU_BLOCK: 22, + NOTIFICATION_BLOCK: 23, + ONE_TO_ONE_SPAM_BANNER_REPORT: 24, + BIZ_EXTENSION_MENU: 25, + VIEW_ONCE_VIEWER: 26, + STATUS_OVERFLOW_MENU_REPORT: 27, + ALBUM_MEDIA_MENU_REPORT: 28, + STATUS_POST_REPORT: 29, + MISSED_CALL_NOTIFICATION_BLOCK: 30, + CHAT_FMX_CARD_BLOCK: 31, + CHAT_FMX_CARD_BLOCK_SUSPICIOUS: 32, + CHAT_FMX_CARD_SAFETY_TOOLS_BLOCK: 33, + CHAT_FMX_CARD_SAFETY_TOOLS_BLOCK_SUSPICIOUS: 34, + CHAT_FMX_CARD_SAFETY_TOOLS_REPORT: 35, + CHAT_FMX_CARD_SAFETY_TOOLS_REPORT_SUSPICIOUS: 36, + ACCOUNT_INFO_BLOCK: 37, + CALL_LOG_BLOCK: 38, + BIZ_BLOCK_HEADER_CHAT: 39, + BIZ_OVERFLOW_MENU_BLOCK: 40, + PSA_BANNER_BLOCK: 41, + COMMENT_ACTIONS_BOTTOM_SHEET: 42, + CALL_SPAM_DIALOG_REPORT: 43, + CALL_SPAM_DIALOG_BLOCK: 44, + BIZ_ACCOUNT_INFO_BLOCK: 45, + BIZ_BLOCK_LIST: 46, + BIZ_CALL_LOG_BLOCK: 47, + ONGOING_CALL_LINK_BLOCK: 48, + ONE_TO_ONE_BLOCKED_CHAT_COMPOSER: 49, + CHAT_MORE_OPTIONS: 50, + CHAT_LONG_PRESS_OPTIONS: 51, + IAB_MENU_REPORT: 52 + } + ], + blockEventActionType: [ + 2, + { + BLOCK: 0, + UNBLOCK: 1 + } + ], + blockEventIsSuspicious: [3, 'boolean'], + blockEventIsUnsub: [4, 'boolean'], + pastCall: [5, 'boolean'], + pastCallResult: [ + 6, + { + INVALID: 0, + CONNECTED: 1, + REJECTED_BY_USER: 2, + REJECTED_BY_SERVER: 3, + MISSED: 4, + BUSY: 5, + SETUP_ERROR: 6, + SERVER_NACK: 7, + CALL_OFFER_ACK_NOT_RECEIVED: 8, + MISSED_NO_RECEIPT: 9, + ACCEPTED_BUT_NOT_CONNECTED: 10, + CALL_CANCELED_CELLULAR_IN_PROGRESS: 11, + CALL_CANCELED_AIRPLANE_MODE_ON: 12, + CALL_CANCELED_NO_NETWORK: 13, + CALL_OFFER_ACK_CORRUPT: 14, + CALL_REJECTED_TOS: 15, + CALL_REJECTED_E2E: 16, + CALL_REJECTED_UNAVAILABLE: 17, + CALL_CANCELED_OFFER_NOT_SENT: 18, + PEER_SETUP_ERROR: 19, + ACTIVE_ELSEWHERE: 20, + NO_DECRYPTED_OFFER: 21, + ACCEPTED_ELSEWHERE: 22, + REJECTED_ELSEWHERE: 23, + LONELY: 24, + CALL_IS_FULL: 25, + SILENCED: 26, + CALL_MISSED_SILENCED: 27, + CALL_DOES_NOT_EXIST_FOR_REJOIN: 28 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcStorageStat', + id: 1504, + props: { + webcAgeOfStorage: [3, 'integer'], + webcPackingEnabled: [4, 'boolean'], + webcStorageQuota: [2, 'integer'], + webcStorageUsage: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PttDaily', + id: 2938, + props: { + pttCancelBroadcast: [9, 'integer'], + pttCancelGroup: [8, 'integer'], + pttCancelIndividual: [7, 'integer'], + pttCancelInterop: [42, 'integer'], + pttCancelNewsletter: [32, 'integer'], + pttDraftReviewBroadcast: [15, 'integer'], + pttDraftReviewGroup: [14, 'integer'], + pttDraftReviewIndividual: [13, 'integer'], + pttDraftReviewInterop: [43, 'integer'], + pttDraftReviewNewsletter: [33, 'integer'], + pttFastplaybackBroadcast: [21, 'integer'], + pttFastplaybackGroup: [20, 'integer'], + pttFastplaybackIndividual: [19, 'integer'], + pttFastplaybackInterop: [44, 'integer'], + pttFastplaybackNewsletter: [34, 'integer'], + pttLockBroadcast: [12, 'integer'], + pttLockGroup: [11, 'integer'], + pttLockIndividual: [10, 'integer'], + pttLockInterop: [45, 'integer'], + pttLockNewsletter: [35, 'integer'], + pttOutOfChatBroadcast: [29, 'integer'], + pttOutOfChatGroup: [30, 'integer'], + pttOutOfChatIndividual: [31, 'integer'], + pttOutOfChatInterop: [46, 'integer'], + pttOutOfChatNewsletter: [36, 'integer'], + pttPausedRecordBroadcast: [22, 'integer'], + pttPausedRecordGroup: [23, 'integer'], + pttPausedRecordIndividual: [24, 'integer'], + pttPausedRecordInterop: [47, 'integer'], + pttPausedRecordNewsletter: [37, 'integer'], + pttPlaybackBroadcast: [18, 'integer'], + pttPlaybackGroup: [17, 'integer'], + pttPlaybackIndividual: [16, 'integer'], + pttPlaybackInterop: [48, 'integer'], + pttPlaybackNewsletter: [38, 'integer'], + pttRecordBroadcast: [3, 'integer'], + pttRecordGroup: [2, 'integer'], + pttRecordIndividual: [1, 'integer'], + pttRecordInterop: [49, 'integer'], + pttRecordNewsletter: [39, 'integer'], + pttSendBroadcast: [6, 'integer'], + pttSendGroup: [5, 'integer'], + pttSendIndividual: [4, 'integer'], + pttSendInterop: [50, 'integer'], + pttSendNewsletter: [40, 'integer'], + pttStopTapBroadcast: [25, 'integer'], + pttStopTapGroup: [26, 'integer'], + pttStopTapIndividual: [27, 'integer'], + pttStopTapInterop: [51, 'integer'], + pttStopTapNewsletter: [41, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SmbPaidMessagesButtonLogger', + id: 4508, + props: { + businessPhoneNumber: [1, 'integer'], + pmButtonCount: [2, 'integer'], + pmButtonEventType: [ + 3, + { + CLICK: 0 + } + ], + pmButtonIndex: [4, 'integer'], + pmButtonType: [ + 5, + { + QUICK_REPLY: 0, + CTA_URL: 1, + CTA_CALL: 2, + CTA_CATALOG: 3, + CTA_CATALOG_ITEM: 4 + } + ], + pmIsTrackableLink: [7, 'string'], + pmServerCampaignId: [6, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'WebDbLoadFromVersionFailureNonAnonymous', + id: 4814, + props: { + webDbLoader: [ + 1, + { + MAIN: 1, + WEB_WORKER: 2, + SERVICE_WORKER: 3 + } + ], + webDbName: [ + 2, + { + MODEL_STORAGE: 1, + FTS_STORAGE: 2, + JOBS_STORAGE: 3, + LOADGEN_STORAGE: 4, + LRU_MEDIA_STORAGE_IDB: 5, + OFFD_STORAGE: 6, + QPL_STORAGE: 7, + SIGNAL_STORAGE: 8, + WORKER_STORAGE: 9, + SW: 10, + WAWC: 11, + WAWC_DB_ENC: 12, + STATUS_STORAGE: 13 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'KeepInChatErrors', + id: 3698, + props: { + canEditDmSettings: [7, 'boolean'], + isAGroup: [2, 'boolean'], + isAdmin: [3, 'boolean'], + kicAction: [ + 4, + { + KEEP_MESSAGE: 1, + UNKEEP_MESSAGE: 2 + } + ], + kicErrorCode: [ + 5, + { + NONE: 1, + MESSAGE_MISSING: 2, + MESSAGE_REVOKED: 3, + SENDER_UNKEPT: 4, + OLDER_REQUEST: 5, + ORPHAN_EXPIRED: 6, + TIE_BREAK_IGNORED: 7, + MESSAGE_EXPIRED: 8, + NO_PERMISSION_TO_EDIT: 9, + MESSAGE_FROM_EX_MEMBER: 10, + OFFLINE: 11, + SENDER_DISABLED: 12, + KEPT_BEYOND_EXPIRY: 13, + NOT_PART_OF_THE_GROUP: 14, + CONTACT_BLOCKED: 15, + UNKNOWN: 999 + } + ], + kicMessageEphemeralityDuration: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcPwaEvent', + id: 4116, + props: { + webcPwaAction: [ + 2, + { + INSTALL: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcStatusSync', + id: 1878, + props: { + webcStatusMutedItemCount: [4, 'integer'], + webcStatusMutedRowCount: [7, 'integer'], + webcStatusRecentItemCount: [2, 'integer'], + webcStatusRecentRowCount: [5, 'integer'], + webcStatusSyncT: [1, 'timer'], + webcStatusViewedItemCount: [3, 'integer'], + webcStatusViewedRowCount: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SenderKeyExpired', + id: 3130, + props: { + chatType: [ + 1, + { + OTHER: 0, + INDIVIDUAL: 1, + GROUP: 2, + STATUS: 3, + BROADCAST: 4, + CHANNEL: 5 + } + ], + deviceSizeBucket: [ + 2, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + expiryReason: [ + 3, + { + USER_LEAVE: 1, + DEVICE_UNPAIR: 2, + IDENTITY_CHANGE: 3, + AUDIENCE_CHANGE: 4, + PERIODIC_ROTATION: 5, + KEY_CORRUPTION: 6, + PEER_COMPANION_UNPAIR: 7, + OTHER_DEVICE_UNPAIR: 8 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WaOldCode', + id: 3940, + props: { + deviceId: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMessageSend', + id: 2072, + props: { + messageIsForward: [3, 'boolean'], + messageMediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageSendT: [4, 'timer'], + messageType: [ + 1, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMessageQuery', + id: 1876, + props: { + webcAudioMessageCount: [14, 'integer'], + webcBrowserNetworkType: [1, 'string'], + webcBrowserStorageQuotaBytes: [20, 'integer'], + webcBrowserStorageQuotaUsedBytes: [21, 'integer'], + webcChatPosition: [2, 'integer'], + webcChatType: [ + 13, + { + INDIVIDUAL: 0, + GROUP: 1, + BROADCAST_LIST: 2, + COMMUNITY: 3, + NEWSLETTER: 4 + } + ], + webcDocumentMessageCount: [16, 'integer'], + webcEarliestMessageIndex: [11, 'integer'], + webcEarliestMessageT: [12, 'timer'], + webcMessageCount: [4, 'integer'], + webcMessageQueryTrigger: [ + 19, + { + UNKNOWN: 0, + USER_SCROLL: 1, + NEW_MESSAGE_PREFETCH: 2, + SEARCH_RESULT_CLICK: 3 + } + ], + webcMessageQueryType: [ + 3, + { + LOAD_PREV: 0, + LOAD_NEXT: 1, + LOAD_AROUND: 2 + } + ], + webcOtherMessageCount: [18, 'integer'], + webcPhotoMessageCount: [7, 'integer'], + webcPttMessageCount: [15, 'integer'], + webcQueryT: [9, 'timer'], + webcResponseBytes: [10, 'integer'], + webcStickerMessageCount: [17, 'integer'], + webcTextMessageCount: [5, 'integer'], + webcVideoMessageCount: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 5 + }, + { + name: 'MdAppStateSyncMutationStats', + id: 3180, + props: { + applied: [ + 1, + { + ZERO: 1, + ONE: 2, + LT10: 3, + LT100: 4, + LT500: 5, + LT1K: 6, + LT5K: 7, + GTE5K: 8 + } + ], + failed: [ + 2, + { + ZERO: 1, + ONE: 2, + LT10: 3, + LT100: 4, + LT500: 5, + LT1K: 6, + LT5K: 7, + GTE5K: 8 + } + ], + invalid: [ + 3, + { + ZERO: 1, + ONE: 2, + LT10: 3, + LT100: 4, + LT500: 5, + LT1K: 6, + LT5K: 7, + GTE5K: 8 + } + ], + orphan: [ + 4, + { + ZERO: 1, + ONE: 2, + LT10: 3, + LT100: 4, + LT500: 5, + LT1K: 6, + LT5K: 7, + GTE5K: 8 + } + ], + syncdAction: [5, 'string'], + unsupported: [ + 6, + { + ZERO: 1, + ONE: 2, + LT10: 3, + LT100: 4, + LT500: 5, + LT1K: 6, + LT5K: 7, + GTE5K: 8 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 100 + }, + { + name: 'DeepLinkOpen', + id: 2136, + props: { + campaign: [8, 'string'], + deepLinkOpenFrom: [ + 2, + { + DEEP_LINK_EXTERNAL: 1, + DEEP_LINK_WA_LINK_CLICK: 2, + QR_CODE_SHEET: 3, + DEEP_LINK_BANNER: 4, + DEEP_LINK_SMB_NOTIFICATION: 5, + DEEP_LINK_MESSENGER_APP: 6 + } + ], + deepLinkSessionId: [6, 'string'], + deepLinkType: [ + 3, + { + DEEP_LINK_UNKNOWN: 1, + DEEP_LINK_CHAT: 2, + DEEP_LINK_CONTACT_QR_CODE: 3, + DEEP_LINK_PAYMENT: 4, + DEEP_LINK_PRODUCT: 5, + DEEP_LINK_CATALOG: 6, + DEEP_LINK_FUTURE_PROOF: 7, + DEEP_LINK_GROUP_INVITE: 8, + DEEP_LINK_MSG_FORWARD: 9, + DEEP_LINK_MESSAGE_QR_CODE: 10, + DEEP_LINK_OPT_IN_QR_CODE: 11, + DEEP_LINK_CTWA: 12, + DEEP_LINK_STICKERPACK: 13, + DEEP_LINK_NOVI_HUB: 14, + DEEP_LINK_NOVI_ADD_DEBIT_CARD: 15, + DEEP_LINK_NOVI_ADD_BANK_ACCOUNT: 16, + DEEP_LINK_NOVI_WITHDRAW: 17, + DEEP_LINK_NOVI_RESET_PASSWORD: 18, + DEEP_LINK_PAYMENT_SIGNUP: 19, + DEEP_LINK_BIZTOOLS_ACCOUNTS: 20, + DEEP_LINK_PAYMENT_VIRALITY: 21, + DEEP_LINK_SETTINGS_ACCOUNT_DELETE: 22, + DEEP_LINK_SETTINGS_ACCOUNT_REQUEST_INFO: 23, + DEEP_LINK_SETTINGS_CHATS_HISTORY: 24, + DEEP_LINK_DISAPPEARING_MODE: 25, + DEEP_LINK_ARCHIVE_SETTINGS: 26, + DEEP_LINK_TOS: 27, + DEEP_LINK_NOVI_CARE: 28, + DEEP_LINK_NOVI_TPP_ACCOUNT_LINKING: 29, + DEEP_LINK_CONTACT_SUPPORT: 30, + DEEP_LINK_BIZTOOLS_DIRECTORY: 31, + DEEP_LINK_DIRECTORY: 32, + DEEP_LINK_CALL: 33, + DEEP_LINK_DIRECTORY_DEEPER_CATEGORY_SELECTION: 34, + DEEP_LINK_PHOENIX: 35, + DEEP_LINK_HELP_CENTER_TO_SETTINGS_CHATS: 36, + DEEP_LINK_CREATE_COMMUNITY: 37, + DEEP_LINK_SMB_AD_CREATION: 38, + DEEP_LINK_SMB_MANAGE_ADS: 39, + DEEP_LINK_SMB_MANAGE_ADS_DETAIL: 40, + DEEP_LINK_STATUS_SHARE: 41, + DEEP_LINK_PREMIUM: 42, + DEEP_LINK_SETTINGS_LINKED_DEVICES: 43, + DEEP_LINK_SMB_AD_CREATION_FROM_CATALOG: 44, + DEEP_LINK_SMB_AD_CREATION_FROM_BIZTAB: 45, + DEEP_LINK_SMB_EDIT_PROFILE: 46, + DEEP_LINK_EDIT_PROFILE_PIC: 47, + DEEP_LINK_SMB_EDIT_CATALOG: 48, + DEEP_LINK_SMB_BIZ_HOURS: 49, + DEEP_LINK_SMB_LOCATION: 50, + DEEP_LINK_SMB_LINKED_ACCOUNTS: 51, + DEEP_LINK_PRIVACY_SETTINGS: 52, + DEEP_LINK_SMB_EDIT_DESCRIPTION: 53, + DEEP_LINK_SMB_AD_CREATION_RESUME: 54, + DEEP_LINK_PRIVACY_DISCLOSURE: 55, + DEEP_LINK_CHANNEL: 56, + DEEPLINK_SMB_BIZ_WEBSITE: 57, + DEEP_LINK_PRIVACY_CHECKUP: 58, + DEEP_LINK_SMB_SELF_CATALOG: 59, + DEEP_LINK_SCAN_MIGRATION_QR_CODE: 60, + DEEP_LINK_PROXY: 61, + DEEP_LINK_HELP: 62, + DEEP_LINK_PRICE_TIER: 63, + DEEP_LINK_CALLING_PRIVACY: 64, + DEEP_LINK_PAYMENTS_PUSH_PROVISIONING: 65, + DEEP_LINK_FB_EVENT_LINK: 66, + DEEP_LINK_SETTINGS_ACCOUNT_2FA: 67, + DEEP_LINK_SMB_ADVERTISE_PROFILE: 68, + DEEP_LINK_SMB_LABELS_WITH_BIZTAB: 69, + DEEP_LINK_SMB_GREETING_MESSAGE_WITH_BIZTAB: 70, + DEEP_LINK_SMB_AWAY_MESSAGE_WITH_BIZTAB: 71, + DEEP_LINK_SMB_ADVERTISE_LATEST_STATUS: 72, + DEEP_LINK_SMB_PROFILE_COMPLETENESS: 73, + DEEP_LINK_SMB_AD_DETAILS: 74, + DEEP_LINK_SETTINGS_ACCOUNT_SWITCHER: 75, + DEEP_LINK_CHAT_TRANSFER: 76, + DEEP_LINK_CODE_LINKING: 77, + DEEP_LINK_MARKETING_MESSAGE: 78, + DEEP_LINK_HOME_CHATS: 79, + DEEP_LINK_MESSAGE_YOURSELF: 80, + DEEP_LINK_SETTINGS_ACCOUNT_EMAIL: 81, + DEEP_LINK_EDIT_AD: 82, + DEEP_LINK_MESSAGING_GUIDE: 83, + DEEP_LINK_SMB_DRAFT_AD: 84, + DEEP_LINK_CALLING_AWARENESS_VOICE_CHAT: 85, + DEEP_LINK_CALLING_AWARENESS_SCHEDULED_CALL: 86, + DEEP_LINK_COEXISTENCE_ONBOARDING: 87, + DEEP_LINK_SETTINGS_STORAGE_MANAGEMENT: 88, + DEEP_LINK_PAYMENT_BRAZIL_MERCHANT: 89, + DEEP_LINK_PAYMENT_BRAZIL_BUYER: 90, + DEEP_LINK_PRIVACY_GROUPS: 91, + DEEP_LINK_PRIVACY_PROFILE: 92, + DEEP_LINK_AIS: 93, + DEEP_LINK_PENDING_AD_PAYMENT: 94, + DEEP_LINK_PENDING_AD_REVIEW: 95, + DEEP_LINK_SETTINGS_ACCOUNT_VERIFY_EMAIL: 96, + DEEP_LINK_CTWA_EXTERNAL: 97, + DEEP_LINK_SMB_BIZ_SEARCH_ONBOARDING_SHEET: 98, + DEEP_LINK_CALLING_AWARENESS_GROUP_CALL: 99, + DEEP_LINK_SMB_ORDERS_HOME: 100, + DEEP_LINK_ADS_DATA_SHARING: 101, + DEEP_LINK_VIDEO_PROMOTION: 102, + DEEP_LINK_CTWA_RECENTLY_SHARED_MEDIA: 103, + DEEP_LINK_MARKETING_MESSAGE_OPT_IN: 104, + DEEP_LINK_GROUPS_PRIVACY: 105, + DEEP_LINK_PROFILE_PRIVACY: 106, + DEEP_LINK_ORDERS_EDUCATION_VIDEO: 107, + DEEP_LINK_META_VERIFIED: 108, + DEEP_LINK_SMB_AGENT_ONBOARDING: 109, + DEEP_LINK_SETTINGS_CHATS_BACKUP: 110, + DEEP_LINK_COUPONS_PROMOTION_IMPRESSION: 111, + DEEP_LINK_INVITE_A_FRIEND: 112, + DEEP_LINK_UPDATES: 113, + DEEP_LINK_CONTACTS_PERMISSION: 114, + DEEP_LINK_NOTIFICATIONS_PERMISSION: 115, + DEEP_LINK_WABAI_ONBOARDING: 116, + DEEP_LINK_CHAT_LIST: 117, + DEEP_LINK_BRAZIL_MERCHANT_PIX_ADD: 118, + DEEP_LINK_PAYMENT_UPI_EXPLORE_BUSINESSES: 119, + DEEP_LINK_PAYMENT_UPI_ACCOUNT_RECOVERY: 120, + DEEP_LINK_PAYMENT_UPI_ADD_BANK_ACCOUNT: 121, + DEEP_LINK_PAYMENT_UPI_START_CAMERA: 122, + DEEP_LINK_PAYMENT_UPI_RESUME_ONBOARDING: 123, + DEEP_LINK_PAYMENT_UPI_ADD_NUMBER: 124, + DEEP_LINK_PAYMENT_UPI_SEND_PAYMENT: 125, + DEEP_LINK_PAYMENT_UPI_SET_PIN: 126, + DEEP_LINK_PAYMENT_UPI_SET_2FA: 127, + DEEP_LINK_SETTINGS_ACCOUNT_PASSKEYS: 128, + DEEP_LINK_DOWNLOAD_SOURCE_SFW: 129, + DEEP_LINK_AVATAR_EDITOR: 130, + DEEP_LINK_BIZTOOLS_ACCOUNTS_LINK_FB: 131, + DEEP_LINK_PAYMENT_UPI_PAYMENT_HISTORY: 132, + DEEP_LINK_PAYMENT_UPI_HELP_CENTER: 133, + DEEP_LINK_PAYMENT_UPI_ACCOUNT_DETAILS: 134, + DEEP_LINK_PAYMENT_UPI_INVITE_OTHERS: 135, + DEEP_LINK_PAYMENT_UPI_SEND_FIRST_PAYMENT: 136, + DEEP_LINK_CLICK_TO_CALL: 137, + DEEP_LINK_INTER_APP_IDENTITY_SWITCH: 138, + DEEP_LINK_LISTS: 139, + DEEP_LINK_META_AI_IMAGINE_ME_ONBOARDING: 140, + DEEP_LINK_MEDIA_SEND_LIVE_ACTIVITY_OPEN_APP: 141, + DEEP_LINK_WAMO: 142, + DEEP_LINK_PAYMENT_UPI_QR_PROMINENCE: 143, + DEEP_LINK_SURVEY: 144, + DEEP_LINK_SETTINGS_ACCOUNT_SECURITY_CHECKUP: 145, + DEEP_LINK_THUNDERSTORM: 146, + DEEP_LINK_HELP_BOTTOMSHEET: 147, + DEEP_LINK_FAVORITE_CHAT_FILTER: 148, + DEEP_LINK_CATALOG_CATEGORY: 149, + DEEP_LINK_CATALOG_COLLECTION: 150, + DEEP_LINK_MAIBA_WEB_COEX_ONBOARDING: 151, + DEEP_LINK_SMB_ADD_PRODUCT: 152, + DEEP_LINK_CALL_PHONE_NUMBER: 153, + DEEP_LINK_ABPROP_OVERRIDE: 154, + DEEP_LINK_PROFILE: 155, + DEEP_LINK_SETTINGS_CHAT_THEMES: 156, + DEEP_LINK_AIMEDIAINPUT: 157, + DEEP_LINK_AIVOICE: 158, + DEEP_LINK_NEW_CUSTOM_LIST: 159, + DEEP_LINK_SHARED_DEVICE_PRIVACY: 160, + DEEP_LINK_IPAD_LAUNCH_APPEVENT: 161, + DEEP_LINK_CATALOG_SETTINGS: 162, + DEEP_LINK_BOOST_CATALOG: 163, + DEEP_LINK_PRIVACY_STATUS: 164, + DEEP_LINK_INTEROP_SETTINGS: 165, + DEEP_LINK_SMB_AD_RESOLVE_PAYMENT: 166, + DEEP_LINK_CONSENT_LAUNCHER: 167, + DEEP_LINK_SETTINGS_HOME_SCREEN_NOTIFICATIONS: 168, + DEEP_LINK_WA_LINK_ACCOUNTS: 169, + DEEP_LINK_PAYMENT_PIX_DEEP_INTEGRATION: 170, + DEEP_LINK_ACCOUNT_TRANSFER: 171, + DEEP_LINK_SG_CONNECT_BOTTOMSHEET: 172, + DEEP_LINK_BIZ_AI_LEARNING_SUMMARY: 173, + DEEP_LINK_BIZ_AI_HUB: 174, + DEEP_LINK_BIZ_MANAGE_DATA_SHARING: 175, + DEEPLINK_SETTINGS_EDIT_PROFILE_PHOTO: 176, + DEEPLINK_ADD_STATUS_GALLERY: 177, + DEEP_LINK_TURN_OFF_DO_NOT_DISTURB: 178, + DEEP_LINK_SHARE_WHATSAPP_WEB: 179, + DEEP_LINK_ACCOUNTS_CENTER_ADD_ACCOUNT: 180, + DEEP_LINK_COEXISTENCE_REONBOARDING: 181, + DEEP_LINK_SMB_QUICK_REPLIES_WITH_BIZTAB: 182, + DEEP_LINK_STATUS_PRIVACY: 183, + DEEP_LINK_IAP_PB_SUBSCRIPTION_HUB: 184, + DEEP_LINK_SHARESHEET: 185, + DEEP_LINK_SETTINGS_RECOMMENDED_CHANNELS_NOTIFICATIONS: 186 + } + ], + isContact: [4, 'boolean'], + linkOwnerType: [ + 5, + { + CONSUMER: 1, + SMB: 2, + ENT: 3 + } + ], + sourceSurface: [7, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ManageAdsEntryPointTap', + id: 4126, + props: { + manageAdsEntryPoint: [ + 1, + { + WEB_OVERFLOW_MENU: 1, + SMB_CHAT_LIST_CTWA_BANNER: 2, + SMB_NATIVE_ADS_MANAGEMENT: 3, + SMB_BUSINESS_TOOLS_MANAGE_ADS_LIST_ITEM: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'EphemeralSyncResponseReceive', + id: 4780, + props: { + clientDisappearingModeInitiator: [ + 1, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + clientEphemeralityDuration: [2, 'integer'], + clientEphemeralityInitiator: [ + 3, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + clientEphemeralitySettingTimestamp: [4, 'integer'], + clientEphemeralityTriggerAction: [ + 5, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + esrDisappearingModeInitiator: [ + 6, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + esrEphemeralityDuration: [7, 'integer'], + esrEphemeralityInitiator: [ + 8, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + esrEphemeralitySettingTimestamp: [9, 'integer'], + esrEphemeralityTriggerAction: [ + 10, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + esrFailureReason: [ + 11, + { + ESR_ABPROP_OFF: 1, + DM_RELIABILITY_ABPROP_OFF: 2, + INVALID_MESSAGE_TYPE: 3, + OLDER_EPHEMERAL_SETTING_TIMESTAMP: 4, + NO_EPHEMERAL_INFO: 5, + ATTEMPTS_EXHAUSTED: 6, + NO_USER_INFO: 7, + NO_CHAT_SESSION: 8, + INVALID_EPHEMERAL_DURATION: 9 + } + ], + esrResolveResult: [ + 12, + { + SUCCESS: 1, + ERROR: 2 + } + ], + isAGroup: [13, 'boolean'], + threadId: [14, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMinorEventLog', + id: 5440, + props: { + additionalDebugContext: [1, 'string'], + logContext: [2, 'string'], + logCount: [3, 'integer'], + logReason: [4, 'string'], + logType: [ + 5, + { + MINOR_EVENT: 0, + COUNTING_STAT: 1, + UNCAUGHT_EXCEPTION: 3, + UNHANDLED_REJECTED_PROMISE: 4, + INVESTIGATION: 5, + UNCATEGORIZED: 6 + } + ] + }, + wamChannel: 'regular', + weight: 100 + }, + { + name: 'NonMessagePeerDataRequest', + id: 3906, + props: { + peerDataRequestCount: [1, 'integer'], + peerDataRequestSessionId: [2, 'string'], + peerDataRequestType: [ + 3, + { + UPLOAD_STICKER: 0, + SEND_RECENT_STICKER_BOOTSTRAP: 1, + GENERAL_LINK_PREVIEW: 2, + HISTORY_SYNC_ON_DEMAND: 3, + PLACEHOLDER_MESSAGE_RESEND: 4, + WAFFLE_LINKING_NONCE_FETCH: 5, + SYNCD_SNAPSHOT_RECOVERY: 6 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'AttachmentTrayActions', + id: 3980, + props: { + actionDurationMs: [1, 'integer'], + actionThreadType: [ + 9, + { + GROUP_CHAT: 1, + P2P_THREAD: 2, + MESSAGE_YOURSELF: 3, + META_AI: 4, + TO_CHARACTER: 5, + TO_UGC: 6 + } + ], + attachmentTrayAction: [ + 2, + { + CLICK: 1, + SEND: 2, + CANCEL: 3 + } + ], + attachmentTrayActionTarget: [ + 3, + { + ATTACHMENT_TRAY: 1, + DOCUMENT: 2, + CAMERA: 3, + CAMERA_LIBRARY: 4, + GALLERY: 5, + PHOTO_AND_VIDEO_LIBRARY: 6, + AUDIO: 7, + LOCATION: 8, + CONTACT: 9, + POLL: 10, + PAYMENT: 11, + SHOP: 12, + ORDER: 13, + CATALOG: 14, + QUICK_REPLY: 15, + STICKER_MAKER: 16, + IMAGINE_EDIT: 17, + EVENT_CREATION: 18, + CALL_LINK_CREATION: 19, + SHARE_UPI_QR: 20 + } + ], + groupSizeBucket: [ + 4, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4, + XX_LARGE: 5, + XXX_LARGE: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + isAGroup: [5, 'boolean'], + isSuccessful: [6, 'boolean'], + sendMediaType: [ + 7, + { + PHOTO: 1, + VIDEO: 2, + MIXED: 3 + } + ], + sendTime: [8, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MessageReceive', + id: 450, + props: { + agentEngagementType: [ + 28, + { + DIRECT_CHAT: 0, + INVOKED: 1, + MEMBER: 2 + } + ], + appContext: [43, 'string'], + appContextBitfield: [44, 'integer'], + botType: [ + 37, + { + UNKNOWN: 0, + METABOT: 1, + BOT_1P_BIZ: 2, + BOT_3P_BIZ: 3, + UGC: 4, + META_CHARACTER: 5 + } + ], + chatOrigins: [ + 38, + { + LID_USERNAME: 1, + LID_CTWA: 2, + OTHERS: 3 + } + ], + deviceCount: [16, 'integer'], + deviceSizeBucket: [ + 10, + { + LT32: 1, + LT64: 2, + LT128: 3, + LT256: 4, + LT512: 5, + LT1000: 6, + LT1024: 16, + LT1500: 7, + LT2000: 8, + LT2500: 9, + LT3000: 10, + LT3500: 11, + LT4000: 12, + LT4500: 13, + LT5000: 14, + LARGEST_BUCKET: 15 + } + ], + disappearingChatInitiator: [ + 14, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + editType: [ + 25, + { + NOT_EDITED: 0, + EDITED: 1, + SENDER_REVOKE: 2, + ADMIN_REVOKE: 3, + ADMIN_EDIT: 4, + PIN: 5 + } + ], + ephemeralityDuration: [13, 'integer'], + ephemeralityInitiator: [ + 26, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + ephemeralityTriggerAction: [ + 27, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + hasUsername: [39, 'boolean'], + hasUsernamePin: [45, 'boolean'], + invisibleMessageCategory: [ + 41, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isAComment: [36, 'boolean'], + isAReply: [19, 'boolean'], + isForwardedForward: [18, 'boolean'], + isLid: [24, 'boolean'], + isViewOnce: [9, 'boolean'], + localAddressingMode: [ + 33, + { + PN: 1, + LID: 2 + } + ], + messageAddressingMode: [ + 34, + { + PN: 1, + LID: 2 + } + ], + messageIsInternational: [4, 'boolean'], + messageIsInvisible: [23, 'boolean'], + messageIsOffline: [5, 'boolean'], + messageMediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageQueueTime: [15, 'timer'], + messageReceiveT0: [6, 'timer'], + messageReceiveT1: [7, 'timer'], + messageType: [ + 1, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + mutedGroupMessage: [8, 'boolean'], + numOfWebUrlsInTextMessage: [3, 'integer'], + offlineCount: [30, 'integer'], + oppositeVisibleIdentification: [ + 40, + { + PHONE_NUMBER: 1, + SAVED_CONTACT_NAME: 2, + USERNAME: 3, + MASKED_PHONE_NUMBER: 4, + VERIFIED_BUSINESS_NAME: 5, + PLACEHOLDER: 6, + PUSHNAME: 7 + } + ], + paddingBytesSize: [22, 'integer'], + pairedMediaType: [ + 42, + { + SD_PHOTO: 0, + HD_PHOTO: 1, + SD_VIDEO: 2, + HD_VIDEO: 3, + MOTION_PHOTO_PARENT: 4, + MOTION_PHOTO_CHILD: 5 + } + ], + participantCount: [17, 'integer'], + receiverDefaultDisappearingDuration: [12, 'integer'], + revokeType: [ + 20, + { + SENDER: 0, + ADMIN: 1 + } + ], + senderDefaultDisappearingDuration: [11, 'integer'], + serverAddressingMode: [ + 35, + { + PN: 1, + LID: 2 + } + ], + stickerIsAi: [29, 'boolean'], + stickerIsFromStickerMaker: [31, 'boolean'], + stickerMakerSourceType: [ + 32, + { + CUTOUT_IMAGE: 1, + WEB_STICKER_MAKER: 2, + IOS_STICKER_MAKER: 3, + ANDROID_STICKER_MAKER: 4, + TRANSPARENT_IMAGE: 5, + GIF: 6 + } + ], + typeOfGroup: [ + 21, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 5 + }, + { + name: 'WebcOfflineNotificationProcess', + id: 4222, + props: { + currentOfflineProcessStage: [ + 4, + { + PAGE_LOAD: 1, + SOCKET_CONNECT: 2, + OFFLINE_PREVIEW: 3, + PROCESSING: 4, + PROCESS_COMPLETE: 5, + PROCESS_INTERRUPTED: 6 + } + ], + offlineProcessDecryptErrorCount: [5, 'integer'], + offlineProcessMailboxAge: [6, 'integer'], + offlineProcessMessageCount: [7, 'integer'], + offlineProcessNotificationCount: [8, 'integer'], + offlineProcessSessionId: [9, 'string'], + offlineProcessStageTimestampMs: [10, 'integer'], + runReason: [ + 12, + { + PUSH_NOTIFICATION: 1, + PERIODIC_BACKGROUND_SYNC: 2 + } + ], + swVersion: [11, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdAppStateMessageRange', + id: 2522, + props: { + additionalMessagesCount: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1000 + }, + { + name: 'PinInChatInteraction', + id: 4436, + props: { + groupRole: [ + 1, + { + ADMIN: 1, + MEMBER: 2 + } + ], + groupSize: [2, 'integer'], + groupTypeClient: [ + 3, + { + REGULAR_GROUP: 1, + SUB_GROUP: 2, + DEFAULT_SUB_GROUP: 3, + PARENT_GROUP: 4 + } + ], + isAGroup: [4, 'boolean'], + isSelfPin: [8, 'boolean'], + mediaType: [ + 5, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + pinCount: [6, 'integer'], + pinInChatInteractionType: [ + 7, + { + TAP_ON_BANNER: 1 + } + ], + pinIndex: [9, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcMediaErrorUnknownDetails', + id: 2352, + props: { + mediaId: [1, 'integer'], + webcMediaErrorMessage: [4, 'string'], + webcMediaErrorName: [3, 'string'], + webcMediaOperation: [ + 2, + { + DOWNLOAD: 1, + UPLOAD: 2 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CommunityCreation', + id: 3492, + props: { + communityCreationActionCount: [1, 'integer'], + communityCreationActionTaken: [ + 2, + { + ENTER: 1, + GET_STARTED: 2, + DISMISS: 3, + NEXT: 4, + CREATE_GROUP: 5, + LINK_GROUP: 6, + CREATE_COMMUNITY: 7, + EXIT: 8, + UNLINK_GROUP: 9, + CREATE_COMMUNITY_SUCCESS: 10, + CREATE_COMMUNITY_FAIL: 11, + HELP_ICON_CLICK: 12, + LINK_GROUP_CONFIRMATION_OK: 13, + LINK_GROUP_CONFIRMATION_CANCEL: 14, + NEW_COMMUNITY: 15, + EXISTING_COMMUNITY: 16, + ADD_SUBGROUP_AS_CADMIN: 17, + SUGGEST_SUBGROUP_AS_MEMBER: 19, + CANCEL: 20, + ADD_GROUP_TO_EXISTING_COMMUNITY_FAIL: 21, + ADD_GROUP_TO_EXISTING_COMMUNITY_SUCCESS: 22 + } + ], + communityCreationCurrentScreen: [ + 3, + { + CHATS_TAB: 1, + COMMUNITIES_TAB: 2, + COMMUNITY_NUX: 3, + COMMUNITY_INFO: 4, + COMMUNITY_GROUPS_SUMMARY: 5, + DEEP_LINK: 6, + BANNER: 7, + GROUP_INFO: 8, + LINK_GROUP_CONFIRMATION: 9, + GROUP_INFO_NEW_OR_EXISTING_COMMUNITY: 10, + ADD_GROUP_TO_EXISTING_COMMUNITY: 11, + ADD_GROUP_TO_EXISTING_COMMUNITY_AS_CADMIN_CONFIRMATION: 12, + SUGGEST_GROUP_TO_EXISTING_COMMUNITY_CONFIRMATION: 14 + } + ], + communityCreationEntrypoint: [ + 5, + { + CHATS_TAB: 1, + COMMUNITIES_TAB: 2, + GROUP_INFO: 3, + DEEP_LINK: 4, + DEEP_LINK_BANNER: 5, + DEEP_LINK_PSA: 6, + DEEP_LINK_CHAT: 7, + DEEP_LINK_CHANNEL: 8, + COMMUNITY_FILTER: 9, + OVERFLOW_MENU: 10 + } + ], + communityCreationSessionId: [4, 'string'], + communityId: [6, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'DisappearingMessageChatPicker', + id: 3398, + props: { + chatsSelected: [1, 'integer'], + dmChatPickerEntryPoint: [ + 2, + { + DEFAULT_MODE_SETTING: 0, + STORAGE_SETTING: 1, + PRIVACY_SETTING: 2 + } + ], + dmChatPickerEventName: [ + 3, + { + CHAT_PICKER_LINK_IMPRESSION: 0, + CHAT_PICKER_TRAY_OPEN: 1, + CHAT_PICKER_TRAY_EXIT: 2, + CHAT_PICKER_CHATS_SELECTED: 3 + } + ], + ephemeralityDuration: [4, 'integer'], + groupChatsSelected: [5, 'integer'], + groupSizeDistributionJson: [9, 'string'], + newlyEphemeralChats: [7, 'integer'], + totalChatsInChatPicker: [8, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'OtpRetriever', + id: 3468, + props: { + businessLid: [26, 'integer'], + businessLidOrJid: [28, 'string'], + businessPhoneNumber: [1, 'integer'], + chatId: [19, 'string'], + chatsFolderType: [ + 12, + { + INBOX: 1, + ARCHIVED: 2 + } + ], + ctaFallbackReason: [ + 2, + { + NO_OTP_REQUEST_RECEIVED: 0, + OTP_REQUEST_EXPIRED: 1, + HASH_MISMATCH: 2, + NO_ACTIVITY_LISTENING_ON_THIRD_PARTY_APP: 3, + OTHER: 4, + NO_PACKAGE_NAME_ON_MESSAGE: 5, + NO_CTA_DISPLAY_NAME: 6, + INCOMPATIBLE_OS_VERSION: 7, + NO_RETRIEVER_BUTTON: 8, + FEATURE_DISABLED: 9, + AMBIGUOUS_DELIVERY_DESTINATION: 10 + } + ], + ctaType: [ + 3, + { + COPY_CODE: 0, + AUTOFILL: 1 + } + ], + isKeepChatsArchivedEnabled: [13, 'boolean'], + isMessageNotificationEnabled: [14, 'boolean'], + isNotificationEnabled: [15, 'boolean'], + messageReceivedElapsedTimeSeconds: [11, 'integer'], + otpCorrelationId: [20, 'string'], + otpEventSource: [ + 5, + { + NOTIFICATION_CTA: 0, + NOTIFICATION_BODY: 1, + CHAT_CTA: 2, + OTHER: 3, + OTP_MESSAGE: 4, + OTP_MESSAGE_INFO: 5, + OTP_CONFIGURATION: 6, + OTP_REQUEST_SENDER: 7, + OTP_ZERO_TAP_SENDER: 8, + OTP_CONF_OPTION: 9 + } + ], + otpEventType: [ + 6, + { + CLICK: 0, + IMPRESSION: 1, + OTP_CODE_REQUESTED: 2, + OTP_CODE_SENT: 3, + MESSAGE_RECEIVED: 4, + MESSAGE_READ: 5, + MESSAGE_DELETED: 6, + ZERO_TAP_ENABLED: 7, + ZERO_TAP_DISABLED: 8, + ZERO_TAP_NOTICE_VIEWED: 9, + CLEAR_CHAT: 10, + ZERO_TAP_SEND_CODE_STARTED: 11, + ZERO_TAP_SEND_CODE_COMPLETED: 12, + ZERO_TAP_SEND_CODE_FAILED: 13, + OTP_CONF_OPT_ZERO_TAP_FLAG_ENABLED: 14, + OTP_CONF_OPT_ZERO_TAP_FLAG_DISABLED: 15, + HANDSHAKE_CONFIRMATION_SENT: 16, + FEEDBACK_BUTTON_CLICK: 17 + } + ], + otpFailureReason: [16, 'string'], + otpHandshakeElapsedTimeMs: [21, 'integer'], + otpHandshakeId: [23, 'string'], + otpMaskLinkedDevices: [24, 'boolean'], + otpProductType: [ + 7, + { + ONE_TAP: 0, + ZERO_TAP: 1, + COPY_CODE: 2 + } + ], + otpSdkVersion: [22, 'string'], + otpSenderAttributes: [27, 'string'], + otpSessionId: [8, 'string'], + receiverCountryCode: [18, 'string'], + templateId: [17, 'string'], + thirdPartyPackageNameFromIntent: [9, 'string'], + thirdPartyPackageSignatureHash: [10, 'string'], + waDeviceId: [25, 'integer'] + }, + wamChannel: 'private', + privateStatsIdInt: 113760892, + weight: 1 + }, + { + name: 'BizCatalogView', + id: 3006, + props: { + adId: [26, 'string'], + bizPlatform: [ + 14, + { + UNKNOWN: 1, + SMB: 2, + ENT: 3, + CLOUDAPI: 4 + } + ], + cartToggle: [13, 'boolean'], + catalogCategoryId: [19, 'string'], + catalogEntryPoint: [ + 2, + { + CATALOG_ENTRY_POINT_PROFILE: 1, + CATALOG_ENTRY_POINT_SETTINGS: 2, + CATALOG_ENTRY_POINT_MESSAGE: 3, + CATALOG_ENTRY_POINT_ATTACHMENT_PANEL: 4, + CATALOG_ENTRY_POINT_NUX: 5, + CATALOG_ENTRY_POINT_DEEPLINK: 6, + CATALOG_ENTRY_POINT_CHAT: 7, + CATALOG_ENTRY_POINT_ORDER_MESSAGE: 8, + CATALOG_ENTRY_POINT_INVOICE_ATTACHMENT_PANEL: 9, + CATALOG_ENTRY_POINT_PRODUCT_LIST_MESSAGE: 10, + CATALOG_ENTRY_POINT_TOP_BAR: 11, + CATALOG_ENTRY_POINT_PROFILE_ITEM_CLICK: 12, + CATALOG_ENTRY_POINT_PROFILE_SEE_ALL: 13, + CATALOG_ENTRY_POINT_QUOTED_PRODUCT: 14, + CATALOG_ENTRY_POINT_CATALOG_MESSAGE: 15, + CATALOG_ENTRY_QBM: 16, + CATALOG_ENTRY_POINT_ADS_DEEPLINK: 17, + CATALOG_ENTRY_POINT_WA_PAGES: 18, + CATALOG_ENTRY_POINT_DIRECTORY_BARE_TIPS: 19, + CATALOG_ENTRY_POINT_BIZ_ACTION_BAR: 20, + CATALOG_ENTRY_POINT_BIZ_ONBOARDING: 21, + CATALOG_ENTRY_POINT_TRUST_CARD: 22, + CATALOG_ENTRY_POINT_FLOWS: 23, + CATALOG_ENTRY_POINT_BIZ_AI_HOME: 24 + } + ], + catalogEventSampled: [11, 'boolean'], + catalogOwnerJid: [10, 'string'], + catalogReportReasonCode: [8, 'string'], + catalogSessionId: [3, 'string'], + catalogViewAction: [ + 1, + { + ACTION_CARD_ITEM_CLICK: 2, + ACTION_CARD_MORE_CLICK: 3, + ACTION_LIST_IMPRESSION: 4, + ACTION_DETAIL_IMAGE_CLICK: 6, + ACTION_DETAIL_LINK_CLICK: 7, + ACTION_FULL_IMAGE_SWIPE: 11, + ACTION_DETAIL_IMPRESSION: 12, + ACTION_REPORT_PRODUCT: 13, + ACTION_SEND_PRODUCT_MESSAGE: 14, + ACTION_REPORT_PRODUCT_SUCCESS: 15, + ACTION_REPORT_PRODUCT_FAILURE: 16, + ACTION_QUOTED_PRODUCT_IN_CONVERSATION_CLICK: 17, + ACTION_PRODUCT_IN_CONVERSATION_CLICK: 18, + ACTION_SHARE_CATALOG_LINK_CLICK: 19, + ACTION_SHARE_PRODUCT_LINK_CLICK: 20, + ACTION_CATALOG_IN_CONVERSATION_CLICK: 21, + ACTION_SHARE_CATALOG_VIA_WA_LINK_CLICK: 22, + ACTION_SHARE_PRODUCT_VIA_WA_LINK_CLICK: 23, + ACTION_SHARE_CATALOG_COPY_LINK_CLICK: 24, + ACTION_SHARE_PRODUCT_COPY_LINK_CLICK: 25, + ACTION_CHAT_CATALOG_ICON_CLICK: 26, + ACTION_MESSAGE_BUSINESS_BUTTON_CLICK: 27, + ACTION_CART_ADD_PRODUCT: 28, + ACTION_CART_EDIT_PRODUCT: 29, + ACTION_CART_DELETE_PRODUCT: 30, + ACTION_CART_ABANDON: 31, + ACTION_CART_ICON_CLICK: 32, + ACTION_CART_SNACKBAR_CLICK: 33, + ACTION_SEND_ORDER_MESSAGE: 34, + ACTION_ORDER_LIST_IMPRESSION: 35, + ACTION_QUOTED_PRODUCT_MESSAGE_SEND: 36, + ACTION_CART_LIST_IMPRESSION: 37, + ACTION_ORDER_MESSAGE_CLICK: 38, + ACTION_ORDER_LIST_ITEM_CLICK: 39, + ACTION_PLM_CART_CTA_CLICK: 40, + ACTION_CART_CHAT_ICON_CLICK: 42, + ACTION_CREATE_CART: 43, + ACTION_PLP_PRODUCT_VARIANT_BOTTOM_SHEET_OPEN: 44, + ACTION_PLP_PRODUCT_VARIANT_CHANGE: 45, + ACTION_PDP_PRODUCT_VARIANT_CHANGE: 46, + ACTION_PLP_BOTTOM_SHEET_SEE_MORE_DETAILS: 47, + ACTION_UPDATE_VARIANT_SELECTION: 48, + ACTION_VIEW_PRODUCT_VARIANTS_BOTTOM_SHEET: 49, + ACTION_WATCH_PRODUCT_VIDEO: 50, + ACTION_DETAIL_VIDEO_CLICK: 51, + ACTION_FULL_VIDEO_SWIPE: 52, + ACTION_LIST_LOAD: 53, + ACTION_DETAIL_LOAD: 54 + } + ], + collectionId: [15, 'string'], + collectionIndex: [16, 'string'], + deepLinkOpenFrom: [ + 12, + { + DEEP_LINK_EXTERNAL: 1, + DEEP_LINK_WA_LINK_CLICK: 2, + QR_CODE_SHEET: 3, + DEEP_LINK_BANNER: 4, + DEEP_LINK_SMB_NOTIFICATION: 5, + DEEP_LINK_MESSENGER_APP: 6 + } + ], + entryPointConversationInitiated: [ + 22, + { + BUSINESS_INITIATED: 0, + CONSUMER_INITIATED: 1, + NO_MESSAGES_LAST_24H: 2 + } + ], + entryPointConversionApp: [20, 'string'], + entryPointConversionSource: [21, 'string'], + hasVariants: [23, 'boolean'], + isNewProductAddedToCart: [7, 'boolean'], + isOrderMsgAttached: [5, 'boolean'], + orderId: [4, 'string'], + productId: [9, 'string'], + productIndex: [17, 'string'], + quantity: [6, 'integer'], + sequenceNumber: [18, 'integer'], + variantTypes: [24, 'string'], + variantsExtraAttributes: [25, 'string'] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'GifFromProviderSent', + id: 1124, + props: { + gifSearchProvider: [ + 1, + { + GIPHY: 0, + TENOR: 1 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChatMessageCounts', + id: 1644, + props: { + aiChatOrigins: [ + 224, + { + UNKNOWN: 0, + AI_HOME: 1, + AI_TAB_TEXT: 2, + AI_TAB_VOICE: 3 + } + ], + aiDiscoveryTab: [195, 'string'], + aptTestId: [212, 'string'], + audioMessagesReceived: [149, 'integer'], + audioMessagesSent: [150, 'integer'], + autoReplyFromIcebreakerSent: [190, 'integer'], + awayMsgsSent: [56, 'integer'], + bizCatalogType: [ + 60, + { + SHOPS: 0, + NATIVE: 1 + } + ], + bizConversationDepth: [65, 'integer'], + blockReason: [ + 33, + { + OTHER: 0, + NO_LONGER_NEEDED: 1, + NO_SIGN_UP: 2, + SPAM: 3, + OFFENSIVE_MESSAGES: 4, + OTP_DID_NOT_REQUEST: 5 + } + ], + bottomSheetAnimatedSent: [206, 'integer'], + bottomSheetEditedAnimatedSent: [207, 'integer'], + bottomSheetEditedSent: [208, 'integer'], + bottomSheetForwardMessagesSent: [196, 'integer'], + bottomSheetImagesEdited: [209, 'integer'], + bottomSheetImagesGenerated: [197, 'integer'], + bottomSheetMemuImagesGenerated: [220, 'integer'], + bottomSheetMemuInitiated: [221, 'integer'], + bottomSheetMemuMessagesSent: [222, 'integer'], + bottomSheetMessagesDownloaded: [198, 'integer'], + bottomSheetMessagesReceived: [199, 'integer'], + bottomSheetMessagesSent: [200, 'integer'], + bottomSheetPromptsInitiated: [201, 'integer'], + bottomSheetRegeneratedSent: [210, 'integer'], + broadcastMsgsReceived: [30, 'integer'], + broadcastMsgsSent: [29, 'integer'], + callOffersReceived: [27, 'integer'], + callOffersSent: [26, 'integer'], + callsResultBusy: [70, 'integer'], + callsResultCancelled: [71, 'integer'], + callsResultConnected: [72, 'integer'], + callsResultError: [78, 'integer'], + callsResultMissed: [73, 'integer'], + callsResultRejected: [74, 'integer'], + canEditDmSettings: [88, 'boolean'], + cartViews: [86, 'integer'], + chatEphemeralityDuration: [15, 'integer'], + chatMuted: [ + 8, + { + NOT_MUTED: 1, + MUTED_NO_NOTIFICATIONS: 2, + MUTED_SILENT_NOTIFICATIONS: 3 + } + ], + chatOrigins: [ + 179, + { + LID_USERNAME: 1, + LID_CTWA: 2, + OTHERS: 3 + } + ], + chatOverflowClicks: [79, 'integer'], + chatTypeInd: [ + 2, + { + INDIVIDUAL: 1, + SMB: 2, + ENT: 3, + INTEROP: 4, + UNKNOWN: 5, + BUSINESS: 6 + } + ], + collectionInquiriesSent: [44, 'integer'], + commandSheetShow: [174, 'integer'], + commentsReceived: [126, 'integer'], + commerceMsgsReceived: [41, 'integer'], + commerceMsgsSent: [40, 'integer'], + deviceLanguage: [219, 'string'], + disappearingChatInitiator: [ + 59, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + documentMessagesReceived: [151, 'integer'], + documentMessagesSent: [152, 'integer'], + editedMsgsSent: [100, 'integer'], + emuFlashPlaybacks: [184, 'integer'], + emuFlashPreviewShow: [182, 'integer'], + emuFlashSent: [183, 'integer'], + entryPointConversionApp: [47, 'string'], + entryPointConversionSource: [46, 'string'], + ephemeralMessagesExpired: [248, 'integer'], + ephemeralMessagesReceived: [14, 'integer'], + ephemeralMessagesSent: [13, 'integer'], + ephemeralMessagesUnreadExpired: [69, 'integer'], + ephemeralityInitiator: [ + 109, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + ephemeralityTriggerAction: [ + 110, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + eventCreationMessagesReceived: [142, 'integer'], + eventCreationMessagesSent: [143, 'integer'], + eventResponseMessagesReceived: [144, 'integer'], + eventResponseMessagesSent: [145, 'integer'], + fbCtaInquiriesSent: [45, 'integer'], + firstResponseTime: [25, 'integer'], + fmxNotMvBottomSheetDismissedCount: [234, 'integer'], + fmxNotMvBottomSheetGetMvButtonClicks: [235, 'integer'], + fmxNotMvBottomSheetGetMvButtonImpressions: [236, 'integer'], + fmxNotMvBottomSheetImpressions: [237, 'integer'], + fmxNotMvBottomSheetLearnMoreButtonClicks: [238, 'integer'], + fmxNotMvClicks: [229, 'integer'], + forwardAudioMessagesReceived: [153, 'integer'], + forwardAudioMessagesSent: [154, 'integer'], + forwardDocumentMessagesReceived: [155, 'integer'], + forwardDocumentMessagesSent: [156, 'integer'], + forwardGifMessagesReceived: [157, 'integer'], + forwardGifMessagesSent: [158, 'integer'], + forwardMessagesReceived: [89, 'integer'], + forwardMessagesSent: [90, 'integer'], + forwardPhotoMessagesReceived: [128, 'integer'], + forwardPhotoMessagesSent: [129, 'integer'], + forwardPtvMessagesReceived: [159, 'integer'], + forwardPtvMessagesSent: [160, 'integer'], + forwardStatusReplyMessagesReceived: [161, 'integer'], + forwardStatusReplyMessagesSent: [162, 'integer'], + forwardStickerMessagesReceived: [163, 'integer'], + forwardStickerMessagesSent: [164, 'integer'], + forwardTextMessagesReceived: [130, 'integer'], + forwardTextMessagesSent: [131, 'integer'], + forwardUrlMessagesReceived: [132, 'integer'], + forwardUrlMessagesSent: [133, 'integer'], + forwardVideoMessagesReceived: [165, 'integer'], + forwardVideoMessagesSent: [166, 'integer'], + gaStatus: [ + 22, + { + NEW: 0, + RETAINED: 1, + RESURRECTED: 2 + } + ], + gifMessagesReceived: [167, 'integer'], + gifMessagesSent: [168, 'integer'], + googleSearchClick: [214, 'integer'], + googleSearchShow: [215, 'integer'], + greetingMsgsSent: [57, 'integer'], + groupContainsBiz: [75, 'boolean'], + groupInfoSetting: [ + 87, + { + ADMINS_ONLY: 1, + ALL_PARTICIPANTS: 2 + } + ], + groupLimitSharingOnCnt: [225, 'integer'], + groupMembershipReplies: [51, 'integer'], + groupPrivateReplies: [52, 'integer'], + groupSize: [19, 'integer'], + hasReplied1On1: [216, 'boolean'], + hasUsername: [180, 'boolean'], + hasUsernamePin: [228, 'boolean'], + imagineCommandClick: [175, 'integer'], + imagineMeMessagesSent: [202, 'integer'], + imagineMePromptsInitiatedCount: [203, 'integer'], + imagineMentionClick: [146, 'integer'], + imagineMentionShow: [176, 'integer'], + isAContact: [6, 'boolean'], + isAContactAtThreadCreation: [213, 'boolean'], + isAGroup: [5, 'boolean'], + isArchived: [10, 'boolean'], + isAutoMuted: [108, 'boolean'], + isBizMvFrictionEligible: [230, 'boolean'], + isBlocked: [32, 'boolean'], + isCartAddClicked: [36, 'boolean'], + isCommerceViewed: [35, 'boolean'], + isCtaOnPdpClicked: [37, 'boolean'], + isDeleted: [185, 'boolean'], + isInviteCreatedThread: [106, 'boolean'], + isLabelled: [54, 'boolean'], + isMessageYourself: [91, 'boolean'], + isMetaAiAssistant: [211, 'boolean'], + isOppositePartyInitiated: [62, 'boolean'], + isPinned: [9, 'boolean'], + isPnhEnabledChat: [92, 'boolean'], + isReported: [186, 'boolean'], + isUser1pBizBotChat: [141, 'boolean'], + isUser3pBotChat: [140, 'boolean'], + isUserAgent: [111, 'boolean'], + isUserCreatedAgent: [123, 'boolean'], + isWaPayRegistered: [81, 'boolean'], + labelledMsgs: [55, 'integer'], + limitSharingOption: [226, 'boolean'], + locationsSent: [96, 'integer'], + markedReadCnt: [193, 'integer'], + markedReadMessageCnt: [194, 'integer'], + matchedMessagesMarkedAsReadWithDeltaTime: [246, 'string'], + matchedMessagesReadWithDeltaTime: [247, 'string'], + messagesRead: [127, 'integer'], + messagesReceived: [4, 'integer'], + messagesReceivedWithEnabledReadReceipt: [245, 'integer'], + messagesSent: [3, 'integer'], + messagesStarred: [12, 'integer'], + messagesUnread: [11, 'integer'], + metaAiMentionClick: [147, 'integer'], + metaAiMentionShow: [148, 'integer'], + newThread: [68, 'boolean'], + notMvImpressions: [231, 'integer'], + odReceived: [82, 'integer'], + oppositePartyHasBadge: [240, 'boolean'], + oppositePartyHasBusinessIntent: [204, 'boolean'], + oppositePartyHasProfilePhoto: [217, 'boolean'], + oppositePartyLimitSharingOption: [227, 'boolean'], + oppositeVisibleIdentification: [ + 181, + { + PHONE_NUMBER: 1, + SAVED_CONTACT_NAME: 2, + USERNAME: 3, + MASKED_PHONE_NUMBER: 4, + VERIFIED_BUSINESS_NAME: 5, + PLACEHOLDER: 6, + PUSHNAME: 7 + } + ], + ordersSent: [38, 'integer'], + p2mOdNnpTransactionsSent: [83, 'integer'], + p2mOdNpTransactionsSent: [84, 'integer'], + paymentsSent: [39, 'integer'], + pdpInquiriesSent: [42, 'integer'], + pdpViews: [61, 'integer'], + photoMessagesReceived: [134, 'integer'], + photoMessagesSent: [135, 'integer'], + pollCreationMessagesReceived: [115, 'integer'], + pollCreationMessagesSent: [116, 'integer'], + pollUpdateMessagesReceived: [117, 'integer'], + pollUpdateMessagesSent: [118, 'integer'], + profileReplies: [64, 'integer'], + profileViews: [63, 'integer'], + pttMessagesReceived: [119, 'integer'], + pttMessagesSent: [120, 'integer'], + ptvMessagesReceived: [121, 'integer'], + ptvMessagesSent: [122, 'integer'], + quickRepliesSent: [58, 'integer'], + reactionsReceived: [97, 'integer'], + reactionsSent: [98, 'integer'], + receiverDefaultDisappearingDuration: [21, 'integer'], + repliesSent: [80, 'integer'], + requestedPhoneNumber: [93, 'boolean'], + seenMaskedPhoneNumber: [94, 'boolean'], + senderDefaultDisappearingDuration: [20, 'integer'], + sharedPhoneNumber: [99, 'boolean'], + sharesCommonGroup: [218, 'boolean'], + smbMarketingMessagesReactionsSent: [101, 'integer'], + smbMarketingMessagesRepliesSent: [102, 'integer'], + smbMarketingMessagesSpamReports: [103, 'integer'], + smbMarketingMsgsReceived: [104, 'integer'], + smbMarketingMsgsSent: [105, 'integer'], + spamReports: [31, 'integer'], + startTime: [7, 'integer'], + statusReactionsReceived: [191, 'integer'], + statusReactionsSent: [192, 'integer'], + statusReplies: [50, 'integer'], + statusReplyMessagesReceived: [169, 'integer'], + statusViews: [49, 'integer'], + stickerMessagesReceived: [170, 'integer'], + stickerMessagesSent: [171, 'integer'], + storefrontInquiriesSent: [43, 'integer'], + suggestionPromptsClick: [177, 'integer'], + suggestionPromptsShow: [178, 'integer'], + textMessagesReceived: [136, 'integer'], + textMessagesSent: [137, 'integer'], + textMessagesToUserCreatedAgentCnt: [124, 'integer'], + threadCreationDate: [189, 'string'], + threadDs: [66, 'string'], + threadId: [67, 'string'], + threadIdMonthly: [223, 'string'], + totalCallDuration: [28, 'integer'], + totalMessageEditsFromAgentCnt: [112, 'integer'], + totalMessageFromAgentCnt: [113, 'integer'], + totalMessageToAgentCnt: [114, 'integer'], + totalMessagesToUserCreatedAgentCnt: [125, 'integer'], + typeOfGroup: [ + 85, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ], + urlMessagesReceived: [138, 'integer'], + urlMessagesSent: [139, 'integer'], + userHasBusinessIntent: [205, 'boolean'], + viaContactlessChats: [107, 'boolean'], + videoCallsOffered: [76, 'integer'], + videoMessagesReceived: [172, 'integer'], + videoMessagesSent: [173, 'integer'], + viewOnceMessagesOpened: [18, 'integer'], + viewOnceMessagesReceived: [17, 'integer'], + viewOnceMessagesSent: [16, 'integer'], + voiceCallsOffered: [77, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcResourceLoad', + id: 688, + props: { + webcResourceCached: [3, 'boolean'], + webcResourceDuration: [2, 'timer'], + webcResourceName: [1, 'string'] + }, + wamChannel: 'regular', + weight: 2000 + }, + { + name: 'AdvertiseTooltipImpression', + id: 4024, + props: { + lwiEntryPoint: [ + 1, + { + SMB_CATALG_LIST_LWI_ADVERTISE_BANNER: 1, + SMB_CATALOG_LIST_ADVERTISE_MENU_ITEM: 2, + SMB_BUSINESS_TOOLS_ADVERTISE_LIST_ITEM: 3, + SMB_STATUS_DETAILS_ADVERTISE_MENU_ITEM: 4, + SMB_STATUS_PREVIEW_ADVERTISE_MENU_ITEM: 5, + SMB_CONVERSATIONS_LIST_BANNER_WITH_VALID_PRODUCT: 6, + SMB_CONVERSATIONS_LIST_BANNER_WITHOUT_VALID_PRODUCT: 7, + SMB_STATUS_3DTOUCH_ADVERTISE_MENU_ITEM: 8, + SMB_HOME_SCREEN_OVERFLOW_MENU_ITEM: 9, + SMB_BUSINESS_TOOLS_ADVERTISE_LIST_FIRST_ITEM: 10, + SMB_SETTINGS_ADVERTISE_LIST_ITEM: 11, + SMB_ADVERTISE_FROM_NOTIFICATION: 12, + SMB_ADVERTISE_FROM_BANNER: 13, + SMB_ADVERTISE_FROM_DEEP_LINK: 14, + SMB_BUSINESS_TOOLS_TAB_ADVERTISE: 15, + SMB_CATALOG_LIST_ADVERTISE_BUTTON: 16, + SMB_PRODUCT_DETAILS_ADVERTISE_BUTTON: 17, + SMB_ADVERTISE_FROM_STATUS_MESSAGE: 18, + SMB_HOME_SCREEN_ICON: 19, + SMB_HOME_BANNER: 20, + SMB_ADVERTISE_FROM_STATUS_MESSAGE_SELF_VIEW: 21, + SMB_STATUS_MAIN_TAB_ADVERTISE: 22, + SMB_STATUS_MAIN_TAB_BANNER: 23, + SMB_BUSINESS_HOME_CARD_CREATE_FIRST_AD: 24, + SMB_BUSINESS_HOME_CARD_CREATE_RETURNING_AD: 25, + SMB_MEDIA_SHARE_VIA_GROUP: 26, + SMB_MEDIA_SHARE_VIA_BROADCAST: 27, + STATUS_PLAYBACK_SCREEN_ICON: 28, + CATALOG_SHARED_IN_GROUP: 29, + CATALOG_SHARED_IN_BROADCAST_LIST: 30, + CATALOG_SHARED_IN_SINGLE_CHAT: 31, + PRODUCT_SHARED_IN_SINGLE_CHAT: 32, + PRODUCT_SHARED_IN_BROADCAST_LIST: 33, + PRODUCT_SHARED_IN_GROUP: 34, + PRODUCT_LINK_SHARED_IN_SINGLE_CHAT: 35, + PRODUCT_LINK_SHARED_IN_BROADCAST_LIST: 36, + PRODUCT_LINK_SHARED_IN_GROUP: 37, + SMB_MESSAGING_GUIDE_AD_CREATION: 38, + SMB_BUSINESS_HOME_ADVERTISE_FROM_BANNER: 39, + SMB_STATUS_UPSELL_BOTTOM_SHEET: 40, + BUSINESS_PROFILE: 41, + SMB_BUSINESS_HOME_CARD_ACTIVE_AD: 42, + SMB_STATUS_CHANNELS_TAB_ADVERTISE: 43, + SMB_STATUS_CHANNELS_TAB_BANNER: 44, + SMB_PRODUCT_UPSELL_BOTTOM_SHEET: 45, + SMB_STATUS_CHANNELS_UPSELL_BOTTOM_SHEET: 46, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_INDIVIDUAL: 47, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_GROUP: 48, + SMB_ADVERTISE_FROM_FORWARD_SCREEN_BROADCAST: 49, + SMB_BUSINESS_HOME_CARD_ACTIVE_AD_DISMISS: 50, + SMB_BUSINESS_HOME_CARD_DRAFT_AD: 51, + SMB_BUSINESS_HOME_MANAGE_AD: 52, + SMB_BUSINESS_TOOLS_MANAGE_AD: 53, + SMB_HOME_SCREEN_OVERFLOW_MANAGE_ITEM: 54, + SMB_BUSINESS_HOME_QP_CARD: 55, + SMB_CREATED_AD: 56, + SMB_BUSINESS_HOME_CARD_COUPON_PROMOTION: 57, + SMB_SETTINGS_MANAGE_AD: 58, + SMB_BUSINESS_HOME_IG_FIRST: 59, + SMB_BUSINESS_ADS_HUB_OVERVIEW: 60, + SMB_BUSINESS_DRAFT_AD_NUX: 61, + SMB_ADS_CREDIT_BLOKS_CTWA: 62, + SMB_ARCHIVE_STATUS_MAIN_TAB_BOOST: 80, + SMB_PRODUCT_DETAILS_ADVERTISE_AGAIN_BUTTON: 81, + SMB_ADVERTISE_FROM_MANAGE_ADS_CREATE_AD_BUTTON: 82, + SMB_ADVERTISE_FROM_AD_DETAILS_RECREATE_AD_BUTTON: 83, + SMB_BUSINESS_HOME_LEARNING_HUB: 84, + SMB_AUTOMATOR_UPSELL: 85, + SMB_ADVERTISE_FROM_MANAGE_ADS_OVERFLOW_MENU_ITEM_RECREATE_AD_BUTTON: 86 + } + ], + tooltipAction: [ + 2, + { + EMPTY: 1, + ENTER_AD_CREATION_FLOW: 2, + DISMISS: 3, + IGNORE: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdAppStateOfflineNotifications', + id: 2602, + props: { + redundantCount: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1000 + }, + { + name: 'SendDocument', + id: 2172, + props: { + documentExt: [3, 'string'], + documentSize: [1, 'number'], + documentType: [ + 2, + { + OTHER: 1, + IMAGE: 2, + VIDEO: 3, + AUDIO: 4, + DOCUMENT: 5, + COMPRESSED_FILE: 6, + EXECUTABLE: 7, + VCARD: 8 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CtwaOrderSignal', + id: 4264, + props: { + ctwaOrderSignalVersion: [1, 'integer'], + ctwaSignalMetadata: [10, 'string'], + customerAdsSharingSettingEnabled: [ + 11, + { + UNSET: 0, + TRUE: 1, + FALSE: 2 + } + ], + deepLinkConversionData: [2, 'string'], + deepLinkConversionSource: [3, 'string'], + eventSharingSettingEnabled: [4, 'boolean'], + globalSharingSettingEnabled: [5, 'boolean'], + orderPaid: [8, 'boolean'], + orderSignalType: [ + 6, + { + CREATED: 0, + UPDATED: 1 + } + ], + orderStatus: [ + 7, + { + PROCESSING: 0, + SHIPPED: 1, + COMPLETED: 2, + CANCELLED: 3, + PENDING: 4, + PARTIALLY_SHIPPED: 5, + PAID_CHANGE: 6 + } + ], + threadIdHmac: [9, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebDbVersionsSource', + id: 4784, + props: { + webDbVersionSource: [ + 1, + { + KNOB: 1, + LOCAL: 2, + STATIC: 3, + KNOB_WITH_LOCAL_OVERRIDE: 4 + } + ], + webSchemaInitiator: [ + 2, + { + MAIN: 1, + WEB_WORKER: 2, + SERVICE_WORKER: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'TestAnonymousMonthlyId', + id: 2960, + props: {}, + wamChannel: 'private', + privateStatsIdInt: 191000728, + weight: 1000 + }, + { + name: 'BusinessToolsEntry', + id: 2216, + props: { + businessToolsEntryPoint: [ + 3, + { + ENTRY_BANNER: 0, + ENTRY_REGISTRATION_ONBOARDING: 1, + ENTRY_CONVERSATIONS: 2, + ENTRY_SETTINGS: 3, + ENTRY_DEEPLINK: 4, + ENTRY_STATUS_TAB_MENU: 5, + ENTRY_CALLS_TAB_MENU: 6, + ENTRY_BUSINESS_TOOLS_TAB: 7 + } + ], + businessToolsSequenceNumber: [2, 'integer'], + businessToolsSessionId: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'AdvStoredTimestampExpired', + id: 3036, + props: { + advExpireTimeInHours: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ForwardSend', + id: 1728, + props: { + disappearingChatInitiator: [ + 21, + { + CHAT: 1, + INITIATED_BY_ME: 2, + INITIATED_BY_OTHER: 3, + CHAT_PICKER: 4, + BIZ_UPGRADE_FB_HOSTING: 5 + } + ], + e2eCiphertextType: [ + 12, + { + MESSAGE: 0, + PREKEY_MESSAGE: 1, + SENDER_KEY_MESSAGE: 2, + MESSAGE_SECRET_MESSAGE: 3 + } + ], + e2eCiphertextVersion: [11, 'integer'], + ephemeralityDuration: [18, 'integer'], + ephemeralityInitiator: [ + 24, + { + INITIATED_BY_ME: 1, + INITIATED_BY_OTHER: 2, + BIZ_UPGRADE_FB_HOSTING: 3 + } + ], + ephemeralityTriggerAction: [ + 25, + { + UNKNOWN: 0, + CHAT_SETTINGS: 1, + ACCOUNT_SETTINGS: 2, + BULK_CHANGE: 3, + BIZ_SUPPORTS_FB_HOSTING: 4, + UNKNOWN_GROUP: 5 + } + ], + fastForwardEnabled: [5, 'boolean'], + forwardPickerOrigin: [ + 27, + { + STATUS_VIEWER: 1 + } + ], + isForwardedForward: [22, 'boolean'], + isFrequentlyForwarded: [14, 'boolean'], + mediaCaptionPresent: [10, 'boolean'], + messageBizType: [ + 26, + { + NOT_BIZ_MSG: 0, + API_MARKETING: 1, + API_UTILITY: 2, + OTHER_API_BIZ_MSG: 3, + SMB_BIZ_MSG: 4 + } + ], + messageForwardAgeT: [4, 'timer'], + messageIsFanout: [6, 'boolean'], + messageIsFastForward: [3, 'boolean'], + messageIsInternational: [9, 'boolean'], + messageMediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageSendT: [13, 'timer'], + messageType: [ + 1, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + receiverDefaultDisappearingDuration: [20, 'integer'], + resendCount: [8, 'integer'], + retryCount: [7, 'integer'], + senderDefaultDisappearingDuration: [19, 'integer'], + typeOfGroup: [ + 23, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ], + wouldBeFrequentlyForwardedAt3: [16, 'boolean'], + wouldBeFrequentlyForwardedAt4: [17, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CommunityHomeAction', + id: 3494, + props: { + communityHomeGroupDiscoveries: [1, 'integer'], + communityHomeGroupJoins: [2, 'integer'], + communityHomeGroupNavigations: [3, 'integer'], + communityHomeId: [4, 'string'], + communityHomeViews: [5, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'StatusReportingEvents', + id: 3920, + props: { + statusReportInteraction: [ + 1, + { + CLICK_REPORT: 0, + CLICK_SUBMIT_REPORT: 1, + CLICK_CANCEL_REPORT: 2, + CLICK_SUBMIT_REPORT_BLOCK: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'IncomingMessageDrop', + id: 3724, + props: { + agentEngagementType: [ + 12, + { + DIRECT_CHAT: 0, + INVOKED: 1, + MEMBER: 2 + } + ], + botType: [ + 14, + { + UNKNOWN: 0, + METABOT: 1, + BOT_1P_BIZ: 2, + BOT_3P_BIZ: 3, + UGC: 4, + META_CHARACTER: 5 + } + ], + e2eCiphertextType: [ + 1, + { + MESSAGE: 0, + PREKEY_MESSAGE: 1, + SENDER_KEY_MESSAGE: 2, + MESSAGE_SECRET_MESSAGE: 3 + } + ], + e2eDestination: [ + 2, + { + INDIVIDUAL: 0, + GROUP: 1, + LIST: 2, + STATUS: 3, + CHANNEL: 4, + INTEROP: 5 + } + ], + e2eFailureReason: [ + 9, + { + INVALID_MESSAGE: 0, + LEGACY_MESSAGE: 1, + INVALID_VERSION: 2, + PRE_KEY_MESSAGE_MISSING_PRE_KEY: 3, + PRE_KEY_MESSAGE_INVALID_KEY: 4, + UNTRUSTED_IDENTITY: 5, + NO_SESSION_AVAILABLE: 6, + PLAINTEXT_BYTE_MISMATCH: 7, + UNKNOWN_CIPHERTEXT_TYPE: 8, + UNKNOWN_CIPHERTEXT_VERSION: 9, + INVALID_PADDING: 10, + INVALID_PROTOCOL_BUFFER: 11, + INVALID_NUMBER_OF_MESSAGE_TYPES: 12, + INVALID_IMAGE_FILE_LENGTH: 13, + INVALID_IMAGE_FILE_SHA256: 14, + INVALID_IMAGE_MEDIA_URL: 15, + INVALID_IMAGE_MEDIA_KEY: 16, + INVALID_IMAGE_MIME_TYPE: 17, + UNKNOWN_V2_TAGS: 18, + INVALID_EDIT_VERSION: 19, + INVALID_HSM_NAMESPACE: 20, + INVALID_HSM_ELEMENT: 21, + UNKNOWN_PROTOCOL_MESSAGE_TYPE: 22, + DUPLICATE_MESSAGE: 23, + FINGERPRINT_IDENTITY_MISMATCH: 24, + FINGERPRINT_VERSION_MISMATCH: 25, + INVALID_ARGUMENT: 26, + INVALID_KEY: 27, + INVALID_KEY_ID: 28, + INVALID_MAC: 29, + NO_MEMORY: 30, + STALE_KEY_EXCHANGE: 31, + VRF_SIGNATURE_VERIFICATION_FAILED: 32, + ERROR_MINIMUM_VALUE: 33, + ERROR_UNKNOWN: 34, + INVALID_BROADCAST_STANZA_ATTRIBUTE: 35, + INVALID_LIST_REPLY_MESSAGE: 36, + INVALID_LIST_REPLY_ROW_IDENTIFIER: 37, + INVALID_BUTTONS_RESPONSE_MESSAGE: 38, + INVALID_BUTTONS_RESPONSE_BUTTON_IDENTIFIER: 39, + INVALID_ORDER_MESSAGE: 40, + ERROR_CANCELLED: 41, + FUTURE_MESSAGE: 42, + INVALID_EMPTY_PROTOBUF_NOT_ALLOWED: 43, + SELF_SEND: 44, + INVALID_MEDIA_MIME_TYPE_TEMPLATE_MESSAGE: 45, + INVALID_MEDIA_ENC_HASH: 46, + INVALID_IDENTITY: 47, + PASSTHROUGH: 48, + NOT_IN_PENDING_DEVICES: 49, + EDIT_TYPE_AND_PROTOCOL_MISMATCH: 50, + DECRYPTION_FAILED: 51, + DESERIALIZE_INVALID_PROTO_FORMAT: 52, + DESERIALIZE_RATCHET_KEY_BAD_FORMAT: 53, + DESERIALIZE_PK_INVALID_PROTO_FORMAT: 54, + DESERIALZE_PK_KEY_BAD_FORMAT: 55, + TOO_MANY_MESSAGES_IN_FUTURE: 56, + EMPTY_VERSION_CONTENT_SUFFIX: 57, + CONTENT_EXCEEDED_EXPECTED_LENGTH: 58, + GRP_INVALID_PROTO_FORMAT: 59, + GRP_INVALID_KEY_FORMAT: 60, + GRP_VERSION_CONTENT_EMPTY: 61, + GRP_INVALID_VERSION_CONTENT_LENGTH: 62, + GRP_SENDER_KEY_INVALID_PROTO_FORMAT: 63, + GRP_SENDER_KEY_PROTO_ERROR: 64, + GRP_TOO_MANY_MESSAGES_IN_FUTURE: 65, + MISSING_MESSAGE_SECRET: 66, + MESSAGE_SECRET_INVALID: 67, + INVALID_REACTION_TEXT: 68, + UNSUPPORTED_MESSAGE_TYPE: 69, + UNSUPPORTED_IN_INTEROP: 70, + TARGET_MESSAGE_NOT_FOUND: 71, + STATUS_FROM_HOSTED_DEVICE_UNSUPPORTED: 72, + GROUP_MESSAGE_FROM_HOSTED_DEVICE_UNSUPPORTED: 73, + BROADCAST_FROM_HOSTED_DEVICE_UNSUPPORTED: 74, + LIVE_LOCATION_FROM_HOSTED_DEVICE_UNSUPPORTED: 75, + MESSAGE_TYPE_MISMATCH: 76, + ERROR_SESSION_STATE_UNACKED_PKMSG_GET_BASE_KEY: 77, + ERROR_SIGNAL_MESSAGE_GET_SENDER_RATCHET_KEY: 78, + ERROR_SESSION_STATE_GET_ROOT_KEY: 79, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY_PAIR: 80, + ERROR_SESSION_STATE_SET_SENDER_CHAIN_KEY: 81, + ERROR_SESSION_STATE_FIND_RECEIVER_CHAIN: 82, + ERROR_SESSION_RECORD_DESERIALIZE: 83, + ERROR_SENDER_KEY_STATE_REMOVE_SENDER_MESSAGE_KEY: 84, + ERROR_EMPTY_PLAINTEXT_DATA: 85, + ERROR_MAC_LEN_MISMATCH: 86, + ERROR_INVALID_MAC_LEN: 87, + ERROR_INVALID_SIGNATURE_LEN: 88, + ERROR_SENDER_KEY_LOAD_KEY: 89, + ERROR_FAST_RATCHET_SENDER_KEY_LOAD_KEY: 90, + ERROR_UNKNOWN_LOAD_KEY: 91, + ERROR_UNKNOWN_LOAD_SESSION: 92, + ERROR_SESSION_RECORD_GET_STATE: 93, + ERROR_SESSION_STATE_GET_SENDER_CHAIN_KEY: 94, + ERROR_INVALID_KEY_MATEIRAL_DATA_LEN: 95, + ERROR_SESSION_STATE_GET_SENDER_RATCHET_KEY: 96, + ERROR_SESSION_STATE_GET_LOCAL_IDENTITY_KEY: 97, + ERROR_SESSION_STATE_GET_REMOTE_IDENTITY_KEY: 98, + ERROR_MEDIA_HASH_VERIFICATION_FAILURE: 99, + ERROR_CIPHERTEXT_TOO_LONG: 100, + ERROR_THUMBNAIL_HASH_VERIFICATION_FAILURE: 101, + ERROR_PARENT_CHILD_SENDER_JID_MISMATCH: 102, + INVALID_EDIT_MESSAGE: 103, + INVALID_SESSION: 104 + } + ], + e2eSenderType: [ + 3, + { + MY_PRIMARY: 1, + OTHER_PRIMARY: 2, + MY_COMPANION: 3, + OTHER_COMPANION: 4, + MY_HOSTED_COMPANION: 5, + OTHER_HOSTED_COMPANION: 6 + } + ], + invisibleMessageCategory: [ + 13, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isLid: [15, 'boolean'], + localAddressingMode: [ + 16, + { + PN: 1, + LID: 2 + } + ], + messageDropReason: [ + 4, + { + SYNCD_DELETION: 1, + ADMIN_REVOKE_NOT_ENABLED: 2, + RECEIVED_WITH_OLD_COUNTER: 3, + INVALID_STANZA: 4, + INVALID_PROTOBUF: 5, + MESSAGE_SECRET_ERROR: 6, + INVALID_LID_ADDRESSED_MESSAGE: 7, + UNKNOWN_MESSAGE_TYPE: 8, + DB_OPERATION_FAILED: 9, + INTERNAL_ERROR: 10, + EXPIRED: 11, + INVALID_HOSTED_COMPANION_STANZA: 12, + MESSAGE_REVOKED: 13, + PAYMENT_MESSAGE_REVOKED: 14, + DUPLICATE_MESSAGE: 15, + DUPLICATE_DELIVERY: 16, + INVALID_MESSAGE_REFERENCE: 17, + UNSUPPORTED_MESSAGE: 18, + MALICIOUS_DUPLICATE_MESSAGE: 19 + } + ], + messageMediaType: [ + 5, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + offline: [6, 'boolean'], + offlineCount: [11, 'integer'], + retryCount: [7, 'integer'], + revokeType: [ + 8, + { + SENDER: 0, + ADMIN: 1 + } + ], + typeOfGroup: [ + 10, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelsVideoPlay', + id: 6556, + props: { + autoPlayT: [1, 'integer'], + cid: [2, 'string'], + finishCount: [13, 'integer'], + height: [3, 'integer'], + postId: [4, 'string'], + videoDuration: [5, 'integer'], + videoInitialBufferingT: [6, 'timer'], + videoPlayOrigin: [ + 7, + { + CONVERSATION: 1, + GALLERY_PICKER: 2, + STARRED_MESSAGES: 3, + MEDIA_VIEW_PAGER: 4, + OTHER_ORIGIN: 5, + CHANNELS: 6, + STATUS: 7 + } + ], + videoPlayResult: [ + 8, + { + OK: 1, + ERROR_PLAYER: 2, + ERROR_VIDEO_TRACK: 3, + ERROR_AUDIO_TRACK: 4, + ERROR_DOWNLOAD_FAILED: 5 + } + ], + videoPlayT: [9, 'integer'], + videoPlayType: [ + 10, + { + FILE: 1, + STREAM: 2, + SENT: 3 + } + ], + videoSize: [11, 'number'], + width: [12, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdDeviceSyncAck', + id: 2180, + props: { + chatType: [ + 1, + { + OTHER: 0, + INDIVIDUAL: 1, + GROUP: 2, + STATUS: 3, + BROADCAST: 4, + CHANNEL: 5 + } + ], + invisibleMessageCategory: [ + 7, + { + PEER: 1, + INVISIBLE_KEY_DISTRIBUTION: 2, + OTHER: 3, + MEDIA_EXPRESS_NOTIFY: 4, + EPHEMERAL_SYNC_RESPONSE: 5 + } + ], + isLid: [3, 'boolean'], + localAddressingMode: [ + 5, + { + PN: 1, + LID: 2 + } + ], + revoke: [2, 'boolean'], + serverAddressingMode: [ + 6, + { + PN: 1, + LID: 2 + } + ], + typeOfGroup: [ + 4, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ReceiptStanzaReceive', + id: 2496, + props: { + dbReadsCount: [12, 'integer'], + dbWritesCount: [13, 'integer'], + mediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 10, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + processingDeferred: [14, 'boolean'], + receiptAggregation: [ + 11, + { + NONE: 0, + MULTI_MESSAGES: 1, + MULTI_PARTICIPANTS: 2, + AGGREGATE_BY_ID: 3 + } + ], + receiptStanzaDuration: [1, 'timer'], + receiptStanzaHasOrphaned: [6, 'boolean'], + receiptStanzaOfflineCount: [3, 'integer'], + receiptStanzaProcessedCount: [8, 'integer'], + receiptStanzaRetryVer: [5, 'integer'], + receiptStanzaStage: [ + 9, + { + OVERALL: 0, + WAITING_IN_E2E_QUEUE: 6, + WAITING_IN_UNORDERED_QUEUE: 7, + PARSE: 1, + WAITING_TO_PROCESS: 2, + PROCESS: 3, + WAITING_TO_ACK: 5, + ACK: 4 + } + ], + receiptStanzaTotalCount: [7, 'integer'], + receiptStanzaType: [4, 'string'], + stanzaBatchSize: [15, 'integer'], + stanzaProcessCount: [16, 'integer'] + }, + wamChannel: 'regular', + weight: 2000 + }, + { + name: 'WaShopsManagement', + id: 2908, + props: { + isShopsProductPreviewVisible: [2, 'boolean'], + shopsManagementAction: [ + 1, + { + ACTION_CLICK_SHOPS_SETTING: 1, + ACTION_CLICK_CATALOG_SETTING: 2, + ACTION_CLICK_COMMERCE_MANAGER_IN_CATALOG_SETTING: 3, + ACTION_CLICK_CANCEL_IN_CATALOG_SETTING: 4, + ACTION_CLICK_VIEW_SHOPS_IN_SHOPS_SETTING: 5, + ACTION_CLICK_COMMERCE_MANAGER_IN_SHOPS_SETTING: 6, + ACTION_CLICK_CANCEL_IN_SHOPS_SETTING: 7, + ACTION_SHOPS_PRODUCT_PREVIEW_VISIBLE: 8, + ACTION_CLICK_SHOPS_PRODUCT_PREVIEW_TILE: 9, + ACTION_CLICK_MANAGE_SHOPS: 10, + ACTION_SHARE_SHOPS: 11, + ACTION_CLICK_VIEW_SHOPS_FROM_EDIT_BIZ_PROFILE: 12, + ACTION_CLICK_COMMERCE_MANAGER_FROM_EDIT_BIZ_PROFILE: 13, + ACTION_CLICK_CANCEL_FROM_EDIT_BIZ_PROFILE: 14 + } + ], + shopsSellerJid: [3, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcStreamModeChange', + id: 770, + props: { + webcStreamMode: [ + 1, + { + QR: 0, + MAIN: 1, + SYNCING: 2, + OFFLINE: 3, + CONFLICT: 4, + PROXYBLOCK: 5, + TOS_BLOCK: 6, + SMB_TOS_BLOCK: 7, + DEPRECATED_VERSION: 8, + LOCK: 9 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MediaDownload2', + id: 1590, + props: { + activeThreadCount: [55, 'integer'], + aiFetchMediaType: [ + 62, + { + IMAGE_SINGLE: 1, + GRID_HIGH_RES: 2, + GRID_LOW_RES: 3, + INLINE_HIGH_RES: 4, + INLINE_LOW_RES: 5 + } + ], + appContext: [64, 'string'], + appContextBitfield: [65, 'integer'], + clientMessageId: [50, 'string'], + connectionType: [ + 31, + { + HOSTNAME: 0, + IP4: 1, + IP6: 2 + } + ], + daysSinceReceive: [46, 'integer'], + debugMediaException: [24, 'string'], + debugMediaIp: [22, 'string'], + debugUrl: [23, 'string'], + deviceCount: [49, 'integer'], + downloadBytesTransferred: [20, 'number'], + downloadConnectT: [15, 'timer'], + downloadHttpCode: [18, 'integer'], + downloadIsReuse: [17, 'boolean'], + downloadIsStreaming: [19, 'boolean'], + downloadNetworkT: [16, 'timer'], + downloadQuality: [ + 37, + { + NORMAL_QUALITY: 1, + MID_QUALITY: 2, + INELIGIBLE_IMAGE_TOO_SMALL: 3, + INELIGIBLE_PARTIAL_HASHES_NOT_FOUND: 4, + ERROR_DETERMINING_ELIGIBILITY: 5, + NOT_DOWNLOADED_ENOUGH_BYTES_TO_DETERMINE_ELIGIBILITY: 6 + } + ], + downloadResumePoint: [14, 'integer'], + downloadTimeToFirstByteT: [21, 'timer'], + estimatedBandwidth: [36, 'number'], + estimatedBandwidthV2: [59, 'number'], + expressPathBytesSaved: [42, 'number'], + expressPathDownloadState: [ + 56, + { + PARTIAL_OR_NONE: 1, + FULL: 2, + MEDIANOTIFY_RECEIVED_EP_DISABLED: 3, + SKIPPED_DIFF_POP: 4, + SKIPPED_AUTODOWNLOAD: 5 + } + ], + expressPathTimeSavedMs: [43, 'timer'], + fileHeight: [47, 'integer'], + fileWidth: [48, 'integer'], + hasLeveragedExpressPath: [44, 'boolean'], + httpProtocolVersionType: [ + 45, + { + HTTP1: 0, + HTTP2: 1, + HTTP3: 2 + } + ], + isProcessedVideo: [58, 'boolean'], + isSenderPlatformCapi: [52, 'boolean'], + isViewOnce: [41, 'boolean'], + maxThreadCount: [57, 'integer'], + mediaId: [38, 'integer'], + networkStack: [ + 30, + { + NATIVE: 0, + OK_HTTP: 1, + LIGER: 2, + APACHE: 3, + WATLS: 4, + CRONET: 5 + } + ], + overallAttemptCount: [4, 'integer'], + overallBackendStore: [ + 39, + { + UNKNOWN: 0, + NON_DIRECT_PATH: 1, + EVERSTORE: 2, + OIL: 3, + EXPRESS_PATH: 4, + STATIC: 5, + MANIFOLD: 6 + } + ], + overallConnBlockFetchT: [10, 'timer'], + overallConnectionClass: [29, 'string'], + overallCumT: [27, 'timer'], + overallCumUserVisibleT: [60, 'timer'], + overallCumV2T: [53, 'timer'], + overallDecryptT: [12, 'timer'], + overallDomain: [5, 'string'], + overallDownloadMode: [ + 11, + { + MANUAL: 1, + FULL: 2, + PREFETCH: 3, + HEADER: 4, + THUMBNAIL: 5, + EXPRESS_PATH_DOWNLOAD: 6, + PREFETCH_FOR_THUMB_PREVIEW: 7, + FULL_FOR_THUMB_PREVIEW: 8 + } + ], + overallDownloadOrigin: [ + 35, + { + CHAT_PERSONAL: 1, + CHAT_GROUP: 2, + STATUS_USER: 3, + STATUS_ADS: 4, + PRODUCT_CATALOG: 5, + GDPR: 6, + STICKER_PICKER: 7, + PROFILE_PICTURE: 8, + BLOKS: 9, + P2B: 10, + MESSAGE_HISTORY_SYNC: 11, + COMMUNITY: 12, + CHANNEL: 13, + BROADCAST: 14, + INTEROP: 15, + WAMO_STATUS: 16, + WAMO_BIZ_PROFILE: 17, + WAMO_PREFERENCES: 18 + } + ], + overallDownloadResult: [ + 25, + { + OK: 1, + ERROR_UNKNOWN: 2, + ERROR_TIMEOUT: 3, + ERROR_DNS: 4, + ERROR_INSUFFICIENT_SPACE: 5, + ERROR_TOO_OLD: 6, + ERROR_CANNOT_RESUME: 7, + ERROR_HASH_MISMATCH: 8, + ERROR_INVALID_URL: 9, + ERROR_OUTPUT_STREAM: 10, + ERROR_CANCEL: 11, + DEDUPED: 12, + ERROR_ENC_HASH_MISMATCH: 14, + PREFETCH_END: 15, + ERROR_CANCEL_PROGRAMMATIC: 16, + ERROR_MEDIA_CONN: 17, + ERROR_THROTTLE: 18, + ERROR_SSL: 19, + ERROR_NETWORK: 20, + ERROR_CONNECT: 21, + ERROR_EP_NOTIFY_DECRYPTION_FAILURE: 22, + SKIPPED_EP_DIFFERENT_POP: 23, + SKIPPED_EP_AUTODOWNLOAD_DISABLED: 24, + ERROR_SERVER: 25, + ERROR_WATLS: 26, + ERROR_INVALID_CODE: 27, + ERROR_WAMSYS: 28, + ERROR_GENERIC: 29, + ERROR_CRONET: 30, + ERROR_NO_CLIENT_NETWORK: 31, + ERROR_HOST_SWITCH_REQUIRED: 32, + ERROR_SUSPICIOUS_CONTENT: 33, + ERROR_NO_ENCRYPTION_ALGORITHM: 34, + ERROR_NO_ENCRYPTED_HASH: 35, + ERROR_NO_MEDIA_HASH: 36, + ERROR_NO_MEDIA_KEY: 37, + ERROR_NO_SIDECAR: 38, + ERROR_HASH_VERIFICATION_FAILURE: 39, + INTEGRITY_CHECK_FAILURE: 40 + } + ], + overallFileValidationT: [13, 'timer'], + overallIsEncrypted: [28, 'boolean'], + overallIsFinal: [26, 'boolean'], + overallMediaSize: [7, 'number'], + overallMediaType: [ + 1, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + overallMmsVersion: [6, 'integer'], + overallQueueT: [9, 'timer'], + overallRetryCount: [3, 'integer'], + overallT: [8, 'timer'], + overallUserVisibleT: [61, 'timer'], + pairedMediaType: [ + 63, + { + SD_PHOTO: 0, + HD_PHOTO: 1, + SD_VIDEO: 2, + HD_VIDEO: 3, + MOTION_PHOTO_PARENT: 4, + MOTION_PHOTO_CHILD: 5 + } + ], + sleepModeAffected: [51, 'boolean'], + timeDelayed: [54, 'timer'], + usedFallbackHint: [40, 'string'] + }, + wamChannel: 'regular', + weight: 50 + }, + { + name: 'StatusRowView', + id: 1656, + props: { + psaCampaigns: [8, 'string'], + statusRowEntryMethod: [ + 5, + { + DIRECT_ROW_TAP: 1, + BACKWARDS_SWIPE: 2, + FOWARDS_SWIPE: 3, + BACKWARDS_TAP: 4, + FOWARDS_TAP: 5, + PREVIOUS_ROW_TIMEOUT: 6 + } + ], + statusRowIndex: [4, 'integer'], + statusRowSection: [ + 3, + { + RECENT_STORIES: 1, + PREVIOUS_STORIES: 2, + MUTED_STORIES: 3, + MY_STATUS: 4, + CHAT_LIST: 5, + GROUP_PARTICIPANT: 6, + CONTACT_CARD: 7, + PROFILE_PAGE: 8, + CHAT_LIST_SEARCH: 9, + UPDATES_TAB_SEARCH: 10, + CHAT_TOP_BAR: 11, + SEE_ALL_RECENT: 12, + SEE_ALL_VIEWED: 13, + SEE_ALL_MUTED: 14, + SEE_ALL_SEARCH: 15, + NOTIFICATION: 16, + STATUS_VIEWER_SHEET: 17, + WAMO_PREVIEW: 18 + } + ], + statusRowUnreadItemCount: [7, 'integer'], + statusRowViewCount: [6, 'integer'], + statusSessionId: [1, 'integer'], + statusViewerSessionId: [2, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SupportAiSession', + id: 4970, + props: { + citationCmsId: [5, 'string'], + supportAiErrorCode: [3, 'integer'], + supportAiErrorMessage: [4, 'string'], + supportAiEventType: [ + 1, + { + CONTACT_US_CLICKED: 1, + START_CHAT_CLICKED: 2, + NO_INTERNET_DIALOG_SHOWN: 6, + TICKET_CREATION_DIALOG_SHOWN: 7, + REVIEW_INFORMATION_LEARN_MORE_CLICKED: 8, + SUPPORT_AI_SCREEN_SHOWN: 9, + THUMB_UP_CLICKED: 10, + THUMB_DOWN_CLICKED: 11, + SUBMIT_MESSAGE_FEEDBACK: 12, + SUBMIT_MESSAGE_FEEDBACK_FAILED: 13, + SUBMIT_MESSAGE_FEEDBACK_SUCCEEDED: 14, + NEGATIVE_FEEDBACK_OPTIONS_SCREEN_CANCELLED: 15, + NEGATIVE_FEEDBACK_OPTIONS_SCREEN_SHOWN: 16, + CONTACT_US_ERROR_DIALOG_SHOWN: 17, + CONTACT_US_ERROR_DIALOG_EMAIL_BUTTON_CLICKED: 18, + CREATE_SUPPORT_TICKET_SUCCESS: 19, + CREATE_SUPPORT_TICKET_ERROR: 20, + SUPPORT_AI_SCREEN_OK_CLICKED: 21, + SUPPORT_AI_SCREEN_SHOWN_ON_THE_CHAT: 22, + SUPPORT_AI_CITATION_TAPPED: 23 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebDynamicSamplingTestEventWithSampling', + id: 5320, + props: {}, + wamChannel: 'regular', + weight: 10000 + }, + { + name: 'WebcFtsStorage', + id: 3642, + props: { + ftsTotalSize: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SmbDataSharingConsentSetting', + id: 3974, + props: { + smbDataSharingConsentSettingEntryPoint: [ + 1, + { + ENTRY_POINT_ORDER_SCREEN: 0, + ENTRY_POINT_SETTINGS_SCREEN: 1, + ENTRY_POINT_LABELS_SCREEN: 2, + ENTRY_POINT_CHAT_SCREEN: 3, + ENTRY_POINT_UNKNOWN: 4, + ENTRY_POINT_DEEP_LINK_GENERIC: 5, + ENTRY_POINT_DEEP_LINK_ADS_MANAGER_3PD_GUIDANCE_CARD: 6 + } + ], + smbDataSharingConsentSettingType: [2, 'boolean'], + smbDataSharingConsentSettingVersion: [3, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WhatsappQuickPromotionClientEligibilityWaterfall', + id: 4360, + props: { + clientExtraData: [6, 'string'], + eligibilityStatus: [1, 'boolean'], + instanceLogData: [5, 'string'], + promotionId: [2, 'string'], + qpFailureReason: [3, 'string'], + step: [4, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebcStickerMakerEvents', + id: 3104, + props: { + stickerMakerEventName: [ + 1, + { + STICKER_MAKER_BUTTON_TAP: 0, + IMAGE_UPLOADED: 1, + IMAGE_CROPPED: 2, + EMOJI_ADDED: 3, + STICKER_ADDED: 4, + TEXT_ADDED: 5, + IMAGE_OUTLINED: 6, + SEND_STICKER: 7 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SendRevokeMessage', + id: 1348, + props: { + messageMediaType: [ + 2, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + messageType: [ + 1, + { + INDIVIDUAL: 1, + GROUP: 2, + BROADCAST: 3, + STATUS: 4, + CHANNEL: 5, + INTEROP: 6, + GREETING: 7 + } + ], + revokeSendDelay: [3, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'TsNavigation', + id: 4334, + props: { + cid: [19, 'string'], + entryPointConversationInitiated: [ + 23, + { + BUSINESS_INITIATED: 0, + CONSUMER_INITIATED: 1, + NO_MESSAGES_LAST_24H: 2 + } + ], + entryPointConversionApp: [24, 'string'], + entryPointConversionSource: [25, 'string'], + groupSize: [1, 'integer'], + isCatalogVisible: [29, 'boolean'], + isCloudapi: [26, 'boolean'], + isMetaAiThread: [30, 'boolean'], + isOnpremises: [27, 'boolean'], + isSmb: [28, 'boolean'], + navigationDestination: [ + 2, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + navigationDestinationProductArea: [ + 34, + { + UNKNOWN: 1, + COMMUNITIES: 2, + CHAT_LIST: 3, + BROADCAST: 4, + GROUP_INFO: 5, + EVENTS: 6, + CALLING: 7, + CHANNEL: 8, + STATUS: 9, + REACTION: 10, + CHAT_VIEW: 11, + CONTACT_INFO: 12, + FORWARD_PICKER: 13, + MEDIA: 14, + CAMERA: 15, + SETTING_PAGE: 16, + CATALOG: 17, + FLOW: 18, + PAYMENT: 19, + NOTIFICATION: 20, + MESSAGE_ACTIONS: 21, + PARTICIPANT_PICKER: 22, + GROUP: 23, + SEARCH: 24, + BUSINESS_PROFILE: 25, + AI: 26, + PROFILE: 27, + CONTACTS: 28, + REGISTRATION: 29, + STICKER: 31, + WALLPAPER: 32, + LIVE_LOCATION: 33, + BACKUP: 34, + COMPANION: 35, + FAVORITE: 36, + BANNER: 37, + VIEW_ONCE: 38, + DISAPPEARING_MESSAGE: 39, + BLOCK_AND_REPORT: 40, + EDUCATION: 41, + DEBUG: 42, + POLL: 43, + ORDER: 44, + EMOJI: 45, + CHANGE_NUMBER: 46, + REG: 47, + OTHER_PLATFORM: 48, + CHAT_LOCK: 49, + PTV: 50, + SMB: 51, + ACCOUNT_DELETION: 52, + CTWA: 53, + PRIVACY: 54, + AVATARS: 55, + MEDIA_PREVIEW: 56, + MEDIA_PICKER: 57, + MEDIA_BROWSER: 58, + PTT: 59, + CRITICAL_LOW_STORAGE: 60, + WAFFLE: 61 + } + ], + navigationDestinationViewName: [35, 'string'], + navigationSource: [ + 3, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + referrerAction: [ + 31, + { + NULLSTATE_ASK_META_AI: 1, + TYPEAHEAD_ASK_META_AI: 2, + NULLSTATE_PAPER_PLANE: 3, + TYPEAHEAD_PAPER_PLANE: 4, + TYPEAHEAD_SEND: 5, + FAVICON: 6, + THREAD_OPEN: 7, + MY_STATUS_OVERLFOW_MENU_OPTION: 8, + AI_WIDGET: 9, + FAB_MM_TAP: 10, + NO_RESULT_STATE_ASK_META_AI: 11 + } + ], + relativeTimestampMs: [4, 'integer'], + smbCatalogBusinessVertical: [20, 'string'], + smbCatalogIsCatalogVisible: [21, 'boolean'], + smbCatalogIsToggleCart: [22, 'boolean'], + threadType: [ + 7, + { + GROUP: 1, + BROADCAST: 2, + INDIVIDUAL: 3, + STATUS: 4, + CHANNEL: 5, + SUB_GROUP: 6, + DEFAULT_SUB_GROUP: 7, + PARENT_GROUP: 8, + BOT: 9 + } + ], + tsSessionId: [5, 'integer'], + tsTimestampMs: [32, 'integer'], + typeOfGroup: [ + 6, + { + GROUP: 1, + SUBGROUP: 2, + DEFAULT_SUBGROUP: 3 + } + ], + unifiedSessionId: [33, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdSyncdDogfoodingFeatureUsage', + id: 3016, + props: { + mdSyncdDogfoodingFeature: [ + 1, + { + PIN_MUTATION: 1, + UNPIN_4TH_CHAT_MUTATION: 2, + DELETE_MUTATION: 3, + CLEAR_CHAT_REMOVE_STARRED_MUTATION: 4, + CLEAR_CHAT_KEEP_STARRED_MUTATION: 5 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'ChannelOpen', + id: 4316, + props: { + channelDirectorySessionId: [8, 'integer'], + channelEntryPoint: [ + 1, + { + UNKNOWN: 0, + UPDATES_TAB: 1, + DIRECTORY: 2, + LINK: 3, + DEEPLINK: 4, + FORWARDED_MESSAGE: 5, + DIRECTORY_SEARCH: 6, + RECOMMENDED_LIST: 7, + NOTIFICATION: 8, + UPDATES_TAB_SEARCH: 9, + STATUS: 10, + ADMIN_INVITE_MESSAGE: 11, + MEDIA_BROWSER: 12, + SIMILAR_CHANNEL: 13, + DIRECTORY_CATEGORIES: 14, + DIRECTORY_CATEGORIES_SEARCH: 15, + NEWSLETTER_MEDIA_GALLERY_MEDIA: 16, + NEWSLETTER_MEDIA_GALLERY_LINKS: 17, + THREAD_CHAIN_PILL: 18, + THREAD_CHAIN_SWIPE_UP: 19, + RECENT_SEARCHES: 20 + } + ], + channelEntryPointMetadata: [ + 9, + { + STATUS_HEADER: 1, + LINK_TOOLTIP: 2, + LINK_BUTTON: 3, + POST_TOOLTIP: 4 + } + ], + channelSessionId: [3, 'integer'], + channelUserType: [ + 4, + { + OWNER: 1, + ADMIN: 2, + FOLLOWER: 3, + GUEST: 4 + } + ], + cid: [6, 'string'], + discoverySurface: [ + 15, + { + UNKNOWN: 1, + COMMUNITY_HOME: 2, + COMMUNITY_TAB: 3, + CHAT_THREAD: 4, + CHAT_INFO_PAGE: 5, + CHAT_LIST: 6, + COMMUNITY_NAVIGATION: 7, + BACKGROUND: 8, + RESIGN: 9, + SUBGROUP_SWITCHER: 10, + COMMUNITY_COMPOSER: 11, + MEDIA_VIEWER: 12, + ALL_MEDIA: 13, + STREAMING_MEDIA_VIEWER: 14, + CALLS_HOME_TAB: 15, + IN_CALL_UI: 16, + STATUS_HOME_TAB: 17, + STATUS_COMPOSER: 18, + STATUS_VIEW: 19, + CAMERA: 20, + PHOTO_VIDEO_LIBRARY: 21, + SETTINGS_HOME_TAB: 22, + TOOLS_TAB: 23, + COMMUNITY_SETTINGS: 24, + CHANNEL_UPDATES_HOME: 25, + CHANNEL_THREAD: 26, + CHANNEL_DIRECTORY: 27, + CHANNEL_PROFILE: 28, + CHANNEL_FORWARD: 29, + CHANNEL_PRODUCER_MEDIA_EDITOR: 30, + CHANNEL_CREATE: 31, + CHANNEL_EDIT: 32, + CHANNEL_DELETE: 33, + STATUS_COMPOSER_TEXT: 34, + LIGHTWEIGHT_CALL_UI: 35, + AI_HOME: 36, + LIGHTWEIGHT_CALL_BANNER: 37, + LIGHTWEIGHT_CALL_NUX: 38, + CALL_INFO_PAGE: 39, + SMB_CATALOG: 40, + SMB_CATALOG_SHARE_LINK: 41, + SMB_CATALOG_SHARE_PRODUCT_LINK: 42, + SMB_CATALOG_SETTINGS: 43, + SMB_CATALOG_PRODUCT: 44, + SMB_CATALOG_NEW_COLLECTION: 45, + SMB_CATALOG_EDIT_COLLECTION: 46, + SMB_CATALOG_CREATE_PRODUCT: 47, + SMB_CATALOG_EDIT_PRODUCT: 48, + SMB_CATALOG_NEW_COLLECTION_ADD_ITEMS: 49, + SMB_CATALOG_COLLECTION_UPDATE_ITEMS: 50, + SMB_CATALOG_COLLECTIONS: 51, + SMB_CATALOG_COLLECTION_REORDER: 52, + SMB_CATALOG_COLLECTION_PRODUCTS: 53, + SMB_CATALOG_COLLECTION_PRODUCTS_REORDER: 54, + CREATE_EVENT: 55, + EVENT_PAGE: 56, + EVENTS_IN_GROUP: 57, + CATALOG_HOME: 59, + CATALOG_COLLECTION: 60, + CATALOG_ITEM: 61, + CATALOG_CART: 62, + FLOWS_EXPERIENCE: 63, + BUSINESS_PROFILE_EDIT: 64, + BUSINESS_PROFILE_EDIT_NAME: 65, + BUSINESS_PROFILE_EDIT_CATEGORIES: 66, + BUSINESS_PROFILE_EDIT_DESCRIPTION: 67, + BUSINESS_PROFILE_EDIT_WEBSITE: 68, + BUSINESS_PROFILE_EDIT_EMAIL: 69, + BUSINESS_PROFILE_EDIT_ADDRESS: 70, + BUSINESS_PROFILE_EDIT_HOURS: 71, + BUSINESS_PROFILE_EDIT_COVER_PHOTO: 72, + BUSINESS_PROFILE_LINK_FB_IG: 73, + BUSINESS_PROFILE_HELP_PAGE_LINK_FB_IG: 74, + PAYMENTS_HOME: 75, + PAYMENTS_HOME_TRANSACTIONS: 76, + PAYMENTS_HOME_RECENT_MERCHANTS: 77, + PAYMENTS_HOME_INVITE_OTHERS: 78, + PAYMENTS_HOME_HELP: 79, + MESSAGE_MENU: 80, + PIN_MESSAGE_REPLACEMENT_DIALOG: 81, + PIN_MESSAGE_EXPIRATION_DIALOG: 82, + MY_STATUS_LIST: 83, + ALL_STATUS_LIST: 84, + PIN_BANNER: 85, + CALL_BANNER: 86, + LANDING_SCREEN: 87, + NEW_CHAT: 88, + GROUP_MEMBER_ADD_GROUP_CREATION: 89, + GROUP_MEMBER_ADD_EXISTING_GROUP: 90, + GROUP_CHAT: 91, + GROUP_CREATION: 92, + CONTACT_NOTIFICATION_SETTING_PAGE: 93, + CUSTOMIZE_NOTIFICATION_SETTING_PAGE: 94, + ADVANCED_NOTIFICATION_SETTINGS_PAGE: 95, + ARCHIVED_MESSAGES_TAB: 96, + STARRED_MESSAGES_TAB: 97, + CONTACT_PERM_UPSELL: 98, + CHANNEL_DIRECTORY_CATEGORIES: 99, + SEARCH: 100, + STATUS_VIEWER_SHEET: 101, + CHANNEL_PRODUCER_INSIGHTS_REACH: 102, + CHANNEL_PRODUCER_INSIGHTS_GROWTH: 103, + CHANNEL_PRODUCER_INSIGHTS_FOLLOWERS: 104, + COMMUNITY_MEDIA: 105, + FORWARD_SELECTION_SCREEN: 106, + CONTACT_SELECTION_SCREEN: 107, + EXTERNAL_SHARE: 108, + MEDIA_COMPOSER: 109, + SHARED_TEXT_COMPOSER: 110, + CONTACT_INFO: 111, + LIST_MANAGEMENT: 112, + CHANNEL_LINK: 113, + CHANNEL_QR_CODE: 114, + SELF_PROFILE: 115, + PROFILE_PICTURE_PREVIEW: 116, + COINFLIP_PREVIEW: 117, + AVATAR_HOME: 118, + AVATAR_POSE_AND_BACKGROUND: 119, + CHANNEL_DIRECTORY_SEARCH: 120, + CHANNEL_DIRECTORY_CATEGORIES_SEARCH: 121, + CHANNEL_UPDATES_HOME_SEARCH: 122, + UNIFIED_UPDATE_CREATION: 123, + IAB_EXPERIENCE: 124, + AVATAR_HOME_PREVIEW: 125, + STICKER_STORE: 126, + STICKER_PACK_DETAILS: 127, + PROFILE_PICTURE_EDIT: 128, + GENAI_VOICE_SURFACE: 129, + STATUS_COMPOSER_VOICE: 130, + MUSIC_DIRECTORY: 131, + MUSIC_COMPOSER: 132, + STATUS_AUDIENCE_SELECTOR: 133, + CHANNEL_STARRED_POSTS: 134, + MUSIC_ATTRIBUTION: 135, + AI_TAB: 136, + STARRED_MESSAGES_AND_UPDATES: 137, + AI_VOICE_SHEET: 138, + AI_VOICE_NATIVE_NOTIFICATION: 139, + AI_VOICE_LIVE_ACTIVITY: 140, + AI_VOICE_SETTING: 141, + AI_VOICE_ONBOARDING: 142, + STATUS_LAYOUTS_EDITOR: 143, + IMAGINE_BOTTOM_SHEET: 144, + APP_LAUNCHER_SHORTCUTS_SURFACE: 145, + WAMOSUB_SUBSCRIPTION_SHEET: 146, + WAMOSUB_ERROR_SHEET: 147, + WAMOSUB_SUCCESS_SHEET: 148, + WAMOSUB_SUBSCRIPTION_MANAGEMENT: 149, + WAMOSUB_AUDIENCE_SELECTION_SHEET: 150, + WAMOSUB_UNFOLLOW_AND_CANCEL_SHEET: 151, + CONTACT_PERM_UPSELL_LIMITED_ACCESS_IOS18: 152, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_LANDING_SCREEN: 153, + NO_CONTACT_ACCESS_PERMISSION_NULL_STATE_CALLS_SCREEN: 154, + SMB_GREETING_MESSAGE_SETTINGS: 155, + SMB_GREETING_MESSAGE_EDIT: 156, + SMB_GREETING_MESSAGE_SELECT_RECIPIENTS: 157, + SMB_AWAY_MESSAGE_SETTING: 158, + SMB_AWAY_MESSAGE_EDIT: 159, + SMB_AWAY_MESSAGE_SELECT_RECIPIENTS: 160, + SMB_QUICK_REPLY_LIST: 161, + SMB_QUICK_REPLY_EDIT: 162, + SMB_QUICK_REPLY_ADD: 163, + SMB_LABELS_LIST: 164, + SMB_LABEL_DETAIL: 165, + SMB_LABEL_EDIT: 166, + CONTACT_CREATION: 167, + NEW_GROUP_CONTACT_CREATION: 168, + SMB_BUSINESS_PROFILE_EDIT: 169, + SMB_BUSINESS_PROFILE_EDIT_NAME: 170, + SMB_BUSINESS_PROFILE_EDIT_CATEGORIES: 171, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS: 172, + SMB_BUSINESS_PROFILE_EDIT_ADDRESS_MAP: 173, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS: 174, + SMB_BUSINESS_PROFILE_EDIT_BUSINESS_HOURS_DETAIL: 175, + SMB_BUSINESS_PROFILE_SERVICES: 176, + SMB_BUSINESS_PROFILE_PRICE_RANGE: 177, + SMB_BUSINESS_PROFILE_ABOUT: 178, + SMB_BUSINESS_PROFILE_CHANGE_NUMBER: 179, + SMB_LINK_FB_IG: 180, + SMB_LEARNING_HUB: 181 + } + ], + entryPointMetadata: [12, 'string'], + hasNetworkConnection: [7, 'boolean'], + isPremium: [14, 'boolean'], + similarChannelsSessionId: [11, 'integer'], + unreadMessages: [5, 'integer'], + unreadPremiumMessages: [13, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'KeepInChatNotif', + id: 3484, + props: { + kicGroupNotificationTaps: [3, 'integer'], + kicGroupNotifications: [4, 'integer'], + kicNotificationTaps: [5, 'integer'], + kicNotifications: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MediaStreamPlayback', + id: 1584, + props: { + bytesDownloadedStart: [4, 'number'], + bytesTransferred: [5, 'number'], + didPlay: [15, 'boolean'], + forcedPlayCount: [12, 'integer'], + initialBufferingT: [7, 'timer'], + mediaSize: [2, 'number'], + mediaType: [ + 3, + { + NONE: 1, + PHOTO: 2, + VIDEO: 3, + AUDIO: 4, + PTT: 5, + LOCATION: 6, + CONTACT: 7, + DOCUMENT: 8, + URL: 9, + CALL: 10, + GIF: 11, + FUTURE: 12, + CONTACT_ARRAY: 13, + LIVE_LOCATION: 14, + PROFILE_PIC: 15, + STICKER: 16, + HSM: 17, + PRODUCT_IMAGE: 18, + TEMPLATE: 19, + MD_APP_STATE: 20, + MD_HISTORY_SYNC: 21, + CATALOG_LINK: 22, + PRODUCT_LINK: 23, + ORDER: 24, + LIST: 25, + LIST_REPLY: 26, + BUTTON_MESSAGE: 27, + BUTTON_RESPONSE_MESSAGE: 28, + PRODUCT_LIST: 29, + BUTTON_NFM: 30, + VIEW_ONCE_IMAGE: 31, + VIEW_ONCE_VIDEO: 32, + SHOP_STOREFRONT: 33, + REACTION: 34, + INTERACTIVE_NFM: 35, + INTERACTIVE_RESPONSE_NFM: 36, + POLL_CREATE: 37, + POLL_VOTE: 38, + TEXT: 39, + KEEP: 40, + UNKEEP: 41, + INVISIBLE_HELLO: 42, + MEDIA_EXPRESS_NOTIFY: 43, + UNDECRYPTED_MEDIA: 44, + UNDECRYPTED_TEXT: 45, + UNDECRYPTED_PAY: 46, + UNDECRYPTED_POLL: 47, + UNDECRYPTED_REACTION: 48, + UNDECRYPTED_MEDIA_NOTIFY: 49, + VIEW_ONCE_AUDIO: 50, + SCHEDULED_CALL_CREATE: 51, + SCHEDULED_CALL_CANCEL: 52, + PUSH_TO_VIDEO: 53, + PIN_IN_CHAT: 54, + INTERACTIVE_CAROUSEL: 55, + COMMENT: 56, + EPHEMERAL_SYNC_RESPONSE: 57, + EVENT_CREATE: 58, + EVENT_RESPOND: 59, + LOTTIE_STICKER: 60, + INTERACTIVE_PRODUCT_CAROUSEL: 61, + INTERACTIVE_PRODUCT: 62, + MEDIA_ALBUM: 63, + STICKER_PACK: 64, + POLL_RESULT_SNAPSHOT: 65, + MUSIC_ARTWORK: 66, + RICH_RESPONSE: 67, + MOTION_PHOTO: 68, + MOTION_VIDEO: 69 + } + ], + overallPlayT: [10, 'timer'], + overallT: [1, 'timer'], + playbackCount: [14, 'integer'], + playbackError: [17, 'integer'], + playbackOrigin: [ + 16, + { + CONVERSATION: 1, + STATUS: 2, + CHANNELS: 3 + } + ], + playbackState: [ + 11, + { + IDLE: 1, + READY_PLAY: 2, + READY_PAUSE: 3, + BUFFERING: 4, + OUTSIDE: 5, + ENDED: 6, + ERROR: 7 + } + ], + seekCount: [13, 'integer'], + totalRebufferingCount: [9, 'integer'], + totalRebufferingT: [8, 'timer'], + videoDuration: [6, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdExpansionAgentBrowserMdId', + id: 3390, + props: { + agentId: [1, 'string'], + browserId: [2, 'string'], + companionMdId: [5, 'integer'], + isCustomAgentName: [6, 'boolean'], + isNewAgent: [9, 'boolean'], + loginTimestamp: [3, 'integer'], + logoutTimestamp: [4, 'integer'], + mdLinkedCount: [8, 'integer'], + multideviceAction: [ + 7, + { + LOGIN: 0, + LOGOUT: 1, + CUSTOM_AGENT_NAME: 2, + MESSAGE_INFO: 3, + ACTIVE: 4, + DELETE: 5 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'KeepInChatPerf', + id: 3488, + props: { + chatEphemeralityDuration: [1, 'integer'], + kicErrorCode: [ + 2, + { + NONE: 1, + MESSAGE_MISSING: 2, + MESSAGE_REVOKED: 3, + SENDER_UNKEPT: 4, + OLDER_REQUEST: 5, + ORPHAN_EXPIRED: 6, + TIE_BREAK_IGNORED: 7, + MESSAGE_EXPIRED: 8, + NO_PERMISSION_TO_EDIT: 9, + MESSAGE_FROM_EX_MEMBER: 10, + OFFLINE: 11, + SENDER_DISABLED: 12, + KEPT_BEYOND_EXPIRY: 13, + NOT_PART_OF_THE_GROUP: 14, + CONTACT_BLOCKED: 15, + UNKNOWN: 999 + } + ], + kicMessageEphemeralityDuration: [3, 'integer'], + kicRequestType: [ + 4, + { + KEEP: 1, + UNKEEP: 2 + } + ], + requestSendTime: [5, 'integer'], + response: [ + 6, + { + SUCCESS: 1, + ERROR: 2 + } + ], + threadId: [7, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BusinessMute', + id: 1376, + props: { + muteT: [2, 'timer'], + muteeId: [1, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'WebDynamicSamplingTestEventWithoutSampling', + id: 5322, + props: {}, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'UserNotice', + id: 2472, + props: { + noticeTriggeredBy: [ + 5, + { + AUTO_START: 0, + BANNER: 1, + DEEP_LINK: 2, + JUST_IN_TIME: 3 + } + ], + noticeType: [ + 4, + { + LEGACY_USER_NOTICE: 0, + BADGED_USER_NOTICE: 1, + PDFN_DISCLOSURE: 2 + } + ], + tsMs: [6, 'timer'], + userNoticeContentVersion: [2, 'integer'], + userNoticeEvent: [ + 3, + { + TRIGGERED: 0, + BANNER_APPEAR: 1, + BANNER_SELECT: 2, + MODAL_APPEAR: 3, + MODAL_DISMISS: 4, + MODAL_LINK_FOLLOW: 5, + MODAL_ACCEPT: 6, + BLOCKING_MODAL_APPEAR: 7, + BLOCKING_MODAL_LINK_FOLLOW: 8, + BLOCKING_MODAL_ACCEPT: 9, + BANNER_DISMISS: 10, + EDUCATION_1_APPEAR: 11, + EDUCATION_1_DISMISS: 12, + EDUCATION_1_CONTINUE: 13, + MODAL_BACK: 14, + BLOCKING_MODAL_BACK: 15, + STARTED: 100, + PDFN_SHOWN_0: 105, + BADGE_APPEARED_NEXT_TO_SETTINGS: 110, + PDFN_SHOWN_1: 111, + PDFN_SHOWN_2: 112, + PDFN_SHOWN_3: 113, + PDFN_SHOWN_4: 114, + PDFN_SHOWN_5: 115, + PDFN_SHOWN_6: 116, + PDFN_SHOWN_7: 117, + PDFN_SHOWN_8: 118, + PDFN_SHOWN_9: 119, + BADGE_APPEARED_NEXT_TO_HELP: 120, + BADGE_SHOWN_IN_HELP: 130, + PDFN_DISMISSED: 145, + BADGE_EXPIRED: 150, + PDFN_OK: 155, + PDFN_SOFT_OPT_IN: 160, + PDFN_SOFT_OPT_OUT: 162, + PDFN_DENIED: 165, + BADGE_SELECTED: 170, + PDFN_ACCEPTED: 175, + PDFN_FAILED_TO_DOWNLOAD: 400, + PDFN_PARTIAL_DOWNLOAD: 410, + PDFN_ERROR_MISMATCHED_TEMPLATE: 420, + PDFN_ERROR_UNKNOWN: 499, + FINAL_END: 999, + PDFN_0_SECONDARY_BTN_CLICKED: 1014, + PDFN_1_SECONDARY_BTN_CLICKED: 1015, + PDFN_2_SECONDARY_BTN_CLICKED: 1016, + PDFN_3_SECONDARY_BTN_CLICKED: 1017, + PDFN_4_SECONDARY_BTN_CLICKED: 1018, + PDFN_5_SECONDARY_BTN_CLICKED: 1019, + PDFN_6_SECONDARY_BTN_CLICKED: 1020, + PDFN_7_SECONDARY_BTN_CLICKED: 1021, + PDFN_8_SECONDARY_BTN_CLICKED: 1022, + PDFN_9_SECONDARY_BTN_CLICKED: 1023 + } + ], + userNoticeId: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'SuspendedGroupDelete', + id: 4342, + props: { + deleteBtnSource: [ + 1, + { + BOTTOM_SHEET_BTN: 1, + BLOCKED_COMPOSER_BTN: 2 + } + ] + }, + wamChannel: 'private', + privateStatsIdInt: 0, + weight: 1 + }, + { + name: 'ChatFilterEvent', + id: 1616, + props: { + actionType: [ + 1, + { + OPEN: 1, + SELECT_FILTER: 2, + SEARCH_WITH_FILTER: 3, + SEARCH: 4, + SEARCH_ITEM_SELECTED: 5, + SEARCH_MSG_SENT: 6, + UNSELECT_FILTER: 7, + AUTO_CLEAR_FILTER: 8, + VIEW: 9, + GROUP_NAVIGATION: 10, + GROUP_DISCOVERY: 11, + GROUP_JOIN: 12, + SUBGROUP_SWITCHER_CLICK: 13, + SUBGROUP_MENTION_CLICK: 14, + COMMUNITY_RICH_SYSTEM_MESSAGE_CLICK: 15, + GROUP_SYSTEM_MESSAGE_CLICK: 16, + NESTING_VIEW_COMMUNITY_CLICK: 17, + SELECT_COMMUNITY_ADMINS_CAN_ADD_GROUPS: 18, + SELECT_EVERYONE_CAN_ADD_GROUPS: 19, + GROUP_JOIN_REQUEST: 20, + NOTIFICATION_RECEIVED: 21, + NOTIFICATION_RENDERED: 22, + TAP_TO_OPEN: 23, + TAP_TO_REPLY: 24, + VOIP_CALLBACK: 25, + VOIP_MESSAGE: 26, + VOIP_DECLINE: 27, + MARK_AS_READ: 28, + AI_NEW_CHAT_CLICK: 29, + AI_TAB_SELECTION_CLICK: 30, + AI_PERSONA_SELECTION_CLICK: 31, + AI_TOS_VIEW: 32, + AI_TOS_ACCEPT_CLICK: 33, + AI_TOS_DISMISS_CLICK: 34, + AI_NEW_UGC_CLICK: 35, + AI_UGC_CREATION_START_CLICK: 36, + AI_GENDER_AGE_SELECTION_CLICK: 37, + AI_PERSONALITY_SELECTION_CLICK: 38, + AI_INTEREST_SELECTION_CLICK: 39, + AI_AVATAR_SELECTION_CLICK: 40, + AI_NAME_SELECTION_CLICK: 41, + AI_UGC_CREATION_FINISH_CLICK: 42, + REQUEST_WAITLIST_DIALOG_APPEAR: 43, + REQUEST_WAITLIST_SELECT: 44, + FILTER_VIEWED: 45, + FILTER_EMPTY_STATE_VIEWED: 46, + BUSINESS_SERP_LOADED: 47, + BIZ_SEE_MORE_CLICKED: 48, + IMPRESSION: 49, + BIZ_SEARCH_SET_LOCATION_CLICKED: 50, + CLOSE_BTN_CLICKED: 51, + AI_CHAT_CLICK: 52, + NEW_CHAT_CLICK: 53, + SERP_LOADED: 54, + CLICK: 55, + ENTER: 56, + DISMISS: 57, + SEND_MESSAGE_SUCCESS: 58, + META_AI_MODEL_SETTING_SHOW: 59, + META_AI_MODEL_UPDATE: 60, + AI_CHARACTER_EXPLORE_CLICK: 61, + AI_CHARACTER_EXISTING_CHAT_CLICK: 62, + AI_CHARACTER_PREVIEWED: 63, + AI_CHARACTER_PROMPT_CLICK: 64, + AI_CHARACTER_START_CHATTING_CLICK: 65, + AI_CHARACTER_SHARE_CLICKED: 66, + AI_CHARACTER_CREATOR_PROFILE_CLICK: 67, + AI_TOS_DISMISS_NOT_ACCEPTED: 68, + AI_TOS_DISMISS_AUTO_ACCEPTED: 69, + AI_CHARACTER_CHAT_CLICK: 70, + AI_HOME_IMPRESSION: 71, + AI_VOICE_NUX_VIEW: 72, + AI_VOICE_NUX_ALLOW: 73, + AI_VOICE_NUX_DISMISS: 74, + AI_VOICE_MIC_PERMISSION_VIEW: 75, + AI_VOICE_MIC_PERMISSION_ALLOW: 76, + AI_VOICE_MIC_PERMISSION_DISMISS: 77, + AI_VOICE_AUDIO_RECORDING_PERMISSION_VIEW: 78, + AI_VOICE_AUDIO_RECORDING_PERMISSION_WHILE_USING_THE_APP_CLICK: 79, + AI_VOICE_AUDIO_RECORDING_PERMISSION_ONLY_THIS_TIME_CLICK: 80, + AI_VOICE_HALF_SHEET_VIEW: 81, + AI_VOICE_HALF_SHEET_CONNECT: 82, + AI_VOICE_FULL_SHEET_VIEW: 83, + SCAN: 84, + AI_VOICE_MIC_PERMISSION_REDIRECT_TO_SETTING: 85, + AI_VOICE_SEARCH_CHATS_LIST_CLICK: 86, + AI_VOICE_CHAT_THREAD_CLICK: 87, + AI_VOICE_FAB_CLICK: 88, + XMA_REELS_PLUGIN_PREVIEWED: 89, + XMA_REELS_CLICKED: 90, + AI_MEMORY_DELETE: 91, + AI_MEMORY_ALL_DELETE: 92, + AI_MEMORY_DISMISS_CLICK: 93, + AI_MEMORY_BOTTOM_SHEET_VIEW_ALL_CLICK: 94, + AI_MEMORY_VIEW: 95, + AI_MULTIMODAL_SESSION_BEGIN: 96, + AI_VOICE_TO_TEXT_TRANSITION: 97, + AI_VOICE_CONNECTION_ERROR: 98, + AI_VOICE_TAP_ICEBREAKER: 99, + AI_MULTIMODAL_HISTORY_FETCH: 100, + AI_LISTENING_ENABLE: 101, + AI_LISTENING_DISABLE: 102, + AI_TAB_CLICK: 103, + AI_TAB_IMPRESSION: 104, + AI_DISCOVERY_CLICK: 105, + AI_DISCOVERY_PREVIEW: 106, + AI_CHARACTER_AUDIO_MUTED: 107, + AI_CHARACTER_AUDIO_UNMUTED: 108, + AI_TAB_CHARACTER_PREVIEWED: 109, + AI_CHARACTER_IMPRESSION: 110, + AI_INLINE_TOS_RENDERED: 111, + AI_INLINE_TOS_VIEWED_ATTEMPT: 112, + AI_INLINE_TOS_VIEWED: 113, + AI_INITIATION_CONTINUE_ACCEPTED: 114, + NOVICE_AI_TAB_CLICK: 115, + AI_VOICE_BACKGROUND_CALL: 116, + AI_VOICE_FOREGROUND_CALL: 119, + AI_VOICE_START_CALL: 120, + AI_VOICE_END_CALL: 121, + AI_VOICE_AUTO_END_CALL: 122, + AI_NULL_STATE_PROMPT_SEND: 125, + AI_NULL_STATE_HISTORY_FETCH: 126, + AI_VOICE_CONVERSATION_STARTER_CLICK: 127, + AI_VOICE_START_VOICE_MODE: 128, + AI_VOICE_SEND_TEXT: 129, + AI_TOS_NOTICE_ID_ERROR: 130, + AI_HOME_PULL_TO_REFRESH: 131, + AI_VOICE_VIEW_VOICE_SELECTION: 132, + AI_VOICE_SKIP_VOICE_SELECTION: 133, + AI_VOICE_CANCEL_VOICE_SELECTION: 134, + AI_VOICE_SELECT_VOICE_SELECTION: 135, + AI_VOICE_ON_DEFAULT_ENABLED: 136, + AI_VOICE_ON_DEFAULT_DISABLED: 137, + AI_MEMORY_UPDATED: 138, + AI_CREATION_BUTTON_CLICK: 139, + AI_CREATION_TOS_PREVIEWED: 140, + AI_CREATION_PREVIEW: 141, + AI_CREATION_DESCRIPTION_SUBMIT: 142, + AI_CREATION_PERSONALITY_CATEGORY_PREVIEW: 143, + AI_CREATION_PERSONALITY_SUBMIT: 144, + AI_CREATION_AVATAR_CREATE_PREVIEWED: 145, + AI_CREATION_AVATAR_SUBMIT: 146, + AI_CREATION_AUDIENCE_PUBLIC: 147, + AI_CREATION_AUDIENCE_ONLY_ME: 148, + AI_CREATION_CONFIRMED: 149, + AI_CREATION_DELETION_STARTED: 150, + AI_CREATION_DELETION_COMPLETED: 151, + AI_CREATION_REPORT_STARTED: 152, + AI_CREATION_REPORT_COMPLETED: 153, + AI_CREATION_NAMING_PREVIEWED: 154, + AI_CREATION_NAMING_SUBMIT: 155, + AI_CREATION_INTRO_PREVIEWED: 156, + AI_CREATION_INTRO_SUBMIT: 157, + AI_CREATION_REVIEW_PREVIEWED: 158, + AI_CREATION_SUBMIT: 159, + AI_CHAT_THREAD_VOICE_VIEW: 160, + AI_VOICE_CONVERSATION_STARTER_VIEW: 161, + AI_HIDE_REQUEST_SUBMITTED: 162, + AI_CHARACTER_EXPLORE_VIEWED: 163, + META_AI_CHAT_THREAD_VIEWED_TEXT: 164, + META_AI_CHAT_THREAD_VIEWED_VOICE: 165, + TAP_TO_FORWARD: 166, + TAP_TO_COPY: 167, + TAP_TO_STAR: 168, + TAP_TO_DELETE: 169, + TAP_TO_REACT: 170, + SWIPE_TO_REPLY: 171, + AI_CREATION_AVATAR_EDIT_CLICK: 172, + AI_CREATION_AVATAR_CREATE_NEW: 173, + AI_CREATION_VOICE_SELECTION_PREVIEWED: 174, + AI_CREATION_NAMING_EDIT_SAVED: 175, + AI_CREATION_DESCRIPTION_EDIT_SAVED: 176, + AI_CREATION_INTRODUCTION_EDIT_SAVED: 177, + AI_CREATION_WELCOME_MSG_SAVED: 178, + AI_CREATION_ICEBREAKER_SAVED: 179, + AI_CREATION_INSTRUCTIONS_SAVED: 180, + AI_CREATION_INSTRUCTIONS_DELETED: 181, + AI_CREATION_EXAMPLE_DIALOG_SAVED: 182, + AI_CREATION_EXAMPLE_DIALOG_DELETED: 183, + AI_CREATION_ADVANCED_SETTINGS_PREVIEWED: 184, + AI_CREATION_VOICE_PREVIEWED: 185, + AI_CREATION_VOICE_SUBMIT: 186, + AI_VOICE_TOS_ACCEPT_CLICK: 187, + AI_VOICE_TOS_VIEW: 188, + AI_CREATION_AVATAR_REGENERATION: 189, + AI_VOICE_RING_TAP_CLICK: 190, + AI_VOICE_RING_UNDO_MUTE_UNMUTE: 191, + AI_HOME_BOUNCE: 192, + AI_CREATION_AVATAR_EDIT_BUTTON_CLICK: 193, + AI_CREATION_AVATAR_EDIT_DONE: 194, + AI_CREATION_AVATAR_EDIT_SUBMIT: 195, + AI_CREATION_AVATAR_CROP_CLICK: 196, + AI_CREATION_AVATAR_CROP_DONE: 197, + AI_CREATION_IMAGE_UPLOAD_CLICK: 198, + AI_CREATION_IMAGE_UPLOAD_DONE: 199, + AI_CREATION_AVATAR_EDIT_PREVIEWED: 200 + } + ], + activitySessionId: [6, 'string'], + filterType: [ + 2, + { + NONE: 0, + OTHER_LABELS: 1, + UNREAD: 2, + GROUP: 3, + BROADCAST_LIST: 4, + NEW_CUSTOMER: 5, + NEW_ORDER: 6, + PENDING_PAYMENT: 7, + PAID: 8, + ORDER_COMPLETE: 9, + CONTACT: 10, + NON_CONTACT: 11, + PHOTOS: 12, + GIFS: 13, + LINKS: 14, + VIDEOS: 15, + DOCUMENTS: 16, + AUDIOS: 17, + ASSIGNED_TO_YOU: 18, + PERSONAL: 19, + BUSINESS: 20, + LABEL: 21, + FAVORITES: 22, + STICKERS: 23, + COMMUNITY: 24, + BUSINESS_AI: 25, + DRAFTS: 26 + } + ], + labelName: [11, 'string'], + listId: [12, 'integer'], + listIndex: [13, 'integer'], + listType: [ + 14, + { + NONE: 0, + UNREAD: 1, + GROUP: 2, + FAVORITE: 3, + PREDEFINED: 4, + CUSTOM: 5, + COMMUNITY: 6, + BUSINESS_AI: 7, + DRAFTS: 8 + } + ], + metadata: [7, 'string'], + predefinedId: [10, 'integer'], + searchQueryId: [8, 'string'], + searchRequestId: [9, 'string'], + searchResultType: [ + 4, + { + CONTACT: 0, + CHAT: 1, + GROUP: 2, + BROADCAST_LIST: 3, + MESSAGE: 4, + BUSINESS: 5, + GROUP_IN_COMMON: 6 + } + ], + sessionId: [3, 'integer'], + targetScreen: [ + 5, + { + CHAT_LIST: 0 + } + ], + threadId: [15, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'UserNoticeError', + id: 2474, + props: { + noticeType: [ + 4, + { + LEGACY_USER_NOTICE: 0, + BADGED_USER_NOTICE: 1, + PDFN_DISCLOSURE: 2 + } + ], + userNoticeContentVersion: [2, 'integer'], + userNoticeErrorEvent: [ + 3, + { + INVALID_STANZA: 1, + JSON_FETCH: 2, + JSON_PARSE: 3, + IMAGE_FETCH: 4, + NO_ELIGIBLE_DISCLOSURE: 5, + DISCLOSURE_STAGE_FETCH: 6, + UI_TEMPLATE_MISMATCHED: 7, + ERROR_UNKNOWN: 8, + SYNC_STAGE_MISMATCH: 9, + IMAGE_FETCH_400: 10, + JSON_FETCH_400: 11, + JSON_FETCH_REDIRECT: 12, + IMAGE_FETCH_REDIRECT: 13, + IMAGE_FETCH_FORBIDDEN: 14, + JSON_FETCH_FORBIDDEN: 15 + } + ], + userNoticeId: [1, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdBootstrapHistoryDataDownloaded', + id: 2296, + props: { + appContext: [18, 'string'], + appContextBitfield: [19, 'integer'], + applicationState: [ + 17, + { + FOREGROUND: 1, + BACKGROUND: 2 + } + ], + historySyncChunkOrder: [15, 'integer'], + historySyncStageProgress: [14, 'integer'], + mdBootstrapChatsCount: [6, 'integer'], + mdBootstrapHistoryPayloadType: [ + 13, + { + INITIAL: 1, + RECENT_HISTORY: 2, + FULL_HISTORY: 3, + PUSHNAME: 4, + STATUS_V3: 5, + NON_BLOCKING_DATA: 6, + ON_DEMAND: 7 + } + ], + mdBootstrapMessagesCount: [5, 'integer'], + mdBootstrapPayloadSize: [4, 'integer'], + mdBootstrapPayloadType: [ + 2, + { + CRITICAL: 1, + NON_CRITICAL: 2 + } + ], + mdBootstrapStepDuration: [7, 'integer'], + mdBootstrapStepResult: [ + 8, + { + SUCCESS: 1, + FAILURE: 2 + } + ], + mdHsOldestMessageTimestamp: [11, 'integer'], + mdRegAttemptId: [12, 'string'], + mdSessionId: [1, 'string'], + mdStorageQuotaBytes: [9, 'integer'], + mdStorageQuotaUsedBytes: [10, 'integer'], + mdSyncFailureReason: [16, 'string'], + mdTimestamp: [3, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'PaymentsUserAction', + id: 2162, + props: { + actionTarget: [ + 4, + { + APP_EXIT: 0, + BACK_BUTTON: 1, + BBVA_TC_PRIVACY_LINK: 2, + CANCEL_BUTTON: 3, + CONFIRM_BUTTON: 4, + CONTINUE_BUTTON: 5, + DOB_SECTION: 6, + FB_TC_PRIVACY_LINK: 7, + GO_TO_BANK_WEBSITE_BUTTON: 8, + LEARN_MORE_BUTTON: 9, + NOT_NOW_BUTTON: 10, + OTP_CODE: 11, + OTP_CODE_DETECTED: 12, + OTP_RESEND_CODE_ACTIVATED: 13, + REQUEST_AGAIN_BUTTON: 14, + REQUEST_DEPOSITS_BUTTON: 15, + RESEND_OTP_CODE_BUTTON: 16, + SECOND_CONTINUE_BUTTON: 17, + TROUBLE_LOG_IN_LINK: 18, + TRY_ANOTHER_METHOD_BUTTON: 19, + WA_TC_PRIVACY_LINK: 20, + CIELO_TC_PRIVACY_LINK: 21, + LEGAL_NAME_SECTION: 22, + CPF_SECTION: 23, + VERIFY_NOW_BUTTON: 24, + VERIFY_LATER_BUTTON: 25, + CALL_BUTTON: 26, + SMS_SUCCESSFULLY_SENT: 27, + SMS_SENDING_FAILED: 28, + SMS_USER_CANCELLED: 30, + PSP_TC_PRIVACY_LINK: 31, + FB_PAGAMENTOS_LEARN_MORE_LINK: 32, + FB_PAGAMENTOS_TC_PRIVACY_LINK: 33, + FB_PAY_PIN: 34, + USE_BIOMETRIC: 35, + GET_STARTED: 36, + FACEBOOK_PAY: 37, + NEW_PAYMENT: 38, + HELP: 39, + ACCEPT_PAYMENT: 40, + PAY_COLLECT_REQUEST: 41, + DECLINE_COLLECT_REQUEST: 42, + REQUEST_DETAILS: 43, + PMT_DETAILS: 44, + SEE_ALL_TRANSACTIONS: 45, + SEE_ALL_PENDING_TRANSACTIONS: 46, + SEND_BUTTON: 47, + PAY_TAB: 48, + REQUEST_TAB: 49, + AMOUNT: 50, + ERROR_CODE_NAME: 51, + BACKGROUND_PICKER: 52, + INVITER_SEND_MONEY_BUTTON: 53, + SEND_INVITE_BUTTON: 54, + INVITEE_GET_STARTED_BUTTON: 55, + RECEIVER_BUTTON: 56, + ADD_PAYMENT_BUTTON: 57, + SETUP_PIN_BUTTON: 58, + PAYMENT_SENT_RECEIVED_BUTTON: 59, + PAYMENT_ACCOUNT_SENT_RECEIVED_BUTTON: 60, + HELP_BUTTON: 61, + CHECK_BALANCE: 62, + OTHER_BANK: 63, + PAYMENT_NOTE: 64, + SEARCH: 65, + ALLOW_BUTTON: 66, + DENY_BUTTON: 67, + NOVI_BUTTON: 68, + NOVI_TC_PRIVACY_LINK: 69, + SEE_ALL_BUTTON: 70, + CREATE_ACCOUNT_BUTTON: 71, + TRANSACTION_ENTRY: 72, + LOGIN_BUTTON: 73, + WHY_NEEDED_LINK: 74, + CARDS_SUPPORTED_LINK: 75, + OTP_SMS: 76, + OTP_EMAIL: 77, + USE_BANK_APP: 78, + CALL_BANK: 79, + TROUBLE_RECEIVING_CODE: 80, + REMOVE_CARD_BUTTON: 81, + OTP_BANK_APP: 82, + MORE: 83, + CHANGE_PAYMENT_METHOD: 84, + FINISH_SET_UP: 85, + TERMS_LINK: 86, + ORDER_DETAIL: 87, + USE_FB_PAY_PIN_BUTTON: 88, + FORGOT_PIN_BUTTON: 89, + WITHDRAW_BUTTON: 90, + ADD_PAYMENT_METHOD_BUTTON: 91, + SECURITY_BUTTON: 92, + CUSTOMER_SUPPORT_BUTTON: 93, + REPORT_TRANSACTION: 94, + PRIVACY_AND_TERM_BUTTON: 95, + REMIND_LATER_BUTTON: 96, + SCAN_PAYMENT_QR_CODE_BUTTON: 97, + SIGN_UP_P2P: 98, + ADD_PARTNER_BUTTON: 99, + ADD_NEW_PARTNER_BUTTON: 100, + LINK_THIS_ACCOUNT: 101, + LINK_ANOTHER_ACCOUNT: 102, + AUTOMATIC_PAYMENTS_SECTION: 103, + APPROVE_BUTTON: 104, + DECLINE_BUTTON: 105, + VIEW_UPDATES: 106, + REQUEST_PMT_INFO: 107, + REMOVE_PARTNER_ACCOUNT: 108, + VIEW_PARTNER_DASHBOARD: 109, + VIEW_PARTNER_WEBSITE: 110, + CHAT_WITH_BUSINESS: 111, + EXPAND_TRANSACTION_STEPS: 112, + HELP_CENTER_BUTTON: 113, + SUBMIT_BUTTON: 114, + OK_BUTTON: 115, + TEXT_BOX: 116, + PAUSE_BUTTON: 117, + RESUME_BUTTON: 118, + CHANGE_FBPAY_PIN: 119, + GET_HELP_BUTTON: 120, + DONE_BUTTON: 121, + CHECKBOX_ENABLED: 122, + CHECKBOX_DISABLED: 123, + REPORT_THIS_PAYMENT: 124, + SELECT_TRANSACTION: 125, + AMOUNT_LIMIT_REACHED_ENTER_UPI_LINK: 126, + ADD_UPI_NUMBER_BUTTON: 127, + DISMISS_BUTTON: 128, + VIEW_UPI_PROFILE_BUTTON: 129, + REMOVE_UPI_NUMBER_BUTTON: 130, + TRY_AGAIN_BUTTON: 131, + NEW_PAYMENT_TO_UPI_ID: 132, + NEW_PAYMENT_TO_CONTACT: 133, + RECIPIENT_ID: 134, + CHANGE_RECIPIENT_ID: 135, + VERIFY_RECIPIENT_BUTTON: 136, + INSTRUCTIONS: 137, + RAISE_COMPLAINT_BUTTON: 138, + VERIFY_BUTTON: 139, + PAY_NOW: 140, + WA_BIZ_DOWNLOAD: 141, + LINK_PARTNER_ACCOUNT: 142, + NEW_ORDER: 143, + INVITE_OTHERS_BUTTON: 144, + SEND_PAYMENT_BUTTON: 145, + BACK_TO_BANK_BUTTON: 146, + OTHER_CONTACT_METHODS_BUTTON: 147, + PARTNER_ENTRY: 148, + SEND_AGAIN_CONTACT: 149, + INFO_LINK: 150, + SEND_AGAIN_BUTTON: 151, + WA_PAY_PRIVACY_LINK: 152, + META_PRIVACY_LINK: 153, + WA_TC_LINK: 154, + META_TC_LINK: 155, + VISIT_PARTNER_LINK: 156, + REMOVE_PAYMENTS_INFO: 157, + CONTACT_SUPPORT_BUTTON: 158, + USE_EXISTING: 159, + SETUP_PAYMENTS: 160, + UNILATERAL_CANCEL_BUTTON: 161, + SEND_IN_APP_SUPPORT_BUTTON: 162, + SAVE_BUTTON: 163, + WATCH_VIDEO_BUTTON: 164, + STATUS_BUTTON: 165, + UPI_ALIAS_INFO_BUTTON: 166, + ADD_NUMERIC_ALIAS_BUTTON: 167, + QUICK_PAY_BUTTON: 168, + PAYMENT_METHOD: 169, + CHANGE_PAYMENT_METHOD_BUTTON: 170, + CHOOSE_UPI_APP_BUTTON: 171, + SELECT_CARD: 172, + SETTINGS_BUTTON: 173, + UPDATE_PAYMENT_METHOD: 174, + ADD_PAYMENT_METHOD: 175, + RECOVER_NUMERIC_ALIAS_BUTTON: 176, + METAPAY_LEARN_MORE_BUTTON: 177, + DATA_LEARN_MORE_BUTTON: 178, + SUPPORTED_CARDS_LINK: 179, + SEE_MORE_BUTTON: 180, + BANK_NAME: 181, + INTERNATIONAL_PAYMENTS_BUTTON: 182, + TURN_ON_INTERNATIONAL_PAYMENTS: 183, + DATE_PICKER_BUTTON: 184, + EXCHANGE_RATE_DETAILS: 185, + COPY_BUTTON: 186, + RECENT_MERCHANT_CONTACT: 187, + VIEW_ALL_MERCHANTS: 188, + VIEW_ORDERS_BUTTON: 189, + PIX_TYPE: 190, + PIX_KEY: 191, + PIX_NAME: 192, + BUYER_INITIATED_BUTTON: 193, + REMOVE_CREDENTIAL: 194, + SEND_FIRST_PAYMENT_BUTTON: 195, + BANNER_CONTINUE_BUTTON: 196, + SCAN_CODE_BUTTON: 197, + MY_CODE_BUTTON: 198, + SHARE_BUTTON: 199, + SELECT_CONTACT: 200, + PAY_PHONE_NUMBER: 201, + SEARCH_RESULT_CONTACT: 202, + PAYMENTS_WHATSAPP_BUTTON: 203, + EDIT_BUTTON: 204, + ADD_COUPON: 205, + REMOVE_COUPON: 206, + SELECT_COUPON: 207, + SCAN_QR: 208, + PIX_ROW: 209, + FORMS: 210, + NEXT_BUTTON: 211, + ADD_BUTTON: 212, + PAY_BUTTON: 213, + FLASH_BUTTON: 214, + IMAGE_BUTTON: 215, + CHANGE_BUTTON: 216, + DELETE_BUTTON: 217, + REMOVE_BUTTON: 218, + BANK_OPTION: 219 + } + ], + merchantType: [ + 43, + { + API: 1, + SMB: 2 + } + ], + p2mType: [ + 44, + { + P2M_LITE: 1, + P2M_PRO: 2, + P2M_BASIC: 3 + } + ], + paymentAccountRowSelected: [24, 'integer'], + paymentActionType: [ + 3, + { + VIEW: 0, + CLICK: 1, + ENTER: 2, + API: 3, + SHOW_ERROR: 4 + } + ], + paymentMode: [ + 7, + { + CONSUMER: 0, + MERCHANT: 1 + } + ], + paymentNumberOfAccountsAvailable: [23, 'integer'], + paymentNumberOfPeopleInvited: [32, 'integer'], + paymentPinSetUp: [33, 'boolean'], + paymentSent: [34, 'boolean'], + paymentSmsProviderNumber: [15, 'string'], + paymentTransactionStatus: [ + 45, + { + FAILED: 1, + COMPLETED: 2, + PENDING: 3 + } + ], + paymentsAccountsExist: [13, 'boolean'], + paymentsBankId: [11, 'string'], + paymentsBanksRowSelected: [22, 'integer'], + paymentsBanksScrolled: [21, 'boolean'], + paymentsBanksSearchActivated: [18, 'boolean'], + paymentsBanksSearchSelected: [20, 'boolean'], + paymentsBanksSearchString: [19, 'string'], + paymentsBanksSelectedName: [25, 'string'], + paymentsContactsBucket: [ + 31, + { + SMALL: 1, + MEDIUM: 2, + LARGE: 3, + EXTRA_LARGE: 4 + } + ], + paymentsCountryCode: [2, 'string'], + paymentsErrorCode: [9, 'string'], + paymentsErrorText: [10, 'string'], + paymentsErrorTitle: [47, 'string'], + paymentsEventId: [1, 'string'], + paymentsHasMultipleSims: [29, 'boolean'], + paymentsIqCallStatus: [ + 42, + { + REQUEST: 0, + FAILURE_RESPONSE: 1, + SUCCESS_RESPONSE: 2 + } + ], + paymentsIsMandate: [40, 'boolean'], + paymentsIsOrder: [36, 'boolean'], + paymentsMandate: [41, 'string'], + paymentsOrderType: [38, 'string'], + paymentsP2mPaymentConfigId: [39, 'string'], + paymentsRequestName: [ + 17, + { + LIST_KEYS: 1, + GET_TOKEN: 2, + UPI_BATCH: 3, + GET_BANKS: 4, + REGISTER: 5, + SET_PIN: 6, + CHANGE_PIN: 7, + GET_VPA: 8, + VPA_SYNC: 9, + GET_ONE_TRANSACTION: 10, + GET_TRANSACTIONS: 11, + GET_METHODS: 12, + REMOVE_ONE_ACCOUNT: 13, + DEREGISTER: 14, + CHANGE_PRIMARY: 15, + GENERATE_OTP: 16, + SET_TOS: 17, + GET_ACCOUNTS: 18, + SEND_UPI_RAISE_COMPLAINT: 19, + DEVICE_BINDING: 20, + PRECHECK: 21, + REGISTER_ALIAS: 22, + DEREGISTER_ALIAS: 23, + PORT_ALIAS: 24, + ACCOUNT_RECOVERY: 25, + RECOVER_ACCOUNT: 26, + RETOKENIZE_CARD: 27, + TRANSACTION_STATUS_UPDATE: 28, + CHECK_BALANCE: 29, + CHECK_PIN: 30, + COLLECT_REQUEST: 31, + ACTIVATE_INTERNATIONAL_PAYMENTS: 32, + DEACTIVATE_INTERNATIONAL_PAYMENTS: 33, + VALIDATE_INTERNATIONAL_QR: 34 + } + ], + paymentsRequestRetryCount: [26, 'integer'], + paymentsRequestRetryTimeDelaySeconds: [27, 'integer'], + paymentsResponseResult: [ + 12, + { + OK: 1, + ERROR: 2 + } + ], + paymentsSmsProviderRetryCount: [14, 'integer'], + paymentsSmsRequestRetryCount: [16, 'integer'], + paymentsUpiCheckPinErrorReason: [ + 28, + { + PIN_INVALID: 1, + INSUFFICIENT_BALANCE: 2, + SENDER_VPA_HANDLE: 3, + RECEIVER_VPA_HANDLE: 4 + } + ], + paymentsVerifyCardResult: [ + 30, + { + OK: 1, + ERROR_GENERIC: 2, + DEBIT_CARD_INVALID: 3, + EXPIRATION_IN_PAST: 4, + EXPIRATION_EMPTY: 5, + EXPIRATION_INVALID: 6, + MONTH_INVALID: 7, + YEAR_INVALID: 8 + } + ], + previousScreenName: [46, 'string'], + queryParams: [35, 'string'], + referral: [6, 'string'], + referralContext: [37, 'string'], + screen: [5, 'string'], + upiPaymentsPspId: [ + 8, + { + ICICI: 1, + HDFC: 2, + AXIS: 3, + SBI: 4 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'QuickReply', + id: 1468, + props: { + attachmentGifCount: [7, 'integer'], + attachmentImageCount: [5, 'integer'], + attachmentVideoCount: [6, 'integer'], + isSmartDefault: [10, 'boolean'], + labelThreadId: [12, 'string'], + lastMessageDirection: [ + 16, + { + OPPOSITE_PARTY_INITIATED: 0, + SELF_INITIATED: 1 + } + ], + messageDepth: [17, 'integer'], + quickReplyAction: [ + 1, + { + ACTION_SETTINGS_IMPRESSION: 1, + ACTION_SETTINGS_ADD_CLICK: 2, + ACTION_SETTINGS_ADD_ABANDONED: 3, + ACTION_SETTINGS_ADDED: 4, + ACTION_SETTINGS_DELETED: 5, + ACTION_CHAT_IMPRESSION: 6, + ACTION_CHAT_CLICK: 7, + ACTION_SETTINGS_EDITED: 8, + ACTION_CHAT_INVALID_ATTACHMENTS: 9, + ACTION_SETTINGS_INVALID_ATTACHMENTS: 10, + ACTION_SETTINGS_MEDIA_TRANSCODE: 11, + ACTION_CHAT_CLICK_CANCEL: 12, + ACTION_SMART_DEFAULT_CLICK: 13, + QUICK_REPLY_MESSAGE_SENT: 14 + } + ], + quickReplyCount: [2, 'integer'], + quickReplyEntryPoint: [ + 11, + { + QUICK_REPLY_ENTRY_POINT_KEYBOARD: 1, + QUICK_REPLY_ENTRY_POINT_ATTACHMENT_PANEL: 2, + QUICK_REPLY_ENTRY_POINT_SETTINGS_MENU: 3, + QUICK_REPLY_ENTRY_POINT_BANNERS: 4, + QUICK_REPLY_ENTRY_POINT_NUX: 5, + QUICK_REPLY_ENTRY_POINT_ACTION_BAR: 6, + QUICK_REPLY_ENTRY_POINT_DEEPLINK: 7, + QUICK_REPLY_ENTRY_POINT_MESSAGE_BUBBLE: 8 + } + ], + quickReplyKeywordCount: [3, 'integer'], + quickReplyKeywordMatched: [4, 'boolean'], + quickReplyOrigin: [ + 9, + { + UNKNOWN: 0, + CONVERSATIONS: 1, + BUTTON: 2, + KEYBOARD: 3 + } + ], + quickReplyTranscodeResult: [ + 8, + { + QUICK_REPLY_TRANSCODE_RESULT_OK: 1, + QUICK_REPLY_TRANSCODE_RESULT_CANCELLED: 2, + QUICK_REPLY_TRANSCODE_RESULT_FAIL_IMAGE_UNKNOWN: 3, + QUICK_REPLY_TRANSCODE_RESULT_FAIL_IMAGE_ENCODING: 4, + QUICK_REPLY_TRANSCODE_RESULT_FAIL_IMAGE_FILE_COPY: 5, + QUICK_REPLY_TRANSCODE_RESULT_FAIL_VIDEO_UNKNOWN: 6 + } + ], + quickReplyType: [ + 19, + { + QUICK_REPLY_TYPE_PIX_KEY: 1, + QUICK_REPLY_TYPE_SHARE_UPI_QR: 2, + QUICK_REPLY_TYPE_SETUP_UPI_QR: 3 + } + ], + threadCreationDate: [14, 'string'], + threadEntryPoint: [13, 'string'], + threadIdHmac: [15, 'string'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'CadminDemote', + id: 3426, + props: { + cadminDemoteOrigin: [ + 1, + { + PROMOTION_NOTIFICATION: 1, + MEMBER_LIST: 2 + } + ], + cadminDemoteResult: [ + 2, + { + SUCCESS: 1, + FAILURE: 2, + CANCEL: 3, + RETRY_SUCCESS: 4, + RETRY_FAILURE: 5, + RETRY_CANCEL: 6 + } + ], + isLastCadminOrCreator: [4, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MdLinkDeviceCompanion', + id: 2576, + props: { + appContext: [13, 'string'], + appContextBitfield: [14, 'integer'], + applicationState: [ + 12, + { + FOREGROUND: 1, + BACKGROUND: 2 + } + ], + mdCompanionRefHash: [10, 'string'], + mdDurationS: [8, 'integer'], + mdLinkDeviceCompanionErrorCode: [6, 'integer'], + mdLinkDeviceCompanionStage: [ + 4, + { + PAIR_SUCCESS_RECEIVED: 1, + PAIR_DEVICE_SIGN_SENT: 2, + FIRST_CONNECT: 3, + UPLOAD_PREKEYS: 4, + COMPLETE: 5, + GENERATE_PREKEYS: 6, + SENT_PREKEYS: 7 + } + ], + mdLinkDeviceExperienceId: [11, 'integer'], + mdRegAttemptId: [9, 'string'], + mdSessionId: [1, 'string'], + mdTimestampS: [7, 'integer'], + mdWasUpgraded: [5, 'boolean'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'BannerEvent', + id: 1578, + props: { + bannerId: [3, 'string'], + bannerOperation: [ + 2, + { + SHOWN: 1, + CLICK: 2, + DISMISS: 3, + ELIGIBLE: 4, + REVOKED: 5, + RENDERED: 6 + } + ], + bannerType: [ + 1, + { + GROUP: 1, + SMB_WELCOME: 2, + SMB_VERIFIED: 3, + SMB_EDIT_PROFILE: 4, + SMB_EDIT_DESCRIPTION: 5, + SMB_EDIT_CATEGORY: 6, + SMB_EDIT_HOURS: 7, + SMB_EDIT_EMAIL: 8, + SMB_CATALOG: 9, + SMB_CATALOG_SHARE_BANNER: 10, + CROSS_SELL_PROFILE_INTERSTITIAL: 11, + CROSS_SELL_CHATS_INTERSTITIAL: 12, + CROSS_SELL_CHATS_BANNER: 13, + BUSINESS_ACCOUNT_SYSTEM_MESSAGE: 14, + SMB_CATALOG_CART_INTERSTITIAL: 15, + PAYMENTS_ONBOARD_BANNER: 16, + SMB_DIRECTORY_UPSELL: 17, + SMB_CATALG_LIST_LWI_ADVERTISE_BANNER: 18, + SMB_LWI_AD_HUB_EDUCATIONAL_BANNER: 19, + SMB_COLLECTION_CREATION: 20, + SMB_AWAY_MESSAGE: 21, + SMB_GREETING_MESSAGE: 22, + PAYMENTS_INCENTIVE_BANNER: 23, + SMB_ADSCREATION_CONVERSATIONS_BANNER_WITH_VALID_PRODUCT: 24, + SMB_ADSCREATION_CONVERSATIONS_BANNER_WITHOUT_VALID_PRODUCT: 25, + SMB_MD_AWARENESS: 26, + BACKUP_QUOTA: 27, + SMB_ADD_COVER_PHOTO: 28, + PAYMENTS_MERCHANT_ONBOARDING_BANNER: 29, + SMB_PAYMENTS_MERCHANT_ACCOUNT_STATUS_BANNER: 30, + SMB_CTWA_AD_ACTION_BANNER: 31, + BIZ_INTEGRITY_WARNING_BANNER: 32, + SMB_CTWA_AUTO_LABEL_BANNER: 33, + SMB_UPDATE_CATEGORY_BANNER: 34, + SMB_PREMIUM_UPSELL_CHAT_BANNER: 35, + SMB_PREMIUM_SUBS_PAYMENT_FAILED_BANNER: 36, + SMB_PREMIUM_SUBS_UNINTENTIONAL_CANCELED_BANNER: 37, + SMB_CLICK_GET_PAID_ON_WA: 38, + SMB_CONTINUE_AD_CREATION_REMINDER_BANNER: 39, + SMB_CONTINUE_AD_CREATION_REMINDER_BOTTOM_SHEET: 40, + P2M_ORDER_HOME_BANNER: 41, + SMB_ADSCREATION_HOME_BANNER: 42, + PRIORITY_INBOX_BANNER: 43, + SMB_BUSINESS_HOME_BANNER: 44, + SMB_CHAT_LIST_QP_BANNER: 45, + SMB_ARCHIVE_STATUS_SETTINGS_BANNER: 46, + QP_BANNER_GROUP_INFO: 47, + P2M_TOOLS_ORDERS: 48, + PRIVACY_CHECKUP: 49, + QP_BANNER_PROFILE: 50, + ANDROID_BACKUP_SETTINGS_BANNER: 51, + ORDERS_UPSELL_BANNER_FROM_ORDERS_HOME: 52, + BACKUP_ERROR: 53, + CURRENT_LOCATION_BANNER: 54, + ORDERS_EDUCATION_BANNER_FROM_ORDERS_HOME: 55, + COLOR_REFRESH_NUX_BANNER: 56, + MV_ONBOARD_FROM_BIZ_PROFILE: 57, + MV_BIZ_TOOLS_SUBSCRIPTION_ACTIVATED: 58, + MV_BIZ_TOOLS_SUBSCRIPTION_NOT_ACTIVE: 59, + MV_BIZ_TOOLS_SUBSCRIPTION_CANCELED: 60, + MV_BIZ_TOOLS_PENDING_BIZ_VERIFICATION: 61, + MANAGE_GOOGLE_STORAGE_BUTTON: 62, + GOOGLE_STORAGE_80_PERCENT_FULL: 63, + GOOGLE_STORAGE_90_PERCENT_FULL: 64, + GOOGLE_BACKUP_GB_THRESHOLD: 65, + PAYMENTS_PIX_ONBOARDING_BANNER: 66, + P2M_PIX_ORDER_HOME_BANNER: 67, + DESKTOP_CROSS_SELL: 68, + SQUID: 69, + GOOGLE_STORAGE_50_PERCENT_FULL: 70, + GOOGLE_STORAGE_60_PERCENT_FULL: 71, + GOOGLE_STORAGE_70_PERCENT_FULL: 72, + QP_BANNER_SETTINGS: 73, + QP_BANNER_CALL_LIST: 74, + QP_BANNER_CHAT_LIST: 75, + QP_BANNER_UPDATES_TAB: 76, + APP_LOCK_UPSELL: 77, + OFFLINE_NOTIFICATIONS_UPSELL: 78, + MV_BIZ_TOOLS_SUBSCRIPTION_GRACE_PERIOD_REMINDER: 79, + MV_BIZ_TOOLS_SUBSCRIPTION_FAILED_PAYMENT_GRACE_PERIOD_FINAL_REMINDER: 81, + MV_BIZ_TOOLS_SUBSCRIPTION_FAILED_PAYMENT_GRACE_PERIOD_REMINDER: 82, + BACKUP_ERROR_GENERIC: 83, + BACKUP_ERROR_TOO_LARGE: 84, + BACKUP_ERROR_NOT_ENOUGH_STORAGE: 85, + BACKUP_ERROR_NOT_ICLOUD_QUOTA: 86, + BACKUP_ERROR_NOT_SIGNED_IN: 87, + QP_PRIVACY_FOOTER_UPDATES_TAB: 88, + QP_UPSELL_BANNER_SEND_FILE: 89, + QP_UPSELLL_FOOTER_PREVIEW_FILE: 90, + QP_UPSELL_BANNER_CHAT_DOCUMENT_GALLERY: 91, + RECOVER_GOOGLE_BACKUP: 92, + CONVERSATION_STARTER: 93, + CF_MIGRATION: 94, + AVATAR_BOTTOMSHEET: 95 + } + ] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'NonMessagePeerDataOperationResponse', + id: 3904, + props: { + peerDataErrorCount: [1, 'integer'], + peerDataNotFoundCount: [2, 'integer'], + peerDataRequestSessionId: [3, 'string'], + peerDataRequestType: [ + 4, + { + UPLOAD_STICKER: 0, + SEND_RECENT_STICKER_BOOTSTRAP: 1, + GENERAL_LINK_PREVIEW: 2, + HISTORY_SYNC_ON_DEMAND: 3, + PLACEHOLDER_MESSAGE_RESEND: 4, + WAFFLE_LINKING_NONCE_FETCH: 5, + SYNCD_SNAPSHOT_RECOVERY: 6 + } + ], + peerDataResponseApplyResult: [ + 8, + { + SUCCESS: 1, + OTHER_ERROR: 2, + INVALID_RESPONSE: 3, + FAIL_TO_DOWNLOAD: 4, + REQUEST_TIMEOUT: 5 + } + ], + peerDataResponseCount: [5, 'integer'], + peerDataSuccessProcessCount: [6, 'integer'], + peerDataSuccessResponseCount: [7, 'integer'] + }, + wamChannel: 'regular', + weight: 1 + }, + { + name: 'MetaVerifiedUserAction', + id: 4986, + props: { + metaVerifiedQuickPromotionId: [12, 'string'], + metaVerifiedUserActionAction: [ + 1, + { + CLICK_SUPPORT: 1, + CLICK_CUSTOM_WEBPAGE_AND_LINK: 2, + CLICK_LINKED_DEVICES: 3, + CLICK_MV_LEARN_MORE: 4, + SYNC_VIA_NOTIFICATION: 5, + SYNC_VIA_FETCH: 6, + CLICK: 7, + CLICK_MANAGE_SUBSCRIPTION: 8, + CLICK_VERIFIED_CHANNEL: 9, + CLICK_VERIFIED_BADGE: 10, + CLICK_ACCOUNT_PROTECTION: 11, + OPEN_MV_CHANNEL_CREATION_EDU: 12, + OPEN_MV_CHANNEL_SELECT_TO_VERIFY: 13, + OPEN_MV_CHANNEL_CREATION: 14, + OPEN_MV_CHANNEL_VERIFICATION: 15, + OPEN_MV_CHANNEL_UNVERIFICATION: 16, + OPEN_MV_CHANNEL_EDIT: 17, + CREATE_MV_CHANNEL: 18, + VERIFY_MV_CHANNEL: 19, + EDIT_MV_CHANNEL: 20, + UNVERIFY_MV_CHANNEL: 21, + VIEW_META_VERIFIED_BUTTON: 22, + VIEW_GET_META_VERIFIED_BUTTON: 23, + CLICK_GET_META_VERIFIED_BUTTON: 24, + CLICK_CONTINUE: 25, + CLICK_CANCEL: 26, + VIEW: 27, + CLICK_GET_WHATSAPP_BUSINESS: 28, + CLICK_SIGN_UP_FOR_META_VERIFIED: 29, + CLICK_VERIFIED_LABEL: 30, + VIEW_VERIFIED_LABEL: 31, + CONFIRM_EDIT_CHANNEL: 32, + CLICK_GET_STARTED: 33, + CREATE_WEBPAGE: 34, + DELETE_WEB_PAGE: 35, + COPY_WEB_PAGE_LINK: 36, + SHARE_WEB_PAGE_LINK: 37, + SCAN_WEB_PAGE_QR_CODE: 38, + VIEW_LINKED_DEVICES_LIST: 39, + ADD_LINKED_DEVICE: 40, + ASSIGN_CHAT: 41, + IAP_MV_FETCH_PRICE_START: 42, + IAP_MV_FETCH_PRICE_FINISH: 43, + IAP_MV_PURCHASE_START: 44, + IAP_MV_PURCHASE_FINISH: 45, + IDV_UPLOAD: 46, + DOC_UPLOAD: 47, + LOAD_META_VERIFIED_ENTRY_POINT: 48, + EDIT_PROFILE_PICTURE: 49, + VIEW_VERIFIED_BADGE: 50, + AVAILABILITY_CHECK_START: 51, + AVAILABILITY_CHECK_END: 52, + EXIT_ONBOARDING_FLOW: 53, + EXIT_BENEFITS_CENTER: 54, + CLICK_PROTECTED_BUSINESS_ACCOUNTS: 55, + CLICK_SELECT_BUSINESS_ACCOUNT: 56, + SELECT_BUSINESS_ACCOUNT: 57, + ADD_PROTECTED_BUSINESS_ACCOUNT: 58, + REMOVE_PROTECTED_BUSINESS_ACCOUNT: 59, + CLICK_VIEW_WEB_PAGE: 60, + EDIT_WEB_PAGE_LINK: 61, + CLICK_META_PRIVACY_POLICY_LINK: 62, + VIEW_META_VERIFIED_HOME: 63, + PROFILE_PICTURE_IN_REVIEW: 64, + PROFILE_PICTURE_REVIEW_RESPONSE: 65, + CLICK_GO_TO_SETTINGS: 66, + CLICK_LEARN_MORE_BUSINESS_SEARCH: 67, + CLICK_BUSINESS_SEARCH: 68, + VIEW_CONTACT_SUPPORT: 69, + ENTER_SUPPORT_REQUEST_INFO: 70, + CLICK_LEARN_MORE: 71, + CLICK_BACK_BUTTON: 72, + UPDATE_BIZ_NAME_RESPONSE: 73, + VIEW_WEB_META_VERIFIED_BUTTON: 74, + CLICK_WEB_META_VERIFIED_BUTTON: 75, + CLICK_META_VERIFIED_QP: 76, + VIEW_EXAMPLE_WEB_PAGE: 77 + } + ], + metaVerifiedUserActionAssetType: [ + 2, + { + CHANNEL: 1, + SMB: 2, + ENT: 3, + PERSONAL: 4 + } + ], + metaVerifiedUserActionErrorDetails: [ + 8, + { + IQ_REQUEST_FAILED: 1, + INELIGIBLE: 2, + USER_CANCELLED: 3 + } + ], + metaVerifiedUserActionExtra: [13, 'string'], + metaVerifiedUserActionGreenDotVisible: [7, 'boolean'], + metaVerifiedUserActionInteractionError: [ + 6, + { + EDIT_PROFILE_PICTURE_LIMIT_REACHED: 1, + NEW_SUBSCRIPTION: 2, + LINKED_DEVICE_LIMIT_REACHED_ERROR: 3, + PROFILE_PIC_NOT_AUTHORISED_ERROR: 4 + } + ], + metaVerifiedUserActionIsSubscribed: [9, 'boolean'], + metaVerifiedUserActionReferral: [ + 3, + { + SETTINGS: 1, + BUSINESS_TOOLS: 2, + NOTIFICATION: 3, + META_VERIFIED_HOME: 4, + CHANNEL_INFO: 5, + CHANNEL_ADMIN_CARD: 6, + LINKED_DEVICES: 7, + PRIVACY_INTERSTITIAL: 8, + BUSINESS_INFO: 9, + BUSINESS_CARD: 10, + LINKED_DEVICES_LIST: 11, + LINKED_DEVICES_EDU_SCREEN: 12, + PROTECTED_BUSINESS_ACCOUNTS_EMPTY_LIST: 13, + BUSINESS_CONTACTS_LIST: 14, + PROTECTED_BUSINESS_ACCOUNTS_LIST: 15, + DEEPLINK: 16, + QUICK_PROMOTION: 17, + BUSINESS_BROADCAST_HOME: 18, + BUSINESS_BROADCAST_THREAD: 19 + } + ], + metaVerifiedUserActionResult: [ + 5, + { + OK: 1, + ERROR: 2 + } + ], + metaVerifiedUserActionSurface: [ + 4, + { + META_VERIFIED_HOME: 1, + MV_SUBSCRIPTION_NOTIFICATION: 2, + BUSINESS_TOOLS: 3, + SETTINGS: 4, + LINKED_DEVICES: 5, + CONTACT_SUPPORT: 6, + VERIFIED_CHANNEL_INTRO: 7, + BUSINESS_CARD_PREVIEW: 8, + PRIVACY_INTERSTITIAL: 9, + BUSINESS_PROFILE: 10, + EDIT_PROFILE_PICTURE_CONFIRMATION: 11, + PROFILE_PHOTO: 12, + PROFILE_PICTURE_REJECTED_NOTIFICATION: 13, + PROFILE_PICTURE_REJECTED_BANNER: 14, + PROFILE_PICTURE_EDIT_LOCKED_DIALOG: 15, + WEB_PAGE: 16, + BUSINESS_INFO: 17, + CHAT_PROFILE: 18, + VERIFIED_ELIGIBLE_EDU_BOTTOMSHEET: 19, + VERIFIED_EDU_BOTTOMSHEET_CUSTOMER: 20, + BUSINESS_CARD: 21, + UNVERIFIED_ELIGIBLE_EDU_BOTTOMSHEET: 22, + UNVERIFIED_INELIGIBLE_EDU_BOTTOMSHEET: 23, + UNVERIFIED_EDU_BOTTOMSHEET_CUSTOMER: 24, + EDIT_CHANNEL_DIALOG: 25, + SUPPORT_REQUEST_FAQ_SEARCH: 26, + CHANNEL_LIST: 27, + VERIFIED_INELIGIBLE_EDU_BOTTOMSHEET: 28, + WEB_PAGE_EDU_SCREEN: 29, + LINKED_DEVICES_EDU_SCREEN: 30, + SHARE_BUSINESS: 31, + CHANNEL_INFO: 32, + PROTECTED_BUSINESS_ACCOUNTS_EMPTY_LIST: 33, + BUSINESS_CONTACTS_LIST: 34, + PROTECTED_BUSINESS_ACCOUNTS_LIST: 35, + CUSTOM_LINK_WEB_PAGE_ACTIVE_EDU: 36, + BUSINESS_SEARCH: 37, + ACCOUNT_LINKING_WARNING: 38, + CHAT: 39, + WEB_NON_SUBSCRIBER_DIALOG: 40, + WEB_ACTIVE_SUBSCRIBER_DIALOG: 41, + QUICK_PROMOTION: 42, + CALLS_TAB: 43, + FMX_NOT_META_VERIFIED_BOTTOM_SHEET: 44, + BUSINESS_BROADCAST_HOME: 45, + USERNAME_SCREEN: 46, + BUSINESS_BROADCAST_THREAD: 47 + } + ], + userActionErrorCode: [10, 'string'], + userActionSessionId: [11, 'string'] + }, + wamChannel: 'regular', + weight: 1 + } +]; +export const WEB_GLOBALS = [ + { + name: 'abKey2', + id: 4473, + type: 'string', + channels: ['regular'] + }, + { + name: 'appBuild', + id: 1657, + type: { + DEBUG: 1, + ALPHA: 2, + BETA: 3, + RELEASE: 4 + }, + channels: ['regular', 'private'] + }, + { + name: 'appIsBetaRelease', + id: 21, + type: 'boolean', + channels: ['regular', 'private'] + }, + { + name: 'appVersion', + id: 17, + type: 'string', + channels: ['regular', 'private'] + }, + { + name: 'beaconSessionId', + id: 18529, + type: 'integer', + channels: ['regular'] + }, + { + name: 'browser', + id: 779, + type: 'string', + channels: ['regular'] + }, + { + name: 'browserVersion', + id: 295, + type: 'string', + channels: ['regular'] + }, + { + name: 'datacenter', + id: 2795, + type: 'string', + channels: ['regular'] + }, + { + name: 'deviceClassification', + id: 14507, + type: { + MOBILE: 0, + TABLET: 1, + WEARABLES: 2, + VR: 3, + DESKTOP: 4, + FOLDABLE: 5, + AR_GLASS: 6, + UNDEFINED: 100 + }, + channels: ['regular'] + }, + { + name: 'deviceName', + id: 13, + type: 'string', + channels: ['regular', 'private'] + }, + { + name: 'deviceVersion', + id: 4505, + type: 'string', + channels: ['regular'] + }, + { + name: 'expoKey', + id: 5029, + type: 'string', + channels: ['regular', 'private'] + }, + { + name: 'isInCohort', + id: 19129, + type: 'boolean', + channels: ['regular'] + }, + { + name: 'mcc', + id: 5, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'memClass', + id: 655, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'mnc', + id: 3, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'networkIsWifi', + id: 23, + type: 'boolean', + channels: ['regular'] + }, + { + name: 'numCpu', + id: 10317, + type: 'integer', + channels: ['regular'] + }, + { + name: 'ocVersion', + id: 6251, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'osVersion', + id: 15, + type: 'string', + channels: ['regular', 'private'] + }, + { + name: 'platform', + id: 11, + type: { + IPHONE: 1, + ANDROID: 2, + BB: 3, + BBX: 7, + S40: 4, + SYMBIAN: 5, + WP: 6, + WEBCLIENT: 8, + OSMETA: 11, + ENT: 12, + SMBA: 13, + KAIOS: 14, + SMBI: 15, + WINDOWS: 16, + WEB: 17, + PORTAL: 18, + BLOKS: 19, + BLUEA: 20, + BLUEI: 21, + FBLITEA: 22, + GREENA: 23, + GREENI: 24, + IGDA: 25, + IGDI: 26, + IGLITEA: 27, + MLITEA: 28, + MSGRA: 29, + MSGRI: 30, + MSGRP: 31, + MSGRW: 32, + IGDW: 33, + PAGE: 34, + MSGRDM: 35, + MSGRDW: 36, + MSGROM: 37, + MSGROC: 38, + MSGRM: 43, + IGDM: 44, + WEARM: 45, + CAPI: 46, + XR: 47, + MACOS: 48, + WAMETA_REPL: 49, + ARDEV: 50, + WEAROS: 51, + MSGRVR: 52, + BLUEW: 53, + IPHONEWAMETATEST: 54, + MSGRAR: 57, + IPAD: 58, + WAVOIP_CLI: 59, + MSGRT: 60, + IGDT: 61, + ANDROIDWAMETATEST: 62, + MSGRSG: 63, + IGDSG: 64, + INTEROP: 65, + INTEROP_MSGR: 66, + IGDVR: 67, + WASG: 68, + BLUEVR: 69, + TEST: 9, + UNKNOWN: 10 + }, + channels: ['regular', 'private'] + }, + { + name: 'psCountryCode', + id: 6833, + type: 'string', + channels: ['private'] + }, + { + name: 'psId', + id: 6005, + type: 'string', + channels: ['private'] + }, + { + name: 'serviceImprovementOptOut', + id: 13293, + type: 'boolean', + channels: ['regular', 'private'] + }, + { + name: 'streamId', + id: 3543, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'wametaLoggerTestFilter', + id: 15881, + type: 'string', + channels: ['regular', 'private'] + }, + { + name: 'webcBucket', + id: 875, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcEnv', + id: 633, + type: { + PROD: 0, + INTERN: 1, + DEV: 2, + E2E: 3 + }, + channels: ['regular'] + }, + { + name: 'webcNativeAutolaunch', + id: 1009, + type: 'boolean', + channels: ['regular'] + }, + { + name: 'webcNativeBetaUpdates', + id: 1007, + type: 'boolean', + channels: ['regular'] + }, + { + name: 'webcPhoneAppVersion', + id: 1005, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcPhoneCharging', + id: 783, + type: 'boolean', + channels: ['regular'] + }, + { + name: 'webcPhoneDeviceManufacturer', + id: 829, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcPhoneDeviceModel', + id: 831, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcPhoneOsBuildNumber', + id: 833, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcPhoneOsVersion', + id: 835, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcPhonePlatform', + id: 707, + type: { + IPHONE: 1, + ANDROID: 2, + BB: 3, + BBX: 7, + S40: 4, + SYMBIAN: 5, + WP: 6, + WEBCLIENT: 8, + OSMETA: 11, + ENT: 12, + SMBA: 13, + KAIOS: 14, + SMBI: 15, + WINDOWS: 16, + WEB: 17, + PORTAL: 18, + BLOKS: 19, + BLUEA: 20, + BLUEI: 21, + FBLITEA: 22, + GREENA: 23, + GREENI: 24, + IGDA: 25, + IGDI: 26, + IGLITEA: 27, + MLITEA: 28, + MSGRA: 29, + MSGRI: 30, + MSGRP: 31, + MSGRW: 32, + IGDW: 33, + PAGE: 34, + MSGRDM: 35, + MSGRDW: 36, + MSGROM: 37, + MSGROC: 38, + MSGRM: 43, + IGDM: 44, + WEARM: 45, + CAPI: 46, + XR: 47, + MACOS: 48, + WAMETA_REPL: 49, + ARDEV: 50, + WEAROS: 51, + MSGRVR: 52, + BLUEW: 53, + IPHONEWAMETATEST: 54, + MSGRAR: 57, + IPAD: 58, + WAVOIP_CLI: 59, + MSGRT: 60, + IGDT: 61, + ANDROIDWAMETATEST: 62, + MSGRSG: 63, + IGDSG: 64, + INTEROP: 65, + INTEROP_MSGR: 66, + IGDVR: 67, + WASG: 68, + BLUEVR: 69, + TEST: 9, + UNKNOWN: 10 + }, + channels: ['regular'] + }, + { + name: 'webcRevision', + id: 18491, + type: 'integer', + channels: ['regular'] + }, + { + name: 'webcTabId', + id: 3727, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcWebArch', + id: 6605, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcWebDeviceManufacturer', + id: 6599, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcWebDeviceModel', + id: 6601, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcWebOsReleaseNumber', + id: 6603, + type: 'string', + channels: ['regular'] + }, + { + name: 'webcWebPlatform', + id: 899, + type: { + WEB: 1, + WIN32: 2, + DARWIN: 3, + IOS_TABLET: 4, + ANDROID_TABLET: 5, + WINSTORE: 6, + MACSTORE: 7, + DARWIN_BETA: 8, + WIN32_BETA: 9, + PWA: 10, + WIN_HYBRID: 11 + }, + channels: ['regular', 'private'] + }, + { + name: 'yearClass', + id: 689, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'yearClass2016', + id: 2617, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'commitTime', + id: 47, + type: 'integer', + channels: ['regular', 'private'] + }, + { + name: 'sequenceNumber', + id: 3433, + type: 'integer', + channels: ['regular', 'private'] + } +]; +export const FLAG_BYTE = 8, FLAG_GLOBAL = 0, FLAG_EVENT = 1, FLAG_FIELD = 2, FLAG_EXTENDED = 4; +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/constants.js.map b/packages/transport/vendor/lib/WAM/constants.js.map new file mode 100644 index 0000000..ec3b952 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/WAM/constants.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/encode.d.ts b/packages/transport/vendor/lib/WAM/encode.d.ts new file mode 100644 index 0000000..dd72094 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/encode.d.ts @@ -0,0 +1,3 @@ +import { BinaryInfo } from './BinaryInfo.js'; +export declare const encodeWAM: (binaryInfo: BinaryInfo) => Buffer; +//# sourceMappingURL=encode.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/encode.d.ts.map b/packages/transport/vendor/lib/WAM/encode.d.ts.map new file mode 100644 index 0000000..e258fb5 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/encode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/WAM/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAczC,eAAO,MAAM,SAAS,GAAI,YAAY,UAAU,wBAe/C,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/encode.js b/packages/transport/vendor/lib/WAM/encode.js new file mode 100644 index 0000000..ef91eb4 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/encode.js @@ -0,0 +1,150 @@ +import { BinaryInfo } from './BinaryInfo.js'; +import { FLAG_BYTE, FLAG_EVENT, FLAG_EXTENDED, FLAG_FIELD, FLAG_GLOBAL, WEB_EVENTS, WEB_GLOBALS } from './constants.js'; +const getHeaderBitLength = (key) => (key < 256 ? 2 : 3); +export const encodeWAM = (binaryInfo) => { + binaryInfo.buffer = []; + encodeWAMHeader(binaryInfo); + encodeEvents(binaryInfo); + const totalSize = binaryInfo.buffer.map(a => a.length).reduce((a, b) => a + b); + const buffer = Buffer.alloc(totalSize); + let offset = 0; + for (const buffer_ of binaryInfo.buffer) { + buffer_.copy(buffer, offset); + offset += buffer_.length; + } + return buffer; +}; +function encodeWAMHeader(binaryInfo) { + const headerBuffer = Buffer.alloc(8); // starting buffer + headerBuffer.write('WAM', 0, 'utf8'); + headerBuffer.writeUInt8(binaryInfo.protocolVersion, 3); + headerBuffer.writeUInt8(1, 4); //random flag + headerBuffer.writeUInt16BE(binaryInfo.sequence, 5); + headerBuffer.writeUInt8(0, 7); // regular channel + binaryInfo.buffer.push(headerBuffer); +} +function encodeGlobalAttributes(binaryInfo, globals) { + for (const [key, _value] of Object.entries(globals)) { + const id = WEB_GLOBALS.find(a => a?.name === key).id; + let value = _value; + if (typeof value === 'boolean') { + value = value ? 1 : 0; + } + binaryInfo.buffer.push(serializeData(id, value, FLAG_GLOBAL)); + } +} +function encodeEvents(binaryInfo) { + for (const [name, { props, globals }] of binaryInfo.events.map(a => Object.entries(a)[0])) { + encodeGlobalAttributes(binaryInfo, globals); + const event = WEB_EVENTS.find(a => a.name === name); + const props_ = Object.entries(props); + let extended = false; + for (const [, value] of props_) { + extended || (extended = value !== null); + } + const eventFlag = extended ? FLAG_EVENT : FLAG_EVENT | FLAG_EXTENDED; + binaryInfo.buffer.push(serializeData(event.id, -event.weight, eventFlag)); + for (let i = 0; i < props_.length; i++) { + const [key, _value] = props_[i]; + const id = event.props[key]?.[0]; + extended = i < props_.length - 1; + let value = _value; + if (typeof value === 'boolean') { + value = value ? 1 : 0; + } + const fieldFlag = extended ? FLAG_EVENT : FLAG_FIELD | FLAG_EXTENDED; + binaryInfo.buffer.push(serializeData(id, value, fieldFlag)); + } + } +} +function serializeData(key, value, flag) { + const bufferLength = getHeaderBitLength(key); + let buffer; + let offset = 0; + if (value === null) { + if (flag === FLAG_GLOBAL) { + buffer = Buffer.alloc(bufferLength); + offset = serializeHeader(buffer, offset, key, flag); + return buffer; + } + } + else if (typeof value === 'number' && Number.isInteger(value)) { + // is number + if (value === 0 || value === 1) { + buffer = Buffer.alloc(bufferLength); + offset = serializeHeader(buffer, offset, key, flag | ((value + 1) << 4)); + return buffer; + } + else if (-128 <= value && value < 128) { + buffer = Buffer.alloc(bufferLength + 1); + offset = serializeHeader(buffer, offset, key, flag | (3 << 4)); + buffer.writeInt8(value, offset); + return buffer; + } + else if (-32768 <= value && value < 32768) { + buffer = Buffer.alloc(bufferLength + 2); + offset = serializeHeader(buffer, offset, key, flag | (4 << 4)); + buffer.writeInt16LE(value, offset); + return buffer; + } + else if (-2147483648 <= value && value < 2147483648) { + buffer = Buffer.alloc(bufferLength + 4); + offset = serializeHeader(buffer, offset, key, flag | (5 << 4)); + buffer.writeInt32LE(value, offset); + return buffer; + } + else { + buffer = Buffer.alloc(bufferLength + 8); + offset = serializeHeader(buffer, offset, key, flag | (7 << 4)); + buffer.writeDoubleLE(value, offset); + return buffer; + } + } + else if (typeof value === 'number') { + // is float + buffer = Buffer.alloc(bufferLength + 8); + offset = serializeHeader(buffer, offset, key, flag | (7 << 4)); + buffer.writeDoubleLE(value, offset); + return buffer; + } + else if (typeof value === 'string') { + // is string + const utf8Bytes = Buffer.byteLength(value, 'utf8'); + if (utf8Bytes < 256) { + buffer = Buffer.alloc(bufferLength + 1 + utf8Bytes); + offset = serializeHeader(buffer, offset, key, flag | (8 << 4)); + buffer.writeUint8(utf8Bytes, offset++); + } + else if (utf8Bytes < 65536) { + buffer = Buffer.alloc(bufferLength + 2 + utf8Bytes); + offset = serializeHeader(buffer, offset, key, flag | (9 << 4)); + buffer.writeUInt16LE(utf8Bytes, offset); + offset += 2; + } + else { + buffer = Buffer.alloc(bufferLength + 4 + utf8Bytes); + offset = serializeHeader(buffer, offset, key, flag | (10 << 4)); + buffer.writeUInt32LE(utf8Bytes, offset); + offset += 4; + } + buffer.write(value, offset, 'utf8'); + return buffer; + } + throw 'missing'; +} +function serializeHeader(buffer, offset, key, flag) { + if (key < 256) { + buffer.writeUInt8(flag, offset); + offset += 1; + buffer.writeUInt8(key, offset); + offset += 1; + } + else { + buffer.writeUInt8(flag | FLAG_BYTE, offset); + offset += 1; + buffer.writeUInt16LE(key, offset); + offset += 2; + } + return offset; +} +//# sourceMappingURL=encode.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/encode.js.map b/packages/transport/vendor/lib/WAM/encode.js.map new file mode 100644 index 0000000..afb3f86 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/encode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/WAM/encode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/index.d.ts b/packages/transport/vendor/lib/WAM/index.d.ts new file mode 100644 index 0000000..31f26c6 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/index.d.ts @@ -0,0 +1,4 @@ +export * from './constants.js'; +export * from './encode.js'; +export * from './BinaryInfo.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/index.d.ts.map b/packages/transport/vendor/lib/WAM/index.d.ts.map new file mode 100644 index 0000000..444f943 --- /dev/null +++ b/packages/transport/vendor/lib/WAM/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/WAM/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/index.js b/packages/transport/vendor/lib/WAM/index.js new file mode 100644 index 0000000..00ad17e --- /dev/null +++ b/packages/transport/vendor/lib/WAM/index.js @@ -0,0 +1,4 @@ +export * from './constants.js'; +export * from './encode.js'; +export * from './BinaryInfo.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAM/index.js.map b/packages/transport/vendor/lib/WAM/index.js.map new file mode 100644 index 0000000..1d565cd --- /dev/null +++ b/packages/transport/vendor/lib/WAM/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/WAM/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts new file mode 100644 index 0000000..be48ae6 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts @@ -0,0 +1,10 @@ +import type { USyncQueryProtocol } from '../../Types/USync.js'; +import { type BinaryNode } from '../../WABinary/index.js'; +import { USyncUser } from '../USyncUser.js'; +export declare class USyncContactProtocol implements USyncQueryProtocol { + name: string; + getQueryElement(): BinaryNode; + getUserElement(user: USyncUser): BinaryNode; + parser(node: BinaryNode): boolean; +} +//# sourceMappingURL=USyncContactProtocol.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map new file mode 100644 index 0000000..0c6bff3 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncContactProtocol.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncContactProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,qBAAa,oBAAqB,YAAW,kBAAkB;IAC9D,IAAI,SAAY;IAEhB,eAAe,IAAI,UAAU;IAO7B,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU;IAmC3C,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;CAQjC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js new file mode 100644 index 0000000..f0e9d84 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js @@ -0,0 +1,52 @@ +import { assertNodeErrorFree } from '../../WABinary/index.js'; +import { USyncUser } from '../USyncUser.js'; +export class USyncContactProtocol { + constructor() { + this.name = 'contact'; + } + getQueryElement() { + return { + tag: 'contact', + attrs: {} + }; + } + getUserElement(user) { + if (user.phone) { + return { + tag: 'contact', + attrs: {}, + content: user.phone + }; + } + if (user.username) { + return { + tag: 'contact', + attrs: { + username: user.username, + ...(user.usernameKey ? { pin: user.usernameKey } : {}), + ...(user.lid ? { lid: user.lid } : {}) + } + }; + } + if (user.type) { + return { + tag: 'contact', + attrs: { + type: user.type + } + }; + } + return { + tag: 'contact', + attrs: {} + }; + } + parser(node) { + if (node.tag === 'contact') { + assertNodeErrorFree(node); + return node?.attrs?.type === 'in'; + } + return false; + } +} +//# sourceMappingURL=USyncContactProtocol.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js.map new file mode 100644 index 0000000..8a9e4e6 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncContactProtocol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncContactProtocol.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncContactProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAmB,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,MAAM,OAAO,oBAAoB;IAAjC;QACC,SAAI,GAAG,SAAS,CAAA;IAoDjB,CAAC;IAlDA,eAAe;QACd,OAAO;YACN,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,EAAE;SACT,CAAA;IACF,CAAC;IAED,cAAc,CAAC,IAAe;QAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,IAAI,CAAC,KAAK;aACnB,CAAA;QACF,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;gBACN,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE;oBACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtC;aACD,CAAA;QACF,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO;gBACN,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,IAAI,CAAC,IAAI;iBACf;aACD,CAAA;QACF,CAAC;QAED,OAAO;YACN,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,EAAE;SACT,CAAA;IACF,CAAC;IAED,MAAM,CAAC,IAAgB;QACtB,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5B,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACzB,OAAO,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,IAAI,CAAA;QAClC,CAAC;QAED,OAAO,KAAK,CAAA;IACb,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts new file mode 100644 index 0000000..101d18b --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts @@ -0,0 +1,23 @@ +import type { USyncQueryProtocol } from '../../Types/USync.js'; +import { type BinaryNode } from '../../WABinary/index.js'; +export type KeyIndexData = { + timestamp: number; + signedKeyIndex?: Uint8Array; + expectedTimestamp?: number; +}; +export type DeviceListData = { + id: number; + keyIndex?: number; + isHosted?: boolean; +}; +export type ParsedDeviceInfo = { + deviceList?: DeviceListData[]; + keyIndex?: KeyIndexData; +}; +export declare class USyncDeviceProtocol implements USyncQueryProtocol { + name: string; + getQueryElement(): BinaryNode; + getUserElement(): BinaryNode | null; + parser(node: BinaryNode): ParsedDeviceInfo; +} +//# sourceMappingURL=USyncDeviceProtocol.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map new file mode 100644 index 0000000..6bf13be --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncDeviceProtocol.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncDeviceProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAuB,KAAK,UAAU,EAAsB,MAAM,gBAAgB,CAAA;AAGzF,MAAM,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,UAAU,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAA;CACvB,CAAA;AAED,qBAAa,mBAAoB,YAAW,kBAAkB;IAC7D,IAAI,SAAY;IAEhB,eAAe,IAAI,UAAU;IAS7B,cAAc,IAAyB,UAAU,GAAG,IAAI;IAOxD,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB;CAqC1C"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js new file mode 100644 index 0000000..5614d7f --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js @@ -0,0 +1,54 @@ +import { assertNodeErrorFree, getBinaryNodeChild } from '../../WABinary/index.js'; +export class USyncDeviceProtocol { + constructor() { + this.name = 'devices'; + } + getQueryElement() { + return { + tag: 'devices', + attrs: { + version: '2' + } + }; + } + getUserElement( /* user: USyncUser */) { + //TODO: Implement device phashing, ts and expectedTs + //TODO: if all are not present, return null <- current behavior + //TODO: otherwise return a node w tag 'devices' w those as attrs + return null; + } + parser(node) { + const deviceList = []; + let keyIndex = undefined; + if (node.tag === 'devices') { + assertNodeErrorFree(node); + const deviceListNode = getBinaryNodeChild(node, 'device-list'); + const keyIndexNode = getBinaryNodeChild(node, 'key-index-list'); + if (Array.isArray(deviceListNode?.content)) { + for (const { tag, attrs } of deviceListNode.content) { + const id = +attrs.id; + const keyIndex = +attrs['key-index']; + if (tag === 'device') { + deviceList.push({ + id, + keyIndex, + isHosted: !!(attrs['is_hosted'] && attrs['is_hosted'] === 'true') + }); + } + } + } + if (keyIndexNode?.tag === 'key-index-list') { + keyIndex = { + timestamp: +keyIndexNode.attrs['ts'], + signedKeyIndex: keyIndexNode?.content, + expectedTimestamp: keyIndexNode.attrs['expected_ts'] ? +keyIndexNode.attrs['expected_ts'] : undefined + }; + } + } + return { + deviceList, + keyIndex + }; + } +} +//# sourceMappingURL=USyncDeviceProtocol.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map new file mode 100644 index 0000000..3d8a614 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncDeviceProtocol.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncDeviceProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAmB,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAoBzF,MAAM,OAAO,mBAAmB;IAAhC;QACC,SAAI,GAAG,SAAS,CAAA;IAuDjB,CAAC;IArDA,eAAe;QACd,OAAO;YACN,GAAG,EAAE,SAAS;YACd,KAAK,EAAE;gBACN,OAAO,EAAE,GAAG;aACZ;SACD,CAAA;IACF,CAAC;IAED,cAAc,EAAC,qBAAqB;QACnC,oDAAoD;QACpD,+DAA+D;QAC/D,gEAAgE;QAChE,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,IAAgB;QACtB,MAAM,UAAU,GAAqB,EAAE,CAAA;QACvC,IAAI,QAAQ,GAA6B,SAAS,CAAA;QAElD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5B,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACzB,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;YAC9D,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;YAE/D,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC5C,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;oBACrD,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAG,CAAA;oBACrB,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,WAAW,CAAE,CAAA;oBACrC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;wBACtB,UAAU,CAAC,IAAI,CAAC;4BACf,EAAE;4BACF,QAAQ;4BACR,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;yBACjE,CAAC,CAAA;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,YAAY,EAAE,GAAG,KAAK,gBAAgB,EAAE,CAAC;gBAC5C,QAAQ,GAAG;oBACV,SAAS,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAE;oBACrC,cAAc,EAAE,YAAY,EAAE,OAAqB;oBACnD,iBAAiB,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;iBACrG,CAAA;YACF,CAAC;QACF,CAAC;QAED,OAAO;YACN,UAAU;YACV,QAAQ;SACR,CAAA;IACF,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts new file mode 100644 index 0000000..5ee8047 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts @@ -0,0 +1,13 @@ +import type { USyncQueryProtocol } from '../../Types/USync.js'; +import { type BinaryNode } from '../../WABinary/index.js'; +export type DisappearingModeData = { + duration: number; + setAt?: Date; +}; +export declare class USyncDisappearingModeProtocol implements USyncQueryProtocol { + name: string; + getQueryElement(): BinaryNode; + getUserElement(): null; + parser(node: BinaryNode): DisappearingModeData | undefined; +} +//# sourceMappingURL=USyncDisappearingModeProtocol.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map new file mode 100644 index 0000000..60bee29 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncDisappearingModeProtocol.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncDisappearingModeProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAErE,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,qBAAa,6BAA8B,YAAW,kBAAkB;IACvE,IAAI,SAAsB;IAE1B,eAAe,IAAI,UAAU;IAO7B,cAAc,IAAI,IAAI;IAItB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB,GAAG,SAAS;CAY1D"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js new file mode 100644 index 0000000..7c40c81 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js @@ -0,0 +1,27 @@ +import { assertNodeErrorFree } from '../../WABinary/index.js'; +export class USyncDisappearingModeProtocol { + constructor() { + this.name = 'disappearing_mode'; + } + getQueryElement() { + return { + tag: 'disappearing_mode', + attrs: {} + }; + } + getUserElement() { + return null; + } + parser(node) { + if (node.tag === 'disappearing_mode') { + assertNodeErrorFree(node); + const duration = +node?.attrs.duration; + const setAt = new Date(+(node?.attrs.t || 0) * 1000); + return { + duration, + setAt + }; + } + } +} +//# sourceMappingURL=USyncDisappearingModeProtocol.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map new file mode 100644 index 0000000..f0ac334 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncDisappearingModeProtocol.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncDisappearingModeProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAmB,MAAM,gBAAgB,CAAA;AAOrE,MAAM,OAAO,6BAA6B;IAA1C;QACC,SAAI,GAAG,mBAAmB,CAAA;IAyB3B,CAAC;IAvBA,eAAe;QACd,OAAO;YACN,GAAG,EAAE,mBAAmB;YACxB,KAAK,EAAE,EAAE;SACT,CAAA;IACF,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,IAAgB;QACtB,IAAI,IAAI,CAAC,GAAG,KAAK,mBAAmB,EAAE,CAAC;YACtC,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACzB,MAAM,QAAQ,GAAW,CAAC,IAAI,EAAE,KAAK,CAAC,QAAS,CAAA;YAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;YAEpD,OAAO;gBACN,QAAQ;gBACR,KAAK;aACL,CAAA;QACF,CAAC;IACF,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts new file mode 100644 index 0000000..0ba9bcc --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts @@ -0,0 +1,13 @@ +import type { USyncQueryProtocol } from '../../Types/USync.js'; +import { type BinaryNode } from '../../WABinary/index.js'; +export type StatusData = { + status?: string | null; + setAt?: Date; +}; +export declare class USyncStatusProtocol implements USyncQueryProtocol { + name: string; + getQueryElement(): BinaryNode; + getUserElement(): null; + parser(node: BinaryNode): StatusData | undefined; +} +//# sourceMappingURL=USyncStatusProtocol.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map new file mode 100644 index 0000000..cecd9a9 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncStatusProtocol.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncStatusProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAErE,MAAM,MAAM,UAAU,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,qBAAa,mBAAoB,YAAW,kBAAkB;IAC7D,IAAI,SAAW;IAEf,eAAe,IAAI,UAAU;IAO7B,cAAc,IAAI,IAAI;IAItB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;CAqBhD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js new file mode 100644 index 0000000..6acc624 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js @@ -0,0 +1,38 @@ +import { assertNodeErrorFree } from '../../WABinary/index.js'; +export class USyncStatusProtocol { + constructor() { + this.name = 'status'; + } + getQueryElement() { + return { + tag: 'status', + attrs: {} + }; + } + getUserElement() { + return null; + } + parser(node) { + if (node.tag === 'status') { + assertNodeErrorFree(node); + let status = node?.content?.toString() ?? null; + const setAt = new Date(+(node?.attrs.t || 0) * 1000); + if (!status) { + if (node.attrs?.code && +node.attrs.code === 401) { + status = ''; + } + else { + status = null; + } + } + else if (typeof status === 'string' && status.length === 0) { + status = null; + } + return { + status, + setAt + }; + } + } +} +//# sourceMappingURL=USyncStatusProtocol.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js.map new file mode 100644 index 0000000..880295d --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncStatusProtocol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncStatusProtocol.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncStatusProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAmB,MAAM,gBAAgB,CAAA;AAOrE,MAAM,OAAO,mBAAmB;IAAhC;QACC,SAAI,GAAG,QAAQ,CAAA;IAkChB,CAAC;IAhCA,eAAe;QACd,OAAO;YACN,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,EAAE;SACT,CAAA;IACF,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,IAAgB;QACtB,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACzB,IAAI,MAAM,GAAkB,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAA;YAC7D,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;YACpD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBAClD,MAAM,GAAG,EAAE,CAAA;gBACZ,CAAC;qBAAM,CAAC;oBACP,MAAM,GAAG,IAAI,CAAA;gBACd,CAAC;YACF,CAAC;iBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9D,MAAM,GAAG,IAAI,CAAA;YACd,CAAC;YAED,OAAO;gBACN,MAAM;gBACN,KAAK;aACL,CAAA;QACF,CAAC;IACF,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts new file mode 100644 index 0000000..da872bd --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts @@ -0,0 +1,10 @@ +import type { USyncQueryProtocol } from '../../Types/USync.js'; +import { type BinaryNode } from '../../WABinary/index.js'; +import { USyncUser } from '../USyncUser.js'; +export declare class USyncUsernameProtocol implements USyncQueryProtocol { + name: string; + getQueryElement(): BinaryNode; + getUserElement(user: USyncUser): BinaryNode | null; + parser(node: BinaryNode): string | null; +} +//# sourceMappingURL=USyncUsernameProtocol.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map new file mode 100644 index 0000000..048c3df --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncUsernameProtocol.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncUsernameProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,qBAAa,qBAAsB,YAAW,kBAAkB;IAC/D,IAAI,SAAa;IAEjB,eAAe,IAAI,UAAU;IAO7B,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;IAKlD,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;CAQvC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js new file mode 100644 index 0000000..34e46a6 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js @@ -0,0 +1,25 @@ +import { assertNodeErrorFree } from '../../WABinary/index.js'; +import { USyncUser } from '../USyncUser.js'; +export class USyncUsernameProtocol { + constructor() { + this.name = 'username'; + } + getQueryElement() { + return { + tag: 'username', + attrs: {} + }; + } + getUserElement(user) { + void user; + return null; + } + parser(node) { + if (node.tag === 'username') { + assertNodeErrorFree(node); + return typeof node.content === 'string' ? node.content : null; + } + return null; + } +} +//# sourceMappingURL=USyncUsernameProtocol.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map new file mode 100644 index 0000000..3e4ac66 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncUsernameProtocol.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/USyncUsernameProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAmB,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,MAAM,OAAO,qBAAqB;IAAlC;QACC,SAAI,GAAG,UAAU,CAAA;IAsBlB,CAAC;IApBA,eAAe;QACd,OAAO;YACN,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,EAAE;SACT,CAAA;IACF,CAAC;IAED,cAAc,CAAC,IAAe;QAC7B,KAAK,IAAI,CAAA;QACT,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,IAAgB;QACtB,IAAI,IAAI,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YAC7B,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACzB,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;QAC9D,CAAC;QAED,OAAO,IAAI,CAAA;IACZ,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts new file mode 100644 index 0000000..b914dba --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts @@ -0,0 +1,26 @@ +import type { USyncQueryProtocol } from '../../Types/USync.js'; +import { type BinaryNode } from '../../WABinary/index.js'; +import { USyncUser } from '../USyncUser.js'; +export type BotProfileCommand = { + name: string; + description: string; +}; +export type BotProfileInfo = { + jid: string; + name: string; + attributes: string; + description: string; + category: string; + isDefault: boolean; + prompts: string[]; + personaId: string; + commands: BotProfileCommand[]; + commandsDescription: string; +}; +export declare class USyncBotProfileProtocol implements USyncQueryProtocol { + name: string; + getQueryElement(): BinaryNode; + getUserElement(user: USyncUser): BinaryNode; + parser(node: BinaryNode): BotProfileInfo; +} +//# sourceMappingURL=UsyncBotProfileProtocol.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map new file mode 100644 index 0000000..adccf4c --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"UsyncBotProfileProtocol.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/UsyncBotProfileProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,KAAK,UAAU,EAAuE,MAAM,gBAAgB,CAAA;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,mBAAmB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,qBAAa,uBAAwB,YAAW,kBAAkB;IACjE,IAAI,SAAQ;IAEZ,eAAe,IAAI,UAAU;IAQ7B,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU;IAQ3C,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc;CAkCxC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js new file mode 100644 index 0000000..bf5a483 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js @@ -0,0 +1,51 @@ +import { getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString } from '../../WABinary/index.js'; +import { USyncUser } from '../USyncUser.js'; +export class USyncBotProfileProtocol { + constructor() { + this.name = 'bot'; + } + getQueryElement() { + return { + tag: 'bot', + attrs: {}, + content: [{ tag: 'profile', attrs: { v: '1' } }] + }; + } + getUserElement(user) { + return { + tag: 'bot', + attrs: {}, + content: [{ tag: 'profile', attrs: { persona_id: user.personaId } }] + }; + } + parser(node) { + const botNode = getBinaryNodeChild(node, 'bot'); + const profile = getBinaryNodeChild(botNode, 'profile'); + const commandsNode = getBinaryNodeChild(profile, 'commands'); + const promptsNode = getBinaryNodeChild(profile, 'prompts'); + const commands = []; + const prompts = []; + for (const command of getBinaryNodeChildren(commandsNode, 'command')) { + commands.push({ + name: getBinaryNodeChildString(command, 'name'), + description: getBinaryNodeChildString(command, 'description') + }); + } + for (const prompt of getBinaryNodeChildren(promptsNode, 'prompt')) { + prompts.push(`${getBinaryNodeChildString(prompt, 'emoji')} ${getBinaryNodeChildString(prompt, 'text')}`); + } + return { + isDefault: !!getBinaryNodeChild(profile, 'default'), + jid: node.attrs.jid, + name: getBinaryNodeChildString(profile, 'name'), + attributes: getBinaryNodeChildString(profile, 'attributes'), + description: getBinaryNodeChildString(profile, 'description'), + category: getBinaryNodeChildString(profile, 'category'), + personaId: profile.attrs['persona_id'], + commandsDescription: getBinaryNodeChildString(commandsNode, 'description'), + commands, + prompts + }; + } +} +//# sourceMappingURL=UsyncBotProfileProtocol.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map new file mode 100644 index 0000000..2eec665 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"UsyncBotProfileProtocol.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/UsyncBotProfileProtocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,kBAAkB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAoBxC,MAAM,OAAO,uBAAuB;IAApC;QACC,SAAI,GAAG,KAAK,CAAA;IAoDb,CAAC;IAlDA,eAAe;QACd,OAAO;YACN,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;SAChD,CAAA;IACF,CAAC;IAED,cAAc,CAAC,IAAe;QAC7B,OAAO;YACN,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,SAAU,EAAE,EAAE,CAAC;SACrE,CAAA;IACF,CAAC;IAED,MAAM,CAAC,IAAgB;QACtB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAEtD,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAC5D,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAE1D,MAAM,QAAQ,GAAwB,EAAE,CAAA;QACxC,MAAM,OAAO,GAAa,EAAE,CAAA;QAE5B,KAAK,MAAM,OAAO,IAAI,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;YACtE,QAAQ,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAE;gBAChD,WAAW,EAAE,wBAAwB,CAAC,OAAO,EAAE,aAAa,CAAE;aAC9D,CAAC,CAAA;QACH,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAE,IAAI,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAE,EAAE,CAAC,CAAA;QAC3G,CAAC;QAED,OAAO;YACN,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC;YACnD,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAI;YACpB,IAAI,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAE;YAChD,UAAU,EAAE,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAE;YAC5D,WAAW,EAAE,wBAAwB,CAAC,OAAO,EAAE,aAAa,CAAE;YAC9D,QAAQ,EAAE,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAE;YACxD,SAAS,EAAE,OAAQ,CAAC,KAAK,CAAC,YAAY,CAAE;YACxC,mBAAmB,EAAE,wBAAwB,CAAC,YAAY,EAAE,aAAa,CAAE;YAC3E,QAAQ;YACR,OAAO;SACP,CAAA;IACF,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts new file mode 100644 index 0000000..e99d4b9 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts @@ -0,0 +1,10 @@ +import type { USyncQueryProtocol } from '../../Types/USync.js'; +import type { BinaryNode } from '../../WABinary/index.js'; +import type { USyncUser } from '../USyncUser.js'; +export declare class USyncLIDProtocol implements USyncQueryProtocol { + name: string; + getQueryElement(): BinaryNode; + getUserElement(user: USyncUser): BinaryNode | null; + parser(node: BinaryNode): string | null; +} +//# sourceMappingURL=UsyncLIDProtocol.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map new file mode 100644 index 0000000..ae5e38d --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"UsyncLIDProtocol.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/UsyncLIDProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,qBAAa,gBAAiB,YAAW,kBAAkB;IAC1D,IAAI,SAAQ;IAEZ,eAAe,IAAI,UAAU;IAO7B,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI;IAWlD,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;CAOvC"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js new file mode 100644 index 0000000..0aff63f --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js @@ -0,0 +1,29 @@ +export class USyncLIDProtocol { + constructor() { + this.name = 'lid'; + } + getQueryElement() { + return { + tag: 'lid', + attrs: {} + }; + } + getUserElement(user) { + if (user.lid) { + return { + tag: 'lid', + attrs: { jid: user.lid } + }; + } + else { + return null; + } + } + parser(node) { + if (node.tag === 'lid') { + return node.attrs.val; + } + return null; + } +} +//# sourceMappingURL=UsyncLIDProtocol.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map new file mode 100644 index 0000000..3c7cf9d --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"UsyncLIDProtocol.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/UsyncLIDProtocol.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,gBAAgB;IAA7B;QACC,SAAI,GAAG,KAAK,CAAA;IA2Bb,CAAC;IAzBA,eAAe;QACd,OAAO;YACN,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,EAAE;SACT,CAAA;IACF,CAAC;IAED,cAAc,CAAC,IAAe;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,OAAO;gBACN,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;aACxB,CAAA;QACF,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED,MAAM,CAAC,IAAgB;QACtB,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAI,CAAA;QACvB,CAAC;QAED,OAAO,IAAI,CAAA;IACZ,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts b/packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts new file mode 100644 index 0000000..5002e49 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts @@ -0,0 +1,6 @@ +export * from './USyncDeviceProtocol.js'; +export * from './USyncContactProtocol.js'; +export * from './USyncStatusProtocol.js'; +export * from './USyncDisappearingModeProtocol.js'; +export * from './USyncUsernameProtocol.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts.map b/packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts.map new file mode 100644 index 0000000..ea07d5f --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/index.js b/packages/transport/vendor/lib/WAUSync/Protocols/index.js new file mode 100644 index 0000000..233493b --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/index.js @@ -0,0 +1,6 @@ +export * from './USyncDeviceProtocol.js'; +export * from './USyncContactProtocol.js'; +export * from './USyncStatusProtocol.js'; +export * from './USyncDisappearingModeProtocol.js'; +export * from './USyncUsernameProtocol.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/Protocols/index.js.map b/packages/transport/vendor/lib/WAUSync/Protocols/index.js.map new file mode 100644 index 0000000..f10b79c --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/Protocols/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/WAUSync/Protocols/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts b/packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts new file mode 100644 index 0000000..ff2ef03 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts @@ -0,0 +1,30 @@ +import type { USyncQueryProtocol } from '../Types/USync.js'; +import { type BinaryNode } from '../WABinary/index.js'; +import { USyncUser } from './USyncUser.js'; +export type USyncQueryResultList = { + [protocol: string]: unknown; + id: string; +}; +export type USyncQueryResult = { + list: USyncQueryResultList[]; + sideList: USyncQueryResultList[]; +}; +export declare class USyncQuery { + protocols: USyncQueryProtocol[]; + users: USyncUser[]; + context: string; + mode: string; + constructor(); + withMode(mode: string): this; + withContext(context: string): this; + withUser(user: USyncUser): this; + parseUSyncQueryResult(result: BinaryNode | undefined): USyncQueryResult | undefined; + withDeviceProtocol(): this; + withContactProtocol(): this; + withStatusProtocol(): this; + withDisappearingModeProtocol(): this; + withBotProfileProtocol(): this; + withLIDProtocol(): this; + withUsernameProtocol(): this; +} +//# sourceMappingURL=USyncQuery.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts.map b/packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts.map new file mode 100644 index 0000000..711bcee --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncQuery.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncQuery.d.ts","sourceRoot":"","sources":["../../src/WAUSync/USyncQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,aAAa,CAAA;AAUjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,MAAM,oBAAoB,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9E,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,oBAAoB,EAAE,CAAA;IAC5B,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAChC,CAAA;AAED,qBAAa,UAAU;IACtB,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;;IASZ,QAAQ,CAAC,IAAI,EAAE,MAAM;IAKrB,WAAW,CAAC,OAAO,EAAE,MAAM;IAK3B,QAAQ,CAAC,IAAI,EAAE,SAAS;IAKxB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;IAwDnF,kBAAkB;IAKlB,mBAAmB;IAKnB,kBAAkB;IAKlB,4BAA4B;IAK5B,sBAAsB;IAKtB,eAAe;IAKf,oBAAoB;CAIpB"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncQuery.js b/packages/transport/vendor/lib/WAUSync/USyncQuery.js new file mode 100644 index 0000000..534395d --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncQuery.js @@ -0,0 +1,98 @@ +import { getBinaryNodeChild } from '../WABinary/index.js'; +import { USyncBotProfileProtocol } from './Protocols/UsyncBotProfileProtocol.js'; +import { USyncLIDProtocol } from './Protocols/UsyncLIDProtocol.js'; +import { USyncContactProtocol, USyncDeviceProtocol, USyncDisappearingModeProtocol, USyncStatusProtocol, USyncUsernameProtocol } from './Protocols/index.js'; +import { USyncUser } from './USyncUser.js'; +export class USyncQuery { + constructor() { + this.protocols = []; + this.users = []; + this.context = 'interactive'; + this.mode = 'query'; + } + withMode(mode) { + this.mode = mode; + return this; + } + withContext(context) { + this.context = context; + return this; + } + withUser(user) { + this.users.push(user); + return this; + } + parseUSyncQueryResult(result) { + if (result?.attrs.type !== 'result') { + return; + } + const protocolMap = Object.fromEntries(this.protocols.map(protocol => { + return [protocol.name, protocol.parser]; + })); + const queryResult = { + // TODO: implement errors etc. + list: [], + sideList: [] + }; + const usyncNode = getBinaryNodeChild(result, 'usync'); + //TODO: implement error backoff, refresh etc. + //TODO: see if there are any errors in the result node + //const resultNode = getBinaryNodeChild(usyncNode, 'result') + const listNode = usyncNode ? getBinaryNodeChild(usyncNode, 'list') : undefined; + if (listNode?.content && Array.isArray(listNode.content)) { + queryResult.list = listNode.content.reduce((acc, node) => { + const id = node?.attrs.jid; + if (id) { + const data = Array.isArray(node?.content) + ? Object.fromEntries(node.content + .map(content => { + const protocol = content.tag; + const parser = protocolMap[protocol]; + if (parser) { + return [protocol, parser(content)]; + } + else { + return [protocol, null]; + } + }) + .filter(([, b]) => b !== null)) + : {}; + acc.push({ ...data, id }); + } + return acc; + }, []); + } + //TODO: implement side list + //const sideListNode = getBinaryNodeChild(usyncNode, 'side_list') + return queryResult; + } + withDeviceProtocol() { + this.protocols.push(new USyncDeviceProtocol()); + return this; + } + withContactProtocol() { + this.protocols.push(new USyncContactProtocol()); + return this; + } + withStatusProtocol() { + this.protocols.push(new USyncStatusProtocol()); + return this; + } + withDisappearingModeProtocol() { + this.protocols.push(new USyncDisappearingModeProtocol()); + return this; + } + withBotProfileProtocol() { + this.protocols.push(new USyncBotProfileProtocol()); + return this; + } + withLIDProtocol() { + this.protocols.push(new USyncLIDProtocol()); + return this; + } + withUsernameProtocol() { + this.protocols.push(new USyncUsernameProtocol()); + return this; + } +} +//# sourceMappingURL=USyncQuery.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncQuery.js.map b/packages/transport/vendor/lib/WAUSync/USyncQuery.js.map new file mode 100644 index 0000000..cd195b0 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncQuery.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncQuery.js","sourceRoot":"","sources":["../../src/WAUSync/USyncQuery.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncUser.d.ts b/packages/transport/vendor/lib/WAUSync/USyncUser.d.ts new file mode 100644 index 0000000..b8e3337 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncUser.d.ts @@ -0,0 +1,17 @@ +export declare class USyncUser { + id?: string; + lid?: string; + phone?: string; + username?: string; + usernameKey?: string; + type?: string; + personaId?: string; + withId(id: string): this; + withLid(lid: string): this; + withPhone(phone: string): this; + withUsername(username: string): this; + withUsernameKey(usernameKey: string): this; + withType(type: string): this; + withPersonaId(personaId: string): this; +} +//# sourceMappingURL=USyncUser.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncUser.d.ts.map b/packages/transport/vendor/lib/WAUSync/USyncUser.d.ts.map new file mode 100644 index 0000000..5bdd7f1 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncUser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncUser.d.ts","sourceRoot":"","sources":["../../src/WAUSync/USyncUser.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACrB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,MAAM,CAAC,EAAE,EAAE,MAAM;IAKjB,OAAO,CAAC,GAAG,EAAE,MAAM;IAKnB,SAAS,CAAC,KAAK,EAAE,MAAM;IAKvB,YAAY,CAAC,QAAQ,EAAE,MAAM;IAK7B,eAAe,CAAC,WAAW,EAAE,MAAM;IAKnC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAKrB,aAAa,CAAC,SAAS,EAAE,MAAM;CAI/B"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncUser.js b/packages/transport/vendor/lib/WAUSync/USyncUser.js new file mode 100644 index 0000000..b47fe24 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncUser.js @@ -0,0 +1,31 @@ +export class USyncUser { + withId(id) { + this.id = id; + return this; + } + withLid(lid) { + this.lid = lid; + return this; + } + withPhone(phone) { + this.phone = phone; + return this; + } + withUsername(username) { + this.username = username; + return this; + } + withUsernameKey(usernameKey) { + this.usernameKey = usernameKey; + return this; + } + withType(type) { + this.type = type; + return this; + } + withPersonaId(personaId) { + this.personaId = personaId; + return this; + } +} +//# sourceMappingURL=USyncUser.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/USyncUser.js.map b/packages/transport/vendor/lib/WAUSync/USyncUser.js.map new file mode 100644 index 0000000..1655be3 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/USyncUser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"USyncUser.js","sourceRoot":"","sources":["../../src/WAUSync/USyncUser.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IASrB,MAAM,CAAC,EAAU;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,OAAO,CAAC,GAAW;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,SAAS,CAAC,KAAa;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,YAAY,CAAC,QAAgB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,eAAe,CAAC,WAAmB;QAClC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,QAAQ,CAAC,IAAY;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,aAAa,CAAC,SAAiB;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,OAAO,IAAI,CAAA;IACZ,CAAC;CACD"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/index.d.ts b/packages/transport/vendor/lib/WAUSync/index.d.ts new file mode 100644 index 0000000..d27a170 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/index.d.ts @@ -0,0 +1,4 @@ +export * from './Protocols/index.js'; +export * from './USyncQuery.js'; +export * from './USyncUser.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/index.d.ts.map b/packages/transport/vendor/lib/WAUSync/index.d.ts.map new file mode 100644 index 0000000..49f0bda --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/WAUSync/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/index.js b/packages/transport/vendor/lib/WAUSync/index.js new file mode 100644 index 0000000..db0ad54 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/index.js @@ -0,0 +1,4 @@ +export * from './Protocols/index.js'; +export * from './USyncQuery.js'; +export * from './USyncUser.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/WAUSync/index.js.map b/packages/transport/vendor/lib/WAUSync/index.js.map new file mode 100644 index 0000000..c0b4e36 --- /dev/null +++ b/packages/transport/vendor/lib/WAUSync/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/WAUSync/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/index.d.ts b/packages/transport/vendor/lib/index.d.ts new file mode 100644 index 0000000..c27a40f --- /dev/null +++ b/packages/transport/vendor/lib/index.d.ts @@ -0,0 +1,12 @@ +import makeWASocket from './Socket/index.js'; +export * from '../WAProto/index.js'; +export * from './Utils/index.js'; +export * from './Types/index.js'; +export * from './Defaults/index.js'; +export * from './WABinary/index.js'; +export * from './WAM/index.js'; +export * from './WAUSync/index.js'; +export type WASocket = ReturnType; +export { makeWASocket }; +export default makeWASocket; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/index.d.ts.map b/packages/transport/vendor/lib/index.d.ts.map new file mode 100644 index 0000000..3787cbd --- /dev/null +++ b/packages/transport/vendor/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAE/B,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,eAAe,YAAY,CAAA"} \ No newline at end of file diff --git a/packages/transport/vendor/lib/index.js b/packages/transport/vendor/lib/index.js new file mode 100644 index 0000000..e1f37c6 --- /dev/null +++ b/packages/transport/vendor/lib/index.js @@ -0,0 +1,11 @@ +import makeWASocket from './Socket/index.js'; +export * from '../WAProto/index.js'; +export * from './Utils/index.js'; +export * from './Types/index.js'; +export * from './Defaults/index.js'; +export * from './WABinary/index.js'; +export * from './WAM/index.js'; +export * from './WAUSync/index.js'; +export { makeWASocket }; +export default makeWASocket; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/transport/vendor/lib/index.js.map b/packages/transport/vendor/lib/index.js.map new file mode 100644 index 0000000..5c56f17 --- /dev/null +++ b/packages/transport/vendor/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAG/B,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,eAAe,YAAY,CAAA"} \ No newline at end of file diff --git a/packages/wa-message/package.json b/packages/wa-message/package.json index 6dd632f..eb34975 100644 --- a/packages/wa-message/package.json +++ b/packages/wa-message/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/wa-message", - "version": "0.1.1", + "version": "0.1.6", "description": "Rendering-aware WhatsApp message builders for Berry Protocol.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -22,6 +22,6 @@ "dependencies": { "@berrysdk/events": "0.1.1", "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.0" + "@berrysdk/transport": "0.1.6" } } diff --git a/scripts/patch-baileys-esm.mjs b/scripts/patch-baileys-esm.mjs deleted file mode 100644 index 59bff45..0000000 --- a/scripts/patch-baileys-esm.mjs +++ /dev/null @@ -1,200 +0,0 @@ -import { readFile, writeFile } from "node:fs/promises"; -import { resolve } from "node:path"; - -const replaceAllInFile = async (relativePath, replacements) => { - const filePath = resolve(relativePath); - const source = await readFile(filePath, "utf8"); - let next = source; - - for (const [from, to] of replacements) { - next = next.replaceAll(from, to); - } - - if (next !== source) { - await writeFile(filePath, next, "utf8"); - } -}; - -const patchWithSnippet = async (relativePath, mutator) => { - const filePath = resolve(relativePath); - const source = await readFile(filePath, "utf8"); - const next = mutator(source); - - if (next !== source) { - await writeFile(filePath, next, "utf8"); - } -}; - -const esmImportFixes = [ - ["_reference_baileys2/lib/Signal/libsignal.js", "libsignal/src/protobufs", "libsignal/src/protobufs.js"], - ["_reference_baileys2/lib/Utils/crypto.js", "libsignal/src/curve", "libsignal/src/curve.js"], - ["_reference_baileys2/lib/Signal/Group/group_cipher.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], - ["_reference_baileys2/lib/Signal/Group/keyhelper.js", "libsignal/src/curve", "libsignal/src/curve.js"], - ["_reference_baileys2/lib/Signal/Group/sender-chain-key.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], - ["_reference_baileys2/lib/Signal/Group/sender-key-message.js", "libsignal/src/curve", "libsignal/src/curve.js"], - ["_reference_baileys2/lib/Signal/Group/sender-message-key.js", "libsignal/src/crypto", "libsignal/src/crypto.js"], -]; - -for (const [relativePath, from, to] of esmImportFixes) { - await replaceAllInFile(relativePath, [[from, to]]); -} - -await patchWithSnippet("node_modules/baileys/lib/Types/Message.d.ts", (source) => { - const original = `export type AnyMessageContent = AnyRegularMessageContent | { - forward: WAMessage; - force?: boolean; -} | { - /** Delete your message or anyone's message in a group (admin required) */ - delete: WAMessageKey; -} | { - disappearingMessagesInChat: boolean | number; -} | { - limitSharing: boolean; -};`; - - const patched = `export type AnyMessageContent = (AnyRegularMessageContent | { - forward: WAMessage; - force?: boolean; -} | { - /** Delete your message or anyone's message in a group (admin required) */ - delete: WAMessageKey; -} | { - disappearingMessagesInChat: boolean | number; -} | { - limitSharing: boolean; -}) & { - ai?: boolean; -};`; - - return source.includes("ai?: boolean;") - ? source - : source.replace(original, patched); -}); - -await patchWithSnippet("node_modules/baileys/lib/Socket/messages-send.js", (source) => { - let next = source; - - if (!next.includes("const BIZ_BOT_SUPPORT_PAYLOAD = '{}'")) { - next = next.replace( - "import { makeNewsletterSocket } from './newsletter.js';", - "import { makeNewsletterSocket } from './newsletter.js';\nconst BIZ_BOT_SUPPORT_PAYLOAD = '{}';", - ); - } - - const originalSendBlock = ` const fullMsg = await generateWAMessage(jid, content, { - logger, - userJid, - getUrlInfo: text => getUrlInfo(text, { - thumbnailWidth: linkPreviewImageThumbnailWidth, - fetchOpts: { - timeout: 3000, - ...(httpRequestOptions || {}) - }, - logger, - uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined - }), - //TODO: CACHE - getProfilePicUrl: sock.profilePictureUrl, - getCallLink: sock.createCallLink, - upload: waUploadToServer, - mediaCache: config.mediaCache, - options: config.options, - messageId: generateMessageIDV2(sock.user?.id), - ...options - }); - const isEventMsg = 'event' in content && !!content.event; - const isDeleteMsg = 'delete' in content && !!content.delete; - const isEditMsg = 'edit' in content && !!content.edit; - const isPinMsg = 'pin' in content && !!content.pin; - const isPollMessage = 'poll' in content && !!content.poll;`; - - const patchedSendBlock = ` const messageContent = typeof content === 'object' && content - ? { ...content } - : content; - const isAiMsg = typeof messageContent === 'object' - && !!messageContent - && 'ai' in messageContent - && !!messageContent.ai; - if (isAiMsg) { - delete messageContent.ai; - } - const fullMsg = await generateWAMessage(jid, messageContent, { - logger, - userJid, - getUrlInfo: text => getUrlInfo(text, { - thumbnailWidth: linkPreviewImageThumbnailWidth, - fetchOpts: { - timeout: 3000, - ...(httpRequestOptions || {}) - }, - logger, - uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined - }), - //TODO: CACHE - getProfilePicUrl: sock.profilePictureUrl, - getCallLink: sock.createCallLink, - upload: waUploadToServer, - mediaCache: config.mediaCache, - options: config.options, - messageId: generateMessageIDV2(sock.user?.id), - ...options - }); - const isEventMsg = typeof messageContent === 'object' && !!messageContent && 'event' in messageContent && !!messageContent.event; - const isDeleteMsg = typeof messageContent === 'object' && !!messageContent && 'delete' in messageContent && !!messageContent.delete; - const isEditMsg = typeof messageContent === 'object' && !!messageContent && 'edit' in messageContent && !!messageContent.edit; - const isPinMsg = typeof messageContent === 'object' && !!messageContent && 'pin' in messageContent && !!messageContent.pin; - const isPollMessage = typeof messageContent === 'object' && !!messageContent && 'poll' in messageContent && !!messageContent.poll;`; - - if (!next.includes("const isAiMsg = typeof messageContent === 'object'")) { - next = next.replace(originalSendBlock, patchedSendBlock); - } - - if (next.includes("if (isJidGroup(content.delete?.remoteJid) && !content.delete?.fromMe)")) { - next = next.replaceAll( - "if (isJidGroup(content.delete?.remoteJid) && !content.delete?.fromMe)", - "if (isJidGroup(messageContent.delete?.remoteJid) && !messageContent.delete?.fromMe)", - ); - } - - const originalEventBlock = ` else if (isEventMsg) { - additionalNodes.push({ - tag: 'meta', - attrs: { - event_type: 'creation' - } - }); - }`; - - const patchedEventBlock = ` else if (isEventMsg) { - additionalNodes.push({ - tag: 'meta', - attrs: { - event_type: 'creation' - } - }); - } - else if (isAiMsg) { - if (!(isPnUser(jid) || isLidUser(jid))) { - throw new Boom('AI labeled messages are only allowed in private chat', { - statusCode: 400 - }); - } - fullMsg.message.messageContextInfo ||= {}; - fullMsg.message.messageContextInfo.supportPayload = BIZ_BOT_SUPPORT_PAYLOAD; - additionalNodes.push({ - tag: 'bot', - attrs: { - biz_bot: '1' - }, - content: undefined - }); - }`; - - if (!next.includes("AI labeled messages are only allowed in private chat")) { - next = next.replace(originalEventBlock, patchedEventBlock); - } - - return next; -}); - -console.log("Patched Baileys ESM imports and AI label support."); From 75fb6f9e2e291519cd43655d51a681bbc2c0f559 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 13:33:43 -0300 Subject: [PATCH 11/23] fix: harden jid routing and expose chat ids --- examples/npm-consumer/package.json | 4 +- package-lock.json | 82 +++++++++++++------ package.json | 2 +- packages/berry-otp/package.json | 4 +- packages/berryotp/package.json | 6 +- packages/berryprotocol/package.json | 4 +- packages/cli/package.json | 4 +- packages/core/package.json | 8 +- packages/core/src/index.ts | 50 ++++++----- packages/events/package.json | 2 +- packages/events/src/index.ts | 2 + packages/gateway/package.json | 4 +- packages/socket/package.json | 8 +- packages/socket/src/index.ts | 38 ++++++--- packages/store/package.json | 2 +- packages/store/src/index.ts | 2 +- packages/transport/package.json | 2 +- .../vendor/lib/Socket/messages-send.js | 25 ++++-- packages/wa-message/package.json | 6 +- packages/wa-message/src/index.ts | 7 +- 20 files changed, 166 insertions(+), 96 deletions(-) diff --git a/examples/npm-consumer/package.json b/examples/npm-consumer/package.json index 8b7ab03..60fe32f 100644 --- a/examples/npm-consumer/package.json +++ b/examples/npm-consumer/package.json @@ -7,7 +7,7 @@ "start": "node test-from-npm.mjs" }, "dependencies": { - "berryprotocol": "^0.1.6", - "berryotp": "^0.1.6" + "berryprotocol": "^0.1.7", + "berryotp": "^0.1.7" } } diff --git a/package-lock.json b/package-lock.json index 53d85c2..7ac8e67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "berrysdk", - "version": "0.1.6", + "version": "0.1.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "berrysdk", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "workspaces": [ "packages/*" @@ -3292,67 +3292,83 @@ "@berrysdk/store": "0.1.1" } }, + "packages/auth/node_modules/@berrysdk/events": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", + "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", + "license": "Apache-2.0" + }, + "packages/auth/node_modules/@berrysdk/store": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/store/-/store-0.1.1.tgz", + "integrity": "sha512-e5XaXWUWRC+mfyta8DCJC7UNJrhssQHiFv2VzG0n3Uh8SDbba31BAw2zUl0v8MaP20TCl+fjX1GUTgzhQH1oTw==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "better-sqlite3": "^11.10.0" + } + }, "packages/berry-otp": { "name": "@berrysdk/berry-otp", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.6" + "@berrysdk/core": "0.1.7" } }, "packages/berryotp": { - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { - "@berrysdk/berry-otp": "0.1.6" + "@berrysdk/berry-otp": "0.1.7" }, "peerDependencies": { - "berryprotocol": "^0.1.6" + "berryprotocol": "^0.1.7" } }, "packages/berryprotocol": { - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.6" + "@berrysdk/core": "0.1.7" } }, "packages/cli": { "name": "@berrysdk/cli", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.6", + "@berrysdk/core": "0.1.7", "commander": "^14.0.0", "pino": "^9.6.0" } }, "packages/core": { "name": "@berrysdk/core", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { "@berrysdk/auth": "0.1.1", - "@berrysdk/events": "0.1.1", + "@berrysdk/events": "0.1.2", "@berrysdk/media": "0.1.1", "@berrysdk/messages": "0.1.1", - "@berrysdk/socket": "0.1.6", - "@berrysdk/store": "0.1.1", + "@berrysdk/socket": "0.1.7", + "@berrysdk/store": "0.1.2", "pino": "^9.6.0", "qrcode-terminal": "^0.12.0" } }, "packages/events": { "name": "@berrysdk/events", - "version": "0.1.1", + "version": "0.1.2", "license": "Apache-2.0" }, "packages/gateway": { "name": "@berrysdk/gateway", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.6", + "@berrysdk/core": "0.1.7", "express": "^5.1.0", "pino": "^9.6.0" } @@ -3370,6 +3386,12 @@ "@berrysdk/events": "0.1.1" } }, + "packages/messages/node_modules/@berrysdk/events": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", + "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", + "license": "Apache-2.0" + }, "packages/protocol": { "name": "@berrysdk/proto", "version": "0.1.1", @@ -3381,29 +3403,35 @@ }, "packages/socket": { "name": "@berrysdk/socket", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.1", + "@berrysdk/events": "0.1.2", "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.6", - "@berrysdk/wa-message": "0.1.6", + "@berrysdk/transport": "0.1.7", + "@berrysdk/wa-message": "0.1.7", "pino": "^9.6.0", "ws": "^8.18.1" } }, "packages/store": { "name": "@berrysdk/store", - "version": "0.1.1", + "version": "0.1.2", "license": "Apache-2.0", "dependencies": { "@berrysdk/events": "0.1.1", "better-sqlite3": "^11.10.0" } }, + "packages/store/node_modules/@berrysdk/events": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", + "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", + "license": "Apache-2.0" + }, "packages/transport": { "name": "@berrysdk/transport", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { "@cacheable/node-cache": "^1.4.0", @@ -3441,12 +3469,12 @@ }, "packages/wa-message": { "name": "@berrysdk/wa-message", - "version": "0.1.6", + "version": "0.1.7", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.1", + "@berrysdk/events": "0.1.2", "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.6" + "@berrysdk/transport": "0.1.7" } } } diff --git a/package.json b/package.json index 0993baa..3a24d0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "berrysdk", - "version": "0.1.6", + "version": "0.1.7", "private": true, "type": "module", "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", diff --git a/packages/berry-otp/package.json b/packages/berry-otp/package.json index 1e8ab73..7481637 100644 --- a/packages/berry-otp/package.json +++ b/packages/berry-otp/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/berry-otp", - "version": "0.1.6", + "version": "0.1.7", "description": "Official OTP flows for Berry SDK on top of WhatsApp native-flow and fallback buttons.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,6 +23,6 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.6" + "@berrysdk/core": "0.1.7" } } diff --git a/packages/berryotp/package.json b/packages/berryotp/package.json index 13ab90b..1eefb6d 100644 --- a/packages/berryotp/package.json +++ b/packages/berryotp/package.json @@ -1,6 +1,6 @@ { "name": "berryotp", - "version": "0.1.6", + "version": "0.1.7", "description": "Facade package for BerryOTP so consumers can import it without the @berrysdk scope.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,9 +23,9 @@ "access": "public" }, "dependencies": { - "@berrysdk/berry-otp": "0.1.6" + "@berrysdk/berry-otp": "0.1.7" }, "peerDependencies": { - "berryprotocol": "^0.1.6" + "berryprotocol": "^0.1.7" } } diff --git a/packages/berryprotocol/package.json b/packages/berryprotocol/package.json index 1a539bc..66036db 100644 --- a/packages/berryprotocol/package.json +++ b/packages/berryprotocol/package.json @@ -1,6 +1,6 @@ { "name": "berryprotocol", - "version": "0.1.6", + "version": "0.1.7", "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,6 +23,6 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.6" + "@berrysdk/core": "0.1.7" } } diff --git a/packages/cli/package.json b/packages/cli/package.json index 3fd9a6e..a56280c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/cli", - "version": "0.1.6", + "version": "0.1.7", "description": "CLI tooling for Berry Protocol sessions and message testing.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -20,7 +20,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.6", + "@berrysdk/core": "0.1.7", "commander": "^14.0.0", "pino": "^9.6.0" } diff --git a/packages/core/package.json b/packages/core/package.json index 996a1a2..43bd925 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/core", - "version": "0.1.6", + "version": "0.1.7", "description": "Public SDK for Berry Protocol WhatsApp integrations.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,11 +23,11 @@ }, "dependencies": { "@berrysdk/auth": "0.1.1", - "@berrysdk/events": "0.1.1", + "@berrysdk/events": "0.1.2", "@berrysdk/media": "0.1.1", "@berrysdk/messages": "0.1.1", - "@berrysdk/socket": "0.1.6", - "@berrysdk/store": "0.1.1", + "@berrysdk/socket": "0.1.7", + "@berrysdk/store": "0.1.2", "pino": "^9.6.0", "qrcode-terminal": "^0.12.0" } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 69f1148..c6d3219 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -49,6 +49,17 @@ export interface BerryClientOptions { type BerryMediaSource = Buffer | { url: string | URL }; +const assertWhatsAppJid = (jid: string): string => { + const normalized = jid.trim(); + if (!normalized || !normalized.includes("@")) { + throw new Error( + `Invalid WhatsApp JID "${jid}". Use a private, group, newsletter or status JID like "5511999999999@s.whatsapp.net".`, + ); + } + + return normalized; +}; + export interface BerrySendMessageContent { ai?: boolean; text?: string; @@ -334,8 +345,9 @@ export class BerryClient { content: BerrySendMessageContent, ): Promise { return this.queue.enqueue(async () => { + const recipientJid = assertWhatsAppJid(to); const normalized = await this.normalizeOutgoingMessage(to, content); - const result = await normalized.dispatch(); + const result = await normalized.dispatch(recipientJid); const sent = { ...normalized.message, id: result.key.id ?? normalized.message.id, @@ -351,15 +363,15 @@ export class BerryClient { content: BerrySendMessageContent, ): Promise<{ message: OutgoingMessage; - dispatch: () => Promise<{ key: { id?: string | null } }>; + dispatch: (recipientJid: string) => Promise<{ key: { id?: string | null } }>; }> { if (typeof content.text === "string") { const text = content.text; const message = createTextMessage(to, text); return { message, - dispatch: () => - this.socket.sendTransportMessage(to, { text, ...(content.ai ? { ai: true } : {}) }), + dispatch: (recipientJid) => + this.socket.sendTransportMessage(recipientJid, { text, ...(content.ai ? { ai: true } : {}) }), }; } @@ -378,8 +390,8 @@ export class BerryClient { type: "image", media, }, - dispatch: () => - this.socket.sendTransportMessage(to, { + dispatch: (recipientJid) => + this.socket.sendTransportMessage(recipientJid, { ...content, image: media.buffer!, caption: media.caption, @@ -404,8 +416,8 @@ export class BerryClient { type: "audio", media, }, - dispatch: () => - this.socket.sendTransportMessage(to, { + dispatch: (recipientJid) => + this.socket.sendTransportMessage(recipientJid, { ...content, audio: media.buffer!, mimetype: media.mimetype, @@ -428,8 +440,8 @@ export class BerryClient { type: "document", media, }, - dispatch: () => - this.socket.sendTransportMessage(to, { + dispatch: (recipientJid) => + this.socket.sendTransportMessage(recipientJid, { ...content, document: media.buffer!, caption: media.caption, @@ -451,7 +463,7 @@ export class BerryClient { return { message, - dispatch: () => this.socket.sendReplyButtonsMessage(to, content.buttonsMessage!), + dispatch: (recipientJid) => this.socket.sendReplyButtonsMessage(recipientJid, content.buttonsMessage!), }; } @@ -468,7 +480,7 @@ export class BerryClient { return { message, - dispatch: () => this.socket.sendListMessage(to, list), + dispatch: (recipientJid) => this.socket.sendListMessage(recipientJid, list), }; } @@ -484,7 +496,7 @@ export class BerryClient { return { message, - dispatch: () => this.socket.sendInteractiveMessage(to, content.interactiveMessage!), + dispatch: (recipientJid) => this.socket.sendInteractiveMessage(recipientJid, content.interactiveMessage!), }; } @@ -496,8 +508,8 @@ export class BerryClient { ); return { message, - dispatch: () => - this.socket.sendTransportMessage(to, { + dispatch: (recipientJid) => + this.socket.sendTransportMessage(recipientJid, { react: content.react!, ...(content.ai ? { ai: true } : {}), }), @@ -513,8 +525,8 @@ export class BerryClient { }; return { message: createLocationMessage(to, location), - dispatch: () => - this.socket.sendTransportMessage(to, { + dispatch: (recipientJid) => + this.socket.sendTransportMessage(recipientJid, { location: content.location!, ...(content.ai ? { ai: true } : {}), }), @@ -528,8 +540,8 @@ export class BerryClient { }; return { message: createContactMessage(to, contact), - dispatch: () => - this.socket.sendTransportMessage(to, { + dispatch: (recipientJid) => + this.socket.sendTransportMessage(recipientJid, { contacts: content.contacts!, ...(content.ai ? { ai: true } : {}), }), diff --git a/packages/events/package.json b/packages/events/package.json index 131495d..ab53df6 100644 --- a/packages/events/package.json +++ b/packages/events/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/events", - "version": "0.1.1", + "version": "0.1.2", "description": "Shared event and message contracts for Berry Protocol.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", diff --git a/packages/events/src/index.ts b/packages/events/src/index.ts index d42ba30..47f65c1 100644 --- a/packages/events/src/index.ts +++ b/packages/events/src/index.ts @@ -153,6 +153,8 @@ export interface MediaPayload { export interface BaseMessage { id: string; to: string; + chatId?: string; + remoteJid?: string; from?: string; timestamp: string; ack: AckStatus; diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 507c49e..160ccb3 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/gateway", - "version": "0.1.6", + "version": "0.1.7", "description": "HTTP gateway for multi-instance Berry Protocol control.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -20,7 +20,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.6", + "@berrysdk/core": "0.1.7", "express": "^5.1.0", "pino": "^9.6.0" } diff --git a/packages/socket/package.json b/packages/socket/package.json index 6bc109e..6a55c4a 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/socket", - "version": "0.1.6", + "version": "0.1.7", "description": "Internal transport adapter for Berry Protocol.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -20,10 +20,10 @@ "access": "public" }, "dependencies": { - "@berrysdk/events": "0.1.1", + "@berrysdk/events": "0.1.2", "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.6", - "@berrysdk/wa-message": "0.1.6", + "@berrysdk/transport": "0.1.7", + "@berrysdk/wa-message": "0.1.7", "pino": "^9.6.0", "ws": "^8.18.1" } diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index e43f2eb..90d0da8 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -70,6 +70,17 @@ const debugJsonReplacer = (_key: string, value: unknown) => { const normalizePhoneNumber = (value: string): string => value.replace(/\D/g, ""); +const assertTransportJid = (jid: string): string => { + const normalized = jid.trim(); + if (!normalized || !normalized.includes("@")) { + throw new Error( + `Invalid WhatsApp JID "${jid}". BerryProtocol expected something like "5511999999999@s.whatsapp.net".`, + ); + } + + return normalized; +}; + const generateNumericPairingCode = (): string => Math.floor(10_000_000 + Math.random() * 90_000_000).toString(); @@ -243,14 +254,15 @@ export class BerrySocket { } async sendTransportMessage(to: string, content: AnyMessageContent): Promise { - return this.sendMessage(to, content as MessageContent); + return this.sendMessage(assertTransportJid(to), content as MessageContent); } async editMessage(to: string, messageId: string, text: string): Promise { - return this.sendTransportMessage(to, { + const recipientJid = assertTransportJid(to); + return this.sendTransportMessage(recipientJid, { text, edit: { - remoteJid: to, + remoteJid: recipientJid, fromMe: true, id: messageId, }, @@ -262,13 +274,14 @@ export class BerrySocket { throw new Error("Socket is not connected."); } + const recipientJid = assertTransportJid(to); const content = buttonsPayloadToLegacyButtonsMessageContent(buttons); - const fullMessage = generateWAMessageFromContent(to, content, { + const fullMessage = generateWAMessageFromContent(recipientJid, content, { userJid: this.sock.user.id, }); this.logOutgoingMessage("buttons-legacy", fullMessage); - await this.sock.relayMessage(to, fullMessage.message!, { + await this.sock.relayMessage(recipientJid, fullMessage.message!, { messageId: fullMessage.key.id!, }); @@ -280,13 +293,14 @@ export class BerrySocket { throw new Error("Socket is not connected."); } + const recipientJid = assertTransportJid(to); const content = interactivePayloadToMessageContent(interactive); - const fullMessage = generateWAMessageFromContent(to, content, { + const fullMessage = generateWAMessageFromContent(recipientJid, content, { userJid: this.sock.user.id, }); this.logOutgoingMessage("interactive", fullMessage); - await this.sock.relayMessage(to, fullMessage.message!, { + await this.sock.relayMessage(recipientJid, fullMessage.message!, { messageId: fullMessage.key.id!, additionalNodes: interactiveNativeFlowAdditionalNodes(), }); @@ -299,13 +313,14 @@ export class BerrySocket { throw new Error("Socket is not connected."); } + const recipientJid = assertTransportJid(to); const content = buttonsPayloadToNativeFlowInteractiveContent(buttons); - const fullMessage = generateWAMessageFromContent(to, content, { + const fullMessage = generateWAMessageFromContent(recipientJid, content, { userJid: this.sock.user.id, }); this.logOutgoingMessage("buttons", fullMessage); - await this.sock.relayMessage(to, fullMessage.message!, { + await this.sock.relayMessage(recipientJid, fullMessage.message!, { messageId: fullMessage.key.id!, additionalNodes: interactiveNativeFlowAdditionalNodes(), }); @@ -318,13 +333,14 @@ export class BerrySocket { throw new Error("Socket is not connected."); } + const recipientJid = assertTransportJid(to); const content = listToLegacyListMessageContent(list); - const fullMessage = generateWAMessageFromContent(to, content, { + const fullMessage = generateWAMessageFromContent(recipientJid, content, { userJid: this.sock.user.id, }); this.logOutgoingMessage("list", fullMessage); - await this.sock.relayMessage(to, fullMessage.message!, { + await this.sock.relayMessage(recipientJid, fullMessage.message!, { messageId: fullMessage.key.id!, additionalNodes: legacyListAdditionalNodes(), }); diff --git a/packages/store/package.json b/packages/store/package.json index 64c21f4..2574e19 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/store", - "version": "0.1.1", + "version": "0.1.2", "description": "SQLite-backed persistence for Berry Protocol sessions and metadata.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts index d5773aa..87e9a65 100644 --- a/packages/store/src/index.ts +++ b/packages/store/src/index.ts @@ -164,7 +164,7 @@ export class SQLiteStore { statement.run({ id: message.id, session_id: sessionId, - remote_jid: message.from, + remote_jid: message.chatId ?? message.remoteJid ?? message.to ?? message.from ?? "", payload: JSON.stringify(message), }); } diff --git a/packages/transport/package.json b/packages/transport/package.json index a2c7e7c..4cf3d78 100644 --- a/packages/transport/package.json +++ b/packages/transport/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/transport", - "version": "0.1.6", + "version": "0.1.7", "description": "Internal BerrySDK WhatsApp Web engine and transport runtime.", "author": "BerrySDK", "license": "Apache-2.0", diff --git a/packages/transport/vendor/lib/Socket/messages-send.js b/packages/transport/vendor/lib/Socket/messages-send.js index be06e37..fa6c799 100644 --- a/packages/transport/vendor/lib/Socket/messages-send.js +++ b/packages/transport/vendor/lib/Socket/messages-send.js @@ -11,6 +11,13 @@ import { areJidsSameUser, getBinaryNodeChild, getBinaryNodeChildren, isHostedLid import { USyncQuery, USyncUser } from '../WAUSync/index.js'; import { makeNewsletterSocket } from './newsletter.js'; const BIZ_BOT_SUPPORT_PAYLOAD = '{}'; +const decodeRequiredJid = (jid, context) => { + const decoded = jidDecode(jid); + if (!decoded) { + throw new Boom(`Invalid JID passed to ${context}: ${jid}`, { statusCode: 400 }); + } + return decoded; +}; export const makeMessagesSocket = (config) => { const { logger, linkPreviewImageThumbnailWidth, generateHighQualityLinkPreview, options: httpRequestOptions, patchMessageBeforeSending, cachedGroupMetadata, enableRecentMessageCache, maxMsgRetryCount } = config; const sock = makeNewsletterSocket(config); @@ -384,8 +391,8 @@ export const makeMessagesSocket = (config) => { return null; let msgToEncrypt = patchedMessage; if (dsmMessage) { - const { user: targetUser } = jidDecode(jid); - const { user: ownPnUser } = jidDecode(meId); + const { user: targetUser } = decodeRequiredJid(jid, 'createParticipantNodes recipient'); + const { user: ownPnUser } = decodeRequiredJid(meId, 'createParticipantNodes self'); const ownLidUser = meLidUser; const isOwnUser = targetUser === ownPnUser || (ownLidUser && targetUser === ownLidUser); const isExactSenderDevice = jid === meId || (meLid && jid === meLid); @@ -432,7 +439,7 @@ export const makeMessagesSocket = (config) => { const isRetryResend = Boolean(participant?.jid); let shouldIncludeDeviceIdentity = isRetryResend; const statusJid = 'status@broadcast'; - const { user, server } = jidDecode(jid); + const { user, server } = decodeRequiredJid(jid, 'relayMessage'); const isGroup = server === 'g.us'; const isStatus = jid === statusJid; const isLid = server === 'lid'; @@ -459,7 +466,7 @@ export const makeMessagesSocket = (config) => { if (!isGroup && !isStatus) { additionalAttributes = { ...additionalAttributes, device_fanout: 'false' }; } - const { user, device } = jidDecode(participant.jid); + const { user, device } = decodeRequiredJid(participant.jid, 'relayMessage participant'); devices.push({ user, device, @@ -595,7 +602,7 @@ export const makeMessagesSocket = (config) => { else { logger.debug({ to: jid, ownId }, 'Using PN identity for @s.whatsapp.net conversation'); } - const { user: ownUser } = jidDecode(ownId); + const { user: ownUser } = decodeRequiredJid(ownId, 'relayMessage own identity'); if (!participant) { const patchedForReporting = await patchMessageBeforeSending(message, [jid]); reportingMessage = Array.isArray(patchedForReporting) @@ -611,7 +618,9 @@ export const makeMessagesSocket = (config) => { }); if (user !== ownUser) { const ownUserServer = isLid ? 'lid' : 's.whatsapp.net'; - const ownUserForAddressing = isLid && meLid ? jidDecode(meLid).user : jidDecode(meId).user; + const ownUserForAddressing = isLid && meLid + ? decodeRequiredJid(meLid, 'relayMessage own lid addressing').user + : decodeRequiredJid(meId, 'relayMessage own pn addressing').user; devices.push({ user: ownUserForAddressing, device: 0, @@ -637,8 +646,8 @@ export const makeMessagesSocket = (config) => { const allRecipients = []; const meRecipients = []; const otherRecipients = []; - const { user: mePnUser } = jidDecode(meId); - const { user: meLidUser } = meLid ? jidDecode(meLid) : { user: null }; + const { user: mePnUser } = decodeRequiredJid(meId, 'relayMessage self identity'); + const { user: meLidUser } = meLid ? decodeRequiredJid(meLid, 'relayMessage self lid identity') : { user: null }; for (const { user, jid } of devices) { const isExactSenderDevice = jid === meId || (meLid && jid === meLid); if (isExactSenderDevice) { diff --git a/packages/wa-message/package.json b/packages/wa-message/package.json index eb34975..fb14093 100644 --- a/packages/wa-message/package.json +++ b/packages/wa-message/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/wa-message", - "version": "0.1.6", + "version": "0.1.7", "description": "Rendering-aware WhatsApp message builders for Berry Protocol.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -20,8 +20,8 @@ "access": "public" }, "dependencies": { - "@berrysdk/events": "0.1.1", + "@berrysdk/events": "0.1.2", "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.6" + "@berrysdk/transport": "0.1.7" } } diff --git a/packages/wa-message/src/index.ts b/packages/wa-message/src/index.ts index 136ba86..c5afca9 100644 --- a/packages/wa-message/src/index.ts +++ b/packages/wa-message/src/index.ts @@ -396,10 +396,13 @@ export const normalizeIncomingMessage = (waMessage: WAMessage): IncomingMessage } const selection = extractButtonSelection(message); + const remoteJid = key.remoteJid ?? ""; const base = { id: key.id ?? randomUUID(), - to: key.remoteJid ?? "", - from: key.participant ?? key.remoteJid ?? "", + to: remoteJid, + chatId: remoteJid, + remoteJid, + from: key.participant ?? remoteJid, timestamp: new Date(Number(waMessage.messageTimestamp ?? Date.now()) * 1000).toISOString(), ack: ackFromWebMessageStatus(waMessage.status), ...selection, From d7c234ecc9fa8d31b673b36c0287afbb4ee4e923 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 16:05:49 -0300 Subject: [PATCH 12/23] feat: add official carousel message support --- README.md | 102 +++++++- examples/npm-consumer/package.json | 4 +- examples/sdk/carousel-mixed.ts | 64 +++++ examples/sdk/carousel-video.ts | 42 +++ examples/sdk/carousel.ts | 56 ++++ examples/sdk/test-berry-message-regression.ts | 139 ++++++++++ package-lock.json | 246 ++++++++++++++---- package.json | 2 +- packages/auth/package.json | 48 ++-- packages/berry-otp/package.json | 52 ++-- packages/berryotp/package.json | 6 +- packages/berryprotocol/package.json | 52 ++-- packages/cli/package.json | 50 ++-- packages/core/package.json | 64 ++--- packages/core/src/index.ts | 113 +++++++- packages/events/package.json | 40 +-- packages/events/src/index.ts | 36 +++ packages/gateway/package.json | 50 ++-- packages/media/package.json | 40 +-- packages/messages/package.json | 46 ++-- packages/messages/src/index.ts | 10 + packages/protocol/package.json | 48 ++-- packages/socket/package.json | 56 ++-- packages/socket/src/index.ts | 163 ++++++++++++ packages/store/package.json | 48 ++-- packages/transport/package.json | 2 +- packages/transport/src/index.ts | 1 + packages/wa-message/package.json | 50 ++-- packages/wa-message/src/index.ts | 172 +++++++++--- 29 files changed, 1382 insertions(+), 420 deletions(-) create mode 100644 examples/sdk/carousel-mixed.ts create mode 100644 examples/sdk/carousel-video.ts create mode 100644 examples/sdk/carousel.ts create mode 100644 examples/sdk/test-berry-message-regression.ts diff --git a/README.md b/README.md index df3049d..4ecf8aa 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Internally it uses a BerrySDK transport engine, while exposing a BerryProtocol A - persistent auth state per session - reconnect lifecycle - SQLite persistence for metadata -- text, image, audio, document, buttons, list, reaction, location and contact sending +- text, image, audio, document, buttons, list, carousel, reaction, location and contact sending - presence helpers - history, chats, contacts and groups sync events - CLI and REST examples @@ -255,6 +255,106 @@ Currently validated rendering paths include: - native-flow `quick_reply` - native-flow `cta_copy` - native-flow `cta_url` +- interactive carousel cards wrapped in `viewOnceMessage` + +## Carousel Messages with Card Types + +BerryProtocol supports native WhatsApp carousel messages through: + +```ts +await client.sendCarousel(jid, { + text: "Confira nossas pizzas!", + footer: "Deslize para ver mais", + cards: [ + { + title: "Pizza Calabresa", + body: "Calabresa premium", + footer: "R$ 39,90", + image: { + url: "https://example.com/calabresa.jpg", + }, + buttons: [ + { + kind: "quick_reply", + id: "pizza_calabresa", + title: "Escolher", + }, + ], + }, + ], +}); +``` + +You can also use the low-level unified API: + +```ts +await client.sendMessage(jid, { + text: "Confira nossas pizzas!", + footer: "Deslize para ver mais", + cards: [ + { + title: "Pizza Calabresa", + body: "Calabresa premium", + footer: "R$ 39,90", + image: { + url: "https://example.com/calabresa.jpg", + }, + buttons: [ + { + kind: "quick_reply", + id: "pizza_calabresa", + title: "Escolher", + }, + ], + }, + ], + carouselCardType: "image", +}); +``` + +Supported card capabilities: + +- image cards +- video cards +- quick reply buttons +- copy-code buttons +- cta-url buttons +- mixed media carousels + +Rules: + +- maximum `10` cards per carousel +- each card must include exactly one media source: `image` or `video` +- `carouselCardType` can be `image`, `video` or `mixed` + +Examples: + +- [examples/sdk/carousel.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel.ts) +- [examples/sdk/carousel-video.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-video.ts) +- [examples/sdk/carousel-mixed.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-mixed.ts) + +Note: + +Carousel messages are internally wrapped in `viewOnceMessage` for better WhatsApp client compatibility. + +## Regression Test Script + +There is also a broader validation script for message rendering and payload checks: + +- [examples/sdk/test-berry-message-regression.ts](C:/Users/felip/BerryProtocol/examples/sdk/test-berry-message-regression.ts) + +Run the local validation suite: + +```bash +npx tsx examples/sdk/test-berry-message-regression.ts +``` + +Run the live send suite: + +```powershell +$env:BERRY_TEST_TO="5511999999999@s.whatsapp.net" +npx tsx examples/sdk/test-berry-message-regression.ts +``` ## AI label notes diff --git a/examples/npm-consumer/package.json b/examples/npm-consumer/package.json index 60fe32f..411fafd 100644 --- a/examples/npm-consumer/package.json +++ b/examples/npm-consumer/package.json @@ -7,7 +7,7 @@ "start": "node test-from-npm.mjs" }, "dependencies": { - "berryprotocol": "^0.1.7", - "berryotp": "^0.1.7" + "berryprotocol": "^0.1.9", + "berryotp": "^0.1.9" } } diff --git a/examples/sdk/carousel-mixed.ts b/examples/sdk/carousel-mixed.ts new file mode 100644 index 0000000..8e8eaff --- /dev/null +++ b/examples/sdk/carousel-mixed.ts @@ -0,0 +1,64 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; + +const to = process.env.BERRY_TEST_TO; + +if (!to) { + console.log("Set BERRY_TEST_TO before running this example."); + process.exit(0); +} + +const client = new BerryProtocol({ + sessionId: "carousel-mixed-example", +}); + +client.once("connection.open", async () => { + await client.sendCarousel(to, { + text: "Cards mistos com imagem, video e botoes nativos", + footer: "BerryProtocol carousel", + carouselCardType: "mixed", + cards: [ + { + title: "Combo familia", + body: "Imagem do combo com refrigerante", + footer: "R$ 74,90", + image: { + url: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?auto=format&fit=crop&w=900&q=80", + }, + buttons: [ + { + kind: "copy_code", + title: "Copiar cupom", + code: "FAMILIA10", + }, + ], + }, + { + title: "Teaser forno", + body: "Video dos bastidores", + footer: "Veja agora", + video: { + url: "https://www.w3schools.com/html/movie.mp4", + mimetype: "video/mp4", + }, + buttons: [ + { + name: "quick_reply", + buttonParamsJson: JSON.stringify({ + display_text: "Pedir agora", + id: "pedido_agora", + }), + }, + { + kind: "cta_url", + title: "Ver cardapio", + url: "https://example.com/menu", + }, + ], + }, + ], + }); + + console.log("Carousel misto enviado."); +}); + +await client.connectWithQr(); diff --git a/examples/sdk/carousel-video.ts b/examples/sdk/carousel-video.ts new file mode 100644 index 0000000..6394beb --- /dev/null +++ b/examples/sdk/carousel-video.ts @@ -0,0 +1,42 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; + +const to = process.env.BERRY_TEST_TO; + +if (!to) { + console.log("Set BERRY_TEST_TO before running this example."); + process.exit(0); +} + +const client = new BerryProtocol({ + sessionId: "carousel-video-example", +}); + +client.once("connection.open", async () => { + await client.sendCarousel(to, { + text: "Confira nossos videos promocionais", + footer: "Cada card pode ter video nativo", + carouselCardType: "video", + cards: [ + { + title: "Promo da casa", + body: "Video teaser da pizzaria", + footer: "Toque para ver", + video: { + url: "https://www.w3schools.com/html/mov_bbb.mp4", + mimetype: "video/mp4", + }, + buttons: [ + { + kind: "quick_reply", + id: "promo_casa", + title: "Quero essa promo", + }, + ], + }, + ], + }); + + console.log("Carousel de video enviado."); +}); + +await client.connectWithQr(); diff --git a/examples/sdk/carousel.ts b/examples/sdk/carousel.ts new file mode 100644 index 0000000..51bfa4d --- /dev/null +++ b/examples/sdk/carousel.ts @@ -0,0 +1,56 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; + +const to = process.env.BERRY_TEST_TO; + +if (!to) { + console.log("Set BERRY_TEST_TO before running this example."); + process.exit(0); +} + +const client = new BerryProtocol({ + sessionId: "carousel-example", +}); + +client.once("connection.open", async () => { + await client.sendCarousel(to, { + text: "Confira nossas pizzas!", + footer: "Deslize para ver mais", + carouselCardType: "image", + cards: [ + { + title: "Pizza Calabresa", + body: "Calabresa premium com cebola roxa", + footer: "R$ 39,90", + image: { + url: "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=900&q=80", + }, + buttons: [ + { + kind: "quick_reply", + id: "pizza_calabresa", + title: "Escolher", + }, + ], + }, + { + title: "Pizza Margherita", + body: "Molho artesanal, mussarela e manjericao", + footer: "R$ 36,90", + image: { + url: "https://images.unsplash.com/photo-1574071318508-1cdbab80d002?auto=format&fit=crop&w=900&q=80", + }, + buttons: [ + { + kind: "cta_url", + title: "Abrir site", + url: "https://example.com/cardapio", + }, + ], + }, + ], + }); + + console.log("Carousel de imagem enviado."); +}); + +await client.connectWithQr(); diff --git a/examples/sdk/test-berry-message-regression.ts b/examples/sdk/test-berry-message-regression.ts new file mode 100644 index 0000000..9f6952d --- /dev/null +++ b/examples/sdk/test-berry-message-regression.ts @@ -0,0 +1,139 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; + +const assertRejects = async (label: string, fn: () => Promise) => { + try { + await fn(); + console.error(`FAIL: ${label} should have rejected`); + } catch (error) { + console.log(`OK: ${label}`, error instanceof Error ? error.message : error); + } +}; + +const runLocalValidationSuite = async () => { + const client = new BerryProtocol({ + sessionId: "regression-validation", + printQrInTerminal: false, + }); + + await assertRejects("invalid jid", () => + client.sendMessage("invalido", { + text: "oi", + }), + ); + + await assertRejects("carousel without media", () => + client.sendMessage("5511999999999@s.whatsapp.net", { + text: "cards", + cards: [ + { + title: "Sem midia", + }, + ], + }), + ); + + await assertRejects("carousel over limit", () => + client.sendMessage("5511999999999@s.whatsapp.net", { + text: "cards", + cards: Array.from({ length: 11 }, (_, index) => ({ + title: `Card ${index + 1}`, + image: { + url: "https://example.com/image.png", + }, + })), + }), + ); + + await assertRejects("carousel type mismatch", () => + client.sendMessage("5511999999999@s.whatsapp.net", { + text: "cards", + carouselCardType: "image", + cards: [ + { + title: "Video em carousel de imagem", + video: { + url: "https://www.w3schools.com/html/mov_bbb.mp4", + }, + }, + ], + }), + ); +}; + +const runLiveSuite = async () => { + const to = process.env.BERRY_TEST_TO; + if (!to) { + console.log("BERRY_TEST_TO not set. Skipping live send suite."); + return; + } + + const client = new BerryProtocol({ + sessionId: "regression-live", + }); + + client.on("message.ack", (ack) => { + console.log("ACK:", ack); + }); + + client.once("connection.open", async () => { + console.log("Connected. Running live send suite..."); + + await client.sendText(to, "BerryProtocol regression suite"); + + await client.sendList(to, { + title: "Menu", + text: "Escolha uma categoria", + footer: "BerryProtocol", + buttonText: "Abrir lista", + sections: [ + { + title: "Pizzas", + rows: [{ id: "calabresa", title: "Calabresa" }], + }, + ], + }); + + await client.sendButtons(to, { + text: "Escolha uma acao", + footer: "BerryProtocol", + buttons: [ + { id: "reply_1", title: "Opcao 1", kind: "quick_reply" }, + { id: "coupon", title: "Copiar cupom", kind: "copy_code", code: "BERRY10" }, + ], + }); + + await client.sendCarousel(to, { + text: "Regression carousel", + footer: "BerryProtocol", + carouselCardType: "mixed", + cards: [ + { + title: "Imagem", + body: "Card de imagem", + footer: "R$ 39,90", + image: { + url: "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=900&q=80", + }, + buttons: [{ id: "img_1", title: "Escolher", kind: "quick_reply" }], + }, + { + title: "Video", + body: "Card de video", + footer: "Promo", + video: { + url: "https://www.w3schools.com/html/mov_bbb.mp4", + mimetype: "video/mp4", + }, + buttons: [{ title: "Abrir site", kind: "cta_url", url: "https://example.com" }], + }, + ], + }); + + console.log("Live send suite finished."); + }); + + await client.connectWithQr(); +}; + +await runLocalValidationSuite(); +await runLiveSuite(); diff --git a/package-lock.json b/package-lock.json index 7ac8e67..f5d75a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "berrysdk", - "version": "0.1.7", + "version": "0.1.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "berrysdk", - "version": "0.1.7", + "version": "0.1.9", "license": "Apache-2.0", "workspaces": [ "packages/*" @@ -3285,11 +3285,11 @@ }, "packages/auth": { "name": "@berrysdk/auth", - "version": "0.1.1", + "version": "0.1.2", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.1", - "@berrysdk/store": "0.1.1" + "@berrysdk/events": "0.1.4", + "@berrysdk/store": "0.1.3" } }, "packages/auth/node_modules/@berrysdk/events": { @@ -3310,91 +3310,241 @@ }, "packages/berry-otp": { "name": "@berrysdk/berry-otp", + "version": "0.1.9", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/core": "0.1.9" + } + }, + "packages/berry-otp/node_modules/@berrysdk/auth": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/auth/-/auth-0.1.1.tgz", + "integrity": "sha512-VqWbCFYO5u7iUtyUAkQtyTvKgBakDq+zM0Cm6I7a2v8f1riipdaZYSvfqwb+1XLFIaT16pmnDKJzXL3EAO1f/w==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "@berrysdk/store": "0.1.1" + } + }, + "packages/berry-otp/node_modules/@berrysdk/core/node_modules/@berrysdk/events": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.2.tgz", + "integrity": "sha512-vn5n5vzQwR/YOAkdwX3BXES8Bb0b0nvklY/woCJi9FH2aNDLpSOToN5KSBa7OWY/ptlVhX/GMJy5WmHFeO9p0Q==", + "license": "Apache-2.0" + }, + "packages/berry-otp/node_modules/@berrysdk/events": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", + "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", + "license": "Apache-2.0" + }, + "packages/berry-otp/node_modules/@berrysdk/media": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/media/-/media-0.1.1.tgz", + "integrity": "sha512-8X+DqmbZxM72uhstuSzeW20eYZ+4nSkxmMl7LbE0Ezf9OKpLwQHquDN1dGmH5k6Z1YdD+Cpv7k0CzVFvWv+o9w==", + "license": "Apache-2.0" + }, + "packages/berry-otp/node_modules/@berrysdk/messages": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/messages/-/messages-0.1.1.tgz", + "integrity": "sha512-8HqdAUU92pu1SMhbsuhZwDDy6y5ifgJ3KgrMSMMe6rvGw0Um2daq1bICWvsZcdYXJWd71m+PSK/eG8/233nV4A==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1" + } + }, + "packages/berry-otp/node_modules/@berrysdk/proto": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/proto/-/proto-0.1.1.tgz", + "integrity": "sha512-Tx8tXfKJ74mqaLtKchaDLDtb1zl0WhvX+HiWcr9/pQC6zjNO1ZHie83T1SHXQyO0cWdVCgNkcltYpKAHZLG7Ng==", + "license": "Apache-2.0", + "dependencies": { + "@wppconnect/wa-proto": "^2.3000.1030818676", + "protobufjs": "^7.4.0" + } + }, + "packages/berry-otp/node_modules/@berrysdk/socket": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@berrysdk/socket/-/socket-0.1.7.tgz", + "integrity": "sha512-T7lpxr0Ds/3Wp99odxbeD7OUfL1vXKlBjtnGgfw7tBoxFmDa9R2dXpih+nLXloPeikbOSDrFiN+N+1Hu0nFOEw==", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.7" + "@berrysdk/events": "0.1.2", + "@berrysdk/proto": "0.1.1", + "@berrysdk/transport": "0.1.7", + "@berrysdk/wa-message": "0.1.7", + "pino": "^9.6.0", + "ws": "^8.18.1" } }, - "packages/berryotp": { + "packages/berry-otp/node_modules/@berrysdk/socket/node_modules/@berrysdk/events": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.2.tgz", + "integrity": "sha512-vn5n5vzQwR/YOAkdwX3BXES8Bb0b0nvklY/woCJi9FH2aNDLpSOToN5KSBa7OWY/ptlVhX/GMJy5WmHFeO9p0Q==", + "license": "Apache-2.0" + }, + "packages/berry-otp/node_modules/@berrysdk/store": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/store/-/store-0.1.1.tgz", + "integrity": "sha512-e5XaXWUWRC+mfyta8DCJC7UNJrhssQHiFv2VzG0n3Uh8SDbba31BAw2zUl0v8MaP20TCl+fjX1GUTgzhQH1oTw==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "better-sqlite3": "^11.10.0" + } + }, + "packages/berry-otp/node_modules/@berrysdk/transport": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@berrysdk/transport/-/transport-0.1.7.tgz", + "integrity": "sha512-S9zfDjGm/zCE45bwLApjCN6EaXsnVmuiQEebqvMHCNx66UBYT5zFmt7vWLG34PfJbbSzAZmLCqzueRO1BPtrrg==", + "license": "Apache-2.0", + "dependencies": { + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", + "lru-cache": "^11.1.0", + "music-metadata": "^11.12.3", + "p-queue": "^9.0.0", + "pino": "^9.6.0", + "protobufjs": "^7.5.6", + "whatsapp-rust-bridge": "0.5.3", + "ws": "^8.18.1" + }, + "peerDependencies": { + "audio-decode": "^2.1.3", + "jimp": "^1.6.1", + "link-preview-js": "^3.0.0", + "sharp": "*" + }, + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + }, + "sharp": { + "optional": true + } + } + }, + "packages/berry-otp/node_modules/@berrysdk/wa-message": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@berrysdk/wa-message/-/wa-message-0.1.7.tgz", + "integrity": "sha512-Z0rs87BBB7aQ2QI2MorDU61WaobyZ+fjiMxsrnf520O3Bk5UnZPinwa51oLOBzzsRp/zouGdPZQbXrtr3QkDBw==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.2", + "@berrysdk/proto": "0.1.1", + "@berrysdk/transport": "0.1.7" + } + }, + "packages/berry-otp/node_modules/@berrysdk/wa-message/node_modules/@berrysdk/events": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.2.tgz", + "integrity": "sha512-vn5n5vzQwR/YOAkdwX3BXES8Bb0b0nvklY/woCJi9FH2aNDLpSOToN5KSBa7OWY/ptlVhX/GMJy5WmHFeO9p0Q==", + "license": "Apache-2.0" + }, + "packages/berryotp": { + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/berry-otp": "0.1.7" + "@berrysdk/berry-otp": "0.1.9" }, "peerDependencies": { - "berryprotocol": "^0.1.7" + "berryprotocol": "^0.1.9" } }, "packages/berryprotocol": { - "version": "0.1.7", + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.7" + "@berrysdk/core": "0.1.9" } }, "packages/cli": { "name": "@berrysdk/cli", - "version": "0.1.7", + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.7", + "@berrysdk/core": "0.1.9", "commander": "^14.0.0", "pino": "^9.6.0" } }, "packages/core": { "name": "@berrysdk/core", - "version": "0.1.7", + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/auth": "0.1.1", - "@berrysdk/events": "0.1.2", - "@berrysdk/media": "0.1.1", - "@berrysdk/messages": "0.1.1", - "@berrysdk/socket": "0.1.7", - "@berrysdk/store": "0.1.2", + "@berrysdk/auth": "0.1.2", + "@berrysdk/events": "0.1.4", + "@berrysdk/media": "0.1.2", + "@berrysdk/messages": "0.1.3", + "@berrysdk/socket": "0.1.9", + "@berrysdk/store": "0.1.3", "pino": "^9.6.0", "qrcode-terminal": "^0.12.0" } }, + "packages/core/node_modules/@berrysdk/auth/node_modules/@berrysdk/events": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", + "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", + "license": "Apache-2.0" + }, + "packages/core/node_modules/@berrysdk/auth/node_modules/@berrysdk/store": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/store/-/store-0.1.1.tgz", + "integrity": "sha512-e5XaXWUWRC+mfyta8DCJC7UNJrhssQHiFv2VzG0n3Uh8SDbba31BAw2zUl0v8MaP20TCl+fjX1GUTgzhQH1oTw==", + "license": "Apache-2.0", + "dependencies": { + "@berrysdk/events": "0.1.1", + "better-sqlite3": "^11.10.0" + } + }, + "packages/core/node_modules/@berrysdk/messages/node_modules/@berrysdk/events": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", + "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", + "extraneous": true, + "license": "Apache-2.0" + }, "packages/events": { "name": "@berrysdk/events", - "version": "0.1.2", + "version": "0.1.4", "license": "Apache-2.0" }, "packages/gateway": { "name": "@berrysdk/gateway", - "version": "0.1.7", + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.7", + "@berrysdk/core": "0.1.9", "express": "^5.1.0", "pino": "^9.6.0" } }, "packages/media": { "name": "@berrysdk/media", - "version": "0.1.1", + "version": "0.1.2", "license": "Apache-2.0" }, "packages/messages": { "name": "@berrysdk/messages", - "version": "0.1.1", + "version": "0.1.3", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.1" + "@berrysdk/events": "0.1.4" } }, - "packages/messages/node_modules/@berrysdk/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", - "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", - "license": "Apache-2.0" - }, "packages/protocol": { "name": "@berrysdk/proto", - "version": "0.1.1", + "version": "0.1.2", "license": "Apache-2.0", "dependencies": { "@wppconnect/wa-proto": "^2.3000.1030818676", @@ -3403,35 +3553,29 @@ }, "packages/socket": { "name": "@berrysdk/socket", - "version": "0.1.7", + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.2", - "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.7", - "@berrysdk/wa-message": "0.1.7", + "@berrysdk/events": "0.1.4", + "@berrysdk/proto": "0.1.2", + "@berrysdk/transport": "0.1.8", + "@berrysdk/wa-message": "0.1.9", "pino": "^9.6.0", "ws": "^8.18.1" } }, "packages/store": { "name": "@berrysdk/store", - "version": "0.1.2", + "version": "0.1.3", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.1", + "@berrysdk/events": "0.1.4", "better-sqlite3": "^11.10.0" } }, - "packages/store/node_modules/@berrysdk/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", - "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", - "license": "Apache-2.0" - }, "packages/transport": { "name": "@berrysdk/transport", - "version": "0.1.7", + "version": "0.1.8", "license": "Apache-2.0", "dependencies": { "@cacheable/node-cache": "^1.4.0", @@ -3469,12 +3613,12 @@ }, "packages/wa-message": { "name": "@berrysdk/wa-message", - "version": "0.1.7", + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.2", - "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.7" + "@berrysdk/events": "0.1.4", + "@berrysdk/proto": "0.1.2", + "@berrysdk/transport": "0.1.8" } } } diff --git a/package.json b/package.json index 3a24d0e..1ee39bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "berrysdk", - "version": "0.1.7", + "version": "0.1.9", "private": true, "type": "module", "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", diff --git a/packages/auth/package.json b/packages/auth/package.json index 0053968..f595253 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,26 +1,26 @@ { - "name": "@berrysdk/auth", - "version": "0.1.1", - "description": "Session and auth state helpers for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.1", - "@berrysdk/store": "0.1.1" - } + "name": "@berrysdk/auth", + "version": "0.1.2", + "description": "Session and auth state helpers for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.4", + "@berrysdk/store": "0.1.3" + } } diff --git a/packages/berry-otp/package.json b/packages/berry-otp/package.json index 7481637..3de2f5e 100644 --- a/packages/berry-otp/package.json +++ b/packages/berry-otp/package.json @@ -1,28 +1,28 @@ { - "name": "@berrysdk/berry-otp", - "version": "0.1.7", - "description": "Official OTP flows for Berry SDK on top of WhatsApp native-flow and fallback buttons.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist", - "README.md" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/core": "0.1.7" - } + "name": "@berrysdk/berry-otp", + "version": "0.1.9", + "description": "Official OTP flows for Berry SDK on top of WhatsApp native-flow and fallback buttons.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "README.md" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.9" + } } diff --git a/packages/berryotp/package.json b/packages/berryotp/package.json index 1eefb6d..a45b003 100644 --- a/packages/berryotp/package.json +++ b/packages/berryotp/package.json @@ -1,6 +1,6 @@ { "name": "berryotp", - "version": "0.1.7", + "version": "0.1.9", "description": "Facade package for BerryOTP so consumers can import it without the @berrysdk scope.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", @@ -23,9 +23,9 @@ "access": "public" }, "dependencies": { - "@berrysdk/berry-otp": "0.1.7" + "@berrysdk/berry-otp": "0.1.9" }, "peerDependencies": { - "berryprotocol": "^0.1.7" + "berryprotocol": "^0.1.9" } } diff --git a/packages/berryprotocol/package.json b/packages/berryprotocol/package.json index 66036db..a2db4e8 100644 --- a/packages/berryprotocol/package.json +++ b/packages/berryprotocol/package.json @@ -1,28 +1,28 @@ { - "name": "berryprotocol", - "version": "0.1.7", - "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist", - "README.md" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/core": "0.1.7" - } + "name": "berryprotocol", + "version": "0.1.9", + "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "README.md" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.9" + } } diff --git a/packages/cli/package.json b/packages/cli/package.json index a56280c..a5a5d78 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,27 +1,27 @@ { - "name": "@berrysdk/cli", - "version": "0.1.7", - "description": "CLI tooling for Berry Protocol sessions and message testing.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/core": "0.1.7", - "commander": "^14.0.0", - "pino": "^9.6.0" - } + "name": "@berrysdk/cli", + "version": "0.1.9", + "description": "CLI tooling for Berry Protocol sessions and message testing.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.9", + "commander": "^14.0.0", + "pino": "^9.6.0" + } } diff --git a/packages/core/package.json b/packages/core/package.json index 43bd925..15d9679 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,34 +1,34 @@ { - "name": "@berrysdk/core", - "version": "0.1.7", - "description": "Public SDK for Berry Protocol WhatsApp integrations.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.js", - "default": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/auth": "0.1.1", - "@berrysdk/events": "0.1.2", - "@berrysdk/media": "0.1.1", - "@berrysdk/messages": "0.1.1", - "@berrysdk/socket": "0.1.7", - "@berrysdk/store": "0.1.2", - "pino": "^9.6.0", - "qrcode-terminal": "^0.12.0" - } + "name": "@berrysdk/core", + "version": "0.1.9", + "description": "Public SDK for Berry Protocol WhatsApp integrations.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/auth": "0.1.2", + "@berrysdk/events": "0.1.4", + "@berrysdk/media": "0.1.2", + "@berrysdk/messages": "0.1.3", + "@berrysdk/socket": "0.1.9", + "@berrysdk/store": "0.1.3", + "pino": "^9.6.0", + "qrcode-terminal": "^0.12.0" + } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c6d3219..7628737 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -15,6 +15,9 @@ import { BerryEventBus, type BerryEventMap, type ButtonsPayload, + type CarouselCard, + type CarouselCardType, + type CarouselMessagePayload, type ContactPayload, type IncomingMessage, type InteractivePayload, @@ -28,6 +31,7 @@ import { import { MediaManager } from "@berrysdk/media"; import { createContactMessage, + createCarouselMessage, createLocationMessage, createReactionMessage, createTextMessage, @@ -48,6 +52,7 @@ export interface BerryClientOptions { } type BerryMediaSource = Buffer | { url: string | URL }; +const MAX_CAROUSEL_CARDS = 10; const assertWhatsAppJid = (jid: string): string => { const normalized = jid.trim(); @@ -63,6 +68,8 @@ const assertWhatsAppJid = (jid: string): string => { export interface BerrySendMessageContent { ai?: boolean; text?: string; + cards?: CarouselCard[]; + carouselCardType?: CarouselCardType; image?: BerryMediaSource; audio?: BerryMediaSource; document?: BerryMediaSource; @@ -248,6 +255,13 @@ export class BerryClient { return this.sendMessage(to, { list }); } + async sendCarousel( + to: string, + payload: CarouselMessagePayload, + ): Promise { + return this.sendMessage(to, payload as BerrySendMessageContent); + } + async sendLegacyButtons(to: string, payload: ButtonsPayload): Promise { return this.queue.enqueue(async () => { const message: OutgoingMessage = { @@ -365,6 +379,14 @@ export class BerryClient { message: OutgoingMessage; dispatch: (recipientJid: string) => Promise<{ key: { id?: string | null } }>; }> { + if (content.cards?.length) { + const carousel = await this.normalizeCarouselPayload(content); + return { + message: createCarouselMessage(to, carousel), + dispatch: (recipientJid) => this.socket.sendCarouselMessage(recipientJid, carousel), + }; + } + if (typeof content.text === "string") { const text = content.text; const message = createTextMessage(to, text); @@ -549,7 +571,7 @@ export class BerryClient { } throw new Error( - "Unsupported message content. Use text, image, audio, document, buttonsMessage, list/listMessage, interactiveMessage, react, location or contacts.", + "Unsupported message content. Use text, image, audio, document, buttonsMessage, list/listMessage, cards, interactiveMessage, react, location or contacts.", ); } @@ -580,6 +602,95 @@ export class BerryClient { throw new Error("Only Buffer or { url } media inputs are supported for BerryProtocol-compatible sends."); } + private async normalizeCarouselPayload( + content: Pick, + ): Promise { + const cards = content.cards ?? []; + if (!cards.length) { + throw new Error("Carousel payload requires at least one card."); + } + + if (cards.length > MAX_CAROUSEL_CARDS) { + throw new Error(`Carousel payload supports at most ${MAX_CAROUSEL_CARDS} cards.`); + } + + this.assertCarouselCardType(content.carouselCardType, cards); + this.assertCarouselCardMedia(cards); + + return { + text: content.text ?? "", + footer: content.footer, + carouselCardType: content.carouselCardType, + cards: await Promise.all(cards.map((card) => this.normalizeCarouselCard(card))), + }; + } + + private assertCarouselCardMedia(cards: CarouselCard[]): void { + for (const [index, card] of cards.entries()) { + const hasImage = !!card.image; + const hasVideo = !!card.video; + + if (!hasImage && !hasVideo) { + throw new Error(`Carousel card ${index + 1} must contain image or video.`); + } + + if (hasImage && hasVideo) { + throw new Error(`Carousel card ${index + 1} cannot contain both image and video.`); + } + } + } + + private assertCarouselCardType( + carouselCardType: CarouselCardType | undefined, + cards: CarouselCard[], + ): void { + if (!carouselCardType || carouselCardType === "mixed") { + return; + } + + for (const [index, card] of cards.entries()) { + if (carouselCardType === "image" && card.video) { + throw new Error(`Carousel card ${index + 1} contains video but carouselCardType is "image".`); + } + + if (carouselCardType === "video" && card.image) { + throw new Error(`Carousel card ${index + 1} contains image but carouselCardType is "video".`); + } + } + } + + private async normalizeCarouselCard(card: CarouselCard): Promise { + return { + ...card, + image: await this.normalizeCarouselMedia(card.image), + video: await this.normalizeCarouselMedia(card.video), + }; + } + + private async normalizeCarouselMedia( + media?: CarouselCard["image"] | CarouselCard["video"], + ): Promise { + if (!media) { + return undefined; + } + + if (media.buffer || media.url) { + return media; + } + + if (media.path) { + const loaded = await this.media.load(media); + return { + ...media, + buffer: loaded.buffer, + mimetype: media.mimetype ?? loaded.metadata.mimetype, + fileName: media.fileName ?? loaded.metadata.fileName, + }; + } + + throw new Error("Carousel media must provide url, path or buffer."); + } + private bindInternals(): void { this.bus.on("qr", async (qr) => { this.lastQr = qr; diff --git a/packages/events/package.json b/packages/events/package.json index ab53df6..a7cdd67 100644 --- a/packages/events/package.json +++ b/packages/events/package.json @@ -1,22 +1,22 @@ { - "name": "@berrysdk/events", - "version": "0.1.2", - "description": "Shared event and message contracts for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - } + "name": "@berrysdk/events", + "version": "0.1.4", + "description": "Shared event and message contracts for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + } } diff --git a/packages/events/src/index.ts b/packages/events/src/index.ts index 47f65c1..405151b 100644 --- a/packages/events/src/index.ts +++ b/packages/events/src/index.ts @@ -122,6 +122,35 @@ export interface ButtonsPayload { buttons: ButtonRow[]; } +export type CarouselCardType = "image" | "video" | "mixed"; + +export interface CarouselButton { + id?: string; + title?: string; + kind?: "reply" | "quick_reply" | "copy_code" | "cta_url"; + code?: string; + url?: string; + nativeFlowName?: string; + buttonParamsJson?: string; + name?: string; +} + +export interface CarouselCard { + title?: string; + body?: string; + footer?: string; + image?: MediaPayload; + video?: MediaPayload; + buttons?: CarouselButton[]; +} + +export interface CarouselMessagePayload { + text: string; + footer?: string; + cards: CarouselCard[]; + carouselCardType?: CarouselCardType; +} + export interface ListRow { id: string; title: string; @@ -168,6 +197,7 @@ export interface BaseMessage { | "document" | "buttons" | "list" + | "carousel" | "interactive" | "reaction" | "location" @@ -204,6 +234,11 @@ export interface ListMessage extends BaseMessage { list: ListPayload; } +export interface CarouselMessage extends BaseMessage { + type: "carousel"; + carousel: CarouselMessagePayload; +} + export interface InteractiveMessage extends BaseMessage { type: "interactive"; interactive: InteractivePayload; @@ -232,6 +267,7 @@ export type OutgoingMessage = | DocumentMessage | ButtonsMessage | ListMessage + | CarouselMessage | InteractiveMessage | ReactionMessage | LocationMessage diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 160ccb3..704cff3 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -1,27 +1,27 @@ { - "name": "@berrysdk/gateway", - "version": "0.1.7", - "description": "HTTP gateway for multi-instance Berry Protocol control.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/core": "0.1.7", - "express": "^5.1.0", - "pino": "^9.6.0" - } + "name": "@berrysdk/gateway", + "version": "0.1.9", + "description": "HTTP gateway for multi-instance Berry Protocol control.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/core": "0.1.9", + "express": "^5.1.0", + "pino": "^9.6.0" + } } diff --git a/packages/media/package.json b/packages/media/package.json index a01c4fb..4d31d8e 100644 --- a/packages/media/package.json +++ b/packages/media/package.json @@ -1,22 +1,22 @@ { - "name": "@berrysdk/media", - "version": "0.1.1", - "description": "Media loading and normalization helpers for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - } + "name": "@berrysdk/media", + "version": "0.1.2", + "description": "Media loading and normalization helpers for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + } } diff --git a/packages/messages/package.json b/packages/messages/package.json index 85c89cf..061790e 100644 --- a/packages/messages/package.json +++ b/packages/messages/package.json @@ -1,25 +1,25 @@ { - "name": "@berrysdk/messages", - "version": "0.1.1", - "description": "Outgoing message factories for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.1" - } + "name": "@berrysdk/messages", + "version": "0.1.3", + "description": "Outgoing message factories for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.4" + } } diff --git a/packages/messages/src/index.ts b/packages/messages/src/index.ts index 46b28a9..e5659ea 100644 --- a/packages/messages/src/index.ts +++ b/packages/messages/src/index.ts @@ -8,6 +8,8 @@ import { AudioMessage, ButtonsPayload, + CarouselMessage, + CarouselMessagePayload, ContactPayload, ContactMessage, DocumentMessage, @@ -61,6 +63,14 @@ export const createListMessage = (to: string, list: ListPayload): ListMessage => list, }); +export const createCarouselMessage = ( + to: string, + carousel: CarouselMessagePayload, +): CarouselMessage => ({ + ...buildBase("carousel", to), + carousel, +}); + export const createReactionMessage = ( to: string, emoji: string, diff --git a/packages/protocol/package.json b/packages/protocol/package.json index a257131..e0ccf6b 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,26 +1,26 @@ { - "name": "@berrysdk/proto", - "version": "0.1.1", - "description": "Berry Protocol proto wrapper around WhatsApp Web protobuf definitions.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@wppconnect/wa-proto": "^2.3000.1030818676", - "protobufjs": "^7.4.0" - } + "name": "@berrysdk/proto", + "version": "0.1.2", + "description": "Berry Protocol proto wrapper around WhatsApp Web protobuf definitions.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@wppconnect/wa-proto": "^2.3000.1030818676", + "protobufjs": "^7.4.0" + } } diff --git a/packages/socket/package.json b/packages/socket/package.json index 6a55c4a..c9f5695 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -1,30 +1,30 @@ { - "name": "@berrysdk/socket", - "version": "0.1.7", - "description": "Internal transport adapter for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.2", - "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.7", - "@berrysdk/wa-message": "0.1.7", - "pino": "^9.6.0", - "ws": "^8.18.1" - } + "name": "@berrysdk/socket", + "version": "0.1.9", + "description": "Internal transport adapter for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.4", + "@berrysdk/proto": "0.1.2", + "@berrysdk/transport": "0.1.8", + "@berrysdk/wa-message": "0.1.9", + "pino": "^9.6.0", + "ws": "^8.18.1" + } } diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index 90d0da8..75f4eb5 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -14,6 +14,8 @@ import makeWASocket, { fetchLatestBerryWebVersion, generateWAMessageFromContent, makeCacheableSignalKeyStore, + prepareWAMessageMedia, + proto, useMultiFileAuthState, type WAMessage, type WASocket, @@ -23,6 +25,8 @@ import { type BerryAuthOptions, type BerryEventBus, type ButtonsPayload, + type CarouselCard, + type CarouselMessagePayload, type ChatRecord, type ContactRecord, type GroupRecord, @@ -37,6 +41,8 @@ import { ackFromWebMessageStatus, buttonsPayloadToLegacyButtonsMessageContent, buttonsPayloadToNativeFlowInteractiveContent, + carouselButtonToNativeFlowButton, + carouselPayloadToMessageContent, interactivePayloadToMessageContent, interactiveNativeFlowAdditionalNodes, legacyListAdditionalNodes, @@ -55,6 +61,7 @@ export interface SocketOptions { type MessageContent = Record; const shouldDebugOutgoingMessages = process.env.BERRY_DEBUG_WA_MESSAGE === "1"; +const MAX_CAROUSEL_CARDS = 10; const debugJsonReplacer = (_key: string, value: unknown) => { if (Buffer.isBuffer(value)) { @@ -348,6 +355,50 @@ export class BerrySocket { return fullMessage as WAMessage; } + async sendCarouselMessage( + to: string, + payload: CarouselMessagePayload, + ): Promise { + if (!this.sock?.user?.id) { + throw new Error("Socket is not connected."); + } + + const recipientJid = assertTransportJid(to); + const cards = payload.cards ?? []; + + if (!cards.length) { + throw new Error("Carousel payload requires at least one card."); + } + + if (cards.length > MAX_CAROUSEL_CARDS) { + throw new Error(`Carousel payload supports at most ${MAX_CAROUSEL_CARDS} cards.`); + } + + this.assertCarouselCardType(payload); + + const preparedCards = await Promise.all(cards.map((card, index) => this.prepareCarouselCard(card, index))); + const content = carouselPayloadToMessageContent({ + text: payload.text, + footer: payload.footer, + cards: preparedCards, + }); + const fullMessage = generateWAMessageFromContent(recipientJid, content, { + userJid: this.sock.user.id, + }); + this.logOutgoingMessage("carousel", fullMessage); + + const additionalNodes = preparedCards.some((card) => !!card.nativeFlowMessage?.buttons?.length) + ? interactiveNativeFlowAdditionalNodes() + : undefined; + + await this.sock.relayMessage(recipientJid, fullMessage.message!, { + messageId: fullMessage.key.id!, + ...(additionalNodes ? { additionalNodes } : {}), + }); + + return fullMessage as WAMessage; + } + async subscribePresence(jid: string): Promise { if (!this.sock) { throw new Error("Socket is not connected."); @@ -404,6 +455,118 @@ export class BerrySocket { } } + private assertCarouselCardType(payload: CarouselMessagePayload): void { + if (!payload.carouselCardType || payload.carouselCardType === "mixed") { + return; + } + + for (const [index, card] of payload.cards.entries()) { + if (payload.carouselCardType === "image" && card.video) { + throw new Error(`Carousel card ${index + 1} contains video but carouselCardType is "image".`); + } + + if (payload.carouselCardType === "video" && card.image) { + throw new Error(`Carousel card ${index + 1} contains image but carouselCardType is "video".`); + } + } + } + + private async prepareCarouselCard( + card: CarouselCard, + index: number, + ): Promise { + const hasImage = !!card.image; + const hasVideo = !!card.video; + + if (!hasImage && !hasVideo) { + throw new Error(`Carousel card ${index + 1} must contain image or video.`); + } + + if (hasImage && hasVideo) { + throw new Error(`Carousel card ${index + 1} cannot contain both image and video.`); + } + + const header: { + title?: string; + hasMediaAttachment: boolean; + imageMessage?: proto.Message.IImageMessage; + videoMessage?: proto.Message.IVideoMessage; + } = { + title: card.title ?? "", + hasMediaAttachment: true, + }; + + if (card.image) { + const media = await prepareWAMessageMedia( + this.toCarouselImageMediaMessage(card.image), + { + upload: this.sock!.waUploadToServer, + logger: this.logger, + }, + ); + header.imageMessage = media.imageMessage ?? undefined; + } else if (card.video) { + const media = await prepareWAMessageMedia( + this.toCarouselVideoMediaMessage(card.video), + { + upload: this.sock!.waUploadToServer, + logger: this.logger, + }, + ); + header.videoMessage = media.videoMessage ?? undefined; + } + + return { + header, + body: card.body + ? { + text: card.body, + } + : undefined, + footer: card.footer + ? { + text: card.footer, + } + : undefined, + nativeFlowMessage: + card.buttons && card.buttons.length > 0 + ? { + buttons: card.buttons.map((button, buttonIndex) => + carouselButtonToNativeFlowButton(button, buttonIndex), + ), + messageParamsJson: "", + messageVersion: 1, + } + : undefined, + }; + } + + private toCarouselImageMediaMessage(media: NonNullable) { + const source = media.buffer ?? (media.url ? { url: media.url } : undefined); + if (!source) { + throw new Error("Carousel image media must provide buffer or url before reaching the socket layer."); + } + + return { + image: source, + ...(media.mimetype ? { mimetype: media.mimetype } : {}), + ...(media.fileName ? { fileName: media.fileName } : {}), + }; + } + + private toCarouselVideoMediaMessage(media: NonNullable) { + const source = media.buffer ?? (media.url ? { url: media.url } : undefined); + if (!source) { + throw new Error("Carousel video media must provide buffer or url before reaching the socket layer."); + } + + return { + video: source, + ...(media.mimetype ? { mimetype: media.mimetype } : {}), + ...(media.fileName ? { fileName: media.fileName } : {}), + }; + } + private async createSocketAndWaitUntilOpen(): Promise<"open" | "restart_required"> { const sessionDir = await this.ensureAuthDir(); const { state, saveCreds } = await useMultiFileAuthState(sessionDir); diff --git a/packages/store/package.json b/packages/store/package.json index 2574e19..c903d3c 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -1,26 +1,26 @@ { - "name": "@berrysdk/store", - "version": "0.1.2", - "description": "SQLite-backed persistence for Berry Protocol sessions and metadata.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.1", - "better-sqlite3": "^11.10.0" - } + "name": "@berrysdk/store", + "version": "0.1.3", + "description": "SQLite-backed persistence for Berry Protocol sessions and metadata.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.4", + "better-sqlite3": "^11.10.0" + } } diff --git a/packages/transport/package.json b/packages/transport/package.json index 4cf3d78..52e1a1c 100644 --- a/packages/transport/package.json +++ b/packages/transport/package.json @@ -1,6 +1,6 @@ { "name": "@berrysdk/transport", - "version": "0.1.7", + "version": "0.1.8", "description": "Internal BerrySDK WhatsApp Web engine and transport runtime.", "author": "BerrySDK", "license": "Apache-2.0", diff --git a/packages/transport/src/index.ts b/packages/transport/src/index.ts index 0dddb9c..a968409 100644 --- a/packages/transport/src/index.ts +++ b/packages/transport/src/index.ts @@ -14,6 +14,7 @@ export { generateWAMessageFromContent, makeCacheableSignalKeyStore, proto, + prepareWAMessageMedia, useMultiFileAuthState, } from "../vendor/lib/index.js"; diff --git a/packages/wa-message/package.json b/packages/wa-message/package.json index fb14093..9f8fa91 100644 --- a/packages/wa-message/package.json +++ b/packages/wa-message/package.json @@ -1,27 +1,27 @@ { - "name": "@berrysdk/wa-message", - "version": "0.1.7", - "description": "Rendering-aware WhatsApp message builders for Berry Protocol.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "files": [ - "dist" - ], - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@berrysdk/events": "0.1.2", - "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.7" - } + "name": "@berrysdk/wa-message", + "version": "0.1.9", + "description": "Rendering-aware WhatsApp message builders for Berry Protocol.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@berrysdk/events": "0.1.4", + "@berrysdk/proto": "0.1.2", + "@berrysdk/transport": "0.1.8" + } } diff --git a/packages/wa-message/src/index.ts b/packages/wa-message/src/index.ts index c5afca9..2c0ac22 100644 --- a/packages/wa-message/src/index.ts +++ b/packages/wa-message/src/index.ts @@ -8,6 +8,8 @@ import { randomUUID } from "node:crypto"; import { type ButtonsPayload, + type CarouselButton, + type CarouselMessagePayload, type IncomingMessage, type InteractivePayload, type ListPayload, @@ -15,6 +17,19 @@ import { } from "@berrysdk/events"; import { proto, type BinaryNode, type WAMessage } from "@berrysdk/transport"; +type NativeFlowCapableButton = { + id?: string; + title?: string; + kind?: "reply" | "quick_reply" | "copy_code" | "cta_url"; + code?: string; + url?: string; + nativeFlowName?: string; + buttonParamsJson?: string; + name?: string; +}; + +type CarouselInteractiveCard = proto.Message.IInteractiveMessage; + const parseJsonObject = (value?: string | null): Record | null => { if (!value) { return null; @@ -205,6 +220,55 @@ export const buttonsPayloadToTemplateMessageContent = ( }, }); +export const carouselButtonToNativeFlowButton = ( + button: NativeFlowCapableButton, + fallbackIndex = 0, +): { name: string; buttonParamsJson: string } => { + if (button.nativeFlowName && button.buttonParamsJson) { + return { + name: button.nativeFlowName, + buttonParamsJson: button.buttonParamsJson, + }; + } + + if (button.name && button.buttonParamsJson) { + return { + name: button.name, + buttonParamsJson: button.buttonParamsJson, + }; + } + + if (button.kind === "copy_code") { + return { + name: "cta_copy", + buttonParamsJson: JSON.stringify({ + display_text: button.title ?? `Copiar ${fallbackIndex + 1}`, + copy_code: button.code ?? button.id ?? "", + }), + }; + } + + if (button.kind === "cta_url") { + const url = button.url ?? ""; + return { + name: "cta_url", + buttonParamsJson: JSON.stringify({ + display_text: button.title ?? `Abrir ${fallbackIndex + 1}`, + url, + merchant_url: url, + }), + }; + } + + return { + name: "quick_reply", + buttonParamsJson: JSON.stringify({ + display_text: button.title ?? `Opcao ${fallbackIndex + 1}`, + id: button.id ?? `quick_${fallbackIndex + 1}`, + }), + }; +}; + export const buttonsPayloadToNativeFlowInteractiveContent = ( buttons: ButtonsPayload, ): Record => @@ -218,49 +282,41 @@ export const buttonsPayloadToNativeFlowInteractiveContent = ( } : undefined, nativeFlowMessage: { - buttons: buttons.buttons.map((button) => { - if (button.nativeFlowName && button.buttonParamsJson) { - return { - name: button.nativeFlowName, - buttonParamsJson: button.buttonParamsJson, - }; - } - - if (button.kind === "copy_code") { - return { - name: "cta_copy", - buttonParamsJson: JSON.stringify({ - display_text: button.title, - copy_code: button.code ?? button.id, - }), - }; - } - - if (button.kind === "cta_url") { - const url = button.url ?? ""; - return { - name: "cta_url", - buttonParamsJson: JSON.stringify({ - display_text: button.title, - url, - merchant_url: url, - }), - }; - } - - return { - name: "quick_reply", - buttonParamsJson: JSON.stringify({ - display_text: button.title, - id: button.id, - }), - }; - }), + buttons: buttons.buttons.map((button, index) => carouselButtonToNativeFlowButton(button, index)), messageParamsJson: "", messageVersion: 1, }, }); +export const carouselPayloadToMessageContent = ( + carousel: Pick & { + cards: CarouselInteractiveCard[]; + }, +): Record => ({ + viewOnceMessage: { + message: { + messageContextInfo: { + deviceListMetadata: {}, + deviceListMetadataVersion: 2, + }, + interactiveMessage: proto.Message.InteractiveMessage.create({ + body: { + text: carousel.text, + }, + footer: carousel.footer + ? { + text: carousel.footer, + } + : undefined, + carouselMessage: { + cards: carousel.cards, + messageVersion: 1, + }, + }), + }, + }, +}); + export const buttonsPayloadToLegacyButtonsMessageContent = ( buttons: ButtonsPayload, ): Record => ({ @@ -353,6 +409,37 @@ export const extractInteractivePayload = ( }; }; +export const extractCarouselPayload = ( + message: NonNullable, +): CarouselMessagePayload | null => { + const interactive = message.interactiveMessage; + const carousel = interactive?.carouselMessage; + if (!interactive || !carousel) { + return null; + } + + return { + text: interactive.body?.text ?? "", + footer: interactive.footer?.text ?? undefined, + cards: + carousel.cards?.map((card) => ({ + title: card.header?.title ?? undefined, + body: card.body?.text ?? undefined, + footer: card.footer?.text ?? undefined, + image: card.header?.imageMessage ? {} : undefined, + video: card.header?.videoMessage ? {} : undefined, + buttons: + card.nativeFlowMessage?.buttons?.map( + (button): CarouselButton => ({ + name: button.name ?? undefined, + buttonParamsJson: button.buttonParamsJson ?? undefined, + }), + ) ?? [], + })) ?? [], + carouselCardType: "mixed", + }; +}; + export const extractButtonsPayload = ( message: NonNullable, ): ButtonsPayload | null => { @@ -481,6 +568,15 @@ export const normalizeIncomingMessage = (waMessage: WAMessage): IncomingMessage }; } + const carousel = extractCarouselPayload(message); + if (carousel) { + return { + ...base, + type: "carousel", + carousel, + }; + } + const interactive = extractInteractivePayload(message); if (interactive) { return { From d127c7708668f0522685b2713ab290b7d8fc34d4 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 16:51:04 -0300 Subject: [PATCH 13/23] test: add berry compatibility matrix --- examples/sdk/test-berry-compat-matrix.ts | 274 +++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 examples/sdk/test-berry-compat-matrix.ts diff --git a/examples/sdk/test-berry-compat-matrix.ts b/examples/sdk/test-berry-compat-matrix.ts new file mode 100644 index 0000000..e485acb --- /dev/null +++ b/examples/sdk/test-berry-compat-matrix.ts @@ -0,0 +1,274 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; +import { BerryOTP } from "../../packages/berry-otp/src/index.ts"; +import { + buttonsPayloadToNativeFlowInteractiveContent, + carouselPayloadToMessageContent, + listToLegacyListMessageContent, + normalizeIncomingMessage, +} from "../../packages/wa-message/src/index.ts"; + +const DEFAULT_IMAGE_URL = + "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=900&q=80"; +const DEFAULT_VIDEO_URL = "https://www.w3schools.com/html/mov_bbb.mp4"; + +const assert = (condition: unknown, message: string) => { + if (!condition) { + throw new Error(message); + } +}; + +const section = (title: string, rows: Array<{ id: string; title: string; description?: string }>) => ({ + title, + rows, +}); + +const runLocalMatrix = () => { + console.log("Running local compatibility matrix..."); + + const buttonsPayload = buttonsPayloadToNativeFlowInteractiveContent({ + text: "Escolha uma opcao", + footer: "BerryProtocol", + buttons: [ + { id: "reply_1", title: "Opcao 1", kind: "quick_reply" }, + { id: "coupon", title: "Copiar cupom", kind: "copy_code", code: "BERRY10" }, + { title: "Abrir site", kind: "cta_url", url: "https://example.com" }, + ], + }); + + const interactiveButtons = + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (buttonsPayload as any).interactiveMessage?.nativeFlowMessage?.buttons ?? []; + assert(interactiveButtons.length === 3, "buttons matrix should generate three native flow buttons"); + assert(interactiveButtons[0]?.name === "quick_reply", "first button should be quick_reply"); + assert(interactiveButtons[1]?.name === "cta_copy", "second button should be cta_copy"); + assert(interactiveButtons[2]?.name === "cta_url", "third button should be cta_url"); + + const listPayload = listToLegacyListMessageContent({ + title: "Menu", + text: "Escolha uma categoria", + footer: "BerryProtocol", + buttonText: "Abrir lista", + sections: [ + section("Pizzas", [{ id: "calabresa", title: "Calabresa" }]), + section("Bebidas", [{ id: "cola", title: "Coca-Cola" }]), + ], + }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const listMessage = (listPayload as any).listMessage; + assert(listMessage?.sections?.length === 2, "legacy list should preserve two sections"); + assert(listMessage?.buttonText === "Abrir lista", "legacy list should preserve button text"); + + const carouselPayload = carouselPayloadToMessageContent({ + text: "Confira nossas pizzas", + footer: "Deslize para ver mais", + cards: [ + { + header: { + title: "Pizza Calabresa", + hasMediaAttachment: true, + imageMessage: {}, + }, + body: { text: "Calabresa premium" }, + footer: { text: "R$ 39,90" }, + nativeFlowMessage: { + buttons: [ + { + name: "quick_reply", + buttonParamsJson: JSON.stringify({ + display_text: "Escolher", + id: "pizza_calabresa", + }), + }, + ], + messageParamsJson: "", + messageVersion: 1, + }, + }, + ], + }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const carouselMessage = (carouselPayload as any).viewOnceMessage?.message?.interactiveMessage?.carouselMessage; + assert(carouselMessage?.cards?.length === 1, "carousel wrapper should preserve one card"); + assert(carouselMessage?.messageVersion === 1, "carousel should use messageVersion 1"); + + const normalized = normalizeIncomingMessage({ + key: { + id: "abc123", + remoteJid: "5511999999999@s.whatsapp.net", + fromMe: false, + }, + messageTimestamp: 1, + status: 1, + message: { + interactiveResponseMessage: { + nativeFlowResponseMessage: { + paramsJson: JSON.stringify({ + id: "pizza_calabresa", + }), + }, + }, + }, + } as never); + assert(normalized?.chatId === "5511999999999@s.whatsapp.net", "incoming message should expose chatId"); + assert(normalized?.buttonId === "pizza_calabresa", "incoming message should parse interactive button id"); + + console.log("Local compatibility matrix passed."); +}; + +const waitForOpen = (client: BerryProtocol) => + new Promise((resolve) => { + client.once("connection.open", () => resolve()); + }); + +const runLiveMatrix = async () => { + const to = process.env.BERRY_TEST_TO; + if (!to) { + console.log("BERRY_TEST_TO not set. Skipping live compatibility matrix."); + return; + } + + console.log("Running live compatibility matrix..."); + + const client = new BerryProtocol({ + sessionId: "compat-matrix-live", + }); + + const ackLog = new Map(); + + client.on("message.ack", (ack) => { + const previous = ackLog.get(ack.messageId) ?? []; + previous.push(ack.ack); + ackLog.set(ack.messageId, previous); + console.log("ACK:", ack.messageId, ack.ack, ack.remoteJid); + }); + + const opened = waitForOpen(client); + await client.connectWithQr(); + await opened; + + const sentText = await client.sendText(to, "BerryProtocol compatibility matrix"); + console.log("TEXT:", sentText.id); + + const edited = await client.editMessage( + to, + sentText.id, + "BerryProtocol compatibility matrix (edited)", + ); + console.log("EDIT:", edited.id); + + const aiText = await client.sendMessage(to, { + text: "Mensagem com AI label", + ai: true, + }); + console.log("AI:", aiText.id); + + const list = await client.sendList(to, { + title: "Menu completo", + text: "Escolha uma categoria", + footer: "BerryProtocol", + buttonText: "Abrir menu", + sections: [ + section("Pizzas", [ + { id: "calabresa", title: "Calabresa" }, + { id: "marguerita", title: "Marguerita" }, + ]), + section("Bebidas", [{ id: "cola", title: "Coca-Cola" }]), + ], + }); + console.log("LIST:", list.id); + + const buttons = await client.sendButtons(to, { + text: "Acoes rapidas", + footer: "BerryProtocol", + buttons: [ + { id: "reply_1", title: "Escolher", kind: "quick_reply" }, + { title: "Copiar cupom", kind: "copy_code", code: "BERRY10" }, + { title: "Abrir site", kind: "cta_url", url: "https://example.com" }, + ], + }); + console.log("BUTTONS:", buttons.id); + + const carousel = await client.sendCarousel(to, { + text: "Carousel image matrix", + footer: "BerryProtocol", + carouselCardType: "image", + cards: [ + { + title: "Pizza Calabresa", + body: "Calabresa premium", + footer: "R$ 39,90", + image: { url: process.env.BERRY_TEST_IMAGE_URL ?? DEFAULT_IMAGE_URL }, + buttons: [{ id: "pizza_calabresa", title: "Escolher", kind: "quick_reply" }], + }, + { + title: "Pizza Frango", + body: "Frango com catupiry", + footer: "R$ 42,90", + image: { url: process.env.BERRY_TEST_IMAGE_URL ?? DEFAULT_IMAGE_URL }, + buttons: [{ title: "Abrir site", kind: "cta_url", url: "https://example.com/cardapio" }], + }, + ], + }); + console.log("CAROUSEL IMAGE:", carousel.id); + + const mixedCarousel = await client.sendCarousel(to, { + text: "Carousel mixed matrix", + footer: "BerryProtocol", + carouselCardType: "mixed", + cards: [ + { + title: "Combo familia", + body: "Imagem do combo", + footer: "R$ 74,90", + image: { url: process.env.BERRY_TEST_IMAGE_URL ?? DEFAULT_IMAGE_URL }, + buttons: [{ title: "Copiar cupom", kind: "copy_code", code: "FAMILIA10" }], + }, + { + title: "Teaser forno", + body: "Video da cozinha", + footer: "Video", + video: { + url: process.env.BERRY_TEST_VIDEO_URL ?? DEFAULT_VIDEO_URL, + mimetype: "video/mp4", + }, + buttons: [{ id: "pedido_agora", title: "Pedir agora", kind: "quick_reply" }], + }, + ], + }); + console.log("CAROUSEL MIXED:", mixedCarousel.id); + + await client.sendLocation(to, { + latitude: -22.9068, + longitude: -43.1729, + name: "Berry HQ", + address: "Rio de Janeiro", + }); + console.log("LOCATION: ok"); + + await client.sendContact(to, { + displayName: "Berry Suporte", + vcard: "BEGIN:VCARD\nVERSION:3.0\nFN:Berry Suporte\nTEL;type=CELL;type=VOICE;waid=5511999999999:+55 11 99999-9999\nEND:VCARD", + }); + console.log("CONTACT: ok"); + + await client.sendReaction(to, "🍕", sentText.id); + console.log("REACTION: ok"); + + const otp = BerryOTP.createLoginFlow(client, { + issuer: "BerryProtocol", + ttlMs: 2 * 60 * 1000, + mode: "copy-code", + editOnExpire: true, + }); + + const otpSent = await otp.sendLoginCode(to, { + userId: "compat-matrix-user", + metadata: { source: "compat-matrix" }, + }); + console.log("OTP:", otpSent.messageId); + + console.log("Live compatibility matrix finished."); +}; + +runLocalMatrix(); +await runLiveMatrix(); From 54ce08905602a5e4e61706acbe552dd77807f823 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 17:16:01 -0300 Subject: [PATCH 14/23] feat: add ai label support for carousel messages --- README.md | 4 ++ examples/sdk/carousel-ai.ts | 48 +++++++++++++++++++ examples/sdk/carousel-mixed.ts | 2 +- examples/sdk/carousel-video.ts | 2 +- examples/sdk/test-berry-compat-matrix.ts | 19 +++++++- examples/sdk/test-berry-message-regression.ts | 4 +- packages/core/src/index.ts | 8 +++- packages/events/src/index.ts | 1 + packages/socket/src/index.ts | 47 ++++++++++++++++-- 9 files changed, 124 insertions(+), 11 deletions(-) create mode 100644 examples/sdk/carousel-ai.ts diff --git a/README.md b/README.md index 4ecf8aa..500a337 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,7 @@ BerryProtocol supports native WhatsApp carousel messages through: await client.sendCarousel(jid, { text: "Confira nossas pizzas!", footer: "Deslize para ver mais", + ai: true, cards: [ { title: "Pizza Calabresa", @@ -319,6 +320,7 @@ Supported card capabilities: - quick reply buttons - copy-code buttons - cta-url buttons +- AI label in private chats - mixed media carousels Rules: @@ -332,10 +334,12 @@ Examples: - [examples/sdk/carousel.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel.ts) - [examples/sdk/carousel-video.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-video.ts) - [examples/sdk/carousel-mixed.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-mixed.ts) +- [examples/sdk/carousel-ai.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-ai.ts) Note: Carousel messages are internally wrapped in `viewOnceMessage` for better WhatsApp client compatibility. +When `ai: true` is present, BerryProtocol injects the WhatsApp AI label metadata for private chats. ## Regression Test Script diff --git a/examples/sdk/carousel-ai.ts b/examples/sdk/carousel-ai.ts new file mode 100644 index 0000000..85051a9 --- /dev/null +++ b/examples/sdk/carousel-ai.ts @@ -0,0 +1,48 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; + +const to = process.env.BERRY_TEST_TO; +const imageUrl = + process.env.BERRY_TEST_IMAGE_URL ?? + "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=900&q=80"; + +if (!to) { + console.error("Defina BERRY_TEST_TO antes de executar o exemplo de carousel com AI label."); + process.exit(1); +} + +const client = new BerryProtocol({ + sessionId: "carousel-example", +}); + +client.once("connection.open", async () => { + try { + const sent = await client.sendCarousel(to, { + text: "Confira nossas pizzas com sugestoes por IA", + footer: "BerryProtocol AI", + ai: true, + carouselCardType: "image", + cards: [ + { + title: "Pizza Calabresa", + body: "Recomendada pela IA", + footer: "R$ 39,90", + image: { url: imageUrl }, + buttons: [{ id: "pizza_calabresa", title: "Escolher", kind: "quick_reply" }], + }, + { + title: "Pizza Frango", + body: "Sugestao equilibrada", + footer: "R$ 42,90", + image: { url: imageUrl }, + buttons: [{ title: "Abrir site", kind: "cta_url", url: "https://example.com/cardapio" }], + }, + ], + }); + + console.log("CAROUSEL AI:", sent.id); + } catch (error) { + console.error("Falha ao enviar carousel com AI label:", error); + } +}); + +await client.connectWithQr(); diff --git a/examples/sdk/carousel-mixed.ts b/examples/sdk/carousel-mixed.ts index 8e8eaff..9fdabe7 100644 --- a/examples/sdk/carousel-mixed.ts +++ b/examples/sdk/carousel-mixed.ts @@ -8,7 +8,7 @@ if (!to) { } const client = new BerryProtocol({ - sessionId: "carousel-mixed-example", + sessionId: "carousel-example", }); client.once("connection.open", async () => { diff --git a/examples/sdk/carousel-video.ts b/examples/sdk/carousel-video.ts index 6394beb..6e0691f 100644 --- a/examples/sdk/carousel-video.ts +++ b/examples/sdk/carousel-video.ts @@ -8,7 +8,7 @@ if (!to) { } const client = new BerryProtocol({ - sessionId: "carousel-video-example", + sessionId: "carousel-example", }); client.once("connection.open", async () => { diff --git a/examples/sdk/test-berry-compat-matrix.ts b/examples/sdk/test-berry-compat-matrix.ts index e485acb..6b067e6 100644 --- a/examples/sdk/test-berry-compat-matrix.ts +++ b/examples/sdk/test-berry-compat-matrix.ts @@ -130,7 +130,7 @@ const runLiveMatrix = async () => { console.log("Running live compatibility matrix..."); const client = new BerryProtocol({ - sessionId: "compat-matrix-live", + sessionId: "carousel-example", }); const ackLog = new Map(); @@ -211,6 +211,23 @@ const runLiveMatrix = async () => { }); console.log("CAROUSEL IMAGE:", carousel.id); + const aiCarousel = await client.sendCarousel(to, { + text: "Carousel com AI label", + footer: "BerryProtocol AI", + ai: true, + carouselCardType: "image", + cards: [ + { + title: "Pizza AI Calabresa", + body: "Card com selo de IA", + footer: "R$ 39,90", + image: { url: process.env.BERRY_TEST_IMAGE_URL ?? DEFAULT_IMAGE_URL }, + buttons: [{ id: "pizza_ai_calabresa", title: "Escolher", kind: "quick_reply" }], + }, + ], + }); + console.log("CAROUSEL AI:", aiCarousel.id); + const mixedCarousel = await client.sendCarousel(to, { text: "Carousel mixed matrix", footer: "BerryProtocol", diff --git a/examples/sdk/test-berry-message-regression.ts b/examples/sdk/test-berry-message-regression.ts index 9f6952d..b2dea35 100644 --- a/examples/sdk/test-berry-message-regression.ts +++ b/examples/sdk/test-berry-message-regression.ts @@ -11,7 +11,7 @@ const assertRejects = async (label: string, fn: () => Promise) => { const runLocalValidationSuite = async () => { const client = new BerryProtocol({ - sessionId: "regression-validation", + sessionId: "carousel-example", printQrInTerminal: false, }); @@ -68,7 +68,7 @@ const runLiveSuite = async () => { } const client = new BerryProtocol({ - sessionId: "regression-live", + sessionId: "carousel-example", }); client.on("message.ack", (ack) => { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 7628737..a724a6e 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -383,7 +383,10 @@ export class BerryClient { const carousel = await this.normalizeCarouselPayload(content); return { message: createCarouselMessage(to, carousel), - dispatch: (recipientJid) => this.socket.sendCarouselMessage(recipientJid, carousel), + dispatch: (recipientJid) => + this.socket.sendCarouselMessage(recipientJid, carousel, { + ai: content.ai, + }), }; } @@ -603,7 +606,7 @@ export class BerryClient { } private async normalizeCarouselPayload( - content: Pick, + content: Pick, ): Promise { const cards = content.cards ?? []; if (!cards.length) { @@ -621,6 +624,7 @@ export class BerryClient { text: content.text ?? "", footer: content.footer, carouselCardType: content.carouselCardType, + ai: content.ai, cards: await Promise.all(cards.map((card) => this.normalizeCarouselCard(card))), }; } diff --git a/packages/events/src/index.ts b/packages/events/src/index.ts index 405151b..a53ff95 100644 --- a/packages/events/src/index.ts +++ b/packages/events/src/index.ts @@ -149,6 +149,7 @@ export interface CarouselMessagePayload { footer?: string; cards: CarouselCard[]; carouselCardType?: CarouselCardType; + ai?: boolean; } export interface ListRow { diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index 75f4eb5..4cf446a 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -9,6 +9,7 @@ import { mkdir } from "node:fs/promises"; import { join } from "node:path"; import makeWASocket, { type AnyMessageContent, + type BinaryNode, DisconnectReason, downloadMediaMessage, fetchLatestBerryWebVersion, @@ -62,6 +63,7 @@ export interface SocketOptions { type MessageContent = Record; const shouldDebugOutgoingMessages = process.env.BERRY_DEBUG_WA_MESSAGE === "1"; const MAX_CAROUSEL_CARDS = 10; +const BIZ_BOT_SUPPORT_PAYLOAD = "{}"; const debugJsonReplacer = (_key: string, value: unknown) => { if (Buffer.isBuffer(value)) { @@ -88,6 +90,17 @@ const assertTransportJid = (jid: string): string => { return normalized; }; +const isPrivateChatJid = (jid: string): boolean => + jid.endsWith("@s.whatsapp.net") || jid.endsWith("@lid"); + +const aiLabelAdditionalNode = (): BinaryNode => ({ + tag: "bot", + attrs: { + biz_bot: "1", + }, + content: undefined, +}); + const generateNumericPairingCode = (): string => Math.floor(10_000_000 + Math.random() * 90_000_000).toString(); @@ -358,6 +371,7 @@ export class BerrySocket { async sendCarouselMessage( to: string, payload: CarouselMessagePayload, + options?: { ai?: boolean }, ): Promise { if (!this.sock?.user?.id) { throw new Error("Socket is not connected."); @@ -385,15 +399,25 @@ export class BerrySocket { const fullMessage = generateWAMessageFromContent(recipientJid, content, { userJid: this.sock.user.id, }); + + if (options?.ai) { + this.applyAiLabelToCarouselMessage(recipientJid, fullMessage); + } + this.logOutgoingMessage("carousel", fullMessage); - const additionalNodes = preparedCards.some((card) => !!card.nativeFlowMessage?.buttons?.length) - ? interactiveNativeFlowAdditionalNodes() - : undefined; + const additionalNodes: BinaryNode[] = []; + if (preparedCards.some((card) => !!card.nativeFlowMessage?.buttons?.length)) { + additionalNodes.push(...interactiveNativeFlowAdditionalNodes()); + } + + if (options?.ai) { + additionalNodes.push(aiLabelAdditionalNode()); + } await this.sock.relayMessage(recipientJid, fullMessage.message!, { messageId: fullMessage.key.id!, - ...(additionalNodes ? { additionalNodes } : {}), + ...(additionalNodes.length ? { additionalNodes } : {}), }); return fullMessage as WAMessage; @@ -471,6 +495,21 @@ export class BerrySocket { } } + private applyAiLabelToCarouselMessage(jid: string, message: WAMessage): void { + if (!isPrivateChatJid(jid)) { + throw new Error("AI labeled carousel messages are only allowed in private chat."); + } + + const viewOnceMessage = message.message?.viewOnceMessage; + const innerMessage = viewOnceMessage?.message; + if (!innerMessage) { + throw new Error("BerryProtocol expected a viewOnceMessage wrapper for carousel AI label injection."); + } + + innerMessage.messageContextInfo ||= {}; + innerMessage.messageContextInfo.supportPayload = BIZ_BOT_SUPPORT_PAYLOAD; + } + private async prepareCarouselCard( card: CarouselCard, index: number, From 6c114e488fceaa1f2f8f1d2561befb4d2b093fa6 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 17:22:37 -0300 Subject: [PATCH 15/23] fix: use dedicated session ids for sdk examples --- examples/sdk/carousel-ai.ts | 5 ++++- examples/sdk/carousel-mixed.ts | 2 +- examples/sdk/carousel-video.ts | 2 +- examples/sdk/test-berry-compat-matrix.ts | 2 +- examples/sdk/test-berry-message-regression.ts | 4 ++-- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/sdk/carousel-ai.ts b/examples/sdk/carousel-ai.ts index 85051a9..10f694c 100644 --- a/examples/sdk/carousel-ai.ts +++ b/examples/sdk/carousel-ai.ts @@ -11,7 +11,7 @@ if (!to) { } const client = new BerryProtocol({ - sessionId: "carousel-example", + sessionId: "carousel-ai-example", }); client.once("connection.open", async () => { @@ -42,6 +42,9 @@ client.once("connection.open", async () => { console.log("CAROUSEL AI:", sent.id); } catch (error) { console.error("Falha ao enviar carousel com AI label:", error); + } finally { + await client.disconnect().catch(() => undefined); + process.exit(0); } }); diff --git a/examples/sdk/carousel-mixed.ts b/examples/sdk/carousel-mixed.ts index 9fdabe7..8e8eaff 100644 --- a/examples/sdk/carousel-mixed.ts +++ b/examples/sdk/carousel-mixed.ts @@ -8,7 +8,7 @@ if (!to) { } const client = new BerryProtocol({ - sessionId: "carousel-example", + sessionId: "carousel-mixed-example", }); client.once("connection.open", async () => { diff --git a/examples/sdk/carousel-video.ts b/examples/sdk/carousel-video.ts index 6e0691f..6394beb 100644 --- a/examples/sdk/carousel-video.ts +++ b/examples/sdk/carousel-video.ts @@ -8,7 +8,7 @@ if (!to) { } const client = new BerryProtocol({ - sessionId: "carousel-example", + sessionId: "carousel-video-example", }); client.once("connection.open", async () => { diff --git a/examples/sdk/test-berry-compat-matrix.ts b/examples/sdk/test-berry-compat-matrix.ts index 6b067e6..0ccbf15 100644 --- a/examples/sdk/test-berry-compat-matrix.ts +++ b/examples/sdk/test-berry-compat-matrix.ts @@ -130,7 +130,7 @@ const runLiveMatrix = async () => { console.log("Running live compatibility matrix..."); const client = new BerryProtocol({ - sessionId: "carousel-example", + sessionId: "compat-matrix-live", }); const ackLog = new Map(); diff --git a/examples/sdk/test-berry-message-regression.ts b/examples/sdk/test-berry-message-regression.ts index b2dea35..9f6952d 100644 --- a/examples/sdk/test-berry-message-regression.ts +++ b/examples/sdk/test-berry-message-regression.ts @@ -11,7 +11,7 @@ const assertRejects = async (label: string, fn: () => Promise) => { const runLocalValidationSuite = async () => { const client = new BerryProtocol({ - sessionId: "carousel-example", + sessionId: "regression-validation", printQrInTerminal: false, }); @@ -68,7 +68,7 @@ const runLiveSuite = async () => { } const client = new BerryProtocol({ - sessionId: "carousel-example", + sessionId: "regression-live", }); client.on("message.ack", (ack) => { From 0f8b9907a11dac1e48a17daee5f949e5c2544968 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 17:30:21 -0300 Subject: [PATCH 16/23] test: add experimental per-card ai carousel probe --- examples/sdk/carousel-ai-card-experimental.ts | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 examples/sdk/carousel-ai-card-experimental.ts diff --git a/examples/sdk/carousel-ai-card-experimental.ts b/examples/sdk/carousel-ai-card-experimental.ts new file mode 100644 index 0000000..ffa8ae2 --- /dev/null +++ b/examples/sdk/carousel-ai-card-experimental.ts @@ -0,0 +1,167 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; +import { + generateWAMessageFromContent, + prepareWAMessageMedia, + proto, +} from "../../packages/transport/src/index.ts"; +import { interactiveNativeFlowAdditionalNodes } from "../../packages/wa-message/src/index.ts"; + +const to = process.env.BERRY_TEST_TO; +const imageUrl = + process.env.BERRY_TEST_IMAGE_URL ?? + "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=900&q=80"; + +if (!to) { + console.error("Defina BERRY_TEST_TO antes de executar o teste experimental de AI por card."); + process.exit(1); +} + +const client = new BerryProtocol({ + sessionId: "carousel-ai-card-experimental", +}); + +const botNode = { + tag: "bot", + attrs: { + biz_bot: "1", + }, +}; + +const buildCard = async ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + sock: any, + title: string, + body: string, + footer: string, + id: string, +) => { + const media = await prepareWAMessageMedia( + { + image: { + url: imageUrl, + }, + }, + { + upload: sock.waUploadToServer, + }, + ); + + return proto.Message.InteractiveMessage.create({ + header: { + title, + hasMediaAttachment: true, + imageMessage: media.imageMessage, + }, + body: { + text: body, + }, + footer: { + text: footer, + }, + nativeFlowMessage: { + buttons: [ + { + name: "quick_reply", + buttonParamsJson: JSON.stringify({ + display_text: "Escolher", + id, + }), + }, + ], + messageParamsJson: "", + messageVersion: 1, + }, + contextInfo: { + isForwarded: true, + forwardingScore: 1, + forwardedAiBotMessageInfo: { + botName: "Berry AI Card", + botJid: "berry-ai-card@bot", + creatorName: "BerrySDK", + }, + }, + }); +}; + +const sendExperimentalCarousel = async ( + variant: "per-card-only" | "top-level-plus-card", +) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const berrySocket = (client as any).socket; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const sock = berrySocket?.sock as any; + + if (!sock?.user?.id) { + throw new Error("Socket interno nao esta pronto para o teste experimental."); + } + + const cards = await Promise.all([ + buildCard(sock, "Card AI 1", "Tentativa de metadata por card", "BerrySDK", "ai_card_1"), + buildCard(sock, "Card AI 2", "Segunda variacao experimental", "BerrySDK", "ai_card_2"), + ]); + + const outerMessageContextInfo: Record = { + deviceListMetadata: {}, + deviceListMetadataVersion: 2, + }; + + const additionalNodes = [...interactiveNativeFlowAdditionalNodes()]; + + if (variant === "top-level-plus-card") { + outerMessageContextInfo.supportPayload = "{}"; + additionalNodes.push(botNode); + } + + const message = generateWAMessageFromContent( + to, + { + viewOnceMessage: { + message: { + messageContextInfo: outerMessageContextInfo, + interactiveMessage: proto.Message.InteractiveMessage.create({ + body: { + text: + variant === "per-card-only" + ? "Experimental: metadata de IA somente nos cards" + : "Experimental: AI label no topo + metadata nos cards", + }, + footer: { + text: "BerryProtocol experimental", + }, + carouselMessage: { + cards, + messageVersion: 1, + }, + }), + }, + }, + }, + { + userJid: sock.user.id, + }, + ); + + await sock.relayMessage(to, message.message, { + messageId: message.key.id, + additionalNodes, + }); + + return message.key.id; +}; + +client.once("connection.open", async () => { + try { + const perCardOnly = await sendExperimentalCarousel("per-card-only"); + console.log("EXPERIMENTAL CARD AI ONLY:", perCardOnly); + + const topLevelPlusCard = await sendExperimentalCarousel("top-level-plus-card"); + console.log("EXPERIMENTAL TOP LEVEL + CARD AI:", topLevelPlusCard); + } catch (error) { + console.error("Falha no teste experimental de AI por card:", error); + } finally { + await client.disconnect().catch(() => undefined); + process.exit(0); + } +}); + +await client.connectWithQr(); From 027714e7ea164e5ebe3404a41b9ad6be5c59b3b8 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 17:32:22 -0300 Subject: [PATCH 17/23] test: expand experimental carousel ai variants --- examples/sdk/carousel-ai-card-experimental.ts | 53 ++++++++++++++++--- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/examples/sdk/carousel-ai-card-experimental.ts b/examples/sdk/carousel-ai-card-experimental.ts index ffa8ae2..25b9f35 100644 --- a/examples/sdk/carousel-ai-card-experimental.ts +++ b/examples/sdk/carousel-ai-card-experimental.ts @@ -84,7 +84,11 @@ const buildCard = async ( }; const sendExperimentalCarousel = async ( - variant: "per-card-only" | "top-level-plus-card", + variant: + | "per-card-only" + | "top-level-plus-card" + | "interactive-context-only" + | "full-stack", ) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const berrySocket = (client as any).socket; @@ -106,28 +110,57 @@ const sendExperimentalCarousel = async ( }; const additionalNodes = [...interactiveNativeFlowAdditionalNodes()]; - - if (variant === "top-level-plus-card") { + const interactiveContextInfo = + variant === "interactive-context-only" || variant === "full-stack" + ? { + isForwarded: true, + forwardingScore: 1, + forwardedAiBotMessageInfo: { + botName: "Berry AI Carousel", + botJid: "berry-ai-carousel@bot", + creatorName: "BerrySDK", + }, + } + : undefined; + + if (variant === "top-level-plus-card" || variant === "full-stack") { outerMessageContextInfo.supportPayload = "{}"; additionalNodes.push(botNode); } + const interactiveMessageAdditionalMetadata = + variant === "full-stack" + ? { + isGalaxyFlowCompleted: true, + } + : undefined; + + const bodyTextByVariant: Record = { + "per-card-only": "Experimental: metadata de IA somente nos cards", + "top-level-plus-card": "Experimental: AI label no topo + metadata nos cards", + "interactive-context-only": "Experimental: contextInfo no interactiveMessage", + "full-stack": "Experimental: topo + interactive context + card metadata", + }; + const message = generateWAMessageFromContent( to, { viewOnceMessage: { message: { messageContextInfo: outerMessageContextInfo, + ...(interactiveMessageAdditionalMetadata + ? { + interactiveMessageAdditionalMetadata, + } + : {}), interactiveMessage: proto.Message.InteractiveMessage.create({ body: { - text: - variant === "per-card-only" - ? "Experimental: metadata de IA somente nos cards" - : "Experimental: AI label no topo + metadata nos cards", + text: bodyTextByVariant[variant], }, footer: { text: "BerryProtocol experimental", }, + ...(interactiveContextInfo ? { contextInfo: interactiveContextInfo } : {}), carouselMessage: { cards, messageVersion: 1, @@ -156,6 +189,12 @@ client.once("connection.open", async () => { const topLevelPlusCard = await sendExperimentalCarousel("top-level-plus-card"); console.log("EXPERIMENTAL TOP LEVEL + CARD AI:", topLevelPlusCard); + + const interactiveContextOnly = await sendExperimentalCarousel("interactive-context-only"); + console.log("EXPERIMENTAL INTERACTIVE CONTEXT AI:", interactiveContextOnly); + + const fullStack = await sendExperimentalCarousel("full-stack"); + console.log("EXPERIMENTAL FULL STACK AI:", fullStack); } catch (error) { console.error("Falha no teste experimental de AI por card:", error); } finally { From af722ced124a24fe48b14a222f61ce81d1382132 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 17:43:54 -0300 Subject: [PATCH 18/23] test: add advanced whatsapp proto type suite --- .../sdk/test-berry-advanced-proto-types.ts | 401 ++++++++++++++++++ 1 file changed, 401 insertions(+) create mode 100644 examples/sdk/test-berry-advanced-proto-types.ts diff --git a/examples/sdk/test-berry-advanced-proto-types.ts b/examples/sdk/test-berry-advanced-proto-types.ts new file mode 100644 index 0000000..cd06389 --- /dev/null +++ b/examples/sdk/test-berry-advanced-proto-types.ts @@ -0,0 +1,401 @@ +import { randomBytes } from "node:crypto"; +import { BerryProtocol } from "../../packages/core/src/index.ts"; +import { + generateWAMessageFromContent, + prepareWAMessageMedia, + proto, + type WAMessage, +} from "../../packages/transport/src/index.ts"; + +const to = process.env.BERRY_TEST_TO; +const imageUrl = + process.env.BERRY_TEST_IMAGE_URL ?? + "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=900&q=80"; + +if (!to) { + console.error("Defina BERRY_TEST_TO antes de executar a suite de proto types avancados."); + process.exit(1); +} + +type InternalSocket = { + user?: { id?: string }; + waUploadToServer: unknown; + relayMessage: ( + jid: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + message: any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + options: any, + ) => Promise; +}; + +const client = new BerryProtocol({ + sessionId: "advanced-proto-types", +}); + +const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +const log = (label: string, status: "OK" | "SKIP" | "FAIL", detail: string) => { + console.log(`[${status}] ${label}: ${detail}`); +}; + +const getInternalSock = (): InternalSocket => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const berrySocket = (client as any).socket; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const sock = berrySocket?.sock as InternalSocket | undefined; + + if (!sock?.user?.id) { + throw new Error("Socket interno nao esta pronto."); + } + + return sock; +}; + +const sendRaw = async ( + label: string, + content: Record, +): Promise => { + const sock = getInternalSock(); + const message = generateWAMessageFromContent( + to, + content, + { + userJid: sock.user!.id!, + }, + ); + + await sock.relayMessage(to, message.message, { + messageId: message.key.id, + }); + + log(label, "OK", String(message.key.id)); + await wait(500); + return message; +}; + +const maybePrepareImage = async () => { + const sock = getInternalSock(); + return prepareWAMessageMedia( + { + image: { + url: imageUrl, + }, + }, + { + upload: sock.waUploadToServer as never, + }, + ); +}; + +const sendPollCreation = async () => { + const poll = proto.Message.PollCreationMessage.create({ + encKey: randomBytes(32), + name: "Qual pizza voce quer hoje?", + options: [ + { optionName: "Calabresa" }, + { optionName: "Frango com catupiry" }, + { optionName: "Marguerita" }, + ], + selectableOptionsCount: 1, + pollType: proto.Message.PollType.POLL, + }); + + return sendRaw("POLL CREATION", { + pollCreationMessageV5: poll, + }); +}; + +const sendPollResultSnapshot = async () => { + const snapshot = proto.Message.PollResultSnapshotMessage.create({ + name: "Parcial da enquete", + pollVotes: [ + { optionName: "Calabresa", optionVoteCount: 7 }, + { optionName: "Frango com catupiry", optionVoteCount: 3 }, + ], + pollType: proto.Message.PollType.POLL, + }); + + return sendRaw("POLL RESULT SNAPSHOT", { + pollResultSnapshotMessage: snapshot, + }); +}; + +const sendPollUpdateProbe = async (pollMessageId?: string) => { + if (!pollMessageId) { + log("POLL UPDATE", "SKIP", "pollCreationMessage id ausente"); + return; + } + + const update = proto.Message.PollUpdateMessage.create({ + pollCreationMessageKey: { + remoteJid: to, + fromMe: true, + id: pollMessageId, + }, + vote: { + encPayload: randomBytes(24), + encIv: randomBytes(12), + }, + senderTimestampMs: Date.now(), + }); + + return sendRaw("POLL UPDATE", { + pollUpdateMessage: update, + }); +}; + +const sendEventMessage = async () => { + const now = Date.now(); + const eventMessage = proto.Message.EventMessage.create({ + name: "Noite da Pizza Berry", + description: "Evento teste do protocolo", + startTime: now + 60 * 60 * 1000, + endTime: now + 2 * 60 * 60 * 1000, + extraGuestsAllowed: true, + hasReminder: true, + reminderOffsetSec: 30 * 60, + location: { + degreesLatitude: -22.9068, + degreesLongitude: -43.1729, + name: "Berry HQ", + address: "Rio de Janeiro", + }, + }); + + return sendRaw("EVENT MESSAGE", { + eventMessage, + }); +}; + +const sendScheduledCallCreation = async () => { + const scheduled = proto.Message.ScheduledCallCreationMessage.create({ + scheduledTimestampMs: Date.now() + 30 * 60 * 1000, + callType: proto.Message.ScheduledCallCreationMessage.CallType.VIDEO, + title: "Chamada agendada Berry", + }); + + return sendRaw("SCHEDULED CALL CREATION", { + scheduledCallCreationMessage: scheduled, + }); +}; + +const sendScheduledCallCancel = async (messageId?: string) => { + if (!messageId) { + log("SCHEDULED CALL CANCEL", "SKIP", "scheduledCallCreationMessage id ausente"); + return; + } + + const cancel = proto.Message.ScheduledCallEditMessage.create({ + key: { + remoteJid: to, + fromMe: true, + id: messageId, + }, + editType: proto.Message.ScheduledCallEditMessage.EditType.CANCEL, + }); + + return sendRaw("SCHEDULED CALL CANCEL", { + scheduledCallEditMessage: cancel, + }); +}; + +const sendGroupInvite = async () => { + const groupJid = process.env.BERRY_TEST_GROUP_JID; + const inviteCode = process.env.BERRY_TEST_GROUP_INVITE_CODE; + + if (!groupJid || !inviteCode) { + log("GROUP INVITE", "SKIP", "defina BERRY_TEST_GROUP_JID e BERRY_TEST_GROUP_INVITE_CODE"); + return; + } + + const invite = proto.Message.GroupInviteMessage.create({ + groupJid, + inviteCode, + inviteExpiration: + Number(process.env.BERRY_TEST_GROUP_INVITE_EXPIRATION) || + Math.floor(Date.now() / 1000) + 7 * 24 * 60 * 60, + groupName: process.env.BERRY_TEST_GROUP_NAME ?? "Grupo Berry", + caption: "Convite de grupo experimental", + }); + + return sendRaw("GROUP INVITE", { + groupInviteMessage: invite, + }); +}; + +const sendRequestPhoneNumber = async () => + sendRaw("REQUEST PHONE NUMBER", { + requestPhoneNumberMessage: proto.Message.RequestPhoneNumberMessage.create({}), + }); + +const sendProductMessage = async () => { + const prepared = await maybePrepareImage(); + const ownerJid = process.env.BERRY_TEST_BIZ_OWNER_JID ?? getInternalSock().user?.id ?? ""; + + const productMessage = proto.Message.ProductMessage.create({ + businessOwnerJid: ownerJid, + body: "Produto experimental Berry", + footer: "BerrySDK product probe", + product: { + productImage: prepared.imageMessage, + productId: process.env.BERRY_TEST_PRODUCT_ID ?? "berry-product-001", + title: "Pizza Experimental", + description: "Produto de teste do protocolo", + currencyCode: "BRL", + priceAmount1000: 39900, + retailerId: "berry-retailer-001", + url: "https://example.com/produto", + productImageCount: 1, + firstImageId: "berry-image-001", + }, + catalog: { + catalogImage: prepared.imageMessage, + title: "Catalogo Berry", + description: "Probe de ProductMessage", + }, + }); + + return sendRaw("PRODUCT MESSAGE", { + productMessage, + }); +}; + +const sendCollectionMessage = async () => { + const bizJid = process.env.BERRY_TEST_COLLECTION_BIZ_JID; + const id = process.env.BERRY_TEST_COLLECTION_ID; + + if (!bizJid || !id) { + log("COLLECTION MESSAGE", "SKIP", "defina BERRY_TEST_COLLECTION_BIZ_JID e BERRY_TEST_COLLECTION_ID"); + return; + } + + return sendRaw("COLLECTION MESSAGE", { + viewOnceMessage: { + message: { + interactiveMessage: proto.Message.InteractiveMessage.create({ + body: { + text: "Collection experimental", + }, + footer: { + text: "BerrySDK collection probe", + }, + collectionMessage: { + bizJid, + id, + messageVersion: 1, + }, + }), + }, + }, + }); +}; + +const sendShopStorefrontMessage = async () => { + const id = process.env.BERRY_TEST_SHOP_ID; + + if (!id) { + log("SHOP STOREFRONT", "SKIP", "defina BERRY_TEST_SHOP_ID"); + return; + } + + return sendRaw("SHOP STOREFRONT", { + viewOnceMessage: { + message: { + interactiveMessage: proto.Message.InteractiveMessage.create({ + body: { + text: "Shop storefront experimental", + }, + footer: { + text: "BerrySDK shop probe", + }, + shopStorefrontMessage: { + id, + surface: proto.Message.InteractiveMessage.ShopMessage.Surface.WA, + messageVersion: 1, + }, + }), + }, + }, + }); +}; + +const sendNewsletterAdminInvite = async () => { + const newsletterJid = process.env.BERRY_TEST_NEWSLETTER_JID; + + if (!newsletterJid) { + log("NEWSLETTER ADMIN INVITE", "SKIP", "defina BERRY_TEST_NEWSLETTER_JID"); + return; + } + + const prepared = await maybePrepareImage(); + return sendRaw("NEWSLETTER ADMIN INVITE", { + newsletterAdminInviteMessage: proto.Message.NewsletterAdminInviteMessage.create({ + newsletterJid, + newsletterName: process.env.BERRY_TEST_NEWSLETTER_NAME ?? "Newsletter Berry", + jpegThumbnail: prepared.imageMessage?.jpegThumbnail, + caption: "Convite admin experimental", + inviteExpiration: + Number(process.env.BERRY_TEST_NEWSLETTER_INVITE_EXPIRATION) || Date.now() + 24 * 60 * 60 * 1000, + }), + }); +}; + +const sendNewsletterFollowerInvite = async () => { + const newsletterJid = process.env.BERRY_TEST_NEWSLETTER_JID; + + if (!newsletterJid) { + log("NEWSLETTER FOLLOWER INVITE", "SKIP", "defina BERRY_TEST_NEWSLETTER_JID"); + return; + } + + const prepared = await maybePrepareImage(); + return sendRaw("NEWSLETTER FOLLOWER INVITE", { + newsletterFollowerInviteMessageV2: proto.Message.NewsletterFollowerInviteMessage.create({ + newsletterJid, + newsletterName: process.env.BERRY_TEST_NEWSLETTER_NAME ?? "Newsletter Berry", + jpegThumbnail: prepared.imageMessage?.jpegThumbnail, + caption: "Convite follower experimental", + }), + }); +}; + +const attempt = async ( + label: string, + runner: () => Promise, +): Promise => { + try { + return await runner(); + } catch (error) { + log(label, "FAIL", error instanceof Error ? error.message : String(error)); + return undefined; + } +}; + +client.once("connection.open", async () => { + try { + console.log("Running advanced proto message suite..."); + + const poll = await attempt("POLL CREATION", sendPollCreation); + await attempt("POLL RESULT SNAPSHOT", sendPollResultSnapshot); + await attempt("POLL UPDATE", () => sendPollUpdateProbe(poll?.key?.id)); + + await attempt("EVENT MESSAGE", sendEventMessage); + + const scheduled = await attempt("SCHEDULED CALL CREATION", sendScheduledCallCreation); + await attempt("SCHEDULED CALL CANCEL", () => sendScheduledCallCancel(scheduled?.key?.id)); + + await attempt("GROUP INVITE", sendGroupInvite); + await attempt("REQUEST PHONE NUMBER", sendRequestPhoneNumber); + await attempt("PRODUCT MESSAGE", sendProductMessage); + await attempt("COLLECTION MESSAGE", sendCollectionMessage); + await attempt("SHOP STOREFRONT", sendShopStorefrontMessage); + await attempt("NEWSLETTER ADMIN INVITE", sendNewsletterAdminInvite); + await attempt("NEWSLETTER FOLLOWER INVITE", sendNewsletterFollowerInvite); + } finally { + await client.disconnect().catch(() => undefined); + process.exit(0); + } +}); + +await client.connectWithQr(); From 502cf6af556be231b7f4665c3de82dbcd99dc3d6 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 17:51:07 -0300 Subject: [PATCH 19/23] test: automate group and newsletter advanced probes --- .../sdk/test-berry-advanced-proto-types.ts | 72 ++++++++++++++++--- 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/examples/sdk/test-berry-advanced-proto-types.ts b/examples/sdk/test-berry-advanced-proto-types.ts index cd06389..e53c019 100644 --- a/examples/sdk/test-berry-advanced-proto-types.ts +++ b/examples/sdk/test-berry-advanced-proto-types.ts @@ -20,6 +20,18 @@ if (!to) { type InternalSocket = { user?: { id?: string }; waUploadToServer: unknown; + groupInviteCode?: (jid: string) => Promise; + newsletterMetadata?: ( + type: "invite" | "jid", + key: string, + ) => Promise< + | { + id?: string; + name?: string; + invite?: string; + } + | null + >; relayMessage: ( jid: string, // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -204,14 +216,22 @@ const sendGroupInvite = async () => { const groupJid = process.env.BERRY_TEST_GROUP_JID; const inviteCode = process.env.BERRY_TEST_GROUP_INVITE_CODE; - if (!groupJid || !inviteCode) { - log("GROUP INVITE", "SKIP", "defina BERRY_TEST_GROUP_JID e BERRY_TEST_GROUP_INVITE_CODE"); + if (!groupJid) { + log("GROUP INVITE", "SKIP", "defina pelo menos BERRY_TEST_GROUP_JID"); + return; + } + + const sock = getInternalSock(); + const resolvedInviteCode = inviteCode ?? (await sock.groupInviteCode?.(groupJid)); + + if (!resolvedInviteCode) { + log("GROUP INVITE", "SKIP", "nao foi possivel resolver invite code do grupo"); return; } const invite = proto.Message.GroupInviteMessage.create({ groupJid, - inviteCode, + inviteCode: resolvedInviteCode, inviteExpiration: Number(process.env.BERRY_TEST_GROUP_INVITE_EXPIRATION) || Math.floor(Date.now() / 1000) + 7 * 24 * 60 * 60, @@ -322,17 +342,32 @@ const sendShopStorefrontMessage = async () => { const sendNewsletterAdminInvite = async () => { const newsletterJid = process.env.BERRY_TEST_NEWSLETTER_JID; + const newsletterInvite = process.env.BERRY_TEST_NEWSLETTER_INVITE; - if (!newsletterJid) { - log("NEWSLETTER ADMIN INVITE", "SKIP", "defina BERRY_TEST_NEWSLETTER_JID"); + if (!newsletterJid && !newsletterInvite) { + log("NEWSLETTER ADMIN INVITE", "SKIP", "defina BERRY_TEST_NEWSLETTER_JID ou BERRY_TEST_NEWSLETTER_INVITE"); + return; + } + + const sock = getInternalSock(); + const metadata = + (newsletterJid + ? await sock.newsletterMetadata?.("jid", newsletterJid) + : newsletterInvite + ? await sock.newsletterMetadata?.("invite", newsletterInvite) + : null) ?? null; + const resolvedNewsletterJid = newsletterJid ?? metadata?.id; + + if (!resolvedNewsletterJid) { + log("NEWSLETTER ADMIN INVITE", "SKIP", "nao foi possivel resolver o newsletterJid"); return; } const prepared = await maybePrepareImage(); return sendRaw("NEWSLETTER ADMIN INVITE", { newsletterAdminInviteMessage: proto.Message.NewsletterAdminInviteMessage.create({ - newsletterJid, - newsletterName: process.env.BERRY_TEST_NEWSLETTER_NAME ?? "Newsletter Berry", + newsletterJid: resolvedNewsletterJid, + newsletterName: process.env.BERRY_TEST_NEWSLETTER_NAME ?? metadata?.name ?? "Newsletter Berry", jpegThumbnail: prepared.imageMessage?.jpegThumbnail, caption: "Convite admin experimental", inviteExpiration: @@ -343,17 +378,32 @@ const sendNewsletterAdminInvite = async () => { const sendNewsletterFollowerInvite = async () => { const newsletterJid = process.env.BERRY_TEST_NEWSLETTER_JID; + const newsletterInvite = process.env.BERRY_TEST_NEWSLETTER_INVITE; + + if (!newsletterJid && !newsletterInvite) { + log("NEWSLETTER FOLLOWER INVITE", "SKIP", "defina BERRY_TEST_NEWSLETTER_JID ou BERRY_TEST_NEWSLETTER_INVITE"); + return; + } - if (!newsletterJid) { - log("NEWSLETTER FOLLOWER INVITE", "SKIP", "defina BERRY_TEST_NEWSLETTER_JID"); + const sock = getInternalSock(); + const metadata = + (newsletterJid + ? await sock.newsletterMetadata?.("jid", newsletterJid) + : newsletterInvite + ? await sock.newsletterMetadata?.("invite", newsletterInvite) + : null) ?? null; + const resolvedNewsletterJid = newsletterJid ?? metadata?.id; + + if (!resolvedNewsletterJid) { + log("NEWSLETTER FOLLOWER INVITE", "SKIP", "nao foi possivel resolver o newsletterJid"); return; } const prepared = await maybePrepareImage(); return sendRaw("NEWSLETTER FOLLOWER INVITE", { newsletterFollowerInviteMessageV2: proto.Message.NewsletterFollowerInviteMessage.create({ - newsletterJid, - newsletterName: process.env.BERRY_TEST_NEWSLETTER_NAME ?? "Newsletter Berry", + newsletterJid: resolvedNewsletterJid, + newsletterName: process.env.BERRY_TEST_NEWSLETTER_NAME ?? metadata?.name ?? "Newsletter Berry", jpegThumbnail: prepared.imageMessage?.jpegThumbnail, caption: "Convite follower experimental", }), From 21ab9d0a6ec5b63d552279af6fe3674f690b56f3 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Wed, 13 May 2026 17:56:59 -0300 Subject: [PATCH 20/23] feat: add jid listing helper example --- examples/sdk/list-berry-jids.ts | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 examples/sdk/list-berry-jids.ts diff --git a/examples/sdk/list-berry-jids.ts b/examples/sdk/list-berry-jids.ts new file mode 100644 index 0000000..b24bbb2 --- /dev/null +++ b/examples/sdk/list-berry-jids.ts @@ -0,0 +1,97 @@ +import { BerryProtocol } from "../../packages/core/src/index.ts"; + +type InternalSocket = { + newsletterMetadata?: ( + type: "invite" | "jid", + key: string, + ) => Promise< + | { + id?: string; + name?: string; + invite?: string; + subscribersCount?: number; + } + | null + >; +}; + +const client = new BerryProtocol({ + sessionId: "list-berry-jids", +}); + +const newsletterJid = process.env.BERRY_TEST_NEWSLETTER_JID?.trim(); +const newsletterInvite = process.env.BERRY_TEST_NEWSLETTER_INVITE?.trim(); + +const getInternalSock = (): InternalSocket | undefined => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const berrySocket = (client as any).socket; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return berrySocket?.sock as InternalSocket | undefined; +}; + +const printGroups = async () => { + const groups = await client.fetchGroups(); + + console.log(""); + console.log("=== GRUPOS ==="); + + if (!groups.length) { + console.log("Nenhum grupo encontrado nessa sessao."); + return; + } + + for (const group of groups.sort((a, b) => a.subject.localeCompare(b.subject))) { + console.log(`${group.subject} => ${group.id}`); + } +}; + +const printNewsletter = async () => { + const sock = getInternalSock(); + + if (!sock?.newsletterMetadata) { + console.log(""); + console.log("=== NEWSLETTER ==="); + console.log("O runtime atual nao expoe newsletterMetadata nessa sessao."); + return; + } + + if (!newsletterJid && !newsletterInvite) { + console.log(""); + console.log("=== NEWSLETTER ==="); + console.log( + "Para resolver JID de newsletter, defina BERRY_TEST_NEWSLETTER_JID ou BERRY_TEST_NEWSLETTER_INVITE.", + ); + return; + } + + const metadata = newsletterJid + ? await sock.newsletterMetadata("jid", newsletterJid) + : await sock.newsletterMetadata("invite", newsletterInvite!); + + console.log(""); + console.log("=== NEWSLETTER ==="); + + if (!metadata) { + console.log("Nao foi possivel resolver a newsletter informada."); + return; + } + + console.log(`Nome: ${metadata.name ?? "(sem nome)"}`); + console.log(`JID: ${metadata.id ?? "(nao retornado)"}`); + console.log(`Invite: ${metadata.invite ?? "(nao retornado)"}`); + if (typeof metadata.subscribersCount === "number") { + console.log(`Inscritos: ${metadata.subscribersCount}`); + } +}; + +client.once("connection.open", async () => { + try { + await printGroups(); + await printNewsletter(); + } finally { + await client.disconnect().catch(() => undefined); + process.exit(0); + } +}); + +await client.connectWithQr(); From c571e2fafef9e16f64a88a10a993c648de7266e2 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Sat, 16 May 2026 14:48:30 -0300 Subject: [PATCH 21/23] test: add self-contained proto message suite --- .env.example | 10 + .gitignore | 2 + Dockerfile | 9 +- README.md | 976 +++------------- docker-compose.yml | 11 +- docs/getting-started.mdx | 34 + docs/index.mdx | 30 + docs/instances.mdx | 31 + docs/messages.mdx | 97 ++ docs/openapi.mdx | 15 + docs/realtime.mdx | 28 + docs/webhooks.mdx | 24 + .../test-berry-self-contained-proto-types.ts | 359 ++++++ mint.json | 24 + package-lock.json | 1034 ++++++++++++++--- package.json | 6 +- packages/berryapi/package.json | 34 + packages/berryapi/src/app.ts | 111 ++ packages/berryapi/src/config/env.ts | 20 + packages/berryapi/src/database/client.ts | 21 + packages/berryapi/src/database/init.ts | 23 + packages/berryapi/src/database/schema.ts | 22 + packages/berryapi/src/docs/schema.ts | 53 + .../berryapi/src/managers/InstanceManager.ts | 364 ++++++ packages/berryapi/src/middlewares/auth.ts | 21 + .../berryapi/src/middlewares/errorHandler.ts | 16 + .../src/modules/chat/chat.controller.ts | 78 ++ .../berryapi/src/modules/chat/chat.routes.ts | 55 + .../berryapi/src/modules/chat/chat.service.ts | 89 ++ .../src/modules/chat/chat.validators.ts | 40 + .../src/modules/group/group.controller.ts | 100 ++ .../src/modules/group/group.routes.ts | 73 ++ .../src/modules/group/group.service.ts | 83 ++ .../src/modules/group/group.validators.ts | 59 + .../modules/instance/instance.controller.ts | 61 + .../src/modules/instance/instance.routes.ts | 90 ++ .../src/modules/instance/instance.service.ts | 44 + .../modules/instance/instance.validators.ts | 42 + .../message/builders/MessageBuilder.ts | 373 ++++++ .../message/controllers/message.controller.ts | 146 +++ .../message/examples/payload-examples.ts | 103 ++ .../modules/message/routes/message.routes.ts | 103 ++ .../message/services/message.service.ts | 180 +++ .../src/modules/message/types/index.ts | 23 + .../message/validators/message.validators.ts | 204 ++++ .../src/modules/profile/profile.controller.ts | 58 + .../src/modules/profile/profile.routes.ts | 52 + .../src/modules/profile/profile.service.ts | 56 + .../src/modules/profile/profile.validators.ts | 30 + .../modules/settings/settings.controller.ts | 22 + .../src/modules/settings/settings.routes.ts | 30 + .../src/modules/settings/settings.service.ts | 15 + .../modules/settings/settings.validators.ts | 26 + packages/berryapi/src/modules/shared/todo.ts | 8 + .../src/modules/webhook/webhook.controller.ts | 22 + .../src/modules/webhook/webhook.routes.ts | 35 + .../src/modules/webhook/webhook.service.ts | 15 + .../src/modules/webhook/webhook.validators.ts | 24 + .../whatsapp/BerryProtocolProvider.ts | 226 ++++ .../providers/whatsapp/WhatsAppProvider.ts | 47 + .../berryapi/src/realtime/RealtimeGateway.ts | 84 ++ packages/berryapi/src/server.ts | 17 + packages/berryapi/src/types/index.ts | 53 + packages/berryapi/src/utils/http-error.ts | 10 + packages/berryapi/src/utils/logger.ts | 7 + packages/berryapi/src/utils/response.ts | 23 + packages/berryapi/src/utils/zod.ts | 20 + .../berryapi/src/webhook/WebhookDispatcher.ts | 35 + packages/berryapi/tsconfig.json | 17 + packages/core/src/index.ts | 36 + packages/socket/src/index.ts | 16 +- 71 files changed, 5311 insertions(+), 994 deletions(-) create mode 100644 .env.example create mode 100644 docs/getting-started.mdx create mode 100644 docs/index.mdx create mode 100644 docs/instances.mdx create mode 100644 docs/messages.mdx create mode 100644 docs/openapi.mdx create mode 100644 docs/realtime.mdx create mode 100644 docs/webhooks.mdx create mode 100644 examples/sdk/test-berry-self-contained-proto-types.ts create mode 100644 mint.json create mode 100644 packages/berryapi/package.json create mode 100644 packages/berryapi/src/app.ts create mode 100644 packages/berryapi/src/config/env.ts create mode 100644 packages/berryapi/src/database/client.ts create mode 100644 packages/berryapi/src/database/init.ts create mode 100644 packages/berryapi/src/database/schema.ts create mode 100644 packages/berryapi/src/docs/schema.ts create mode 100644 packages/berryapi/src/managers/InstanceManager.ts create mode 100644 packages/berryapi/src/middlewares/auth.ts create mode 100644 packages/berryapi/src/middlewares/errorHandler.ts create mode 100644 packages/berryapi/src/modules/chat/chat.controller.ts create mode 100644 packages/berryapi/src/modules/chat/chat.routes.ts create mode 100644 packages/berryapi/src/modules/chat/chat.service.ts create mode 100644 packages/berryapi/src/modules/chat/chat.validators.ts create mode 100644 packages/berryapi/src/modules/group/group.controller.ts create mode 100644 packages/berryapi/src/modules/group/group.routes.ts create mode 100644 packages/berryapi/src/modules/group/group.service.ts create mode 100644 packages/berryapi/src/modules/group/group.validators.ts create mode 100644 packages/berryapi/src/modules/instance/instance.controller.ts create mode 100644 packages/berryapi/src/modules/instance/instance.routes.ts create mode 100644 packages/berryapi/src/modules/instance/instance.service.ts create mode 100644 packages/berryapi/src/modules/instance/instance.validators.ts create mode 100644 packages/berryapi/src/modules/message/builders/MessageBuilder.ts create mode 100644 packages/berryapi/src/modules/message/controllers/message.controller.ts create mode 100644 packages/berryapi/src/modules/message/examples/payload-examples.ts create mode 100644 packages/berryapi/src/modules/message/routes/message.routes.ts create mode 100644 packages/berryapi/src/modules/message/services/message.service.ts create mode 100644 packages/berryapi/src/modules/message/types/index.ts create mode 100644 packages/berryapi/src/modules/message/validators/message.validators.ts create mode 100644 packages/berryapi/src/modules/profile/profile.controller.ts create mode 100644 packages/berryapi/src/modules/profile/profile.routes.ts create mode 100644 packages/berryapi/src/modules/profile/profile.service.ts create mode 100644 packages/berryapi/src/modules/profile/profile.validators.ts create mode 100644 packages/berryapi/src/modules/settings/settings.controller.ts create mode 100644 packages/berryapi/src/modules/settings/settings.routes.ts create mode 100644 packages/berryapi/src/modules/settings/settings.service.ts create mode 100644 packages/berryapi/src/modules/settings/settings.validators.ts create mode 100644 packages/berryapi/src/modules/shared/todo.ts create mode 100644 packages/berryapi/src/modules/webhook/webhook.controller.ts create mode 100644 packages/berryapi/src/modules/webhook/webhook.routes.ts create mode 100644 packages/berryapi/src/modules/webhook/webhook.service.ts create mode 100644 packages/berryapi/src/modules/webhook/webhook.validators.ts create mode 100644 packages/berryapi/src/providers/whatsapp/BerryProtocolProvider.ts create mode 100644 packages/berryapi/src/providers/whatsapp/WhatsAppProvider.ts create mode 100644 packages/berryapi/src/realtime/RealtimeGateway.ts create mode 100644 packages/berryapi/src/server.ts create mode 100644 packages/berryapi/src/types/index.ts create mode 100644 packages/berryapi/src/utils/http-error.ts create mode 100644 packages/berryapi/src/utils/logger.ts create mode 100644 packages/berryapi/src/utils/response.ts create mode 100644 packages/berryapi/src/utils/zod.ts create mode 100644 packages/berryapi/src/webhook/WebhookDispatcher.ts create mode 100644 packages/berryapi/tsconfig.json diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..9512bdd --- /dev/null +++ b/.env.example @@ -0,0 +1,10 @@ +NODE_ENV=development +HOST=0.0.0.0 +PORT=3000 +API_KEY=berryapi_dev_key +LOG_LEVEL=info +DATABASE_URL=file:./berryapi.sqlite +BERRY_SQLITE_PATH=berrysdk.db +BERRY_AUTH_FOLDER=.berry-sessions +BERRY_WEBHOOK_TIMEOUT_MS=5000 +BERRY_WS_PATH=/ws diff --git a/.gitignore b/.gitignore index eb27e6b..a803f1c 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ packages/*/.tsbuildinfo .vscode berryprotocol.db berrysdk.db +berryapi.sqlite +packages/berryapi/*.sqlite _reference_baileys2 _vendor_whatsapp_proto _vendor_wppconnect_wa_proto diff --git a/Dockerfile b/Dockerfile index 95006c9..c6d40e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,13 +4,18 @@ WORKDIR /app COPY package.json tsconfig.json ./ COPY packages ./packages +COPY .env.example ./ RUN npm install RUN npm run build EXPOSE 3000 +ENV HOST=0.0.0.0 +ENV PORT=3000 +ENV API_KEY=berryapi_dev_key +ENV DATABASE_URL=file:/data/berryapi.sqlite ENV BERRY_AUTH_FOLDER=/data/auth -ENV BERRY_SQLITE_PATH=/data/berryprotocol.db +ENV BERRY_SQLITE_PATH=/data/berrysdk.db -CMD ["node", "packages/gateway/dist/index.js"] +CMD ["node", "packages/berryapi/dist/server.js"] diff --git a/README.md b/README.md index 500a337..b6406b3 100644 --- a/README.md +++ b/README.md @@ -1,900 +1,202 @@ -# BerryProtocol - -BerryProtocol is a modular TypeScript SDK for connecting to the real WhatsApp Web stack. - -Internally it uses a BerrySDK transport engine, while exposing a BerryProtocol API focused on: - -- modular architecture -- typed events -- persistent sessions -- multi-instance usage -- REST gateway -- CLI workflows -- Docker-friendly deployment - -## Features - -- real WhatsApp Web connection -- three authentication modes: - - `link` - - `qr` - - `pairing_code` -- persistent auth state per session -- reconnect lifecycle -- SQLite persistence for metadata -- text, image, audio, document, buttons, list, carousel, reaction, location and contact sending -- presence helpers -- history, chats, contacts and groups sync events -- CLI and REST examples - -## Authentication modes - -BerryProtocol supports three explicit auth modes: - -### 1. `link` - -Returns the raw link payload emitted by WhatsApp Web. - -Use when you want the same payload style you are currently seeing in the terminal. - -### 2. `qr` - -Emits the login payload and renders it as a terminal QR in the CLI. - -Use when you want a scan-ready terminal experience. - -### 3. `pairing_code` - -Requests a typed code for device linking. - -BerryProtocol now enforces an **8-digit numeric pairing code**. -If you do not provide one, BerryProtocol generates one automatically. - -## Project structure +# BerryAPI + +BerryAPI is a REST API and realtime platform for WhatsApp Web automation built by BerrySDK on top of BerryProtocol. + +It is designed for: +- automation tools like `n8n` +- chat builders like `Typebot` +- internal SaaS panels +- webhook-first WhatsApp integrations + +BerryAPI ships with: +- multi-instance session management +- API key authentication +- Swagger/OpenAPI docs at `/docs` +- realtime event streaming over WebSocket +- webhook dispatch per instance +- modern WhatsApp message endpoints +- SQLite by default, prepared for future PostgreSQL migration + +## Stack + +- Node.js +- TypeScript +- Fastify +- Drizzle ORM +- better-sqlite3 +- Zod +- Pino +- Swagger/OpenAPI +- WebSocket + +## Project Structure ```text -packages/ - auth/ - berry-otp/ - berryotp/ - berryprotocol/ - cli/ - core/ - events/ - gateway/ - media/ - messages/ - protocol/ # workspace folder for @berrysdk/proto - socket/ - store/ - transport/ - wa-message/ -examples/ - npm-consumer/ - rest/ - sdk/ -``` - -## Packages - -### `berryprotocol` - -Main public SDK package for consumers. - -Usage: - -```ts -import BerryProtocol from "berryprotocol"; - -const client = new BerryProtocol({ - sessionId: "store-001", -}); -``` - -### `berryotp` - -Main public OTP package for consumers. - -Usage: - -```ts -import { BerryOTP } from "berryotp"; -``` - -### `@berrysdk/core` - -Internal public engine package used by `berryprotocol`: - -- `BerryClient` -- `BerryProtocol` -- auth entrypoints -- queueing -- event bridge -- media send helpers - -`BerryProtocol` is an official alias for `BerryClient`, so advanced consumers can also use: - -```ts -import { BerryProtocol } from "@berrysdk/core"; - -const client = new BerryProtocol({ - sessionId: "store-001", -}); -``` - -### `@berrysdk/berry-otp` - -Official OTP package: - -- login flow helpers -- password reset flow helpers -- 2FA flow helpers -- native-flow copy-code mode -- stable fallback mode -- expiration editing -- deny/cancel handling - -### `@berrysdk/socket` - -WhatsApp transport adapter: - -- BerrySDK transport integration -- auth mode handling -- reconnect handling -- event normalization -- sync bridging - -### `@berrysdk/transport` - -Internal BerrySDK engine package: - -- wraps the WhatsApp Web runtime used by the SDK -- owns the AI label patch/runtime behavior -- isolates the low-level transport from the public `berryprotocol` package - -### `@berrysdk/events` - -Shared domain types: - -- event map -- auth options -- message contracts -- sync models - -### `@berrysdk/proto` - -Berry-owned proto wrapper: - -- exports `proto` / `WAProto` -- wraps the vendored `WPPConnect/WA-Proto` -- keeps protobuf-related code isolated for easier protocol evolution - -### `@berrysdk/wa-message` - -WhatsApp message helpers owned by Berry: - -- builders for `InteractiveMessage`, `TemplateMessage` and button payloads -- validated builders for working WhatsApp Web/mobile rendering paths -- incoming message normalization -- ACK/status normalization - -### `@berrysdk/store` - -SQLite storage for: - -- session metadata -- chats -- contacts -- groups -- messages -- ACKs - -### `@berrysdk/gateway` - -HTTP API for multi-instance control. - -### `@berrysdk/cli` - -Developer CLI for connect and send-text flows. - -## Installation - -```bash -npm install -``` - -## Installing from npm - -To consume the published packages without using this monorepo locally: - -```bash -npm install berryprotocol -``` - -For OTP via facade package: - -```bash -npm install berryotp -``` - -There is also a standalone consumer example in: - -- [examples/npm-consumer/test-from-npm.mjs](C:/Users/felip/BerryProtocol/examples/npm-consumer/test-from-npm.mjs) -- [examples/npm-consumer/package.json](C:/Users/felip/BerryProtocol/examples/npm-consumer/package.json) - -Run it with: +src/ + app.ts + server.ts + config/ + database/ + docs/ + managers/ + middlewares/ + modules/ + chat/ + group/ + instance/ + message/ + profile/ + settings/ + webhook/ + providers/ + whatsapp/ + realtime/ + types/ + utils/ + webhook/ +``` + +## Install ```bash -cd examples/npm-consumer npm install -node test-from-npm.mjs -``` - -Set the destination first: - -```powershell -$env:BERRY_TEST_TO="5511999999999@s.whatsapp.net" -``` - -## Build - -```bash -npm run build -``` - -## Rendering notes - -For the WhatsApp Web/mobile rendering workarounds currently used by BerryProtocol, see: - -- [docs/whatsapp-rendering-notes.md](C:/Users/felip/BerryProtocol/docs/whatsapp-rendering-notes.md) -- [docs/publishing.md](C:/Users/felip/BerryProtocol/docs/publishing.md) - -Currently validated rendering paths include: - -- legacy `listMessage` -- native-flow `quick_reply` -- native-flow `cta_copy` -- native-flow `cta_url` -- interactive carousel cards wrapped in `viewOnceMessage` - -## Carousel Messages with Card Types - -BerryProtocol supports native WhatsApp carousel messages through: - -```ts -await client.sendCarousel(jid, { - text: "Confira nossas pizzas!", - footer: "Deslize para ver mais", - ai: true, - cards: [ - { - title: "Pizza Calabresa", - body: "Calabresa premium", - footer: "R$ 39,90", - image: { - url: "https://example.com/calabresa.jpg", - }, - buttons: [ - { - kind: "quick_reply", - id: "pizza_calabresa", - title: "Escolher", - }, - ], - }, - ], -}); -``` - -You can also use the low-level unified API: - -```ts -await client.sendMessage(jid, { - text: "Confira nossas pizzas!", - footer: "Deslize para ver mais", - cards: [ - { - title: "Pizza Calabresa", - body: "Calabresa premium", - footer: "R$ 39,90", - image: { - url: "https://example.com/calabresa.jpg", - }, - buttons: [ - { - kind: "quick_reply", - id: "pizza_calabresa", - title: "Escolher", - }, - ], - }, - ], - carouselCardType: "image", -}); ``` -Supported card capabilities: - -- image cards -- video cards -- quick reply buttons -- copy-code buttons -- cta-url buttons -- AI label in private chats -- mixed media carousels - -Rules: - -- maximum `10` cards per carousel -- each card must include exactly one media source: `image` or `video` -- `carouselCardType` can be `image`, `video` or `mixed` - -Examples: - -- [examples/sdk/carousel.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel.ts) -- [examples/sdk/carousel-video.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-video.ts) -- [examples/sdk/carousel-mixed.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-mixed.ts) -- [examples/sdk/carousel-ai.ts](C:/Users/felip/BerryProtocol/examples/sdk/carousel-ai.ts) - -Note: - -Carousel messages are internally wrapped in `viewOnceMessage` for better WhatsApp client compatibility. -When `ai: true` is present, BerryProtocol injects the WhatsApp AI label metadata for private chats. - -## Regression Test Script - -There is also a broader validation script for message rendering and payload checks: - -- [examples/sdk/test-berry-message-regression.ts](C:/Users/felip/BerryProtocol/examples/sdk/test-berry-message-regression.ts) - -Run the local validation suite: +## Run In Development ```bash -npx tsx examples/sdk/test-berry-message-regression.ts -``` - -Run the live send suite: - -```powershell -$env:BERRY_TEST_TO="5511999999999@s.whatsapp.net" -npx tsx examples/sdk/test-berry-message-regression.ts -``` - -## AI label notes - -BerryProtocol now includes an experimental private-chat AI label path through the internal Berry transport engine. - -Usage: - -```ts -await sock.sendMessage("5511999999999@s.whatsapp.net", { - text: "Ola! Essa mensagem deve aparecer com label de AI.", - ai: true, -}); -``` - -Rules: - -- only private chats are allowed -- group, newsletter, status, and non-user JIDs are blocked -- Berry transport injects `messageContextInfo.supportPayload` -- Berry transport relays an additional `` node - -Local test files: - -- [examples/sdk/test-baileys-ai-label.js](C:/Users/felip/BerryProtocol/examples/sdk/test-baileys-ai-label.js) -- [examples/sdk/test-berry-ai-label.ts](C:/Users/felip/BerryProtocol/examples/sdk/test-berry-ai-label.ts) - -Current status: - -- validated in local private-chat tests -- experimental -- distributed through `@berrysdk/transport` - -## BerryOTP notes - -`@berrysdk/berry-otp` works without the official WhatsApp API. It uses the same native-flow and `additionalNodes` strategy validated in real tests against WhatsApp Web `2.3000.x`. - -Important caveats: - -- protocol behavior can change at any time -- `copy-code` is the recommended OTP mode today -- `stable` mode exists as fallback -- `editOnExpire` depends on `client.editMessage(...)` -- successful verification marks the OTP as `used`, so it will not later expire-edit - -## SDK quick start - -```ts -import BerryProtocol from "berryprotocol"; - -const client = new BerryProtocol({ - sessionId: "store-001", -}); - -client.on("auth.link", ({ value }) => console.log("link:", value)); -client.on("auth.qr", ({ value }) => console.log("qr payload:", value)); -client.on("auth.pairing_code", ({ code }) => console.log("pairing:", code)); -client.on("connection.open", (state) => console.log("open", state)); -client.on("message.received", (message) => console.log(message)); -``` - -## BerryOTP quick start - -```ts -import BerryProtocol from "berryprotocol"; -import { BerryOTP } from "berryotp"; - -const client = new BerryProtocol({ - sessionId: "otp-session", -}); - -const otp = BerryOTP.createLoginFlow(client, { - issuer: "BerryProtocol", - ttlMs: 2 * 60 * 1000, - mode: "copy-code", - editOnExpire: true, -}); - -await client.connectWithQr(); - -const sent = await otp.sendLoginCode("5511999999999@s.whatsapp.net", { - userId: "test-user", - metadata: { source: "sdk-test" }, -}); -``` - -## SDK authentication examples - -### Link mode - -```ts -await client.connectWithLink(); +cp .env.example .env +npm run dev ``` -### QR mode +BerryAPI starts on: -```ts -await client.connectWithQr(); -``` - -### Pairing code mode - -```ts -await client.connectWithPairingCode("5519997530219"); -``` - -### Pairing code with custom 8-digit code - -```ts -await client.connect({ - method: "pairing_code", - phoneNumber: "5519997530219", - customPairingCode: "12345678", -}); -``` - -## Sending messages +- `GET http://localhost:3000` +- `GET http://localhost:3000/info` +- `GET http://localhost:3000/docs` -### Text - -```ts -await client.sendText("5516999999999@s.whatsapp.net", "Olá pelo BerryProtocol!"); -``` - -### List - -```ts -await client.sendList("5516999999999@s.whatsapp.net", { - title: "Cardápio", - text: "Escolha uma opção", - buttonText: "Ver opções", - sections: [ - { - title: "Lanches", - rows: [ - { - id: "xburger", - title: "X-Burger", - description: "Pão, carne e queijo", - }, - ], - }, - ], -}); -``` - -### Low-level `sendMessage` - -```ts -await client.sendMessage("5516999999999@s.whatsapp.net", { - text: "Olá no formato do Baileys", -}); -``` +## Authentication -### Low-level `list` - -```ts -await client.sendMessage("5516999999999@s.whatsapp.net", { - list: { - title: "Cardápio", - text: "Escolha uma opção", - buttonText: "Ver opções", - sections: [ - { - title: "Lanches", - rows: [ - { - id: "xburger", - title: "X-Burger", - description: "Pão, carne e queijo", - }, - ], - }, - ], - }, -}); -``` +Use an API key with every protected request: -### Low-level `interactiveMessage` - -```ts -await client.sendMessage("5516999999999@s.whatsapp.net", { - interactiveMessage: { - body: { - text: "Escolha uma opção", - }, - footer: { - text: "BerryProtocol", - }, - nativeFlowMessage: { - buttons: [ - { - name: "single_select", - buttonParamsJson: JSON.stringify({ - title: "Ver opções", - sections: [ - { - title: "Lanches", - rows: [ - { - id: "xburger", - title: "X-Burger", - description: "Pão, carne e queijo", - }, - ], - }, - ], - }), - }, - ], - }, - }, -}); +```http +Authorization: Bearer berryapi_dev_key ``` -## `BerryClient` API - -### Connection - -- `connect(authOptions?)` -- `connectWithLink()` -- `connectWithQr()` -- `connectWithPairingCode(phoneNumber, customPairingCode?)` -- `disconnect()` -- `reconnect()` -- `logout()` - -### Messaging - -- `sendText()` -- `sendMessage()` -- `sendImage()` -- `sendAudio()` -- `sendDocument()` -- `sendButtons()` -- `sendList()` -- `sendReaction()` -- `sendLocation()` -- `sendContact()` - -`sendMessage()` accepts low-level compatible payloads for: - -- `text` -- `image` -- `audio` -- `document` -- `buttonsMessage` -- `list` -- `listMessage` -- `interactiveMessage` -- `react` -- `location` -- `contacts` - -### Presence and sync - -- `fetchGroups()` -- `subscribePresence()` -- `sendPresence()` - -## Event reference - -### Auth events - -- `auth.link` -- `auth.qr` -- `auth.pairing_code` -- `auth.success` -- `auth.error` - -### Connection events - -- `connection.open` -- `connection.close` -- `connection.reconnecting` +Change the key in `.env`. -### Messaging events - -- `message.received` -- `message.sent` -- `message.ack` - -### Sync events - -- `chats.update` -- `presence.update` -- `sync.history` -- `sync.contacts` -- `sync.groups` -- `sync.messages` -- `protocol.error` - -## CLI - -### Help +## Create An Instance ```bash -npm run dev:cli -- --help +curl -X POST http://localhost:3000/instance/create \ + -H "Authorization: Bearer berryapi_dev_key" \ + -H "Content-Type: application/json" \ + -d '{ + "instanceName": "store-01", + "authMethod": "qr" + }' ``` -### Link auth +## Connect With QR Code ```bash -npm run dev:cli -- --session store-001 connect +curl -X GET http://localhost:3000/instance/connect/store-01 \ + -H "Authorization: Bearer berryapi_dev_key" ``` -### QR auth +Then fetch the connection state: ```bash -npm run dev:cli -- --session store-001 connect --auth qr +curl -X GET http://localhost:3000/instance/connectionState/store-01 \ + -H "Authorization: Bearer berryapi_dev_key" ``` -### Pairing code auth +The response contains `qrCode` or `pairingCode` when needed. -```bash -npm run dev:cli -- --session store-002 connect --auth pairing_code --phone 5519997530219 -``` - -### Pairing code auth with custom 8-digit code +## Send A Message ```bash -npm run dev:cli -- --session store-003 connect --auth pairing_code --phone 5519997530219 --pairing-code 12345678 +curl -X POST http://localhost:3000/message/sendText/store-01 \ + -H "Authorization: Bearer berryapi_dev_key" \ + -H "Content-Type: application/json" \ + -d '{ + "to": "5511999999999@s.whatsapp.net", + "text": "Hello from BerryAPI" + }' ``` -### Send text - -```bash -npm run dev:cli -- --session store-001 send-text --to 5516999999999@s.whatsapp.net --message "Olá" -``` - -### CLI notes - -- For `pairing_code`, prefer a fresh `sessionId`. -- If a session already has previous credentials, logout it first or use a new session. -- The CLI prints a friendly tip when pairing fails. - -## REST gateway - -### Start +## Configure A Webhook ```bash -npm run dev:gateway -``` - -### Environment variables - -- `BERRY_HTTP_HOST` -- `BERRY_HTTP_PORT` -- `BERRY_SQLITE_PATH` -- `BERRY_AUTH_FOLDER` - -### Create instance with link auth - -```http -POST /instances -Content-Type: application/json - -{ - "sessionId": "store-001", - "authMethod": "link" -} -``` - -### Create instance with QR auth - -```http -POST /instances -Content-Type: application/json - -{ - "sessionId": "store-qr", - "authMethod": "qr" -} -``` - -### Create instance with pairing code auth - -```http -POST /instances -Content-Type: application/json - -{ - "sessionId": "store-code", - "authMethod": "pairing_code", - "phoneNumber": "5519997530219" -} -``` - -### Read auth artifacts - -```http -GET /instances/store-001/link -GET /instances/store-qr/qr -GET /instances/store-code/pairing-code -``` - -### Send text - -```http -POST /instances/store-001/send-text -Content-Type: application/json - -{ - "to": "5516999999999@s.whatsapp.net", - "text": "Olá pelo BerryProtocol!" -} -``` - -### Send image - -```http -POST /instances/store-001/send-image -Content-Type: application/json - -{ - "to": "5516999999999@s.whatsapp.net", - "media": { - "url": "https://example.com/banner.jpg", - "caption": "Banner BerryProtocol" - } -} -``` - -### Send list - -```http -POST /instances/store-001/send-list -Content-Type: application/json - -{ - "to": "5516999999999@s.whatsapp.net", - "list": { - "title": "Cardápio", - "text": "Escolha uma opção", - "buttonText": "Ver opções", - "sections": [ - { - "title": "Lanches", - "rows": [ - { - "id": "xburger", - "title": "X-Burger", - "description": "Pão, carne e queijo" - } - ] - } - ] - } -} +curl -X POST http://localhost:3000/webhook/set/store-01 \ + -H "Authorization: Bearer berryapi_dev_key" \ + -H "Content-Type: application/json" \ + -d '{ + "enabled": true, + "url": "https://example.com/webhooks/berryapi", + "events": ["connection.update", "messages.upsert", "send.message"] + }' ``` -### Logout - -```http -DELETE /instances/store-001/logout -``` +## Realtime WebSocket -See full request samples in `C:\Users\felip\BerryProtocol\examples\rest\requests.http`. - -## Storage - -### Auth files - -By default: +Connect to: ```text -.berry-sessions/ +ws://localhost:3000/ws?apiKey=berryapi_dev_key ``` -Override with: - -- `BERRY_AUTH_FOLDER` - -### SQLite database - -Default: +Or scope to one instance: ```text -berrysdk.db +ws://localhost:3000/ws?apiKey=berryapi_dev_key&instanceName=store-01 ``` -Override with: - -- `BERRY_SQLITE_PATH` +Realtime events include: +- `connection.update` +- `qrcode.updated` +- `messages.upsert` +- `messages.update` +- `messages.delete` +- `chats.update` +- `contacts.update` +- `groups.update` +- `presence.update` +- `send.message` ## Docker -### Run - ```bash docker compose up --build ``` -### Defaults - -- `BERRY_HTTP_PORT=3000` -- `BERRY_SQLITE_PATH=/data/berrysdk.db` -- `BERRY_AUTH_FOLDER=/data/auth` - -## Troubleshooting - -### Pairing code failed with logged out / connection failure - -Usually this means the session already has stale or conflicting credentials. - -Recommended fixes: +The API will be available on `http://localhost:3000`. -1. use a new `sessionId` -2. or call `logout()` for the old session -3. or remove the old session folder from `.berry-sessions/` +## Message Endpoints -### Pairing code must be 8 digits - -BerryProtocol now enforces this automatically. - -- auto-generated codes are numeric and 8 digits -- custom codes must also be numeric and 8 digits - -### QR does not show in terminal - -Use: - -```bash -npm run dev:cli -- --session my-session connect --auth qr -``` +BerryAPI includes modern WhatsApp Web message support such as: -### Link payload keeps printing +- text and extended text +- reply, forward, delete, edit, react +- image, video, audio, document, sticker, gif +- buttons, template buttons, CTA buttons, copy buttons +- carousel, lists and polls +- contacts and locations +- status and view once media +- product, catalog and collection payloads +- AI labeled text and carousel routes -That is expected for `link` auth mode. -Use `qr` if you want a renderable terminal QR instead. +Dedicated modern routes include: -## Examples +- `POST /message/sendCarousel/:instanceName` +- `POST /message/sendTemplateButtons/:instanceName` +- `POST /message/sendCopyButton/:instanceName` +- `POST /message/sendAiText/:instanceName` +- `POST /message/sendAiCarousel/:instanceName` -- SDK basic: `C:\Users\felip\BerryProtocol\examples\sdk\basic.ts` -- SDK list: `C:\Users\felip\BerryProtocol\examples\sdk\list.ts` -- REST requests: `C:\Users\felip\BerryProtocol\examples\rest\requests.http` +See Swagger docs at `/docs` for request bodies and examples. -## Important note +## Notes -BerryProtocol is operational through the BerrySDK transport layer for WhatsApp Web. The Berry layer focuses on API shape, modularity, persistence, and operational ergonomics on top of that real transport. +- Some chat/profile/group operations are registered already but return `501` until BerryProtocol exposes the required runtime hooks. +- The API architecture isolates WhatsApp access behind `WhatsAppProvider`, so BerryProtocol can be swapped later without rewriting controllers. diff --git a/docker-compose.yml b/docker-compose.yml index 594c708..2f258ea 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,17 @@ version: "3.9" services: - berry-gateway: + berryapi: build: context: . environment: - BERRY_HTTP_HOST: 0.0.0.0 - BERRY_HTTP_PORT: 3000 - BERRY_SQLITE_PATH: /data/berryprotocol.db + HOST: 0.0.0.0 + PORT: 3000 + API_KEY: berryapi_dev_key + DATABASE_URL: file:/data/berryapi.sqlite + BERRY_SQLITE_PATH: /data/berrysdk.db BERRY_AUTH_FOLDER: /data/auth + BERRY_WS_PATH: /ws ports: - "3000:3000" volumes: diff --git a/docs/getting-started.mdx b/docs/getting-started.mdx new file mode 100644 index 0000000..550ee4a --- /dev/null +++ b/docs/getting-started.mdx @@ -0,0 +1,34 @@ +# Getting Started + +## Install + +```bash +npm install +cp .env.example .env +``` + +## Run + +```bash +npm run dev +``` + +## Default URLs + +- `GET http://localhost:3000` +- `GET http://localhost:3000/info` +- `GET http://localhost:3000/docs` + +## Authentication + +Use: + +```http +Authorization: Bearer your_api_key +``` + +The development default is: + +```text +berryapi_dev_key +``` diff --git a/docs/index.mdx b/docs/index.mdx new file mode 100644 index 0000000..e4e2865 --- /dev/null +++ b/docs/index.mdx @@ -0,0 +1,30 @@ +# BerryAPI + +BerryAPI is the BerrySDK automation layer for WhatsApp Web, powered by BerryProtocol. + +It gives you a clean REST surface for: + +- `n8n` +- `Typebot` +- internal dashboards +- webhook integrations +- realtime WhatsApp event streams + +## Core Features + +- Multi-instance management +- QR and pairing-code connection flows +- Modern message endpoints +- Webhook dispatching +- WebSocket realtime events +- Swagger docs at `/docs` +- SQLite by default + +## Quick Links + +- [Getting Started](./getting-started) +- [Instances](./instances) +- [Messages](./messages) +- [Webhooks](./webhooks) +- [Realtime](./realtime) +- [OpenAPI](./openapi) diff --git a/docs/instances.mdx b/docs/instances.mdx new file mode 100644 index 0000000..599a2d9 --- /dev/null +++ b/docs/instances.mdx @@ -0,0 +1,31 @@ +# Instances + +BerryAPI supports multiple WhatsApp sessions through named instances. + +## Main Endpoints + +- `POST /instance/create` +- `GET /instance/fetch` +- `GET /instance/connect/:instanceName` +- `PUT /instance/restart/:instanceName` +- `GET /instance/connectionState/:instanceName` +- `DELETE /instance/logout/:instanceName` +- `DELETE /instance/delete/:instanceName` + +## Create Example + +```json +{ + "instanceName": "store-01", + "authMethod": "qr" +} +``` + +## Connection State + +When an instance needs login, the state payload may contain: + +- `qrCode` +- `pairingCode` +- `connectionState` +- `status` diff --git a/docs/messages.mdx b/docs/messages.mdx new file mode 100644 index 0000000..5fead58 --- /dev/null +++ b/docs/messages.mdx @@ -0,0 +1,97 @@ +# Messages + +BerryAPI exposes modern WhatsApp Web message endpoints. + +## Highlights + +- Text +- Media +- Buttons +- Template Buttons +- Copy Buttons +- Carousel +- Lists +- Polls +- AI Label Text +- AI Label Carousel +- View once +- Reactions +- Location +- Contacts +- Status +- Product, catalog and collection + +## Examples + +### Send Text + +```json +{ + "to": "5511999999999@s.whatsapp.net", + "text": "Hello from BerryAPI" +} +``` + +### Send Media + +```json +{ + "to": "5511999999999@s.whatsapp.net", + "url": "https://example.com/image.jpg", + "caption": "Image from BerryAPI" +} +``` + +### Send Buttons + +```json +{ + "to": "5511999999999@s.whatsapp.net", + "text": "Choose one option", + "footer": "BerryAPI", + "buttons": [ + { + "id": "buy_now", + "title": "Buy now", + "type": "reply" + } + ] +} +``` + +### Send Carousel + +```json +{ + "to": "5511999999999@s.whatsapp.net", + "text": "Confira nossas pizzas!", + "footer": "BerryAPI carousel", + "carouselCardType": "mixed", + "cards": [ + { + "title": "Pizza Calabresa", + "body": "Calabresa premium", + "footer": "R$ 39,90", + "image": { + "url": "https://images.unsplash.com/photo-1513104890138-7c749659a591" + }, + "buttons": [ + { + "id": "pizza_calabresa", + "title": "Escolher", + "kind": "quick_reply" + } + ] + } + ] +} +``` + +### Send AI Text + +```json +{ + "to": "5511999999999@s.whatsapp.net", + "text": "Ola! Essa mensagem deve aparecer com AI label em chat privado." +} +``` diff --git a/docs/openapi.mdx b/docs/openapi.mdx new file mode 100644 index 0000000..d945dc4 --- /dev/null +++ b/docs/openapi.mdx @@ -0,0 +1,15 @@ +# OpenAPI + +BerryAPI publishes Swagger/OpenAPI documentation at: + +```text +http://localhost:3000/docs +``` + +Use Swagger to: + +- inspect schemas +- authenticate with your API key +- test requests +- copy request bodies +- validate supported message payloads diff --git a/docs/realtime.mdx b/docs/realtime.mdx new file mode 100644 index 0000000..9c85c81 --- /dev/null +++ b/docs/realtime.mdx @@ -0,0 +1,28 @@ +# Realtime + +BerryAPI exposes a WebSocket stream for live instance events. + +## Connect + +```text +ws://localhost:3000/ws?apiKey=berryapi_dev_key +``` + +To filter by instance: + +```text +ws://localhost:3000/ws?apiKey=berryapi_dev_key&instanceName=store-01 +``` + +## Event Types + +- `connection.update` +- `qrcode.updated` +- `messages.upsert` +- `messages.update` +- `messages.delete` +- `chats.update` +- `contacts.update` +- `groups.update` +- `presence.update` +- `send.message` diff --git a/docs/webhooks.mdx b/docs/webhooks.mdx new file mode 100644 index 0000000..d749783 --- /dev/null +++ b/docs/webhooks.mdx @@ -0,0 +1,24 @@ +# Webhooks + +Configure one webhook per instance. + +## Endpoints + +- `POST /webhook/set/:instanceName` +- `GET /webhook/find/:instanceName` + +## Example + +```json +{ + "enabled": true, + "url": "https://example.com/webhooks/berryapi", + "events": [ + "connection.update", + "messages.upsert", + "send.message" + ] +} +``` + +BerryAPI dispatches normalized envelopes for supported events. diff --git a/examples/sdk/test-berry-self-contained-proto-types.ts b/examples/sdk/test-berry-self-contained-proto-types.ts new file mode 100644 index 0000000..00c6d44 --- /dev/null +++ b/examples/sdk/test-berry-self-contained-proto-types.ts @@ -0,0 +1,359 @@ +import { randomBytes, randomUUID } from "node:crypto"; +import { BerryProtocol } from "../../packages/core/src/index.ts"; +import { + generateWAMessageFromContent, + prepareWAMessageMedia, + proto, + type WAMessage, +} from "../../packages/transport/src/index.ts"; + +const to = process.env.BERRY_TEST_TO; +const imageUrl = + process.env.BERRY_TEST_IMAGE_URL ?? + "https://images.unsplash.com/photo-1513104890138-7c749659a591?auto=format&fit=crop&w=900&q=80"; + +if (!to) { + console.error("Defina BERRY_TEST_TO antes de executar a suite self-contained."); + process.exit(1); +} + +type InternalSocket = { + user?: { id?: string }; + waUploadToServer: unknown; + relayMessage: ( + jid: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + message: any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + options: any, + ) => Promise; +}; + +const client = new BerryProtocol({ + sessionId: "self-contained-proto-types", +}); + +const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +const log = (label: string, status: "OK" | "SKIP" | "FAIL", detail: string) => { + console.log(`[${status}] ${label}: ${detail}`); +}; + +const getInternalSock = (): InternalSocket => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const berrySocket = (client as any).socket; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const sock = berrySocket?.sock as InternalSocket | undefined; + + if (!sock?.user?.id) { + throw new Error("Socket interno nao esta pronto."); + } + + return sock; +}; + +const sendRaw = async ( + label: string, + content: Record, +): Promise => { + const sock = getInternalSock(); + const message = generateWAMessageFromContent( + to, + content, + { + userJid: sock.user!.id!, + }, + ); + + await sock.relayMessage(to, message.message, { + messageId: message.key.id, + }); + + log(label, "OK", String(message.key.id)); + await wait(450); + return message; +}; + +const maybePrepareImage = async () => { + const sock = getInternalSock(); + return prepareWAMessageMedia( + { + image: { + url: imageUrl, + }, + }, + { + upload: sock.waUploadToServer as never, + }, + ); +}; + +const createPaymentBackground = () => + proto.PaymentBackground.create({ + id: "berry-payment-bg", + type: proto.PaymentBackground.Type.DEFAULT, + placeholderArgb: 0x1f2937, + textArgb: 0xffffff, + subtextArgb: 0xd1d5db, + }); + +const createMoney = (value: number) => + proto.Money.create({ + value, + offset: 1000, + currencyCode: "BRL", + }); + +const sendAnchorText = async () => + sendRaw("ANCHOR TEXT", { + conversation: "Mensagem ancora para testes proto self-contained.", + }); + +const sendPollCreation = async () => + sendRaw("POLL CREATION", { + pollCreationMessageV5: proto.Message.PollCreationMessage.create({ + encKey: randomBytes(32), + name: "Qual sabor experimental?", + options: [ + { optionName: "Calabresa" }, + { optionName: "Frango" }, + ], + selectableOptionsCount: 1, + pollType: proto.Message.PollType.POLL, + }), + }); + +const sendPollVote = async () => + sendRaw("POLL VOTE", { + pollVoteMessage: proto.Message.PollVoteMessage.create({ + selectedOptions: [randomBytes(32)], + }), + }); + +const sendPollResultSnapshot = async () => + sendRaw("POLL RESULT SNAPSHOT", { + pollResultSnapshotMessage: proto.Message.PollResultSnapshotMessage.create({ + name: "Parcial self-contained", + pollVotes: [ + { optionName: "Calabresa", optionVoteCount: 5 }, + { optionName: "Frango", optionVoteCount: 2 }, + ], + pollType: proto.Message.PollType.POLL, + }), + }); + +const sendEventResponse = async () => + sendRaw("EVENT RESPONSE", { + eventResponseMessage: proto.Message.EventResponseMessage.create({ + response: proto.Message.EventResponseMessage.EventResponseType.GOING, + timestampMs: Date.now(), + extraGuestCount: 1, + }), + }); + +const sendCallLogMessage = async () => + sendRaw("CALL LOG MESSAGE", { + callLogMessage: proto.Message.CallLogMessage.create({ + isVideo: true, + callOutcome: proto.Message.CallLogMessage.CallOutcome.MISSED, + durationSecs: 0, + callType: proto.Message.CallLogMessage.CallType.REGULAR, + participants: [ + { + jid: to, + callOutcome: proto.Message.CallLogMessage.CallOutcome.MISSED, + }, + ], + }), + }); + +const sendPaymentInvite = async () => + sendRaw("PAYMENT INVITE", { + paymentInviteMessage: proto.Message.PaymentInviteMessage.create({ + serviceType: proto.Message.PaymentInviteMessage.ServiceType.UPI, + expiryTimestamp: Date.now() + 24 * 60 * 60 * 1000, + }), + }); + +const sendInvoiceMessage = async () => { + const prepared = await maybePrepareImage(); + + return sendRaw("INVOICE MESSAGE", { + invoiceMessage: proto.Message.InvoiceMessage.create({ + note: "Fatura experimental Berry", + token: randomUUID(), + attachmentType: proto.Message.InvoiceMessage.AttachmentType.IMAGE, + attachmentMimetype: "image/jpeg", + attachmentJpegThumbnail: prepared.imageMessage?.jpegThumbnail, + }), + }); +}; + +const sendRequestPayment = async () => + sendRaw("REQUEST PAYMENT", { + requestPaymentMessage: proto.Message.RequestPaymentMessage.create({ + noteMessage: proto.Message.create({ + conversation: "Cobranca experimental Berry", + }), + currencyCodeIso4217: "BRL", + amount1000: 49900, + requestFrom: to, + expiryTimestamp: Date.now() + 60 * 60 * 1000, + amount: createMoney(49900), + background: createPaymentBackground(), + }), + }); + +const sendSendPayment = async (requestMessage?: WAMessage) => { + if (!requestMessage?.key?.id) { + log("SEND PAYMENT", "SKIP", "requestPaymentMessage id ausente"); + return; + } + + return sendRaw("SEND PAYMENT", { + sendPaymentMessage: proto.Message.SendPaymentMessage.create({ + noteMessage: proto.Message.create({ + conversation: "Pagamento experimental enviado", + }), + requestMessageKey: { + remoteJid: to, + fromMe: true, + id: requestMessage.key.id, + }, + background: createPaymentBackground(), + transactionData: JSON.stringify({ + txid: randomUUID(), + amount1000: 49900, + currency: "BRL", + }), + }), + }); +}; + +const sendOrderMessage = async () => { + const prepared = await maybePrepareImage(); + const sellerJid = getInternalSock().user?.id ?? ""; + + return sendRaw("ORDER MESSAGE", { + orderMessage: proto.Message.OrderMessage.create({ + orderId: `berry-order-${Date.now()}`, + thumbnail: prepared.imageMessage?.jpegThumbnail, + itemCount: 2, + status: proto.Message.OrderMessage.OrderStatus.INQUIRY, + surface: proto.Message.OrderMessage.OrderSurface.CATALOG, + message: "Pedido experimental Berry", + orderTitle: "2 pizzas experimentais", + sellerJid, + token: randomUUID(), + totalAmount1000: 79900, + totalCurrencyCode: "BRL", + messageVersion: 1, + catalogType: "native", + }), + }); +}; + +const sendStickerPackMessage = async () => { + const prepared = await maybePrepareImage(); + + return sendRaw("STICKER PACK MESSAGE", { + stickerPackMessage: proto.Message.StickerPackMessage.create({ + stickerPackId: "berry-pack-001", + name: "Berry Pack Experimental", + publisher: "BerrySDK", + stickers: [ + { + fileName: "pizza-love.webp", + isAnimated: false, + emojis: ["🍕", "🔥"], + mimetype: "image/webp", + }, + ], + caption: "Sticker pack experimental", + packDescription: "Pacote de stickers para validar renderizacao", + thumbnailSha256: prepared.imageMessage?.fileSha256, + thumbnailEncSha256: prepared.imageMessage?.fileEncSha256, + thumbnailDirectPath: prepared.imageMessage?.directPath, + thumbnailHeight: prepared.imageMessage?.height, + thumbnailWidth: prepared.imageMessage?.width, + stickerPackSize: 1, + stickerPackOrigin: proto.Message.StickerPackMessage.StickerPackOrigin.USER_CREATED, + }), + }); +}; + +const sendPinInChat = async (anchor?: WAMessage) => { + if (!anchor?.key?.id) { + log("PIN IN CHAT", "SKIP", "anchor message id ausente"); + return; + } + + return sendRaw("PIN IN CHAT", { + pinInChatMessage: proto.Message.PinInChatMessage.create({ + key: { + remoteJid: to, + fromMe: true, + id: anchor.key.id, + }, + type: proto.Message.PinInChatMessage.Type.PIN_FOR_ALL, + senderTimestampMs: Date.now(), + }), + }); +}; + +const sendKeepInChat = async (anchor?: WAMessage) => { + if (!anchor?.key?.id) { + log("KEEP IN CHAT", "SKIP", "anchor message id ausente"); + return; + } + + return sendRaw("KEEP IN CHAT", { + keepInChatMessage: proto.Message.KeepInChatMessage.create({ + key: { + remoteJid: to, + fromMe: true, + id: anchor.key.id, + }, + keepType: proto.KeepType.KEEP_FOR_ALL, + timestampMs: Date.now(), + }), + }); +}; + +const attempt = async ( + label: string, + runner: () => Promise, +): Promise => { + try { + return await runner(); + } catch (error) { + log(label, "FAIL", error instanceof Error ? error.message : String(error)); + return undefined; + } +}; + +client.once("connection.open", async () => { + try { + console.log("Running self-contained proto message suite..."); + + const anchor = await attempt("ANCHOR TEXT", sendAnchorText); + await attempt("POLL CREATION", sendPollCreation); + await attempt("POLL VOTE", sendPollVote); + await attempt("POLL RESULT SNAPSHOT", sendPollResultSnapshot); + await attempt("EVENT RESPONSE", sendEventResponse); + await attempt("CALL LOG MESSAGE", sendCallLogMessage); + await attempt("PAYMENT INVITE", sendPaymentInvite); + await attempt("INVOICE MESSAGE", sendInvoiceMessage); + const requestPayment = await attempt("REQUEST PAYMENT", sendRequestPayment); + await attempt("SEND PAYMENT", () => sendSendPayment(requestPayment)); + await attempt("ORDER MESSAGE", sendOrderMessage); + await attempt("STICKER PACK MESSAGE", sendStickerPackMessage); + await attempt("PIN IN CHAT", () => sendPinInChat(anchor)); + await attempt("KEEP IN CHAT", () => sendKeepInChat(anchor)); + } finally { + await client.disconnect().catch(() => undefined); + process.exit(0); + } +}); + +await client.connectWithQr(); diff --git a/mint.json b/mint.json new file mode 100644 index 0000000..88c7fcd --- /dev/null +++ b/mint.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://mintlify.com/schema.json", + "name": "BerryAPI", + "theme": "purple", + "colors": { + "primary": "#7c3aed", + "light": "#a855f7", + "dark": "#5b21b6" + }, + "navigation": [ + { + "group": "Introduction", + "pages": [ + "docs/index", + "docs/getting-started", + "docs/instances", + "docs/messages", + "docs/webhooks", + "docs/realtime", + "docs/openapi" + ] + } + ] +} diff --git a/package-lock.json b/package-lock.json index f5d75a7..b900f96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -576,6 +576,276 @@ "node": ">=18" } }, + "node_modules/@fastify/accept-negotiator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", + "integrity": "sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/@fastify/ajv-compiler": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.5.tgz", + "integrity": "sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" + } + }, + "node_modules/@fastify/cors": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-11.2.0.tgz", + "integrity": "sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "fastify-plugin": "^5.0.0", + "toad-cache": "^3.7.0" + } + }, + "node_modules/@fastify/error": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.2.0.tgz", + "integrity": "sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/@fastify/fast-json-stringify-compiler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz", + "integrity": "sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "fast-json-stringify": "^6.0.0" + } + }, + "node_modules/@fastify/forwarded": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.0.1.tgz", + "integrity": "sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz", + "integrity": "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@fastify/proxy-addr": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.0.tgz", + "integrity": "sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/forwarded": "^3.0.0", + "ipaddr.js": "^2.1.0" + } + }, + "node_modules/@fastify/proxy-addr/node_modules/ipaddr.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@fastify/send": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-4.1.0.tgz", + "integrity": "sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@lukeed/ms": "^2.0.2", + "escape-html": "~1.0.3", + "fast-decode-uri-component": "^1.0.1", + "http-errors": "^2.0.0", + "mime": "^3" + } + }, + "node_modules/@fastify/static": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-9.1.3.tgz", + "integrity": "sha512-aXrYtsiryLhRxRNaxNqsn7FUISeb7rB9q4eHUPIot5aeQBLNahnz1m6thzm7JWC1poSGXS9XrX8DvuMivp2hkQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/accept-negotiator": "^2.0.0", + "@fastify/send": "^4.0.0", + "content-disposition": "^1.0.1", + "fastify-plugin": "^5.0.0", + "fastq": "^1.17.1", + "glob": "^13.0.0" + } + }, + "node_modules/@fastify/swagger": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@fastify/swagger/-/swagger-9.7.0.tgz", + "integrity": "sha512-Vp1SC1GC2Hrkd3faFILv86BzUNyFz5N4/xdExqtCgkGASOzn/x+eMe4qXIGq7cdT6wif/P/oa6r1Ruqx19paZA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "fastify-plugin": "^5.0.0", + "json-schema-resolver": "^3.0.0", + "openapi-types": "^12.1.3", + "rfdc": "^1.3.1", + "yaml": "^2.4.2" + } + }, + "node_modules/@fastify/swagger-ui": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fastify/swagger-ui/-/swagger-ui-5.2.6.tgz", + "integrity": "sha512-OMnms0O5s9wb6wis/K5nlrAMLsgUbr1GA8uphM41IasWe3AFdgxz6r/3bA9HTxlDNUYc2FGGKeqMp3ntxmSiNA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/static": "^9.1.2", + "fastify-plugin": "^5.0.0", + "openapi-types": "^12.1.3", + "rfdc": "^1.3.1", + "yaml": "^2.4.1" + } + }, + "node_modules/@fastify/websocket": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@fastify/websocket/-/websocket-11.2.0.tgz", + "integrity": "sha512-3HrDPbAG1CzUCqnslgJxppvzaAZffieOVbLp1DAy1huCSynUWPifSvfdEDUR8HlJLp3sp1A36uOM2tJogADS8w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.3", + "fastify-plugin": "^5.0.0", + "ws": "^8.16.0" + } + }, "node_modules/@hapi/boom": { "version": "9.1.4", "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", @@ -1104,6 +1374,15 @@ "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", "license": "MIT" }, + "node_modules/@lukeed/ms": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@pinojs/redact": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", @@ -1201,7 +1480,7 @@ "version": "7.6.13", "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -1331,6 +1610,12 @@ "protobufjs": "^7.4.0" } }, + "node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", + "license": "MIT" + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -1344,6 +1629,39 @@ "node": ">= 0.6" } }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/async-mutex": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", @@ -1362,11 +1680,30 @@ "node": ">=8.0.0" } }, + "node_modules/avvio": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.2.0.tgz", + "integrity": "sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/error": "^4.0.0", + "fastq": "^1.17.1" + } + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, "license": "MIT", "engines": { "node": "18 || 20 || >=22" @@ -1392,6 +1729,10 @@ ], "license": "MIT" }, + "node_modules/berryapi": { + "resolved": "packages/berryapi", + "link": true + }, "node_modules/berryotp": { "resolved": "packages/berryotp", "link": true @@ -1459,7 +1800,6 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -1654,6 +1994,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -1663,6 +2012,143 @@ "node": ">=8" } }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/drizzle-orm": { + "version": "0.44.7", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.44.7.tgz", + "integrity": "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==", + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/client-rds-data": ">=3", + "@cloudflare/workers-types": ">=4", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.10.0", + "@op-engineering/op-sqlite": ">=2", + "@opentelemetry/api": "^1.4.1", + "@planetscale/database": ">=1.13", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", + "@types/better-sqlite3": "*", + "@types/pg": "*", + "@types/sql.js": "*", + "@upstash/redis": ">=1.34.7", + "@vercel/postgres": ">=0.8.0", + "@xata.io/client": "*", + "better-sqlite3": ">=7", + "bun-types": "*", + "expo-sqlite": ">=14.0.0", + "gel": ">=2", + "knex": "*", + "kysely": "*", + "mysql2": ">=2", + "pg": ">=8", + "postgres": ">=3", + "sql.js": ">=1", + "sqlite3": ">=5" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-rds-data": { + "optional": true + }, + "@cloudflare/workers-types": { + "optional": true + }, + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@libsql/client-wasm": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@op-engineering/op-sqlite": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, + "@types/better-sqlite3": { + "optional": true + }, + "@types/pg": { + "optional": true + }, + "@types/sql.js": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "bun-types": { + "optional": true + }, + "expo-sqlite": { + "optional": true + }, + "gel": { + "optional": true + }, + "knex": { + "optional": true + }, + "kysely": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "postgres": { + "optional": true + }, + "prisma": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -1677,6 +2163,18 @@ "node": ">= 0.4" } }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1846,6 +2344,125 @@ "url": "https://opencollective.com/express" } }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stringify": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.4.0.tgz", + "integrity": "sha512-ibRCQ0GZKJIQ+P3Et1h0LhPgp3PMTYk0MH8O+kW3lNYsvmaQww5Nn3f1jf73Q0jR1Yz3a1CDP4/NZD3vOajWJQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/merge-json-schemas": "^0.2.0", + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0", + "json-schema-ref-resolver": "^3.0.0", + "rfdc": "^1.2.0" + } + }, + "node_modules/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "license": "MIT", + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastify": { + "version": "5.8.5", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.8.5.tgz", + "integrity": "sha512-Yqptv59pQzPgQUSIm87hMqHJmdkb1+GPxdE6vW6FRyVE9G86mt7rOghitiU4JHRaTyDUk9pfeKmDeu70lAwM4Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/ajv-compiler": "^4.0.5", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", + "@fastify/proxy-addr": "^5.0.0", + "abstract-logging": "^2.0.1", + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", + "pino": "^9.14.0 || ^10.1.0", + "process-warning": "^5.0.0", + "rfdc": "^1.3.1", + "secure-json-parse": "^4.0.0", + "semver": "^7.6.0", + "toad-cache": "^3.7.0" + } + }, + "node_modules/fastify-plugin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.1.0.tgz", + "integrity": "sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/file-type": { "version": "21.3.4", "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", @@ -1891,6 +2508,20 @@ "url": "https://opencollective.com/express" } }, + "node_modules/find-my-way": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.6.0.tgz", + "integrity": "sha512-Zf4Xve4RymLl7NgaavNebZ01joJ8MfVerOG43wy7SHLO+r+K0C6d/SE0BiR7AV5V1VOCFlOP7ecdo+I4qmiHrQ==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^5.0.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1999,7 +2630,6 @@ "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "minimatch": "^10.2.2", @@ -2150,6 +2780,48 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/json-schema-ref-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz", + "integrity": "sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/json-schema-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-schema-resolver/-/json-schema-resolver-3.0.0.tgz", + "integrity": "sha512-HqMnbz0tz2DaEJ3ntsqtx3ezzZyDE7G56A/pPY/NGmrPu76UzsWquOpHFRAf5beTNXoH2LU5cQePVvRli1nchA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fast-uri": "^3.0.5", + "rfdc": "^1.1.4" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/Eomm/json-schema-resolver?sponsor=1" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, "node_modules/keyv": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", @@ -2168,6 +2840,56 @@ "protobufjs": "^7.5.5" } }, + "node_modules/light-my-request": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz", + "integrity": "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "dependencies": { + "cookie": "^1.0.1", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" + } + }, + "node_modules/light-my-request/node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/light-my-request/node_modules/process-warning": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", + "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", @@ -2213,6 +2935,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -2254,7 +2988,6 @@ "version": "10.2.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.5" @@ -2279,7 +3012,6 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" @@ -2397,6 +3129,12 @@ "wrappy": "1" } }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "license": "MIT" + }, "node_modules/p-queue": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", @@ -2445,7 +3183,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", @@ -2704,6 +3441,15 @@ "node": ">= 12.13.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -2714,6 +3460,31 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/ret": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, "node_modules/rimraf": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", @@ -2770,6 +3541,28 @@ ], "license": "MIT" }, + "node_modules/safe-regex2": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.1.tgz", + "integrity": "sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "ret": "~0.5.0" + }, + "bin": { + "safe-regex2": "bin/safe-regex2.js" + } + }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", @@ -2785,6 +3578,22 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/secure-json-parse": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz", + "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/semver": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", @@ -2842,6 +3651,12 @@ "url": "https://opencollective.com/express" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -3038,6 +3853,12 @@ "node": ">= 0.8" } }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -3109,6 +3930,15 @@ "real-require": "^0.2.0" } }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -3283,6 +4113,39 @@ } } }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, "packages/auth": { "name": "@berrysdk/auth", "version": "0.1.2", @@ -3292,22 +4155,6 @@ "@berrysdk/store": "0.1.3" } }, - "packages/auth/node_modules/@berrysdk/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", - "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", - "license": "Apache-2.0" - }, - "packages/auth/node_modules/@berrysdk/store": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/store/-/store-0.1.1.tgz", - "integrity": "sha512-e5XaXWUWRC+mfyta8DCJC7UNJrhssQHiFv2VzG0n3Uh8SDbba31BAw2zUl0v8MaP20TCl+fjX1GUTgzhQH1oTw==", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.1", - "better-sqlite3": "^11.10.0" - } - }, "packages/berry-otp": { "name": "@berrysdk/berry-otp", "version": "0.1.9", @@ -3316,139 +4163,32 @@ "@berrysdk/core": "0.1.9" } }, - "packages/berry-otp/node_modules/@berrysdk/auth": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/auth/-/auth-0.1.1.tgz", - "integrity": "sha512-VqWbCFYO5u7iUtyUAkQtyTvKgBakDq+zM0Cm6I7a2v8f1riipdaZYSvfqwb+1XLFIaT16pmnDKJzXL3EAO1f/w==", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.1", - "@berrysdk/store": "0.1.1" - } - }, "packages/berry-otp/node_modules/@berrysdk/core/node_modules/@berrysdk/events": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.2.tgz", "integrity": "sha512-vn5n5vzQwR/YOAkdwX3BXES8Bb0b0nvklY/woCJi9FH2aNDLpSOToN5KSBa7OWY/ptlVhX/GMJy5WmHFeO9p0Q==", + "extraneous": true, "license": "Apache-2.0" }, - "packages/berry-otp/node_modules/@berrysdk/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", - "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", - "license": "Apache-2.0" - }, - "packages/berry-otp/node_modules/@berrysdk/media": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/media/-/media-0.1.1.tgz", - "integrity": "sha512-8X+DqmbZxM72uhstuSzeW20eYZ+4nSkxmMl7LbE0Ezf9OKpLwQHquDN1dGmH5k6Z1YdD+Cpv7k0CzVFvWv+o9w==", - "license": "Apache-2.0" - }, - "packages/berry-otp/node_modules/@berrysdk/messages": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/messages/-/messages-0.1.1.tgz", - "integrity": "sha512-8HqdAUU92pu1SMhbsuhZwDDy6y5ifgJ3KgrMSMMe6rvGw0Um2daq1bICWvsZcdYXJWd71m+PSK/eG8/233nV4A==", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.1" - } - }, - "packages/berry-otp/node_modules/@berrysdk/proto": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/proto/-/proto-0.1.1.tgz", - "integrity": "sha512-Tx8tXfKJ74mqaLtKchaDLDtb1zl0WhvX+HiWcr9/pQC6zjNO1ZHie83T1SHXQyO0cWdVCgNkcltYpKAHZLG7Ng==", - "license": "Apache-2.0", - "dependencies": { - "@wppconnect/wa-proto": "^2.3000.1030818676", - "protobufjs": "^7.4.0" - } - }, - "packages/berry-otp/node_modules/@berrysdk/socket": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@berrysdk/socket/-/socket-0.1.7.tgz", - "integrity": "sha512-T7lpxr0Ds/3Wp99odxbeD7OUfL1vXKlBjtnGgfw7tBoxFmDa9R2dXpih+nLXloPeikbOSDrFiN+N+1Hu0nFOEw==", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.2", - "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.7", - "@berrysdk/wa-message": "0.1.7", - "pino": "^9.6.0", - "ws": "^8.18.1" - } - }, - "packages/berry-otp/node_modules/@berrysdk/socket/node_modules/@berrysdk/events": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.2.tgz", - "integrity": "sha512-vn5n5vzQwR/YOAkdwX3BXES8Bb0b0nvklY/woCJi9FH2aNDLpSOToN5KSBa7OWY/ptlVhX/GMJy5WmHFeO9p0Q==", - "license": "Apache-2.0" - }, - "packages/berry-otp/node_modules/@berrysdk/store": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@berrysdk/store/-/store-0.1.1.tgz", - "integrity": "sha512-e5XaXWUWRC+mfyta8DCJC7UNJrhssQHiFv2VzG0n3Uh8SDbba31BAw2zUl0v8MaP20TCl+fjX1GUTgzhQH1oTw==", - "license": "Apache-2.0", - "dependencies": { - "@berrysdk/events": "0.1.1", - "better-sqlite3": "^11.10.0" - } - }, - "packages/berry-otp/node_modules/@berrysdk/transport": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@berrysdk/transport/-/transport-0.1.7.tgz", - "integrity": "sha512-S9zfDjGm/zCE45bwLApjCN6EaXsnVmuiQEebqvMHCNx66UBYT5zFmt7vWLG34PfJbbSzAZmLCqzueRO1BPtrrg==", - "license": "Apache-2.0", - "dependencies": { - "@cacheable/node-cache": "^1.4.0", - "@hapi/boom": "^9.1.3", - "async-mutex": "^0.5.0", - "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", - "lru-cache": "^11.1.0", - "music-metadata": "^11.12.3", - "p-queue": "^9.0.0", - "pino": "^9.6.0", - "protobufjs": "^7.5.6", - "whatsapp-rust-bridge": "0.5.3", - "ws": "^8.18.1" - }, - "peerDependencies": { - "audio-decode": "^2.1.3", - "jimp": "^1.6.1", - "link-preview-js": "^3.0.0", - "sharp": "*" - }, - "peerDependenciesMeta": { - "audio-decode": { - "optional": true - }, - "jimp": { - "optional": true - }, - "link-preview-js": { - "optional": true - }, - "sharp": { - "optional": true - } - } - }, - "packages/berry-otp/node_modules/@berrysdk/wa-message": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@berrysdk/wa-message/-/wa-message-0.1.7.tgz", - "integrity": "sha512-Z0rs87BBB7aQ2QI2MorDU61WaobyZ+fjiMxsrnf520O3Bk5UnZPinwa51oLOBzzsRp/zouGdPZQbXrtr3QkDBw==", + "packages/berryapi": { + "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.2", - "@berrysdk/proto": "0.1.1", - "@berrysdk/transport": "0.1.7" + "@berrysdk/core": "0.1.9", + "@fastify/cors": "^11.1.0", + "@fastify/swagger": "^9.5.1", + "@fastify/swagger-ui": "^5.2.3", + "@fastify/websocket": "^11.2.0", + "better-sqlite3": "^11.10.0", + "dotenv": "^16.6.1", + "drizzle-orm": "^0.44.2", + "fastify": "^5.6.1", + "fastify-plugin": "^5.1.0", + "pino": "^9.14.0", + "zod": "^4.1.8", + "zod-to-json-schema": "^3.24.6" } }, - "packages/berry-otp/node_modules/@berrysdk/wa-message/node_modules/@berrysdk/events": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.2.tgz", - "integrity": "sha512-vn5n5vzQwR/YOAkdwX3BXES8Bb0b0nvklY/woCJi9FH2aNDLpSOToN5KSBa7OWY/ptlVhX/GMJy5WmHFeO9p0Q==", - "license": "Apache-2.0" - }, "packages/berryotp": { "version": "0.1.9", "license": "Apache-2.0", @@ -3495,12 +4235,14 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@berrysdk/events/-/events-0.1.1.tgz", "integrity": "sha512-ORU4VI/VxKaB5SUt8HaD8d6sWkjE7xtzKGtSIBQGXCgvWYupa6ooDHLmSoWPH6u+bQLYaIVSisxus/Ip8AeZ9A==", + "extraneous": true, "license": "Apache-2.0" }, "packages/core/node_modules/@berrysdk/auth/node_modules/@berrysdk/store": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@berrysdk/store/-/store-0.1.1.tgz", "integrity": "sha512-e5XaXWUWRC+mfyta8DCJC7UNJrhssQHiFv2VzG0n3Uh8SDbba31BAw2zUl0v8MaP20TCl+fjX1GUTgzhQH1oTw==", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "@berrysdk/events": "0.1.1", diff --git a/package.json b/package.json index 1ee39bc..7e9cc8c 100644 --- a/package.json +++ b/package.json @@ -20,12 +20,16 @@ "qrcode-terminal": "^0.12.0" }, "scripts": { - "build": "tsc -b packages/events packages/transport packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli", + "build": "tsc -b packages/events packages/transport packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli packages/berryapi", "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName \u0027dist\u0027) -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName \u0027.tsbuildinfo\u0027) -ErrorAction SilentlyContinue }\"", "prepare:publish": "npm run clean \u0026\u0026 npm run build", "pack:check": "npm pack --workspaces --json", + "dev": "npm run dev --workspace berryapi", + "start": "npm run start --workspace berryapi", "dev:gateway": "npm run build \u0026\u0026 node packages/gateway/dist/index.js", "dev:cli": "npm run build \u0026\u0026 node packages/cli/dist/index.js", + "dev:berryapi": "npm run dev --workspace berryapi", + "start:berryapi": "npm run start --workspace berryapi", "start:gateway": "node packages/gateway/dist/index.js", "start:cli": "node packages/cli/dist/index.js" }, diff --git a/packages/berryapi/package.json b/packages/berryapi/package.json new file mode 100644 index 0000000..ca6febb --- /dev/null +++ b/packages/berryapi/package.json @@ -0,0 +1,34 @@ +{ + "name": "berryapi", + "version": "0.1.0", + "private": true, + "description": "REST API platform for WhatsApp automation powered by BerryProtocol.", + "author": "BerrySDK", + "license": "Apache-2.0", + "type": "module", + "main": "dist/server.js", + "types": "dist/server.d.ts", + "files": [ + "dist" + ], + "scripts": { + "dev": "tsx watch src/server.ts", + "build": "tsc -b", + "start": "node dist/server.js" + }, + "dependencies": { + "@berrysdk/core": "0.1.9", + "@fastify/cors": "^11.1.0", + "@fastify/swagger": "^9.5.1", + "@fastify/swagger-ui": "^5.2.3", + "@fastify/websocket": "^11.2.0", + "better-sqlite3": "^11.10.0", + "dotenv": "^16.6.1", + "drizzle-orm": "^0.44.2", + "fastify": "^5.6.1", + "fastify-plugin": "^5.1.0", + "pino": "^9.14.0", + "zod": "^4.1.8", + "zod-to-json-schema": "^3.24.6" + } +} diff --git a/packages/berryapi/src/app.ts b/packages/berryapi/src/app.ts new file mode 100644 index 0000000..a7b223a --- /dev/null +++ b/packages/berryapi/src/app.ts @@ -0,0 +1,111 @@ +import Fastify from "fastify"; +import cors from "@fastify/cors"; +import swagger from "@fastify/swagger"; +import swaggerUi from "@fastify/swagger-ui"; +import websocket from "@fastify/websocket"; +import { env } from "./config/env.js"; +import { initDatabase } from "./database/init.js"; +import { createRouteSchema } from "./docs/schema.js"; +import { InstanceManager } from "./managers/InstanceManager.js"; +import { authMiddleware } from "./middlewares/auth.js"; +import { errorHandler } from "./middlewares/errorHandler.js"; +import { RealtimeGateway } from "./realtime/RealtimeGateway.js"; +import { logger } from "./utils/logger.js"; +import { successResponse } from "./utils/response.js"; +import { registerInstanceRoutes } from "./modules/instance/instance.routes.js"; +import { registerWebhookRoutes } from "./modules/webhook/webhook.routes.js"; +import { registerSettingsRoutes } from "./modules/settings/settings.routes.js"; +import { registerMessageRoutes } from "./modules/message/routes/message.routes.js"; +import { registerChatRoutes } from "./modules/chat/chat.routes.js"; +import { registerProfileRoutes } from "./modules/profile/profile.routes.js"; +import { registerGroupRoutes } from "./modules/group/group.routes.js"; +import { WebhookDispatcher } from "./webhook/WebhookDispatcher.js"; + +export const buildApp = async () => { + await initDatabase(); + + const app = Fastify({ + logger: { + level: env.LOG_LEVEL, + }, + bodyLimit: 50 * 1024 * 1024, + }); + + const realtime = new RealtimeGateway(); + const webhooks = new WebhookDispatcher(); + const manager = new InstanceManager(realtime, webhooks); + await manager.bootstrap(); + + await app.register(cors, { + origin: true, + }); + await app.register(websocket); + await app.register(swagger, { + openapi: { + info: { + title: "BerryAPI", + description: "REST API for WhatsApp Web automation powered by BerryProtocol.", + version: "0.1.0", + }, + security: [{ bearerAuth: [] }], + components: { + securitySchemes: { + bearerAuth: { + type: "http", + scheme: "bearer", + }, + }, + }, + }, + }); + await app.register(swaggerUi, { + routePrefix: "/docs", + uiConfig: { + docExpansion: "list", + deepLinking: false, + }, + }); + + realtime.register(app); + + app.setErrorHandler(errorHandler); + app.addHook("onRequest", authMiddleware); + + app.get("/", { + schema: createRouteSchema({ + tags: ["System"], + summary: "BerryAPI health entrypoint", + description: "Quick health response for BerryAPI.", + }), + }, async () => successResponse("BerryAPI is running.", { + name: "BerryAPI", + provider: "BerryProtocol", + docs: "/docs", + websocket: env.BERRY_WS_PATH, + })); + + app.get("/info", { + schema: createRouteSchema({ + tags: ["System"], + summary: "BerryAPI information", + }), + }, async () => successResponse("BerryAPI metadata loaded.", { + name: "BerryAPI", + version: "0.1.0", + environment: env.NODE_ENV, + websocketPath: env.BERRY_WS_PATH, + database: env.DATABASE_URL, + authFolder: env.BERRY_AUTH_FOLDER, + provider: "BerryProtocol", + })); + + await registerInstanceRoutes(app, manager); + await registerWebhookRoutes(app, manager); + await registerSettingsRoutes(app, manager); + await registerMessageRoutes(app, manager); + await registerChatRoutes(app, manager); + await registerProfileRoutes(app, manager); + await registerGroupRoutes(app, manager); + + return app; +}; diff --git a/packages/berryapi/src/config/env.ts b/packages/berryapi/src/config/env.ts new file mode 100644 index 0000000..0611c2f --- /dev/null +++ b/packages/berryapi/src/config/env.ts @@ -0,0 +1,20 @@ +import { config as loadEnv } from "dotenv"; +import { z } from "zod"; + +loadEnv(); + +const envSchema = z.object({ + NODE_ENV: z.enum(["development", "test", "production"]).default("development"), + PORT: z.coerce.number().default(3000), + HOST: z.string().default("0.0.0.0"), + API_KEY: z.string().default("berryapi_dev_key"), + LOG_LEVEL: z.string().default("info"), + DATABASE_URL: z.string().default("file:./berryapi.sqlite"), + BERRY_SQLITE_PATH: z.string().default("berrysdk.db"), + BERRY_AUTH_FOLDER: z.string().default(".berry-sessions"), + BERRY_WEBHOOK_TIMEOUT_MS: z.coerce.number().default(5000), + BERRY_WS_PATH: z.string().default("/ws"), +}); + +export const env = envSchema.parse(process.env); +export type Env = typeof env; diff --git a/packages/berryapi/src/database/client.ts b/packages/berryapi/src/database/client.ts new file mode 100644 index 0000000..20ae481 --- /dev/null +++ b/packages/berryapi/src/database/client.ts @@ -0,0 +1,21 @@ +import Database from "better-sqlite3"; +import { drizzle } from "drizzle-orm/better-sqlite3"; +import { dirname, isAbsolute, resolve } from "node:path"; +import { mkdirSync } from "node:fs"; +import { env } from "../config/env.js"; +import * as schema from "./schema.js"; + +const normalizeSqlitePath = (value: string): string => { + if (value.startsWith("file:")) { + const raw = value.slice(5); + return isAbsolute(raw) ? raw : resolve(process.cwd(), raw); + } + + return isAbsolute(value) ? value : resolve(process.cwd(), value); +}; + +const dbPath = normalizeSqlitePath(env.DATABASE_URL); +mkdirSync(dirname(dbPath), { recursive: true }); + +export const sqlite: any = new Database(dbPath); +export const db = drizzle(sqlite, { schema }); diff --git a/packages/berryapi/src/database/init.ts b/packages/berryapi/src/database/init.ts new file mode 100644 index 0000000..8157298 --- /dev/null +++ b/packages/berryapi/src/database/init.ts @@ -0,0 +1,23 @@ +import { sqlite } from "./client.js"; + +export const initDatabase = async (): Promise => { + sqlite.exec(` + CREATE TABLE IF NOT EXISTS instances ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + provider TEXT NOT NULL DEFAULT 'berryprotocol', + status TEXT NOT NULL DEFAULT 'created', + connection_state TEXT NOT NULL DEFAULT 'disconnected', + auth_method TEXT NOT NULL DEFAULT 'qr', + phone_number TEXT, + qr_code TEXT, + pairing_code TEXT, + webhook_url TEXT, + webhook_events TEXT NOT NULL DEFAULT '[]', + settings_json TEXT NOT NULL DEFAULT '{}', + metadata_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + `); +}; diff --git a/packages/berryapi/src/database/schema.ts b/packages/berryapi/src/database/schema.ts new file mode 100644 index 0000000..3582a21 --- /dev/null +++ b/packages/berryapi/src/database/schema.ts @@ -0,0 +1,22 @@ +import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; + +export const instancesTable = sqliteTable("instances", { + id: integer("id").primaryKey({ autoIncrement: true }), + name: text("name").notNull().unique(), + provider: text("provider").notNull().default("berryprotocol"), + status: text("status").notNull().default("created"), + connectionState: text("connection_state").notNull().default("disconnected"), + authMethod: text("auth_method").notNull().default("qr"), + phoneNumber: text("phone_number"), + qrCode: text("qr_code"), + pairingCode: text("pairing_code"), + webhookUrl: text("webhook_url"), + webhookEvents: text("webhook_events").notNull().default("[]"), + settingsJson: text("settings_json").notNull().default("{}"), + metadataJson: text("metadata_json").notNull().default("{}"), + createdAt: text("created_at").notNull(), + updatedAt: text("updated_at").notNull(), +}); + +export type InstanceRow = typeof instancesTable.$inferSelect; +export type NewInstanceRow = typeof instancesTable.$inferInsert; diff --git a/packages/berryapi/src/docs/schema.ts b/packages/berryapi/src/docs/schema.ts new file mode 100644 index 0000000..610a886 --- /dev/null +++ b/packages/berryapi/src/docs/schema.ts @@ -0,0 +1,53 @@ +import type { ZodTypeAny } from "zod"; +import { toOpenApiSchema } from "../utils/zod.js"; + +export const envelopeSchema = { + type: "object", + properties: { + success: { type: "boolean" }, + message: { type: "string" }, + data: { type: "object", additionalProperties: true }, + }, +}; + +export const errorEnvelopeSchema = { + type: "object", + properties: { + success: { type: "boolean", enum: [false] }, + message: { type: "string" }, + error: { type: "object", additionalProperties: true }, + }, +}; + +export const createRouteSchema = ({ + tags, + summary, + description, + params, + body, + querystring, + example, +}: { + tags: string[]; + summary: string; + description?: string; + params?: ZodTypeAny; + body?: ZodTypeAny; + querystring?: ZodTypeAny; + example?: unknown; +}) => ({ + tags, + summary, + description, + ...(params ? { params: toOpenApiSchema(params, `${summary}Params`) } : {}), + ...(body ? { body: { ...toOpenApiSchema(body, `${summary}Body`), ...(example ? { examples: [example] } : {}) } } : {}), + ...(querystring ? { querystring: toOpenApiSchema(querystring, `${summary}Query`) } : {}), + response: { + 200: envelopeSchema, + 201: envelopeSchema, + 400: errorEnvelopeSchema, + 401: errorEnvelopeSchema, + 404: errorEnvelopeSchema, + 500: errorEnvelopeSchema, + }, +}); diff --git a/packages/berryapi/src/managers/InstanceManager.ts b/packages/berryapi/src/managers/InstanceManager.ts new file mode 100644 index 0000000..62298ac --- /dev/null +++ b/packages/berryapi/src/managers/InstanceManager.ts @@ -0,0 +1,364 @@ +import { and, eq } from "drizzle-orm"; +import { db } from "../database/client.js"; +import { instancesTable, type InstanceRow } from "../database/schema.js"; +import type { BerryApiEventName, InstanceRecord, InstanceSettings, WebhookConfig } from "../types/index.js"; +import { HttpError } from "../utils/http-error.js"; +import { BerryProtocolProvider } from "../providers/whatsapp/BerryProtocolProvider.js"; +import type { ProviderEventPayload, ProviderSendOptions, WhatsAppProvider } from "../providers/whatsapp/WhatsAppProvider.js"; +import { WebhookDispatcher } from "../webhook/WebhookDispatcher.js"; +import { RealtimeGateway } from "../realtime/RealtimeGateway.js"; + +type CreateInstanceInput = { + instanceName: string; + authMethod?: InstanceRecord["authMethod"]; + phoneNumber?: string; + webhook?: Partial; + settings?: Partial; +}; + +type UpdateInstanceStateInput = Partial>; + +const nowIso = () => new Date().toISOString(); + +const parseJson = (value: string | null | undefined, fallback: T): T => { + if (!value) return fallback; + try { + return JSON.parse(value) as T; + } catch { + return fallback; + } +}; + +const rowToInstance = (row: InstanceRow): InstanceRecord => ({ + instanceName: row.name, + provider: "berryprotocol", + status: row.status as InstanceRecord["status"], + connectionState: row.connectionState, + authMethod: row.authMethod as InstanceRecord["authMethod"], + phoneNumber: row.phoneNumber ?? undefined, + qrCode: row.qrCode ?? undefined, + pairingCode: row.pairingCode ?? undefined, + webhook: { + enabled: !!row.webhookUrl, + url: row.webhookUrl ?? undefined, + events: parseJson(row.webhookEvents, []), + }, + settings: parseJson(row.settingsJson, {}), + createdAt: row.createdAt, + updatedAt: row.updatedAt, +}); + +export class InstanceManager { + private readonly providers = new Map(); + + constructor( + private readonly realtime: RealtimeGateway, + private readonly webhooks: WebhookDispatcher, + ) {} + + async bootstrap(): Promise { + const rows = await db.select().from(instancesTable); + for (const row of rows) { + this.ensureProvider(rowToInstance(row)); + } + } + + async createInstance(input: CreateInstanceInput): Promise { + const instanceName = input.instanceName.trim(); + if (!instanceName) { + throw new HttpError(400, "instanceName is required."); + } + + const existing = await this.findInstance(instanceName); + if (existing) { + throw new HttpError(409, "Instance already exists."); + } + + const webhookEvents = input.webhook?.events ?? []; + const settings = input.settings ?? {}; + const createdAt = nowIso(); + + await db.insert(instancesTable).values({ + name: instanceName, + provider: "berryprotocol", + status: "created", + connectionState: "disconnected", + authMethod: input.authMethod ?? "qr", + phoneNumber: input.phoneNumber, + webhookUrl: input.webhook?.url, + webhookEvents: JSON.stringify(webhookEvents), + settingsJson: JSON.stringify(settings), + metadataJson: JSON.stringify({}), + createdAt, + updatedAt: createdAt, + }); + + const instance = await this.getInstance(instanceName); + this.ensureProvider(instance); + return instance; + } + + async fetchInstances(): Promise { + const rows = await db.select().from(instancesTable); + return rows.map(rowToInstance); + } + + async getInstance(instanceName: string): Promise { + const found = await this.findInstance(instanceName); + if (!found) { + throw new HttpError(404, "Instance not found."); + } + + return found; + } + + async connectInstance(instanceName: string): Promise { + const instance = await this.getInstance(instanceName); + const provider = this.ensureProvider(instance); + await this.updateInstanceState(instanceName, { + status: "connecting", + connectionState: "connecting", + }); + await provider.connect({ + authMethod: instance.authMethod, + phoneNumber: instance.phoneNumber, + }); + return this.getInstance(instanceName); + } + + async restartInstance(instanceName: string): Promise { + const instance = await this.getInstance(instanceName); + const provider = this.ensureProvider(instance); + await this.updateInstanceState(instanceName, { + status: "restarting", + connectionState: "reconnecting", + }); + await provider.reconnect(); + return this.getInstance(instanceName); + } + + async getConnectionState(instanceName: string): Promise> { + const instance = await this.getInstance(instanceName); + const provider = this.ensureProvider(instance); + const runtimeState = await provider.getConnectionState(); + return { + instanceName, + ...runtimeState, + }; + } + + async logoutInstance(instanceName: string): Promise { + const provider = this.providers.get(instanceName); + if (provider) { + await provider.logout(); + } + await this.updateInstanceState(instanceName, { + status: "logged_out", + connectionState: "logged_out", + qrCode: undefined, + pairingCode: undefined, + }); + return this.getInstance(instanceName); + } + + async deleteInstance(instanceName: string): Promise { + const provider = this.providers.get(instanceName); + if (provider) { + await provider.logout().catch(() => undefined); + this.providers.delete(instanceName); + } + + await db.delete(instancesTable).where(eq(instancesTable.name, instanceName)); + } + + async setPresence( + instanceName: string, + presence: "available" | "composing" | "recording" | "paused" | "unavailable", + jid?: string, + ): Promise { + const provider = this.ensureProvider(await this.getInstance(instanceName)); + await provider.setPresence(presence, jid); + } + + async sendRawMessage( + instanceName: string, + to: string, + content: Record, + options?: ProviderSendOptions, + ): Promise { + const provider = this.ensureProvider(await this.getInstance(instanceName)); + return provider.sendRaw(to, content, options); + } + + async sendText(instanceName: string, to: string, text: string): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendText(to, text); + } + + async sendImage(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendImage(to, payload); + } + + async sendAudio(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendAudio(to, payload); + } + + async sendDocument(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendDocument(to, payload); + } + + async sendButtons(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendButtons(to, payload); + } + + async sendList(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendList(to, payload); + } + + async sendCarousel(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendCarousel(to, payload); + } + + async sendReaction(instanceName: string, to: string, emoji: string, targetMessageId: string): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendReaction(to, emoji, targetMessageId); + } + + async sendLocation(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendLocation(to, payload); + } + + async sendContact(instanceName: string, to: string, payload: Record): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).sendContact(to, payload); + } + + async editMessage(instanceName: string, to: string, messageId: string, text: string): Promise { + return this.ensureProvider(await this.getInstance(instanceName)).editMessage(to, messageId, text); + } + + async fetchGroups(instanceName: string): Promise { + const provider = this.ensureProvider(await this.getInstance(instanceName)); + return provider.fetchGroups(); + } + + async setWebhook(instanceName: string, input: Partial): Promise { + const instance = await this.getInstance(instanceName); + const webhook: WebhookConfig = { + enabled: input.enabled ?? true, + url: input.url ?? instance.webhook.url, + events: input.events ?? instance.webhook.events, + headers: input.headers ?? instance.webhook.headers, + }; + + await db + .update(instancesTable) + .set({ + webhookUrl: webhook.url ?? null, + webhookEvents: JSON.stringify(webhook.events), + updatedAt: nowIso(), + }) + .where(eq(instancesTable.name, instanceName)); + + return this.getInstance(instanceName); + } + + async getWebhook(instanceName: string): Promise { + const instance = await this.getInstance(instanceName); + return instance.webhook; + } + + async setSettings(instanceName: string, input: Partial): Promise { + const instance = await this.getInstance(instanceName); + const settings = { + ...instance.settings, + ...input, + }; + + await db + .update(instancesTable) + .set({ + settingsJson: JSON.stringify(settings), + updatedAt: nowIso(), + }) + .where(eq(instancesTable.name, instanceName)); + + return this.getInstance(instanceName); + } + + async getSettings(instanceName: string): Promise { + const instance = await this.getInstance(instanceName); + return instance.settings; + } + + private async findInstance(instanceName: string): Promise { + const row = await db.query.instancesTable.findFirst({ + where: eq(instancesTable.name, instanceName), + }); + return row ? rowToInstance(row) : null; + } + + private ensureProvider(instance: InstanceRecord): WhatsAppProvider { + const existing = this.providers.get(instance.instanceName); + if (existing) { + return existing; + } + + const provider = new BerryProtocolProvider(instance); + provider.onEvent((event) => { + void this.handleProviderEvent(instance.instanceName, event); + }); + this.providers.set(instance.instanceName, provider); + return provider; + } + + private async handleProviderEvent( + instanceName: string, + event: ProviderEventPayload, + ): Promise { + if (event.event === "connection.update") { + const payload = event.payload as Record; + await this.updateInstanceState(instanceName, { + status: + payload.connectedAt + ? "connected" + : payload.reason === "logged_out" + ? "logged_out" + : payload.reason === "restart_required" + ? "restarting" + : "disconnected", + connectionState: String(payload.reason ?? (payload.connectedAt ? "open" : "disconnected")), + }); + } + + if (event.event === "qrcode.updated") { + const payload = event.payload as Record; + await this.updateInstanceState(instanceName, { + status: "qr_pending", + connectionState: payload.code ? "pairing_code" : "qr", + qrCode: typeof payload.value === "string" ? payload.value : undefined, + pairingCode: typeof payload.code === "string" ? payload.code : undefined, + }); + } + + this.realtime.broadcast(event); + const instance = await this.getInstance(instanceName).catch(() => null); + if (instance) { + await this.webhooks.dispatch(instance.webhook, event); + } + } + + private async updateInstanceState( + instanceName: string, + update: UpdateInstanceStateInput, + ): Promise { + const current = await this.getInstance(instanceName); + await db + .update(instancesTable) + .set({ + status: update.status ?? current.status, + connectionState: update.connectionState ?? current.connectionState, + qrCode: update.qrCode === undefined ? current.qrCode ?? null : update.qrCode, + pairingCode: update.pairingCode === undefined ? current.pairingCode ?? null : update.pairingCode, + updatedAt: nowIso(), + }) + .where(eq(instancesTable.name, instanceName)); + } +} diff --git a/packages/berryapi/src/middlewares/auth.ts b/packages/berryapi/src/middlewares/auth.ts new file mode 100644 index 0000000..1eae846 --- /dev/null +++ b/packages/berryapi/src/middlewares/auth.ts @@ -0,0 +1,21 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import { env } from "../config/env.js"; +import { HttpError } from "../utils/http-error.js"; + +const publicPrefixes = ["/", "/info", "/docs", "/documentation", "/docs/json", env.BERRY_WS_PATH]; + +export const authMiddleware = async (request: FastifyRequest, _reply: FastifyReply) => { + if (publicPrefixes.some((prefix) => request.url === prefix || request.url.startsWith(`${prefix}/`))) { + return; + } + + const header = request.headers.authorization; + if (!header?.startsWith("Bearer ")) { + throw new HttpError(401, "Missing bearer token."); + } + + const token = header.slice("Bearer ".length).trim(); + if (token !== env.API_KEY) { + throw new HttpError(401, "Invalid API key."); + } +}; diff --git a/packages/berryapi/src/middlewares/errorHandler.ts b/packages/berryapi/src/middlewares/errorHandler.ts new file mode 100644 index 0000000..66ff97f --- /dev/null +++ b/packages/berryapi/src/middlewares/errorHandler.ts @@ -0,0 +1,16 @@ +import type { FastifyError, FastifyReply, FastifyRequest } from "fastify"; +import { HttpError } from "../utils/http-error.js"; +import { errorResponse } from "../utils/response.js"; +import { logger } from "../utils/logger.js"; + +export const errorHandler = ( + error: FastifyError | HttpError, + _request: FastifyRequest, + reply: FastifyReply, +) => { + const statusCode = error instanceof HttpError ? error.statusCode : 500; + const details = error instanceof HttpError ? error.details : { name: error.name }; + + logger.error({ err: error, statusCode }, "request failed"); + reply.status(statusCode).send(errorResponse(error.message, details)); +}; diff --git a/packages/berryapi/src/modules/chat/chat.controller.ts b/packages/berryapi/src/modules/chat/chat.controller.ts new file mode 100644 index 0000000..d0a876b --- /dev/null +++ b/packages/berryapi/src/modules/chat/chat.controller.ts @@ -0,0 +1,78 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import type { ZodTypeAny } from "zod"; +import { successResponse } from "../../utils/response.js"; +import { validateOrThrow } from "../../utils/zod.js"; +import { + base64BodySchema, + blockStatusBodySchema, + findContactsBodySchema, + instanceNameParamsSchema, + jidBodySchema, + messageKeyBodySchema, + presenceBodySchema, + updateMessageBodySchema, +} from "./chat.validators.js"; +import type { ChatService } from "./chat.service.js"; + +export class ChatController { + constructor(private readonly service: ChatService) {} + + private getInstanceName(request: FastifyRequest): string { + return validateOrThrow(instanceNameParamsSchema, request.params).instanceName; + } + + private async run( + request: FastifyRequest, + reply: FastifyReply, + schema: ZodTypeAny, + message: string, + executor: (instanceName: string, input: any) => Promise, + ) { + const instanceName = this.getInstanceName(request); + const body = validateOrThrow(schema, request.body) as Record; + const data = await executor(instanceName, body); + reply.send(successResponse(message, data)); + } + + checkWhatsApp = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, jidBodySchema, "WhatsApp availability checked successfully.", this.service.checkWhatsApp.bind(this.service)); + + markRead = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, jidBodySchema, "Chat marked as read successfully.", this.service.markRead.bind(this.service)); + + markUnread = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, jidBodySchema, "Chat marked as unread successfully.", this.service.markUnread.bind(this.service)); + + archive = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, jidBodySchema, "Chat archived successfully.", this.service.archive.bind(this.service)); + + deleteMessageForEveryone = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, messageKeyBodySchema, "Delete for everyone dispatched successfully.", this.service.deleteMessageForEveryone.bind(this.service)); + + updateMessage = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, updateMessageBodySchema, "Message updated successfully.", this.service.updateMessage.bind(this.service)); + + sendPresence = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, presenceBodySchema, "Presence updated successfully.", this.service.sendPresence.bind(this.service)); + + updateBlockStatus = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, blockStatusBodySchema, "Block status updated successfully.", this.service.updateBlockStatus.bind(this.service)); + + fetchProfilePictureUrl = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, jidBodySchema, "Profile picture URL fetched successfully.", this.service.fetchProfilePictureUrl.bind(this.service)); + + getBase64 = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, base64BodySchema, "Base64 generated successfully.", this.service.getBase64.bind(this.service)); + + findContacts = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, findContactsBodySchema, "Contacts fetched successfully.", this.service.findContacts.bind(this.service)); + + findMessages = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, findContactsBodySchema, "Messages fetched successfully.", this.service.findMessages.bind(this.service)); + + findStatusMessage = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, findContactsBodySchema, "Status messages fetched successfully.", this.service.findStatusMessage.bind(this.service)); + + findChats = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, findContactsBodySchema, "Chats fetched successfully.", this.service.findChats.bind(this.service)); +} diff --git a/packages/berryapi/src/modules/chat/chat.routes.ts b/packages/berryapi/src/modules/chat/chat.routes.ts new file mode 100644 index 0000000..b556d53 --- /dev/null +++ b/packages/berryapi/src/modules/chat/chat.routes.ts @@ -0,0 +1,55 @@ +import type { FastifyInstance } from "fastify"; +import { createRouteSchema } from "../../docs/schema.js"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import { ChatController } from "./chat.controller.js"; +import { ChatService } from "./chat.service.js"; +import { + base64BodySchema, + blockStatusBodySchema, + findContactsBodySchema, + instanceNameParamsSchema, + jidBodySchema, + messageKeyBodySchema, + presenceBodySchema, + updateMessageBodySchema, +} from "./chat.validators.js"; + +export const registerChatRoutes = async (app: any, manager: InstanceManager) => { + const controller = new ChatController(new ChatService(manager)); + + const post = ( + path: string, + summary: string, + body: object, + handler: any, + ) => app.post(path, { + schema: createRouteSchema({ + tags: ["Chat"], + summary, + params: instanceNameParamsSchema, + body: body as never, + }), + }, handler); + + post("/chat/checkWhatsApp/:instanceName", "Check if JID looks like a WhatsApp identifier", jidBodySchema, controller.checkWhatsApp); + post("/chat/markRead/:instanceName", "Mark chat as read", jidBodySchema, controller.markRead); + post("/chat/markUnread/:instanceName", "Mark chat as unread", jidBodySchema, controller.markUnread); + post("/chat/archive/:instanceName", "Archive chat", jidBodySchema, controller.archive); + app.delete("/chat/deleteMessageForEveryone/:instanceName", { + schema: createRouteSchema({ + tags: ["Chat"], + summary: "Delete message for everyone", + params: instanceNameParamsSchema, + body: messageKeyBodySchema, + }), + }, controller.deleteMessageForEveryone); + post("/chat/updateMessage/:instanceName", "Update chat message", updateMessageBodySchema, controller.updateMessage); + post("/chat/sendPresence/:instanceName", "Send chat presence", presenceBodySchema, controller.sendPresence); + post("/chat/updateBlockStatus/:instanceName", "Update block status", blockStatusBodySchema, controller.updateBlockStatus); + post("/chat/fetchProfilePictureUrl/:instanceName", "Fetch profile picture URL", jidBodySchema, controller.fetchProfilePictureUrl); + post("/chat/getBase64/:instanceName", "Convert file or URL to base64", base64BodySchema, controller.getBase64); + post("/chat/findContacts/:instanceName", "Find contacts", findContactsBodySchema, controller.findContacts); + post("/chat/findMessages/:instanceName", "Find messages", findContactsBodySchema, controller.findMessages); + post("/chat/findStatusMessage/:instanceName", "Find status messages", findContactsBodySchema, controller.findStatusMessage); + post("/chat/findChats/:instanceName", "Find chats", findContactsBodySchema, controller.findChats); +}; diff --git a/packages/berryapi/src/modules/chat/chat.service.ts b/packages/berryapi/src/modules/chat/chat.service.ts new file mode 100644 index 0000000..c5231e1 --- /dev/null +++ b/packages/berryapi/src/modules/chat/chat.service.ts @@ -0,0 +1,89 @@ +import { readFile } from "node:fs/promises"; +import { InstanceManager } from "../../managers/InstanceManager.js"; +import { notImplementedYet } from "../shared/todo.js"; + +const whatsappRegex = /^\d+@(?:s\.whatsapp\.net|lid|g\.us|newsletter)$/; + +export class ChatService { + constructor(private readonly manager: InstanceManager) {} + + async checkWhatsApp(_instanceName: string, input: { jid: string }) { + return { + jid: input.jid, + exists: whatsappRegex.test(input.jid), + }; + } + + async markRead(_instanceName: string, _input: { jid: string }) { + notImplementedYet("markRead is not exposed by BerryProtocol yet."); + } + + async markUnread(_instanceName: string, _input: { jid: string }) { + notImplementedYet("markUnread is not exposed by BerryProtocol yet."); + } + + async archive(_instanceName: string, _input: { jid: string }) { + notImplementedYet("archive chat is not exposed by BerryProtocol yet."); + } + + async deleteMessageForEveryone(instanceName: string, input: { remoteJid: string; messageId: string; fromMe: boolean; participant?: string }) { + return this.manager.sendRawMessage(instanceName, input.remoteJid, { + delete: { + remoteJid: input.remoteJid, + id: input.messageId, + fromMe: input.fromMe, + participant: input.participant, + }, + }); + } + + async updateMessage(instanceName: string, input: { jid: string; messageId: string; text: string }) { + return this.manager.editMessage(instanceName, input.jid, input.messageId, input.text); + } + + async sendPresence(instanceName: string, input: { presence: "available" | "composing" | "recording" | "paused" | "unavailable"; jid?: string }) { + await this.manager.setPresence(instanceName, input.presence, input.jid); + return { jid: input.jid, presence: input.presence }; + } + + async updateBlockStatus(_instanceName: string, _input: { jid: string; action: "block" | "unblock" }) { + notImplementedYet("block and unblock operations are not exposed by BerryProtocol yet."); + } + + async fetchProfilePictureUrl(_instanceName: string, _input: { jid: string }) { + notImplementedYet("fetchProfilePictureUrl is not exposed by BerryProtocol yet."); + } + + async getBase64(_instanceName: string, input: { url?: string; path?: string }) { + if (input.url) { + const response = await fetch(input.url); + const arrayBuffer = await response.arrayBuffer(); + return { + source: input.url, + base64: Buffer.from(arrayBuffer).toString("base64"), + }; + } + + const file = await readFile(String(input.path)); + return { + source: input.path, + base64: file.toString("base64"), + }; + } + + async findContacts(_instanceName: string, _input: { query?: string }) { + notImplementedYet("contact search is not exposed by BerryProtocol store yet."); + } + + async findMessages(_instanceName: string, _input: { query?: string }) { + notImplementedYet("message search is not exposed by BerryProtocol store yet."); + } + + async findStatusMessage(_instanceName: string, _input: { query?: string }) { + notImplementedYet("status search is not exposed by BerryProtocol store yet."); + } + + async findChats(_instanceName: string, _input: { query?: string }) { + notImplementedYet("chat search is not exposed by BerryProtocol store yet."); + } +} diff --git a/packages/berryapi/src/modules/chat/chat.validators.ts b/packages/berryapi/src/modules/chat/chat.validators.ts new file mode 100644 index 0000000..8b10882 --- /dev/null +++ b/packages/berryapi/src/modules/chat/chat.validators.ts @@ -0,0 +1,40 @@ +import { z } from "zod"; +import { instanceNameParamsSchema } from "../message/validators/message.validators.js"; + +export { instanceNameParamsSchema }; + +export const jidBodySchema = z.object({ + jid: z.string().min(1), +}); + +export const messageKeyBodySchema = z.object({ + remoteJid: z.string().min(1), + messageId: z.string().min(1), + fromMe: z.boolean().default(true), + participant: z.string().optional(), +}); + +export const updateMessageBodySchema = z.object({ + jid: z.string().min(1), + messageId: z.string().min(1), + text: z.string().min(1), +}); + +export const presenceBodySchema = z.object({ + jid: z.string().optional(), + presence: z.enum(["available", "composing", "recording", "paused", "unavailable"]), +}); + +export const blockStatusBodySchema = z.object({ + jid: z.string().min(1), + action: z.enum(["block", "unblock"]), +}); + +export const findContactsBodySchema = z.object({ + query: z.string().optional(), +}); + +export const base64BodySchema = z.object({ + url: z.string().url().optional(), + path: z.string().optional(), +}).refine((value) => value.url || value.path, "url or path is required."); diff --git a/packages/berryapi/src/modules/group/group.controller.ts b/packages/berryapi/src/modules/group/group.controller.ts new file mode 100644 index 0000000..5cb6967 --- /dev/null +++ b/packages/berryapi/src/modules/group/group.controller.ts @@ -0,0 +1,100 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import type { ZodTypeAny } from "zod"; +import { successResponse } from "../../utils/response.js"; +import { validateOrThrow } from "../../utils/zod.js"; +import { + createGroupBodySchema, + groupJidQuerySchema, + instanceNameParamsSchema, + inviteCodeQuerySchema, + toggleEphemeralBodySchema, + updateDescriptionBodySchema, + updateMembersBodySchema, + updatePictureBodySchema, + updateSettingBodySchema, + updateSubjectBodySchema, + groupInviteBodySchema, +} from "./group.validators.js"; +import type { GroupService } from "./group.service.js"; + +export class GroupController { + constructor(private readonly service: GroupService) {} + + private getInstanceName(request: FastifyRequest): string { + return validateOrThrow(instanceNameParamsSchema, request.params).instanceName; + } + + private async runBody( + request: FastifyRequest, + reply: FastifyReply, + schema: ZodTypeAny, + message: string, + executor: (instanceName: string, input: any) => Promise, + ) { + const instanceName = this.getInstanceName(request); + const body = validateOrThrow(schema, request.body) as Record; + const data = await executor(instanceName, body); + reply.send(successResponse(message, data)); + } + + private async runQuery( + request: FastifyRequest, + reply: FastifyReply, + schema: ZodTypeAny, + message: string, + executor: (instanceName: string, input: any) => Promise, + ) { + const instanceName = this.getInstanceName(request); + const query = validateOrThrow(schema, request.query) as Record; + const data = await executor(instanceName, query); + reply.send(successResponse(message, data)); + } + + create = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, createGroupBodySchema, "Group created successfully.", this.service.create.bind(this.service)); + + updatePicture = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, updatePictureBodySchema, "Group picture updated successfully.", this.service.updatePicture.bind(this.service)); + + updateSubject = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, updateSubjectBodySchema, "Group subject updated successfully.", this.service.updateSubject.bind(this.service)); + + updateDescription = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, updateDescriptionBodySchema, "Group description updated successfully.", this.service.updateDescription.bind(this.service)); + + revokeInviteCode = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, groupJidQuerySchema, "Group invite code revoked successfully.", this.service.revokeInviteCode.bind(this.service)); + + sendInvite = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, groupInviteBodySchema, "Group invite sent successfully.", this.service.sendInvite.bind(this.service)); + + updateMembers = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, updateMembersBodySchema, "Group members updated successfully.", this.service.updateMembers.bind(this.service)); + + updateSetting = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, updateSettingBodySchema, "Group setting updated successfully.", this.service.updateSetting.bind(this.service)); + + toggleEphemeral = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, toggleEphemeralBodySchema, "Group ephemeral setting updated successfully.", this.service.toggleEphemeral.bind(this.service)); + + inviteCode = async (request: FastifyRequest, reply: FastifyReply) => + this.runQuery(request, reply, groupJidQuerySchema, "Group invite code fetched successfully.", this.service.inviteCode.bind(this.service)); + + findByInviteCode = async (request: FastifyRequest, reply: FastifyReply) => + this.runQuery(request, reply, inviteCodeQuerySchema, "Group fetched by invite code successfully.", this.service.findByInviteCode.bind(this.service)); + + findByJid = async (request: FastifyRequest, reply: FastifyReply) => + this.runQuery(request, reply, groupJidQuerySchema, "Group fetched successfully.", this.service.findByJid.bind(this.service)); + + fetchAll = async (request: FastifyRequest, reply: FastifyReply) => { + const instanceName = this.getInstanceName(request); + const data = await this.service.fetchAll(instanceName); + reply.send(successResponse("Groups fetched successfully.", data)); + }; + + members = async (request: FastifyRequest, reply: FastifyReply) => + this.runQuery(request, reply, groupJidQuerySchema, "Group members fetched successfully.", this.service.members.bind(this.service)); + + leave = async (request: FastifyRequest, reply: FastifyReply) => + this.runBody(request, reply, groupJidQuerySchema, "Left group successfully.", this.service.leave.bind(this.service)); +} diff --git a/packages/berryapi/src/modules/group/group.routes.ts b/packages/berryapi/src/modules/group/group.routes.ts new file mode 100644 index 0000000..4ab23ac --- /dev/null +++ b/packages/berryapi/src/modules/group/group.routes.ts @@ -0,0 +1,73 @@ +import type { FastifyInstance } from "fastify"; +import { createRouteSchema } from "../../docs/schema.js"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import { GroupController } from "./group.controller.js"; +import { GroupService } from "./group.service.js"; +import { + createGroupBodySchema, + groupInviteBodySchema, + groupJidQuerySchema, + instanceNameParamsSchema, + inviteCodeQuerySchema, + toggleEphemeralBodySchema, + updateDescriptionBodySchema, + updateMembersBodySchema, + updatePictureBodySchema, + updateSettingBodySchema, + updateSubjectBodySchema, +} from "./group.validators.js"; + +export const registerGroupRoutes = async (app: any, manager: InstanceManager) => { + const controller = new GroupController(new GroupService(manager)); + + const post = ( + path: string, + summary: string, + body: object, + handler: any, + ) => app.post(path, { + schema: createRouteSchema({ + tags: ["Group"], + summary, + params: instanceNameParamsSchema, + body: body as never, + }), + }, handler); + + const get = ( + path: string, + summary: string, + querystring: object | undefined, + handler: any, + ) => app.get(path, { + schema: createRouteSchema({ + tags: ["Group"], + summary, + params: instanceNameParamsSchema, + ...(querystring ? { querystring: querystring as never } : {}), + }), + }, handler); + + post("/group/create/:instanceName", "Create group", createGroupBodySchema, controller.create); + post("/group/updatePicture/:instanceName", "Update group picture", updatePictureBodySchema, controller.updatePicture); + post("/group/updateSubject/:instanceName", "Update group subject", updateSubjectBodySchema, controller.updateSubject); + post("/group/updateDescription/:instanceName", "Update group description", updateDescriptionBodySchema, controller.updateDescription); + get("/group/inviteCode/:instanceName", "Fetch group invite code", groupJidQuerySchema, controller.inviteCode); + post("/group/revokeInviteCode/:instanceName", "Revoke group invite code", groupJidQuerySchema, controller.revokeInviteCode); + post("/group/sendInvite/:instanceName", "Send group invite", groupInviteBodySchema, controller.sendInvite); + get("/group/findByInviteCode/:instanceName", "Find group by invite code", inviteCodeQuerySchema, controller.findByInviteCode); + get("/group/findByJid/:instanceName", "Find group by JID", groupJidQuerySchema, controller.findByJid); + get("/group/fetchAll/:instanceName", "Fetch all groups", undefined, controller.fetchAll); + get("/group/members/:instanceName", "Fetch group members", groupJidQuerySchema, controller.members); + post("/group/updateMembers/:instanceName", "Update group members", updateMembersBodySchema, controller.updateMembers); + post("/group/updateSetting/:instanceName", "Update group setting", updateSettingBodySchema, controller.updateSetting); + post("/group/toggleEphemeral/:instanceName", "Toggle group ephemeral setting", toggleEphemeralBodySchema, controller.toggleEphemeral); + app.delete("/group/leave/:instanceName", { + schema: createRouteSchema({ + tags: ["Group"], + summary: "Leave group", + params: instanceNameParamsSchema, + body: groupJidQuerySchema, + }), + }, controller.leave); +}; diff --git a/packages/berryapi/src/modules/group/group.service.ts b/packages/berryapi/src/modules/group/group.service.ts new file mode 100644 index 0000000..fac479f --- /dev/null +++ b/packages/berryapi/src/modules/group/group.service.ts @@ -0,0 +1,83 @@ +import { InstanceManager } from "../../managers/InstanceManager.js"; +import { notImplementedYet } from "../shared/todo.js"; + +type GroupRecord = { + id?: string; + subject?: string; + participants?: unknown[]; + [key: string]: unknown; +}; + +const findGroup = async (manager: InstanceManager, instanceName: string, jid: string): Promise => { + const groups = await manager.fetchGroups(instanceName) as GroupRecord[]; + return groups.find((group) => group.id === jid) ?? null; +}; + +export class GroupService { + constructor(private readonly manager: InstanceManager) {} + + async create(_instanceName: string, _input: { subject: string; participants: string[] }) { + notImplementedYet("group creation is not exposed by BerryProtocol yet."); + } + + async updatePicture(_instanceName: string, _input: { jid: string; url?: string; path?: string; base64?: string }) { + notImplementedYet("group picture update is not exposed by BerryProtocol yet."); + } + + async updateSubject(_instanceName: string, _input: { jid: string; subject: string }) { + notImplementedYet("group subject update is not exposed by BerryProtocol yet."); + } + + async updateDescription(_instanceName: string, _input: { jid: string; description?: string }) { + notImplementedYet("group description update is not exposed by BerryProtocol yet."); + } + + async inviteCode(_instanceName: string) { + notImplementedYet("group invite code lookup is not exposed by BerryProtocol yet."); + } + + async revokeInviteCode(_instanceName: string, _input: { jid: string }) { + notImplementedYet("group invite code revoke is not exposed by BerryProtocol yet."); + } + + async sendInvite(_instanceName: string, _input: { jid: string; inviteCode?: string; inviteExpiration?: number; groupName?: string; caption?: string }) { + notImplementedYet("group invite sending is not exposed by BerryProtocol yet."); + } + + async findByInviteCode(_instanceName: string, _input: { inviteCode: string }) { + notImplementedYet("find group by invite code is not exposed by BerryProtocol yet."); + } + + async findByJid(instanceName: string, input: { jid: string }) { + const group = await findGroup(this.manager, instanceName, input.jid); + return group ?? {}; + } + + async fetchAll(instanceName: string) { + return this.manager.fetchGroups(instanceName); + } + + async members(instanceName: string, input: { jid: string }) { + const group = await findGroup(this.manager, instanceName, input.jid); + return { + jid: input.jid, + participants: Array.isArray(group?.participants) ? group.participants : [], + }; + } + + async updateMembers(_instanceName: string, _input: { jid: string; participants: string[]; action: string }) { + notImplementedYet("group membership updates are not exposed by BerryProtocol yet."); + } + + async updateSetting(_instanceName: string, _input: { jid: string; setting: string }) { + notImplementedYet("group setting updates are not exposed by BerryProtocol yet."); + } + + async toggleEphemeral(_instanceName: string, _input: { jid: string; expiration: number }) { + notImplementedYet("group ephemeral updates are not exposed by BerryProtocol yet."); + } + + async leave(_instanceName: string, _input: { jid: string }) { + notImplementedYet("group leave is not exposed by BerryProtocol yet."); + } +} diff --git a/packages/berryapi/src/modules/group/group.validators.ts b/packages/berryapi/src/modules/group/group.validators.ts new file mode 100644 index 0000000..facd92a --- /dev/null +++ b/packages/berryapi/src/modules/group/group.validators.ts @@ -0,0 +1,59 @@ +import { z } from "zod"; + +export const instanceNameParamsSchema = z.object({ + instanceName: z.string().min(1), +}); + +export const groupJidQuerySchema = z.object({ + jid: z.string().min(1), +}); + +export const inviteCodeQuerySchema = z.object({ + inviteCode: z.string().min(1), +}); + +export const createGroupBodySchema = z.object({ + subject: z.string().min(1), + participants: z.array(z.string().min(1)).min(1), +}); + +export const updatePictureBodySchema = z.object({ + jid: z.string().min(1), + url: z.string().url().optional(), + path: z.string().optional(), + base64: z.string().optional(), +}).refine((value) => value.url || value.path || value.base64, "url, path or base64 is required."); + +export const updateSubjectBodySchema = z.object({ + jid: z.string().min(1), + subject: z.string().min(1), +}); + +export const updateDescriptionBodySchema = z.object({ + jid: z.string().min(1), + description: z.string().optional(), +}); + +export const groupInviteBodySchema = z.object({ + jid: z.string().min(1), + inviteCode: z.string().optional(), + inviteExpiration: z.number().int().positive().optional(), + groupName: z.string().optional(), + caption: z.string().optional(), +}); + +export const updateMembersBodySchema = z.object({ + jid: z.string().min(1), + participants: z.array(z.string().min(1)).min(1), + action: z.enum(["add", "remove", "promote", "demote", "approve", "reject"]), +}); + +export const updateSettingBodySchema = z.object({ + jid: z.string().min(1), + setting: z.enum(["announcement", "not_announcement", "locked", "unlocked"]), +}); + +export const toggleEphemeralBodySchema = z.object({ + jid: z.string().min(1), + expiration: z.number().int().nonnegative(), +}); diff --git a/packages/berryapi/src/modules/instance/instance.controller.ts b/packages/berryapi/src/modules/instance/instance.controller.ts new file mode 100644 index 0000000..1cd8939 --- /dev/null +++ b/packages/berryapi/src/modules/instance/instance.controller.ts @@ -0,0 +1,61 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import { successResponse } from "../../utils/response.js"; +import { validateOrThrow } from "../../utils/zod.js"; +import { + createInstanceBodySchema, + instanceNameParamsSchema, + setPresenceBodySchema, +} from "./instance.validators.js"; +import type { InstanceService } from "./instance.service.js"; + +export class InstanceController { + constructor(private readonly service: InstanceService) {} + + create = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(createInstanceBodySchema, request.body); + const data = await this.service.create(body); + reply.status(201).send(successResponse("Instance created successfully.", data)); + }; + + fetch = async (_request: FastifyRequest, reply: FastifyReply) => { + const data = await this.service.fetch(); + reply.send(successResponse("Instances fetched successfully.", data)); + }; + + connect = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const data = await this.service.connect(params.instanceName); + reply.send(successResponse("Instance connection started.", data)); + }; + + restart = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const data = await this.service.restart(params.instanceName); + reply.send(successResponse("Instance restart started.", data)); + }; + + connectionState = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const data = await this.service.connectionState(params.instanceName); + reply.send(successResponse("Connection state fetched successfully.", data)); + }; + + logout = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const data = await this.service.logout(params.instanceName); + reply.send(successResponse("Instance logged out successfully.", data)); + }; + + delete = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const data = await this.service.delete(params.instanceName); + reply.send(successResponse("Instance deleted successfully.", data)); + }; + + setPresence = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const body = validateOrThrow(setPresenceBodySchema, request.body); + await this.service.setPresence(params.instanceName, body); + reply.send(successResponse("Presence updated successfully.", { instanceName: params.instanceName })); + }; +} diff --git a/packages/berryapi/src/modules/instance/instance.routes.ts b/packages/berryapi/src/modules/instance/instance.routes.ts new file mode 100644 index 0000000..8fe1377 --- /dev/null +++ b/packages/berryapi/src/modules/instance/instance.routes.ts @@ -0,0 +1,90 @@ +import type { FastifyInstance } from "fastify"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import { InstanceService } from "./instance.service.js"; +import { InstanceController } from "./instance.controller.js"; +import { createRouteSchema } from "../../docs/schema.js"; +import { + createInstanceBodySchema, + instanceNameParamsSchema, + setPresenceBodySchema, +} from "./instance.validators.js"; + +export const registerInstanceRoutes = async ( + app: any, + manager: InstanceManager, +) => { + const controller = new InstanceController(new InstanceService(manager)); + + app.post( + "/instance/create", + { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Create instance", + body: createInstanceBodySchema, + example: { + instanceName: "store-01", + authMethod: "qr", + settings: { rejectCall: true }, + }, + }), + }, + controller.create, + ); + + app.get("/instance/fetch", { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Fetch instances", + }), + }, controller.fetch); + + app.get("/instance/connect/:instanceName", { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Connect instance", + params: instanceNameParamsSchema, + }), + }, controller.connect); + + app.put("/instance/restart/:instanceName", { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Restart instance", + params: instanceNameParamsSchema, + }), + }, controller.restart); + + app.get("/instance/connectionState/:instanceName", { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Get connection state", + params: instanceNameParamsSchema, + }), + }, controller.connectionState); + + app.delete("/instance/logout/:instanceName", { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Logout instance", + params: instanceNameParamsSchema, + }), + }, controller.logout); + + app.delete("/instance/delete/:instanceName", { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Delete instance", + params: instanceNameParamsSchema, + }), + }, controller.delete); + + app.post("/instance/setPresence/:instanceName", { + schema: createRouteSchema({ + tags: ["Instances"], + summary: "Set instance presence", + params: instanceNameParamsSchema, + body: setPresenceBodySchema, + }), + }, controller.setPresence); +}; diff --git a/packages/berryapi/src/modules/instance/instance.service.ts b/packages/berryapi/src/modules/instance/instance.service.ts new file mode 100644 index 0000000..93567ec --- /dev/null +++ b/packages/berryapi/src/modules/instance/instance.service.ts @@ -0,0 +1,44 @@ +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import type { z } from "zod"; +import type { + createInstanceBodySchema, + instanceNameParamsSchema, + setPresenceBodySchema, +} from "./instance.validators.js"; + +export class InstanceService { + constructor(private readonly manager: InstanceManager) {} + + create(input: z.infer) { + return this.manager.createInstance(input); + } + + fetch() { + return this.manager.fetchInstances(); + } + + connect(instanceName: z.infer["instanceName"]) { + return this.manager.connectInstance(instanceName); + } + + restart(instanceName: string) { + return this.manager.restartInstance(instanceName); + } + + connectionState(instanceName: string) { + return this.manager.getConnectionState(instanceName); + } + + logout(instanceName: string) { + return this.manager.logoutInstance(instanceName); + } + + async delete(instanceName: string) { + await this.manager.deleteInstance(instanceName); + return { instanceName }; + } + + setPresence(instanceName: string, input: z.infer) { + return this.manager.setPresence(instanceName, input.presence, input.jid); + } +} diff --git a/packages/berryapi/src/modules/instance/instance.validators.ts b/packages/berryapi/src/modules/instance/instance.validators.ts new file mode 100644 index 0000000..6f1efdb --- /dev/null +++ b/packages/berryapi/src/modules/instance/instance.validators.ts @@ -0,0 +1,42 @@ +import { z } from "zod"; + +const eventNameSchema = z.enum([ + "connection.update", + "qrcode.updated", + "messages.upsert", + "messages.update", + "messages.delete", + "chats.update", + "contacts.update", + "groups.update", + "presence.update", + "send.message", +]); + +export const instanceNameParamsSchema = z.object({ + instanceName: z.string().min(1), +}); + +export const createInstanceBodySchema = z.object({ + instanceName: z.string().min(1), + authMethod: z.enum(["qr", "pairing_code", "link"]).default("qr"), + phoneNumber: z.string().optional(), + webhook: z + .object({ + url: z.string().url().optional(), + events: z.array(eventNameSchema).optional(), + }) + .optional(), + settings: z + .object({ + rejectCall: z.boolean().optional(), + readMessages: z.boolean().optional(), + syncFullHistory: z.boolean().optional(), + }) + .optional(), +}); + +export const setPresenceBodySchema = z.object({ + presence: z.enum(["available", "composing", "recording", "paused", "unavailable"]), + jid: z.string().optional(), +}); diff --git a/packages/berryapi/src/modules/message/builders/MessageBuilder.ts b/packages/berryapi/src/modules/message/builders/MessageBuilder.ts new file mode 100644 index 0000000..da5e393 --- /dev/null +++ b/packages/berryapi/src/modules/message/builders/MessageBuilder.ts @@ -0,0 +1,373 @@ +import { readFile } from "node:fs/promises"; +import type { ProviderSendOptions } from "../../../providers/whatsapp/WhatsAppProvider.js"; +import type { CommonMessageInput, MediaLikeInput } from "../types/index.js"; + +type BuiltMessage = { + content: Record; + options?: ProviderSendOptions; +}; + +const decodeBase64 = async (base64: string): Promise => + Buffer.from(base64, "base64"); + +const mediaToTransportValue = async (input: MediaLikeInput): Promise => { + if (input.base64) { + return decodeBase64(input.base64); + } + + if (input.path) { + return readFile(input.path); + } + + if (input.url) { + return { url: input.url }; + } + + throw new Error("A media payload needs url, path or base64."); +}; + +export class MessageBuilder { + buildCommonOptions(input: Partial): ProviderSendOptions | undefined { + const contextInfo = { + ...(input.contextInfo ?? {}), + ...(typeof input.forwardingScore === "number" + ? { + forwardingScore: input.forwardingScore, + isForwarded: input.forwardingScore > 0, + } + : {}), + }; + + const options: ProviderSendOptions = { + ...(input.quoted ? { quoted: input.quoted } : {}), + ...(input.mentions ? { mentions: input.mentions } : {}), + ...(Object.keys(contextInfo).length ? { contextInfo } : {}), + ...(input.ephemeralExpiration ? { ephemeralExpiration: input.ephemeralExpiration } : {}), + ...(input.statusJidList ? { statusJidList: input.statusJidList } : {}), + }; + + return Object.keys(options).length ? options : undefined; + } + + buildText(input: CommonMessageInput & { text: string }): BuiltMessage { + return { + content: { + text: input.text, + }, + options: this.buildCommonOptions(input), + }; + } + + async buildImage(input: CommonMessageInput & MediaLikeInput): Promise { + return { + content: { + image: await mediaToTransportValue(input), + ...(input.caption ? { caption: input.caption } : {}), + ...(input.mimetype ? { mimetype: input.mimetype } : {}), + ...(input.fileName ? { fileName: input.fileName } : {}), + }, + options: this.buildCommonOptions(input), + }; + } + + async buildVideo(input: CommonMessageInput & MediaLikeInput & { gifPlayback?: boolean; viewOnce?: boolean }): Promise { + return { + content: { + video: await mediaToTransportValue(input), + ...(input.caption ? { caption: input.caption } : {}), + ...(input.mimetype ? { mimetype: input.mimetype } : {}), + ...(input.fileName ? { fileName: input.fileName } : {}), + ...(input.gifPlayback ? { gifPlayback: true } : {}), + ...(input.viewOnce ? { viewOnce: true } : {}), + }, + options: this.buildCommonOptions(input), + }; + } + + async buildAudio(input: CommonMessageInput & MediaLikeInput & { ptt?: boolean }): Promise { + return { + content: { + audio: await mediaToTransportValue(input), + ...(input.mimetype ? { mimetype: input.mimetype } : {}), + ...(input.ptt ? { ptt: true } : {}), + }, + options: this.buildCommonOptions(input), + }; + } + + async buildDocument(input: CommonMessageInput & MediaLikeInput): Promise { + return { + content: { + document: await mediaToTransportValue(input), + ...(input.caption ? { caption: input.caption } : {}), + ...(input.mimetype ? { mimetype: input.mimetype } : {}), + ...(input.fileName ? { fileName: input.fileName } : {}), + }, + options: this.buildCommonOptions(input), + }; + } + + async buildSticker(input: CommonMessageInput & MediaLikeInput): Promise { + return { + content: { + sticker: await mediaToTransportValue(input), + ...(input.mimetype ? { mimetype: input.mimetype } : {}), + }, + options: this.buildCommonOptions(input), + }; + } + + buildPoll(input: CommonMessageInput & { title: string; options: string[]; selectableCount: number }): BuiltMessage { + return { + content: { + poll: { + name: input.title, + values: input.options, + selectableCount: input.selectableCount, + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildLocation(input: CommonMessageInput & { latitude: number; longitude: number; name?: string; address?: string }): BuiltMessage { + return { + content: { + location: { + degreesLatitude: input.latitude, + degreesLongitude: input.longitude, + name: input.name, + address: input.address, + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildLiveLocation(input: CommonMessageInput & { latitude: number; longitude: number; name?: string; address?: string; speedInMps?: number; accuracyInMeters?: number; degreesClockwiseFromMagneticNorth?: number }): BuiltMessage { + return { + content: { + liveLocationMessage: { + degreesLatitude: input.latitude, + degreesLongitude: input.longitude, + name: input.name, + address: input.address, + speedInMps: input.speedInMps, + accuracyInMeters: input.accuracyInMeters, + degreesClockwiseFromMagneticNorth: input.degreesClockwiseFromMagneticNorth, + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildContact(input: CommonMessageInput & { displayName: string; vcard: string }): BuiltMessage { + return { + content: { + contacts: { + displayName: input.displayName, + contacts: [ + { + displayName: input.displayName, + vcard: input.vcard, + }, + ], + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildContacts(input: CommonMessageInput & { displayName?: string; contacts: Array<{ displayName: string; vcard: string }> }): BuiltMessage { + return { + content: { + contacts: { + displayName: input.displayName ?? input.contacts[0]?.displayName ?? "Contacts", + contacts: input.contacts, + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildButtons(input: CommonMessageInput & { text: string; footer?: string; ai?: boolean; buttons: Array<{ id?: string; title: string; type?: string; url?: string; copyCode?: string; paramsJson?: string }> }): Record { + return { + text: input.text, + footer: input.footer, + buttons: input.buttons.map((button, index) => ({ + id: button.id ?? `btn_${index + 1}`, + title: button.title, + kind: + button.type === "cta_url" + ? "cta_url" + : button.type === "cta_copy" + ? "copy_code" + : button.type === "native_flow" + ? "reply" + : "quick_reply", + ...(button.url ? { url: button.url } : {}), + ...(button.copyCode ? { code: button.copyCode } : {}), + ...(button.type === "native_flow" ? { nativeFlowName: "quick_reply", buttonParamsJson: button.paramsJson } : {}), + })), + ...(input.ai ? { ai: true } : {}), + }; + } + + buildList(input: CommonMessageInput & { title?: string; text: string; footer?: string; buttonText: string; sections: Array<{ title: string; rows: Array<{ id: string; title: string; description?: string }> }> }): Record { + return { + title: input.title, + text: input.text, + footer: input.footer, + buttonText: input.buttonText, + sections: input.sections, + }; + } + + buildCarousel(input: CommonMessageInput & { + text: string; + footer?: string; + carouselCardType?: "image" | "video" | "mixed"; + ai?: boolean; + cards: Array<{ + title?: string; + body?: string; + footer?: string; + image?: MediaLikeInput; + video?: MediaLikeInput; + buttons?: Array<{ + id?: string; + title?: string; + kind?: "reply" | "quick_reply" | "copy_code" | "cta_url"; + code?: string; + url?: string; + nativeFlowName?: string; + buttonParamsJson?: string; + }>; + }>; + }): Record { + return { + text: input.text, + footer: input.footer, + carouselCardType: input.carouselCardType, + ai: input.ai, + cards: input.cards.map((card) => ({ + title: card.title, + body: card.body, + footer: card.footer, + image: card.image + ? { + url: card.image.url, + path: card.image.path, + buffer: card.image.base64 ? Buffer.from(card.image.base64, "base64") : undefined, + caption: card.image.caption, + mimetype: card.image.mimetype, + fileName: card.image.fileName, + } + : undefined, + video: card.video + ? { + url: card.video.url, + path: card.video.path, + buffer: card.video.base64 ? Buffer.from(card.video.base64, "base64") : undefined, + caption: card.video.caption, + mimetype: card.video.mimetype, + fileName: card.video.fileName, + } + : undefined, + buttons: card.buttons, + })), + }; + } + + buildReaction(input: { emoji: string; targetMessageId: string; to: string }) { + return { + emoji: input.emoji, + targetMessageId: input.targetMessageId, + to: input.to, + }; + } + + buildEdit(input: { text: string; messageId: string; to: string }) { + return input; + } + + buildDelete(input: CommonMessageInput & { messageId: string; fromMe: boolean; participant?: string }): BuiltMessage { + return { + content: { + delete: { + remoteJid: input.to, + fromMe: input.fromMe, + id: input.messageId, + ...(input.participant ? { participant: input.participant } : {}), + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildForward(input: CommonMessageInput & { message: Record }): BuiltMessage { + return { + content: { + forward: input.message, + }, + options: this.buildCommonOptions(input), + }; + } + + buildStatus(input: CommonMessageInput & { text?: string; media?: MediaLikeInput }): Promise | BuiltMessage { + if (input.media) { + return this.buildImage({ + ...input, + ...input.media, + statusJidList: input.statusJidList, + }); + } + + return this.buildText({ + ...input, + text: input.text ?? "", + }); + } + + async buildProduct(input: CommonMessageInput & { title: string; description?: string; price?: string; retailerId?: string; productImage?: MediaLikeInput }): Promise { + return { + content: { + productMessage: { + title: input.title, + description: input.description, + priceAmount1000: input.price, + retailerId: input.retailerId, + productImage: input.productImage + ? { image: await mediaToTransportValue(input.productImage) } + : undefined, + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildCatalog(input: CommonMessageInput & { title: string; businessOwnerJid?: string }): BuiltMessage { + return { + content: { + catalogMessage: { + title: input.title, + businessOwnerJid: input.businessOwnerJid, + }, + }, + options: this.buildCommonOptions(input), + }; + } + + buildCollection(input: CommonMessageInput & { title: string; businessOwnerJid?: string; collectionId?: string }): BuiltMessage { + return { + content: { + collectionMessage: { + name: input.title, + businessOwnerJid: input.businessOwnerJid, + collectionId: input.collectionId, + }, + }, + options: this.buildCommonOptions(input), + }; + } +} diff --git a/packages/berryapi/src/modules/message/controllers/message.controller.ts b/packages/berryapi/src/modules/message/controllers/message.controller.ts new file mode 100644 index 0000000..1a6e58e --- /dev/null +++ b/packages/berryapi/src/modules/message/controllers/message.controller.ts @@ -0,0 +1,146 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import type { ZodTypeAny } from "zod"; +import { successResponse } from "../../../utils/response.js"; +import { validateOrThrow } from "../../../utils/zod.js"; +import { + deleteMessageBodySchema, + editMessageBodySchema, + instanceNameParamsSchema, + sendAiTextBodySchema, + sendButtonsBodySchema, + sendContactBodySchema, + sendContactsBodySchema, + sendCopyButtonBodySchema, + sendCarouselBodySchema, + sendForwardBodySchema, + sendListBodySchema, + sendLocationBodySchema, + sendMediaBodySchema, + sendPollBodySchema, + sendProductBodySchema, + sendReactionBodySchema, + sendStatusBodySchema, + sendTemplateButtonsBodySchema, + sendTextBodySchema, + sendCollectionBodySchema, + sendCatalogBodySchema, + sendLiveLocationBodySchema, +} from "../validators/message.validators.js"; +import type { MessageService } from "../services/message.service.js"; + +export class MessageController { + constructor(private readonly service: MessageService) {} + + private getInstanceName(request: FastifyRequest): string { + return validateOrThrow(instanceNameParamsSchema, request.params).instanceName; + } + + private async run( + request: FastifyRequest, + reply: FastifyReply, + schema: ZodTypeAny, + message: string, + executor: (instanceName: string, input: any) => Promise, + ) { + const instanceName = this.getInstanceName(request); + const body = validateOrThrow(schema, request.body) as Record; + const data = await executor(instanceName, body); + reply.send(successResponse(message, data)); + } + + sendText = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendTextBodySchema, "Text message sent successfully.", this.service.sendText.bind(this.service)); + + sendExtendedText = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendTextBodySchema, "Extended text message sent successfully.", this.service.sendExtendedText.bind(this.service)); + + sendReply = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendTextBodySchema, "Reply message sent successfully.", this.service.sendReply.bind(this.service)); + + sendForward = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendForwardBodySchema as never, "Forward message sent successfully.", this.service.sendForward.bind(this.service)); + + deleteMessage = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, deleteMessageBodySchema as never, "Delete message sent successfully.", this.service.deleteMessage.bind(this.service)); + + editMessage = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, editMessageBodySchema as never, "Message edited successfully.", this.service.editMessage.bind(this.service)); + + sendReaction = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendReactionBodySchema as never, "Reaction sent successfully.", this.service.sendReaction.bind(this.service)); + + sendImage = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "Image message sent successfully.", this.service.sendImage.bind(this.service)); + + sendVideo = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "Video message sent successfully.", this.service.sendVideo.bind(this.service)); + + sendAudio = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "Audio message sent successfully.", this.service.sendAudio.bind(this.service)); + + sendDocument = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "Document message sent successfully.", this.service.sendDocument.bind(this.service)); + + sendSticker = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "Sticker message sent successfully.", this.service.sendSticker.bind(this.service)); + + sendGif = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "GIF message sent successfully.", this.service.sendGif.bind(this.service)); + + sendButtons = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendButtonsBodySchema as never, "Buttons message sent successfully.", this.service.sendButtons.bind(this.service)); + + sendTemplateButtons = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendTemplateButtonsBodySchema as never, "Template buttons message sent successfully.", this.service.sendTemplateButtons.bind(this.service)); + + sendCTAButton = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendButtonsBodySchema as never, "CTA button message sent successfully.", this.service.sendCTAButton.bind(this.service)); + + sendCopyButton = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendCopyButtonBodySchema as never, "Copy button message sent successfully.", this.service.sendCopyButton.bind(this.service)); + + sendList = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendListBodySchema as never, "List message sent successfully.", this.service.sendList.bind(this.service)); + + sendCarousel = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendCarouselBodySchema as never, "Carousel message sent successfully.", this.service.sendCarousel.bind(this.service)); + + sendAiText = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendAiTextBodySchema as never, "AI labeled text message sent successfully.", this.service.sendAiText.bind(this.service)); + + sendAiCarousel = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendCarouselBodySchema as never, "AI labeled carousel message sent successfully.", this.service.sendAiCarousel.bind(this.service)); + + sendPoll = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendPollBodySchema as never, "Poll message sent successfully.", this.service.sendPoll.bind(this.service)); + + sendLocation = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendLocationBodySchema as never, "Location message sent successfully.", this.service.sendLocation.bind(this.service)); + + sendLiveLocation = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendLiveLocationBodySchema as never, "Live location message sent successfully.", this.service.sendLiveLocation.bind(this.service)); + + sendContact = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendContactBodySchema as never, "Contact message sent successfully.", this.service.sendContact.bind(this.service)); + + sendContacts = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendContactsBodySchema as never, "Contacts message sent successfully.", this.service.sendContacts.bind(this.service)); + + sendStatus = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendStatusBodySchema as never, "Status message sent successfully.", this.service.sendStatus.bind(this.service)); + + sendViewOnceImage = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "View once image sent successfully.", this.service.sendViewOnceImage.bind(this.service)); + + sendViewOnceVideo = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendMediaBodySchema as never, "View once video sent successfully.", this.service.sendViewOnceVideo.bind(this.service)); + + sendProduct = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendProductBodySchema as never, "Product message sent successfully.", this.service.sendProduct.bind(this.service)); + + sendCatalog = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendCatalogBodySchema as never, "Catalog message sent successfully.", this.service.sendCatalog.bind(this.service)); + + sendCollection = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, sendCollectionBodySchema as never, "Collection message sent successfully.", this.service.sendCollection.bind(this.service)); +} diff --git a/packages/berryapi/src/modules/message/examples/payload-examples.ts b/packages/berryapi/src/modules/message/examples/payload-examples.ts new file mode 100644 index 0000000..3a55d82 --- /dev/null +++ b/packages/berryapi/src/modules/message/examples/payload-examples.ts @@ -0,0 +1,103 @@ +export const createInstanceExample = { + instanceName: "store-01", + authMethod: "qr", +}; + +export const setWebhookExample = { + enabled: true, + url: "https://example.com/berryapi/webhook", + events: ["messages.upsert", "connection.update"], +}; + +export const sendTextExample = { + to: "5511999999999@s.whatsapp.net", + text: "Ola! Sua instancia BerryAPI esta funcionando.", +}; + +export const sendMediaExample = { + to: "5511999999999@s.whatsapp.net", + url: "https://example.com/image.png", + caption: "Imagem enviada pela BerryAPI", + mimetype: "image/png", +}; + +export const sendButtonsExample = { + to: "5511999999999@s.whatsapp.net", + text: "Escolha uma opcao", + footer: "BerryAPI", + buttons: [ + { id: "support", title: "Suporte" }, + { id: "sales", title: "Vendas" }, + ], +}; + +export const sendTemplateButtonsExample = { + to: "5511999999999@s.whatsapp.net", + text: "Escolha uma acao", + footer: "BerryAPI template", + buttons: [ + { id: "support", title: "Suporte", type: "reply" }, + { id: "catalog", title: "Catalogo", type: "cta_url", url: "https://berrysdk.com" }, + { id: "otp", title: "Copiar codigo", type: "cta_copy", copyCode: "051272" }, + ], +}; + +export const sendCopyButtonExample = { + to: "5511999999999@s.whatsapp.net", + text: "Use o codigo abaixo para entrar na sua conta.", + footer: "BerryOTP", + buttonText: "Copiar codigo", + buttonId: "login_code", + copyCode: "051272", +}; + +export const sendListExample = { + to: "5511999999999@s.whatsapp.net", + title: "Menu BerryAPI", + text: "Escolha uma opcao", + buttonText: "Abrir menu", + sections: [ + { + title: "Atendimento", + rows: [ + { id: "support", title: "Suporte", description: "Falar com suporte" }, + ], + }, + ], +}; + +export const sendPollExample = { + to: "5511999999999@s.whatsapp.net", + title: "Qual sabor voce prefere?", + options: ["Calabresa", "Frango", "Portuguesa"], + selectableCount: 1, +}; + +export const sendCarouselExample = { + to: "5511999999999@s.whatsapp.net", + text: "Confira nossas pizzas!", + footer: "BerryAPI carousel", + carouselCardType: "mixed", + cards: [ + { + title: "Pizza Calabresa", + body: "Calabresa premium", + footer: "R$ 39,90", + image: { + url: "https://images.unsplash.com/photo-1513104890138-7c749659a591", + }, + buttons: [ + { + id: "pizza_calabresa", + title: "Escolher", + kind: "quick_reply", + }, + ], + }, + ], +}; + +export const sendAiTextExample = { + to: "5511999999999@s.whatsapp.net", + text: "Ola! Essa mensagem deve aparecer com AI label em chat privado.", +}; diff --git a/packages/berryapi/src/modules/message/routes/message.routes.ts b/packages/berryapi/src/modules/message/routes/message.routes.ts new file mode 100644 index 0000000..857d212 --- /dev/null +++ b/packages/berryapi/src/modules/message/routes/message.routes.ts @@ -0,0 +1,103 @@ +import type { FastifyInstance } from "fastify"; +import type { InstanceManager } from "../../../managers/InstanceManager.js"; +import { createRouteSchema } from "../../../docs/schema.js"; +import { + sendAiTextExample, + sendButtonsExample, + sendCarouselExample, + sendCopyButtonExample, + sendListExample, + sendMediaExample, + sendPollExample, + sendTemplateButtonsExample, + sendTextExample, +} from "../examples/payload-examples.js"; +import { MessageService } from "../services/message.service.js"; +import { MessageController } from "../controllers/message.controller.js"; +import { + deleteMessageBodySchema, + editMessageBodySchema, + instanceNameParamsSchema, + sendAiTextBodySchema, + sendButtonsBodySchema, + sendCatalogBodySchema, + sendCarouselBodySchema, + sendCollectionBodySchema, + sendContactBodySchema, + sendContactsBodySchema, + sendCopyButtonBodySchema, + sendForwardBodySchema, + sendListBodySchema, + sendLiveLocationBodySchema, + sendLocationBodySchema, + sendMediaBodySchema, + sendPollBodySchema, + sendProductBodySchema, + sendReactionBodySchema, + sendStatusBodySchema, + sendTemplateButtonsBodySchema, + sendTextBodySchema, +} from "../validators/message.validators.js"; + +export const registerMessageRoutes = async ( + app: any, + manager: InstanceManager, +) => { + const controller = new MessageController(new MessageService(manager)); + + const post = ( + path: string, + summary: string, + body: object, + handler: any, + example?: unknown, + ) => + app.post( + path, + { + schema: createRouteSchema({ + tags: ["Message"], + summary, + params: instanceNameParamsSchema, + body: body as never, + example, + }), + }, + handler, + ); + + post("/message/sendText/:instanceName", "Send text message", sendTextBodySchema, controller.sendText, sendTextExample); + post("/message/sendExtendedText/:instanceName", "Send extended text message", sendTextBodySchema, controller.sendExtendedText, sendTextExample); + post("/message/sendReply/:instanceName", "Send reply message", sendTextBodySchema, controller.sendReply, { ...sendTextExample, quoted: { remoteJid: "5511999999999@s.whatsapp.net", id: "MSG_ID" } }); + post("/message/sendForward/:instanceName", "Send forward message", sendForwardBodySchema, controller.sendForward); + post("/message/delete/:instanceName", "Delete message", deleteMessageBodySchema, controller.deleteMessage); + post("/message/edit/:instanceName", "Edit message", editMessageBodySchema, controller.editMessage); + post("/message/sendReaction/:instanceName", "Send reaction", sendReactionBodySchema, controller.sendReaction); + post("/message/sendImage/:instanceName", "Send image", sendMediaBodySchema, controller.sendImage, sendMediaExample); + post("/message/sendVideo/:instanceName", "Send video", sendMediaBodySchema, controller.sendVideo); + post("/message/sendAudio/:instanceName", "Send audio", sendMediaBodySchema, controller.sendAudio); + post("/message/sendWhatsAppAudio/:instanceName", "Send WhatsApp audio", sendMediaBodySchema, controller.sendAudio); + post("/message/sendDocument/:instanceName", "Send document", sendMediaBodySchema, controller.sendDocument); + post("/message/sendSticker/:instanceName", "Send sticker", sendMediaBodySchema, controller.sendSticker); + post("/message/sendGif/:instanceName", "Send GIF", sendMediaBodySchema, controller.sendGif); + post("/message/sendMedia/:instanceName", "Send media alias", sendMediaBodySchema, controller.sendImage, sendMediaExample); + post("/message/sendButtons/:instanceName", "Send buttons", sendButtonsBodySchema, controller.sendButtons, sendButtonsExample); + post("/message/sendTemplateButtons/:instanceName", "Send template buttons", sendTemplateButtonsBodySchema, controller.sendTemplateButtons, sendTemplateButtonsExample); + post("/message/sendCTAButton/:instanceName", "Send CTA button", sendButtonsBodySchema, controller.sendCTAButton, sendButtonsExample); + post("/message/sendCopyButton/:instanceName", "Send copy button", sendCopyButtonBodySchema, controller.sendCopyButton, sendCopyButtonExample); + post("/message/sendList/:instanceName", "Send list", sendListBodySchema, controller.sendList, sendListExample); + post("/message/sendCarousel/:instanceName", "Send carousel", sendCarouselBodySchema, controller.sendCarousel, sendCarouselExample); + post("/message/sendAiText/:instanceName", "Send AI labeled text", sendAiTextBodySchema, controller.sendAiText, sendAiTextExample); + post("/message/sendAiCarousel/:instanceName", "Send AI labeled carousel", sendCarouselBodySchema, controller.sendAiCarousel, { ...sendCarouselExample, ai: true }); + post("/message/sendPoll/:instanceName", "Send poll", sendPollBodySchema, controller.sendPoll, sendPollExample); + post("/message/sendLocation/:instanceName", "Send location", sendLocationBodySchema, controller.sendLocation); + post("/message/sendLiveLocation/:instanceName", "Send live location", sendLiveLocationBodySchema, controller.sendLiveLocation); + post("/message/sendContact/:instanceName", "Send contact", sendContactBodySchema, controller.sendContact); + post("/message/sendContacts/:instanceName", "Send contacts", sendContactsBodySchema, controller.sendContacts); + post("/message/sendStatus/:instanceName", "Send status", sendStatusBodySchema, controller.sendStatus); + post("/message/sendViewOnceImage/:instanceName", "Send view once image", sendMediaBodySchema, controller.sendViewOnceImage); + post("/message/sendViewOnceVideo/:instanceName", "Send view once video", sendMediaBodySchema, controller.sendViewOnceVideo); + post("/message/sendProduct/:instanceName", "Send product", sendProductBodySchema, controller.sendProduct); + post("/message/sendCatalog/:instanceName", "Send catalog", sendCatalogBodySchema, controller.sendCatalog); + post("/message/sendCollection/:instanceName", "Send collection", sendCollectionBodySchema, controller.sendCollection); +}; diff --git a/packages/berryapi/src/modules/message/services/message.service.ts b/packages/berryapi/src/modules/message/services/message.service.ts new file mode 100644 index 0000000..18e199e --- /dev/null +++ b/packages/berryapi/src/modules/message/services/message.service.ts @@ -0,0 +1,180 @@ +import type { InstanceManager } from "../../../managers/InstanceManager.js"; +import { MessageBuilder } from "../builders/MessageBuilder.js"; + +export class MessageService { + constructor( + private readonly manager: InstanceManager, + private readonly builder = new MessageBuilder(), + ) {} + + async sendText(instanceName: string, input: { to: string; text: string; [key: string]: unknown }) { + const built = this.builder.buildText(input); + return this.manager.sendRawMessage(instanceName, input.to, built.content, built.options); + } + + async sendExtendedText(instanceName: string, input: { to: string; text: string; [key: string]: unknown }) { + return this.sendText(instanceName, input); + } + + async sendReply(instanceName: string, input: { to: string; text: string; quoted: unknown; [key: string]: unknown }) { + const built = this.builder.buildText(input as never); + return this.manager.sendRawMessage(instanceName, input.to, built.content, built.options); + } + + async sendForward(instanceName: string, input: { to: string; message: Record; [key: string]: unknown }) { + const built = this.builder.buildForward(input); + return this.manager.sendRawMessage(instanceName, input.to, built.content, built.options); + } + + async deleteMessage(instanceName: string, input: { to: string; messageId: string; fromMe: boolean; participant?: string; [key: string]: unknown }) { + const built = this.builder.buildDelete(input); + return this.manager.sendRawMessage(instanceName, input.to, built.content, built.options); + } + + async editMessage(instanceName: string, input: { to: string; messageId: string; text: string }) { + return this.manager.editMessage(instanceName, input.to, input.messageId, input.text); + } + + async sendReaction(instanceName: string, input: { to: string; emoji: string; targetMessageId: string }) { + return this.manager.sendReaction(instanceName, input.to, input.emoji, input.targetMessageId); + } + + async sendImage(instanceName: string, input: Record) { + const built = await this.builder.buildImage(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendVideo(instanceName: string, input: Record) { + const built = await this.builder.buildVideo(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendAudio(instanceName: string, input: Record) { + const built = await this.builder.buildAudio(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendDocument(instanceName: string, input: Record) { + const built = await this.builder.buildDocument(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendSticker(instanceName: string, input: Record) { + const built = await this.builder.buildSticker(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendGif(instanceName: string, input: Record) { + const built = await this.builder.buildVideo({ ...input, gifPlayback: true } as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendViewOnceImage(instanceName: string, input: Record) { + const built = await this.builder.buildImage(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), { ...built.content, viewOnce: true }, built.options); + } + + async sendViewOnceVideo(instanceName: string, input: Record) { + const built = await this.builder.buildVideo({ ...input, viewOnce: true } as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendButtons(instanceName: string, input: Record) { + const payload = this.builder.buildButtons(input as never); + return this.manager.sendButtons(instanceName, String(input.to), payload); + } + + async sendTemplateButtons(instanceName: string, input: Record) { + const payload = this.builder.buildButtons(input as never); + return this.manager.sendButtons(instanceName, String(input.to), payload); + } + + async sendCTAButton(instanceName: string, input: Record) { + return this.sendButtons(instanceName, input); + } + + async sendCopyButton(instanceName: string, input: Record) { + const payload = this.builder.buildButtons({ + ...input, + buttons: [ + { + id: String(input.buttonId ?? "copy_button"), + title: String(input.buttonText ?? "Copy code"), + type: "cta_copy", + copyCode: String(input.copyCode ?? ""), + }, + ], + } as never); + return this.manager.sendButtons(instanceName, String(input.to), payload); + } + + async sendList(instanceName: string, input: Record) { + const payload = this.builder.buildList(input as never); + return this.manager.sendList(instanceName, String(input.to), payload); + } + + async sendCarousel(instanceName: string, input: Record) { + const payload = this.builder.buildCarousel(input as never); + return this.manager.sendCarousel(instanceName, String(input.to), payload); + } + + async sendAiText(instanceName: string, input: Record) { + return this.manager.sendRawMessage(instanceName, String(input.to), { + text: String(input.text), + ai: true, + }, this.builder.buildCommonOptions(input as never)); + } + + async sendAiCarousel(instanceName: string, input: Record) { + const payload = this.builder.buildCarousel({ + ...input, + ai: true, + } as never); + return this.manager.sendCarousel(instanceName, String(input.to), payload); + } + + async sendPoll(instanceName: string, input: Record) { + const built = this.builder.buildPoll(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendLocation(instanceName: string, input: Record) { + const built = this.builder.buildLocation(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendLiveLocation(instanceName: string, input: Record) { + const built = this.builder.buildLiveLocation(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendContact(instanceName: string, input: Record) { + const built = this.builder.buildContact(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendContacts(instanceName: string, input: Record) { + const built = this.builder.buildContacts(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendStatus(instanceName: string, input: Record) { + const built = await this.builder.buildStatus(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendProduct(instanceName: string, input: Record) { + const built = await this.builder.buildProduct(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendCatalog(instanceName: string, input: Record) { + const built = this.builder.buildCatalog(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } + + async sendCollection(instanceName: string, input: Record) { + const built = this.builder.buildCollection(input as never); + return this.manager.sendRawMessage(instanceName, String(input.to), built.content, built.options); + } +} diff --git a/packages/berryapi/src/modules/message/types/index.ts b/packages/berryapi/src/modules/message/types/index.ts new file mode 100644 index 0000000..1acaf57 --- /dev/null +++ b/packages/berryapi/src/modules/message/types/index.ts @@ -0,0 +1,23 @@ +export type MediaLikeInput = { + url?: string; + path?: string; + base64?: string; + mimetype?: string; + fileName?: string; + caption?: string; +}; + +export type CommonMessageInput = { + to: string; + quoted?: { + remoteJid: string; + id: string; + fromMe?: boolean; + participant?: string; + }; + mentions?: string[]; + contextInfo?: Record; + forwardingScore?: number; + ephemeralExpiration?: number; + statusJidList?: string[]; +}; diff --git a/packages/berryapi/src/modules/message/validators/message.validators.ts b/packages/berryapi/src/modules/message/validators/message.validators.ts new file mode 100644 index 0000000..8032c96 --- /dev/null +++ b/packages/berryapi/src/modules/message/validators/message.validators.ts @@ -0,0 +1,204 @@ +import { z } from "zod"; + +const mediaLikeSchema = z.object({ + url: z.string().url().optional(), + path: z.string().optional(), + base64: z.string().optional(), + mimetype: z.string().optional(), + fileName: z.string().optional(), + caption: z.string().optional(), +}); + +const commonMessageSchema = z.object({ + to: z.string().min(1), + quoted: z + .object({ + remoteJid: z.string(), + id: z.string(), + fromMe: z.boolean().optional(), + participant: z.string().optional(), + }) + .optional(), + mentions: z.array(z.string()).optional(), + contextInfo: z.record(z.string(), z.unknown()).optional(), + forwardingScore: z.number().int().nonnegative().optional(), + ephemeralExpiration: z.number().int().positive().optional(), + statusJidList: z.array(z.string()).optional(), +}); + +export const instanceNameParamsSchema = z.object({ + instanceName: z.string().min(1), +}); + +export const sendTextBodySchema = commonMessageSchema.extend({ + text: z.string().min(1), + linkPreview: z.boolean().optional(), +}); + +export const sendReactionBodySchema = commonMessageSchema.extend({ + emoji: z.string().min(1), + targetMessageId: z.string().min(1), +}); + +export const editMessageBodySchema = commonMessageSchema.extend({ + messageId: z.string().min(1), + text: z.string().min(1), +}); + +export const deleteMessageBodySchema = commonMessageSchema.extend({ + messageId: z.string().min(1), + fromMe: z.boolean().default(true), + participant: z.string().optional(), +}); + +export const sendMediaBodySchema = commonMessageSchema.extend(mediaLikeSchema.shape).refine( + (value) => !!value.url || !!value.path || !!value.base64, + "url, path or base64 is required.", +); + +export const sendButtonsBodySchema = commonMessageSchema.extend({ + text: z.string().min(1), + footer: z.string().optional(), + ai: z.boolean().optional(), + buttons: z.array( + z.object({ + id: z.string().min(1).optional(), + title: z.string().min(1), + type: z.enum(["reply", "cta_url", "cta_copy", "native_flow"]).default("reply"), + url: z.string().url().optional(), + copyCode: z.string().optional(), + paramsJson: z.string().optional(), + }), + ).min(1), +}); + +export const sendTemplateButtonsBodySchema = sendButtonsBodySchema.refine( + (value) => value.buttons.every((button) => button.type === "reply" || button.type === "cta_url" || button.type === "cta_copy"), + "Template buttons only support reply, cta_url or cta_copy.", +); + +export const sendCopyButtonBodySchema = commonMessageSchema.extend({ + text: z.string().min(1), + footer: z.string().optional(), + copyCode: z.string().min(1), + buttonText: z.string().min(1), + buttonId: z.string().min(1).optional(), +}); + +export const sendListBodySchema = commonMessageSchema.extend({ + title: z.string().optional(), + text: z.string().min(1), + footer: z.string().optional(), + buttonText: z.string().min(1), + sections: z.array( + z.object({ + title: z.string().min(1), + rows: z.array( + z.object({ + id: z.string().min(1), + title: z.string().min(1), + description: z.string().optional(), + }), + ).min(1), + }), + ).min(1), +}); + +export const sendPollBodySchema = commonMessageSchema.extend({ + title: z.string().min(1), + options: z.array(z.string().min(1)).min(2), + selectableCount: z.number().int().positive().default(1), +}); + +const carouselButtonSchema = z.object({ + id: z.string().min(1).optional(), + title: z.string().min(1).optional(), + kind: z.enum(["reply", "quick_reply", "copy_code", "cta_url"]).optional(), + code: z.string().optional(), + url: z.string().url().optional(), + nativeFlowName: z.string().optional(), + buttonParamsJson: z.string().optional(), +}); + +const carouselCardSchema = z.object({ + title: z.string().optional(), + body: z.string().optional(), + footer: z.string().optional(), + image: mediaLikeSchema.optional(), + video: mediaLikeSchema.optional(), + buttons: z.array(carouselButtonSchema).optional(), +}).refine((value) => !!value.image || !!value.video, "Each carousel card needs image or video."); + +export const sendCarouselBodySchema = commonMessageSchema.extend({ + text: z.string().min(1), + footer: z.string().optional(), + carouselCardType: z.enum(["image", "video", "mixed"]).optional(), + ai: z.boolean().optional(), + cards: z.array(carouselCardSchema).min(1).max(10), +}); + +export const sendLocationBodySchema = commonMessageSchema.extend({ + latitude: z.number(), + longitude: z.number(), + name: z.string().optional(), + address: z.string().optional(), +}); + +export const sendLiveLocationBodySchema = sendLocationBodySchema.extend({ + degreesClockwiseFromMagneticNorth: z.number().optional(), + speedInMps: z.number().optional(), + accuracyInMeters: z.number().optional(), +}); + +export const sendContactBodySchema = commonMessageSchema.extend({ + displayName: z.string().min(1), + vcard: z.string().min(1), +}); + +export const sendContactsBodySchema = commonMessageSchema.extend({ + displayName: z.string().optional(), + contacts: z.array( + z.object({ + displayName: z.string().min(1), + vcard: z.string().min(1), + }), + ).min(1), +}); + +export const sendStatusBodySchema = commonMessageSchema.extend({ + text: z.string().optional(), + media: mediaLikeSchema.optional(), +}).refine((value) => !!value.text || !!value.media, "text or media is required."); + +export const sendProductBodySchema = commonMessageSchema.extend({ + title: z.string().min(1), + description: z.string().optional(), + price: z.string().optional(), + retailerId: z.string().optional(), + businessOwnerJid: z.string().optional(), + productImage: mediaLikeSchema.optional(), +}); + +export const sendCatalogBodySchema = commonMessageSchema.extend({ + title: z.string().min(1), + businessOwnerJid: z.string().optional(), + thumbnail: mediaLikeSchema.optional(), +}); + +export const sendCollectionBodySchema = commonMessageSchema.extend({ + title: z.string().min(1), + businessOwnerJid: z.string().optional(), + collectionId: z.string().optional(), +}); + +export const sendForwardBodySchema = commonMessageSchema.extend({ + message: z.record(z.string(), z.unknown()), +}); + +export const sendPresenceBodySchema = commonMessageSchema.extend({ + presence: z.enum(["available", "composing", "recording", "paused", "unavailable"]), +}); + +export const sendAiTextBodySchema = commonMessageSchema.extend({ + text: z.string().min(1), +}); diff --git a/packages/berryapi/src/modules/profile/profile.controller.ts b/packages/berryapi/src/modules/profile/profile.controller.ts new file mode 100644 index 0000000..3da79d6 --- /dev/null +++ b/packages/berryapi/src/modules/profile/profile.controller.ts @@ -0,0 +1,58 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import type { ZodTypeAny } from "zod"; +import { successResponse } from "../../utils/response.js"; +import { validateOrThrow } from "../../utils/zod.js"; +import { + instanceNameParamsSchema, + profileJidBodySchema, + updateNameBodySchema, + updatePictureBodySchema, + updatePrivacySettingsBodySchema, + updateStatusBodySchema, +} from "./profile.validators.js"; +import type { ProfileService } from "./profile.service.js"; + +export class ProfileController { + constructor(private readonly service: ProfileService) {} + + private getInstanceName(request: FastifyRequest): string { + return validateOrThrow(instanceNameParamsSchema, request.params).instanceName; + } + + private async run( + request: FastifyRequest, + reply: FastifyReply, + schema: ZodTypeAny | null, + message: string, + executor: (instanceName: string, input: any) => Promise, + ) { + const instanceName = this.getInstanceName(request); + const body = schema ? validateOrThrow(schema, request.body) as Record : {}; + const data = await executor(instanceName, body); + reply.send(successResponse(message, data)); + } + + fetchBusinessProfile = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, profileJidBodySchema, "Business profile fetched successfully.", this.service.fetchBusinessProfile.bind(this.service)); + + fetchProfile = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, profileJidBodySchema, "Profile fetched successfully.", this.service.fetchProfile.bind(this.service)); + + updateName = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, updateNameBodySchema, "Profile name updated successfully.", this.service.updateName.bind(this.service)); + + updateStatus = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, updateStatusBodySchema, "Profile status updated successfully.", this.service.updateStatus.bind(this.service)); + + updatePicture = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, updatePictureBodySchema, "Profile picture updated successfully.", this.service.updatePicture.bind(this.service)); + + removePicture = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, null, "Profile picture removed successfully.", this.service.removePicture.bind(this.service)); + + privacySettings = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, null, "Privacy settings fetched successfully.", this.service.privacySettings.bind(this.service)); + + updatePrivacySettings = async (request: FastifyRequest, reply: FastifyReply) => + this.run(request, reply, updatePrivacySettingsBodySchema, "Privacy settings updated successfully.", this.service.updatePrivacySettings.bind(this.service)); +} diff --git a/packages/berryapi/src/modules/profile/profile.routes.ts b/packages/berryapi/src/modules/profile/profile.routes.ts new file mode 100644 index 0000000..96faa3d --- /dev/null +++ b/packages/berryapi/src/modules/profile/profile.routes.ts @@ -0,0 +1,52 @@ +import type { FastifyInstance } from "fastify"; +import { createRouteSchema } from "../../docs/schema.js"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import { ProfileController } from "./profile.controller.js"; +import { ProfileService } from "./profile.service.js"; +import { + instanceNameParamsSchema, + profileJidBodySchema, + updateNameBodySchema, + updatePictureBodySchema, + updatePrivacySettingsBodySchema, + updateStatusBodySchema, +} from "./profile.validators.js"; + +export const registerProfileRoutes = async (app: any, manager: InstanceManager) => { + const controller = new ProfileController(new ProfileService(manager)); + + const post = ( + path: string, + summary: string, + body: object, + handler: any, + ) => app.post(path, { + schema: createRouteSchema({ + tags: ["Profile"], + summary, + params: instanceNameParamsSchema, + body: body as never, + }), + }, handler); + + post("/profile/fetchBusinessProfile/:instanceName", "Fetch business profile", profileJidBodySchema, controller.fetchBusinessProfile); + post("/profile/fetchProfile/:instanceName", "Fetch profile", profileJidBodySchema, controller.fetchProfile); + post("/profile/updateName/:instanceName", "Update profile name", updateNameBodySchema, controller.updateName); + post("/profile/updateStatus/:instanceName", "Update profile status", updateStatusBodySchema, controller.updateStatus); + post("/profile/updatePicture/:instanceName", "Update profile picture", updatePictureBodySchema, controller.updatePicture); + app.delete("/profile/removePicture/:instanceName", { + schema: createRouteSchema({ + tags: ["Profile"], + summary: "Remove profile picture", + params: instanceNameParamsSchema, + }), + }, controller.removePicture); + app.get("/profile/privacySettings/:instanceName", { + schema: createRouteSchema({ + tags: ["Profile"], + summary: "Fetch privacy settings", + params: instanceNameParamsSchema, + }), + }, controller.privacySettings); + post("/profile/updatePrivacySettings/:instanceName", "Update privacy settings", updatePrivacySettingsBodySchema, controller.updatePrivacySettings); +}; diff --git a/packages/berryapi/src/modules/profile/profile.service.ts b/packages/berryapi/src/modules/profile/profile.service.ts new file mode 100644 index 0000000..3549721 --- /dev/null +++ b/packages/berryapi/src/modules/profile/profile.service.ts @@ -0,0 +1,56 @@ +import { InstanceManager } from "../../managers/InstanceManager.js"; +import { notImplementedYet } from "../shared/todo.js"; + +export class ProfileService { + constructor(private readonly manager: InstanceManager) {} + + async fetchBusinessProfile(instanceName: string, input: { jid?: string }) { + const state = await this.manager.getConnectionState(instanceName); + return { + instanceName, + jid: input.jid, + provider: "berryprotocol", + state, + note: "Business profile details are not exposed by BerryProtocol yet.", + }; + } + + async fetchProfile(instanceName: string, input: { jid?: string }) { + const state = await this.manager.getConnectionState(instanceName); + const instance = await this.manager.getInstance(instanceName); + return { + instanceName, + jid: input.jid, + phoneNumber: instance.phoneNumber, + connectionState: state, + }; + } + + async updateName(_instanceName: string, _input: { name: string }) { + notImplementedYet("profile name updates are not exposed by BerryProtocol yet."); + } + + async updateStatus(_instanceName: string, _input: { status: string }) { + notImplementedYet("profile status updates are not exposed by BerryProtocol yet."); + } + + async updatePicture(_instanceName: string, _input: { url?: string; path?: string; base64?: string }) { + notImplementedYet("profile picture updates are not exposed by BerryProtocol yet."); + } + + async removePicture(_instanceName: string) { + notImplementedYet("profile picture removal is not exposed by BerryProtocol yet."); + } + + async privacySettings(instanceName: string) { + const settings = await this.manager.getSettings(instanceName); + return settings.privacy ?? {}; + } + + async updatePrivacySettings(instanceName: string, input: Record) { + const instance = await this.manager.setSettings(instanceName, { + privacy: input, + }); + return instance.settings.privacy ?? {}; + } +} diff --git a/packages/berryapi/src/modules/profile/profile.validators.ts b/packages/berryapi/src/modules/profile/profile.validators.ts new file mode 100644 index 0000000..83febd3 --- /dev/null +++ b/packages/berryapi/src/modules/profile/profile.validators.ts @@ -0,0 +1,30 @@ +import { z } from "zod"; + +export const instanceNameParamsSchema = z.object({ + instanceName: z.string().min(1), +}); + +export const profileJidBodySchema = z.object({ + jid: z.string().optional(), +}); + +export const updateNameBodySchema = z.object({ + name: z.string().min(1), +}); + +export const updateStatusBodySchema = z.object({ + status: z.string().min(1), +}); + +export const updatePrivacySettingsBodySchema = z.object({ + readReceipts: z.boolean().optional(), + lastSeen: z.enum(["everyone", "contacts", "nobody"]).optional(), + profilePhoto: z.enum(["everyone", "contacts", "nobody"]).optional(), + online: z.enum(["everyone", "contacts", "nobody"]).optional(), +}); + +export const updatePictureBodySchema = z.object({ + url: z.string().url().optional(), + path: z.string().optional(), + base64: z.string().optional(), +}).refine((value) => value.url || value.path || value.base64, "url, path or base64 is required."); diff --git a/packages/berryapi/src/modules/settings/settings.controller.ts b/packages/berryapi/src/modules/settings/settings.controller.ts new file mode 100644 index 0000000..220ea75 --- /dev/null +++ b/packages/berryapi/src/modules/settings/settings.controller.ts @@ -0,0 +1,22 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import { successResponse } from "../../utils/response.js"; +import { validateOrThrow } from "../../utils/zod.js"; +import { instanceNameParamsSchema, setSettingsBodySchema } from "./settings.validators.js"; +import type { SettingsService } from "./settings.service.js"; + +export class SettingsController { + constructor(private readonly service: SettingsService) {} + + set = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const body = validateOrThrow(setSettingsBodySchema, request.body); + const data = await this.service.set(params.instanceName, body); + reply.send(successResponse("Settings updated successfully.", data)); + }; + + find = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const data = await this.service.find(params.instanceName); + reply.send(successResponse("Settings fetched successfully.", data)); + }; +} diff --git a/packages/berryapi/src/modules/settings/settings.routes.ts b/packages/berryapi/src/modules/settings/settings.routes.ts new file mode 100644 index 0000000..98f6b7d --- /dev/null +++ b/packages/berryapi/src/modules/settings/settings.routes.ts @@ -0,0 +1,30 @@ +import type { FastifyInstance } from "fastify"; +import { createRouteSchema } from "../../docs/schema.js"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import { SettingsController } from "./settings.controller.js"; +import { SettingsService } from "./settings.service.js"; +import { instanceNameParamsSchema, setSettingsBodySchema } from "./settings.validators.js"; + +export const registerSettingsRoutes = async ( + app: any, + manager: InstanceManager, +) => { + const controller = new SettingsController(new SettingsService(manager)); + + app.post("/settings/set/:instanceName", { + schema: createRouteSchema({ + tags: ["Settings"], + summary: "Set settings", + params: instanceNameParamsSchema, + body: setSettingsBodySchema, + }), + }, controller.set); + + app.get("/settings/find/:instanceName", { + schema: createRouteSchema({ + tags: ["Settings"], + summary: "Find settings", + params: instanceNameParamsSchema, + }), + }, controller.find); +}; diff --git a/packages/berryapi/src/modules/settings/settings.service.ts b/packages/berryapi/src/modules/settings/settings.service.ts new file mode 100644 index 0000000..7104568 --- /dev/null +++ b/packages/berryapi/src/modules/settings/settings.service.ts @@ -0,0 +1,15 @@ +import type { z } from "zod"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import type { setSettingsBodySchema } from "./settings.validators.js"; + +export class SettingsService { + constructor(private readonly manager: InstanceManager) {} + + set(instanceName: string, input: z.infer) { + return this.manager.setSettings(instanceName, input); + } + + find(instanceName: string) { + return this.manager.getSettings(instanceName); + } +} diff --git a/packages/berryapi/src/modules/settings/settings.validators.ts b/packages/berryapi/src/modules/settings/settings.validators.ts new file mode 100644 index 0000000..c05d36f --- /dev/null +++ b/packages/berryapi/src/modules/settings/settings.validators.ts @@ -0,0 +1,26 @@ +import { z } from "zod"; +import { instanceNameParamsSchema } from "../instance/instance.validators.js"; + +export { instanceNameParamsSchema }; + +const eventNameSchema = z.enum([ + "connection.update", + "qrcode.updated", + "messages.upsert", + "messages.update", + "messages.delete", + "chats.update", + "contacts.update", + "groups.update", + "presence.update", + "send.message", +]); + +export const setSettingsBodySchema = z.object({ + rejectCall: z.boolean().optional(), + readMessages: z.boolean().optional(), + syncFullHistory: z.boolean().optional(), + alwaysOnline: z.boolean().optional(), + webhookByEvents: z.boolean().optional(), + events: z.array(eventNameSchema).optional(), +}); diff --git a/packages/berryapi/src/modules/shared/todo.ts b/packages/berryapi/src/modules/shared/todo.ts new file mode 100644 index 0000000..8b89faa --- /dev/null +++ b/packages/berryapi/src/modules/shared/todo.ts @@ -0,0 +1,8 @@ +import { HttpError } from "../../utils/http-error.js"; + +export const notImplementedYet = (message: string, details?: Record): never => { + throw new HttpError(501, message, { + todo: true, + ...details, + }); +}; diff --git a/packages/berryapi/src/modules/webhook/webhook.controller.ts b/packages/berryapi/src/modules/webhook/webhook.controller.ts new file mode 100644 index 0000000..ab6f94e --- /dev/null +++ b/packages/berryapi/src/modules/webhook/webhook.controller.ts @@ -0,0 +1,22 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import { validateOrThrow } from "../../utils/zod.js"; +import { successResponse } from "../../utils/response.js"; +import { instanceNameParamsSchema, setWebhookBodySchema } from "./webhook.validators.js"; +import type { WebhookService } from "./webhook.service.js"; + +export class WebhookController { + constructor(private readonly service: WebhookService) {} + + set = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const body = validateOrThrow(setWebhookBodySchema, request.body); + const data = await this.service.set(params.instanceName, body); + reply.send(successResponse("Webhook updated successfully.", data)); + }; + + find = async (request: FastifyRequest, reply: FastifyReply) => { + const params = validateOrThrow(instanceNameParamsSchema, request.params); + const data = await this.service.find(params.instanceName); + reply.send(successResponse("Webhook fetched successfully.", data)); + }; +} diff --git a/packages/berryapi/src/modules/webhook/webhook.routes.ts b/packages/berryapi/src/modules/webhook/webhook.routes.ts new file mode 100644 index 0000000..80fabd9 --- /dev/null +++ b/packages/berryapi/src/modules/webhook/webhook.routes.ts @@ -0,0 +1,35 @@ +import type { FastifyInstance } from "fastify"; +import { createRouteSchema } from "../../docs/schema.js"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import { WebhookController } from "./webhook.controller.js"; +import { WebhookService } from "./webhook.service.js"; +import { instanceNameParamsSchema, setWebhookBodySchema } from "./webhook.validators.js"; + +export const registerWebhookRoutes = async ( + app: any, + manager: InstanceManager, +) => { + const controller = new WebhookController(new WebhookService(manager)); + + app.post("/webhook/set/:instanceName", { + schema: createRouteSchema({ + tags: ["Webhook"], + summary: "Set webhook", + params: instanceNameParamsSchema, + body: setWebhookBodySchema, + example: { + enabled: true, + url: "https://example.com/webhook", + events: ["messages.upsert", "connection.update"], + }, + }), + }, controller.set); + + app.get("/webhook/find/:instanceName", { + schema: createRouteSchema({ + tags: ["Webhook"], + summary: "Find webhook", + params: instanceNameParamsSchema, + }), + }, controller.find); +}; diff --git a/packages/berryapi/src/modules/webhook/webhook.service.ts b/packages/berryapi/src/modules/webhook/webhook.service.ts new file mode 100644 index 0000000..5fe0406 --- /dev/null +++ b/packages/berryapi/src/modules/webhook/webhook.service.ts @@ -0,0 +1,15 @@ +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import type { z } from "zod"; +import type { setWebhookBodySchema } from "./webhook.validators.js"; + +export class WebhookService { + constructor(private readonly manager: InstanceManager) {} + + set(instanceName: string, input: z.infer) { + return this.manager.setWebhook(instanceName, input); + } + + find(instanceName: string) { + return this.manager.getWebhook(instanceName); + } +} diff --git a/packages/berryapi/src/modules/webhook/webhook.validators.ts b/packages/berryapi/src/modules/webhook/webhook.validators.ts new file mode 100644 index 0000000..82a5482 --- /dev/null +++ b/packages/berryapi/src/modules/webhook/webhook.validators.ts @@ -0,0 +1,24 @@ +import { z } from "zod"; +import { instanceNameParamsSchema } from "../instance/instance.validators.js"; + +export { instanceNameParamsSchema }; + +const eventNameSchema = z.enum([ + "connection.update", + "qrcode.updated", + "messages.upsert", + "messages.update", + "messages.delete", + "chats.update", + "contacts.update", + "groups.update", + "presence.update", + "send.message", +]); + +export const setWebhookBodySchema = z.object({ + enabled: z.boolean().default(true), + url: z.string().url(), + events: z.array(eventNameSchema).default([]), + headers: z.record(z.string(), z.string()).optional(), +}); diff --git a/packages/berryapi/src/providers/whatsapp/BerryProtocolProvider.ts b/packages/berryapi/src/providers/whatsapp/BerryProtocolProvider.ts new file mode 100644 index 0000000..620b901 --- /dev/null +++ b/packages/berryapi/src/providers/whatsapp/BerryProtocolProvider.ts @@ -0,0 +1,226 @@ +import BerryProtocol, { type BerrySendRawOptions } from "@berrysdk/core"; +import type { BerryApiEventName, InstanceRecord } from "../../types/index.js"; +import type { + ProviderConnectOptions, + ProviderEventPayload, + ProviderSendOptions, + WhatsAppProvider, +} from "./WhatsAppProvider.js"; +import { env } from "../../config/env.js"; +import { logger } from "../../utils/logger.js"; + +const toEventPayload = ( + event: BerryApiEventName, + instanceName: string, + payload: unknown, +): ProviderEventPayload => ({ + event, + instanceName, + payload, + timestamp: new Date().toISOString(), +}); + +export class BerryProtocolProvider implements WhatsAppProvider { + public readonly instanceName: string; + private readonly client: BerryProtocol; + private listeners = new Set<(event: ProviderEventPayload) => void>(); + private state: Record = { + status: "created", + connectionState: "disconnected", + }; + + constructor(instance: Pick) { + this.instanceName = instance.instanceName; + this.client = new BerryProtocol({ + sessionId: instance.instanceName, + databasePath: env.BERRY_SQLITE_PATH, + authFolder: env.BERRY_AUTH_FOLDER, + printQrInTerminal: false, + logger: logger.child({ module: "provider", instanceName: instance.instanceName }), + }); + this.bindEvents(); + } + + async connect(options: ProviderConnectOptions): Promise { + this.state = { + ...this.state, + status: "connecting", + connectionState: "connecting", + }; + + if (options.authMethod === "pairing_code") { + if (!options.phoneNumber) { + throw new Error("phoneNumber is required for pairing_code authentication."); + } + await this.client.connectWithPairingCode(options.phoneNumber); + return; + } + + if (options.authMethod === "link") { + await this.client.connectWithLink(); + return; + } + + await this.client.connectWithQr(); + } + + async reconnect(): Promise { + await this.client.reconnect(); + } + + async disconnect(): Promise { + await this.client.disconnect(); + this.state = { + ...this.state, + status: "disconnected", + connectionState: "disconnected", + }; + } + + async logout(): Promise { + await this.client.logout(); + this.state = { + ...this.state, + status: "logged_out", + connectionState: "logged_out", + }; + } + + async getConnectionState(): Promise> { + return { + ...this.state, + qrCode: this.client.getQrCode(), + }; + } + + async setPresence( + presence: "available" | "composing" | "recording" | "paused" | "unavailable", + jid?: string, + ): Promise { + await this.client.sendPresence(presence, jid); + } + + async sendText(to: string, text: string): Promise { + return this.client.sendText(to, text); + } + + async sendImage(to: string, payload: Record): Promise { + return this.client.sendImage(to, payload as never); + } + + async sendAudio(to: string, payload: Record): Promise { + return this.client.sendAudio(to, payload as never); + } + + async sendDocument(to: string, payload: Record): Promise { + return this.client.sendDocument(to, payload as never); + } + + async sendButtons(to: string, payload: Record): Promise { + return this.client.sendButtons(to, payload as never); + } + + async sendList(to: string, payload: Record): Promise { + return this.client.sendList(to, payload as never); + } + + async sendCarousel(to: string, payload: Record): Promise { + return this.client.sendCarousel(to, payload as never); + } + + async sendReaction(to: string, emoji: string, targetMessageId: string): Promise { + return this.client.sendReaction(to, emoji, targetMessageId); + } + + async sendLocation(to: string, payload: Record): Promise { + return this.client.sendLocation(to, payload as never); + } + + async sendContact(to: string, payload: Record): Promise { + return this.client.sendContact(to, payload as never); + } + + async editMessage(to: string, messageId: string, text: string): Promise { + return this.client.editMessage(to, messageId, text); + } + + async sendRaw( + to: string, + content: Record, + options?: ProviderSendOptions, + ): Promise { + return this.client.sendRaw(to, content, options as BerrySendRawOptions | undefined); + } + + async fetchGroups(): Promise { + return this.client.fetchGroups(); + } + + onEvent(listener: (event: ProviderEventPayload) => void): void { + this.listeners.add(listener); + } + + private emit(event: BerryApiEventName, payload: unknown): void { + const envelope = toEventPayload(event, this.instanceName, payload); + for (const listener of this.listeners) { + listener(envelope); + } + } + + private bindEvents(): void { + this.client.on("connection.open", (payload) => { + this.state = { + ...this.state, + status: "connected", + connectionState: "open", + }; + this.emit("connection.update", payload); + }); + + this.client.on("connection.close", (payload) => { + this.state = { + ...this.state, + status: "disconnected", + connectionState: "closed", + }; + this.emit("connection.update", payload); + }); + + this.client.on("connection.reconnecting", (payload) => { + this.state = { + ...this.state, + status: "restarting", + connectionState: "reconnecting", + }; + this.emit("connection.update", payload); + }); + + this.client.on("auth.qr", (payload) => { + this.state = { + ...this.state, + status: "qr_pending", + connectionState: "qr", + qrCode: payload.value, + }; + this.emit("qrcode.updated", payload); + }); + + this.client.on("auth.pairing_code", (payload) => { + this.state = { + ...this.state, + status: "qr_pending", + connectionState: "pairing_code", + pairingCode: payload.code, + }; + this.emit("qrcode.updated", payload); + }); + + this.client.on("message.received", (payload) => this.emit("messages.upsert", payload)); + this.client.on("message.ack", (payload) => this.emit("messages.update", payload)); + this.client.on("chats.update", (payload) => this.emit("chats.update", payload)); + this.client.on("sync.contacts", (payload) => this.emit("contacts.update", payload)); + this.client.on("sync.groups", (payload) => this.emit("groups.update", payload)); + this.client.on("presence.update", (payload) => this.emit("presence.update", payload)); + this.client.on("message.sent", (payload) => this.emit("send.message", payload)); + } +} diff --git a/packages/berryapi/src/providers/whatsapp/WhatsAppProvider.ts b/packages/berryapi/src/providers/whatsapp/WhatsAppProvider.ts new file mode 100644 index 0000000..0578f56 --- /dev/null +++ b/packages/berryapi/src/providers/whatsapp/WhatsAppProvider.ts @@ -0,0 +1,47 @@ +import type { BerryApiEventName, InstanceRecord } from "../../types/index.js"; + +export interface ProviderSendOptions { + quoted?: unknown; + mentions?: string[]; + contextInfo?: Record; + ephemeralExpiration?: number; + forwardingScore?: number; + statusJidList?: string[]; + [key: string]: unknown; +} + +export interface ProviderConnectOptions { + authMethod: InstanceRecord["authMethod"]; + phoneNumber?: string; +} + +export interface ProviderEventPayload { + event: BerryApiEventName; + instanceName: string; + payload: unknown; + timestamp: string; +} + +export interface WhatsAppProvider { + readonly instanceName: string; + connect(options: ProviderConnectOptions): Promise; + reconnect(): Promise; + disconnect(): Promise; + logout(): Promise; + getConnectionState(): Promise>; + setPresence(presence: "available" | "composing" | "recording" | "paused" | "unavailable", jid?: string): Promise; + sendText(to: string, text: string): Promise; + sendImage(to: string, payload: Record): Promise; + sendAudio(to: string, payload: Record): Promise; + sendDocument(to: string, payload: Record): Promise; + sendButtons(to: string, payload: Record): Promise; + sendList(to: string, payload: Record): Promise; + sendCarousel(to: string, payload: Record): Promise; + sendReaction(to: string, emoji: string, targetMessageId: string): Promise; + sendLocation(to: string, payload: Record): Promise; + sendContact(to: string, payload: Record): Promise; + editMessage(to: string, messageId: string, text: string): Promise; + sendRaw(to: string, content: Record, options?: ProviderSendOptions): Promise; + fetchGroups(): Promise; + onEvent(listener: (event: ProviderEventPayload) => void): void; +} diff --git a/packages/berryapi/src/realtime/RealtimeGateway.ts b/packages/berryapi/src/realtime/RealtimeGateway.ts new file mode 100644 index 0000000..2349edf --- /dev/null +++ b/packages/berryapi/src/realtime/RealtimeGateway.ts @@ -0,0 +1,84 @@ +import type { FastifyInstance } from "fastify"; +import { env } from "../config/env.js"; +import type { ProviderEventPayload } from "../providers/whatsapp/WhatsAppProvider.js"; +import { logger } from "../utils/logger.js"; + +type Subscriber = { + socket: { + send: (payload: string) => void; + close: () => void; + readyState: number; + OPEN: number; + on: (event: string, listener: (...args: any[]) => void) => void; + }; + instanceName?: string; +}; + +export class RealtimeGateway { + private readonly subscribers = new Set(); + + register(app: FastifyInstance): void { + app.get( + env.BERRY_WS_PATH, + { websocket: true }, + (socket, request) => { + const url = new URL(request.url, `http://${request.headers.host ?? "localhost"}`); + const apiKey = + url.searchParams.get("apiKey") + ?? request.headers.authorization?.replace(/^Bearer\s+/i, "").trim(); + if (apiKey !== env.API_KEY) { + socket.send( + JSON.stringify({ + success: false, + message: "Invalid API key for realtime gateway.", + error: { code: "UNAUTHORIZED" }, + }), + ); + socket.close(); + return; + } + const instanceName = url.searchParams.get("instanceName") ?? undefined; + const subscriber: Subscriber = { + socket, + instanceName, + }; + this.subscribers.add(subscriber); + + socket.on("close", () => { + this.subscribers.delete(subscriber); + }); + + socket.on("error", (error: unknown) => { + logger.warn({ err: error }, "realtime socket error"); + this.subscribers.delete(subscriber); + }); + + socket.send( + JSON.stringify({ + success: true, + message: "Connected to BerryAPI realtime gateway.", + data: { instanceName }, + }), + ); + }, + ); + } + + broadcast(event: ProviderEventPayload): void { + const payload = JSON.stringify({ + success: true, + message: "Realtime event delivered.", + data: event, + }); + + for (const subscriber of this.subscribers) { + if (subscriber.instanceName && subscriber.instanceName !== event.instanceName) { + continue; + } + + if (subscriber.socket.readyState === subscriber.socket.OPEN) { + subscriber.socket.send(payload); + } + } + } +} diff --git a/packages/berryapi/src/server.ts b/packages/berryapi/src/server.ts new file mode 100644 index 0000000..73a013f --- /dev/null +++ b/packages/berryapi/src/server.ts @@ -0,0 +1,17 @@ +import { buildApp } from "./app.js"; +import { env } from "./config/env.js"; +import { logger } from "./utils/logger.js"; + +const start = async () => { + const app = await buildApp(); + await app.listen({ + host: env.HOST, + port: env.PORT, + }); + logger.info({ host: env.HOST, port: env.PORT }, "BerryAPI server started"); +}; + +start().catch((error) => { + logger.error({ err: error }, "failed to start BerryAPI"); + process.exitCode = 1; +}); diff --git a/packages/berryapi/src/types/index.ts b/packages/berryapi/src/types/index.ts new file mode 100644 index 0000000..b7f8e15 --- /dev/null +++ b/packages/berryapi/src/types/index.ts @@ -0,0 +1,53 @@ +export type BerryApiEventName = + | "connection.update" + | "qrcode.updated" + | "messages.upsert" + | "messages.update" + | "messages.delete" + | "chats.update" + | "contacts.update" + | "groups.update" + | "presence.update" + | "send.message"; + +export type InstanceStatus = + | "created" + | "connecting" + | "connected" + | "disconnected" + | "qr_pending" + | "restarting" + | "logged_out"; + +export interface InstanceSettings { + rejectCall?: boolean; + msgRetryCounterCache?: boolean; + alwaysOnline?: boolean; + readMessages?: boolean; + syncFullHistory?: boolean; + webhookByEvents?: boolean; + events?: BerryApiEventName[]; + privacy?: Record; +} + +export interface WebhookConfig { + enabled: boolean; + url?: string; + events: BerryApiEventName[]; + headers?: Record; +} + +export interface InstanceRecord { + instanceName: string; + provider: "berryprotocol"; + status: InstanceStatus; + connectionState: string; + authMethod: "qr" | "pairing_code" | "link"; + phoneNumber?: string; + qrCode?: string; + pairingCode?: string; + webhook: WebhookConfig; + settings: InstanceSettings; + createdAt: string; + updatedAt: string; +} diff --git a/packages/berryapi/src/utils/http-error.ts b/packages/berryapi/src/utils/http-error.ts new file mode 100644 index 0000000..014ea39 --- /dev/null +++ b/packages/berryapi/src/utils/http-error.ts @@ -0,0 +1,10 @@ +export class HttpError extends Error { + constructor( + public readonly statusCode: number, + message: string, + public readonly details?: unknown, + ) { + super(message); + this.name = "HttpError"; + } +} diff --git a/packages/berryapi/src/utils/logger.ts b/packages/berryapi/src/utils/logger.ts new file mode 100644 index 0000000..211d320 --- /dev/null +++ b/packages/berryapi/src/utils/logger.ts @@ -0,0 +1,7 @@ +import pino from "pino"; +import { env } from "../config/env.js"; + +export const logger = pino({ + name: "berryapi", + level: env.LOG_LEVEL, +}); diff --git a/packages/berryapi/src/utils/response.ts b/packages/berryapi/src/utils/response.ts new file mode 100644 index 0000000..e29b42e --- /dev/null +++ b/packages/berryapi/src/utils/response.ts @@ -0,0 +1,23 @@ +export interface ApiSuccess { + success: true; + message: string; + data: T; +} + +export interface ApiFailure { + success: false; + message: string; + error: unknown; +} + +export const successResponse = (message: string, data: T): ApiSuccess => ({ + success: true, + message, + data, +}); + +export const errorResponse = (message: string, error: unknown): ApiFailure => ({ + success: false, + message, + error, +}); diff --git a/packages/berryapi/src/utils/zod.ts b/packages/berryapi/src/utils/zod.ts new file mode 100644 index 0000000..6ea3087 --- /dev/null +++ b/packages/berryapi/src/utils/zod.ts @@ -0,0 +1,20 @@ +import type { ZodTypeAny } from "zod"; +import { z } from "zod"; +import { zodToJsonSchema } from "zod-to-json-schema"; +import { HttpError } from "./http-error.js"; + +export const validateOrThrow = (schema: T, payload: unknown): z.infer => { + const result = schema.safeParse(payload); + if (!result.success) { + throw new HttpError(400, "Validation failed", result.error.flatten()); + } + + return result.data; +}; + +export const toOpenApiSchema = (schema: ZodTypeAny, name: string) => + zodToJsonSchema(schema as any, { + name, + target: "openApi3", + $refStrategy: "none", + }); diff --git a/packages/berryapi/src/webhook/WebhookDispatcher.ts b/packages/berryapi/src/webhook/WebhookDispatcher.ts new file mode 100644 index 0000000..1ab7494 --- /dev/null +++ b/packages/berryapi/src/webhook/WebhookDispatcher.ts @@ -0,0 +1,35 @@ +import { env } from "../config/env.js"; +import { logger } from "../utils/logger.js"; +import type { ProviderEventPayload } from "../providers/whatsapp/WhatsAppProvider.js"; +import type { WebhookConfig } from "../types/index.js"; + +export class WebhookDispatcher { + async dispatch(config: WebhookConfig, event: ProviderEventPayload): Promise { + if (!config.enabled || !config.url) { + return; + } + + if (config.events.length && !config.events.includes(event.event)) { + return; + } + + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), env.BERRY_WEBHOOK_TIMEOUT_MS); + + try { + await fetch(config.url, { + method: "POST", + headers: { + "content-type": "application/json", + ...(config.headers ?? {}), + }, + body: JSON.stringify(event), + signal: controller.signal, + }); + } catch (error) { + logger.warn({ err: error, url: config.url, event: event.event }, "webhook dispatch failed"); + } finally { + clearTimeout(timeout); + } + } +} diff --git a/packages/berryapi/tsconfig.json b/packages/berryapi/tsconfig.json new file mode 100644 index 0000000..97425ed --- /dev/null +++ b/packages/berryapi/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "composite": true, + "tsBuildInfoFile": ".tsbuildinfo" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../core" + } + ] +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index a724a6e..3694e92 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -9,6 +9,7 @@ import pino, { type Logger } from "pino"; import qrcode from "qrcode-terminal"; import { randomUUID } from "node:crypto"; import { type URL } from "node:url"; +import type { AnyMessageContent } from "@berrysdk/transport"; import { SessionManager, SQLiteSessionStore } from "@berrysdk/auth"; import { type BerryAuthOptions, @@ -111,6 +112,16 @@ export interface BerrySendMessageContent { [key: string]: unknown; } +export interface BerrySendRawOptions { + quoted?: unknown; + mentions?: string[]; + contextInfo?: Record; + ephemeralExpiration?: number; + forwardingScore?: number; + statusJidList?: string[]; + [key: string]: unknown; +} + class MessageQueue { private tail = Promise.resolve(); @@ -372,6 +383,31 @@ export class BerryClient { }); } + async sendRaw( + to: string, + content: Record, + options?: BerrySendRawOptions, + ): Promise { + return this.queue.enqueue(async () => { + const recipientJid = assertWhatsAppJid(to); + const result = await this.socket.sendTransportMessage( + recipientJid, + content as AnyMessageContent, + options as Record | undefined, + ); + + const sent = { + id: result.key.id ?? randomUUID(), + to: recipientJid, + timestamp: new Date().toISOString(), + ack: "sent", + type: "interactive", + } as OutgoingMessage; + this.bus.emit("message.sent", sent); + return sent; + }); + } + private async normalizeOutgoingMessage( to: string, content: BerrySendMessageContent, diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index 4cf446a..473b774 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -256,12 +256,16 @@ export class BerrySocket { this.sock = undefined; } - async sendMessage(to: string, content: MessageContent): Promise { + async sendMessage( + to: string, + content: MessageContent, + options?: Record, + ): Promise { if (!this.sock) { throw new Error("Socket is not connected."); } - const result = await this.sock.sendMessage(to, content as never); + const result = await this.sock.sendMessage(to, content as never, options as never); if (!result) { throw new Error("WhatsApp did not return a message receipt for the send operation."); } @@ -273,8 +277,12 @@ export class BerrySocket { return result; } - async sendTransportMessage(to: string, content: AnyMessageContent): Promise { - return this.sendMessage(assertTransportJid(to), content as MessageContent); + async sendTransportMessage( + to: string, + content: AnyMessageContent, + options?: Record, + ): Promise { + return this.sendMessage(assertTransportJid(to), content as MessageContent, options); } async editMessage(to: string, messageId: string, text: string): Promise { From 0f4f6c3e8fe1d6f4aaf1254d1b162eb526a3f575 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Mon, 18 May 2026 11:19:56 -0300 Subject: [PATCH 22/23] docs: add berryagent rag knowledge base --- data/00-overview.md | 84 ++++++++++ data/01-installation.md | 75 +++++++++ data/02-quickstart.md | 85 ++++++++++ data/03-client-connection.md | 94 +++++++++++ data/04-message-events.md | 97 +++++++++++ data/05-send-text.md | 88 ++++++++++ data/06-send-media.md | 104 ++++++++++++ data/07-send-buttons.md | 90 ++++++++++ data/08-send-lists.md | 78 +++++++++ data/09-send-carousel.md | 89 ++++++++++ data/10-copy-buttons.md | 78 +++++++++ data/11-cta-buttons.md | 75 +++++++++ data/12-native-flows.md | 87 ++++++++++ data/13-ai-agent.md | 139 ++++++++++++++++ data/14-berryagent-architecture.md | 84 ++++++++++ data/15-berrystudio.md | 60 +++++++ data/16-berryapi.md | 60 +++++++ data/17-errors-and-troubleshooting.md | 117 +++++++++++++ data/18-best-practices.md | 76 +++++++++ data/19-security.md | 67 ++++++++ data/20-examples.md | 230 ++++++++++++++++++++++++++ data/21-faq.md | 66 ++++++++ data/22-glossary.md | 57 +++++++ data/_index.md | 92 +++++++++++ examples/ai-agent.js | 40 +++++ examples/basic-bot.js | 24 +++ examples/rag-agent.js | 78 +++++++++ examples/send-buttons.js | 22 +++ examples/send-carousel.js | 32 ++++ examples/send-list.js | 29 ++++ examples/send-text.js | 15 ++ 31 files changed, 2412 insertions(+) create mode 100644 data/00-overview.md create mode 100644 data/01-installation.md create mode 100644 data/02-quickstart.md create mode 100644 data/03-client-connection.md create mode 100644 data/04-message-events.md create mode 100644 data/05-send-text.md create mode 100644 data/06-send-media.md create mode 100644 data/07-send-buttons.md create mode 100644 data/08-send-lists.md create mode 100644 data/09-send-carousel.md create mode 100644 data/10-copy-buttons.md create mode 100644 data/11-cta-buttons.md create mode 100644 data/12-native-flows.md create mode 100644 data/13-ai-agent.md create mode 100644 data/14-berryagent-architecture.md create mode 100644 data/15-berrystudio.md create mode 100644 data/16-berryapi.md create mode 100644 data/17-errors-and-troubleshooting.md create mode 100644 data/18-best-practices.md create mode 100644 data/19-security.md create mode 100644 data/20-examples.md create mode 100644 data/21-faq.md create mode 100644 data/22-glossary.md create mode 100644 data/_index.md create mode 100644 examples/ai-agent.js create mode 100644 examples/basic-bot.js create mode 100644 examples/rag-agent.js create mode 100644 examples/send-buttons.js create mode 100644 examples/send-carousel.js create mode 100644 examples/send-list.js create mode 100644 examples/send-text.js diff --git a/data/00-overview.md b/data/00-overview.md new file mode 100644 index 0000000..258e8ca --- /dev/null +++ b/data/00-overview.md @@ -0,0 +1,84 @@ +# BerryProtocol Overview + +## Purpose + +BerryProtocol is a WhatsApp Web automation SDK and protocol-oriented ecosystem focused on modern messaging, session lifecycle management, and agent-driven commercial automation. + +It is designed for developers who need: + +- multi-session connectivity +- message sending across different message types +- reconnection and QR-based authentication flows +- support for interactive WhatsApp experiences +- AI-assisted or AI-driven business workflows + +## Confirmed + +The current codebase confirms support for: + +- session-based clients through `BerryProtocol` and `BerryClient` +- QR connection +- link connection +- pairing code connection +- text messages +- image messages +- audio messages +- document messages +- lists +- buttons +- carousel messages +- reactions +- location messages +- contacts +- message editing +- presence updates +- group fetch operations +- event-driven client listeners + +## When to use + +Use BerryProtocol when you want to build: + +- support bots +- notification systems +- lead qualification flows +- AI customer service agents +- OTP verification flows with BerryOTP +- event-based integrations with an API layer such as BerryAPI + +## Practical example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "store-main", +}); + +client.on("connection.open", () => { + console.log("BerryProtocol is connected"); +}); + +await client.connectWithQr(); +``` + +## Best practices + +- treat `sessionId` as a durable identity +- persist session-related data in a stable location +- centralize message sending through your own service layer +- keep observability around connection events and send failures +- isolate AI orchestration from transport concerns + +## Common mistakes + +- assuming any string is a valid WhatsApp JID +- mixing transport code with business logic +- rebuilding a new client for every message +- ignoring reconnect and auth lifecycle events + +## Important notes + +- BerryProtocol is best viewed as the messaging runtime layer +- BerryOTP and BerryAPI extend the ecosystem for authentication and external integrations +- BerryAgent should consume this documentation as a foundation for structured answers and retrieval diff --git a/data/01-installation.md b/data/01-installation.md new file mode 100644 index 0000000..71d54fa --- /dev/null +++ b/data/01-installation.md @@ -0,0 +1,75 @@ +# Installation + +## Goal + +This file explains how to install BerryProtocol and prepare a modern Node.js environment for local development and production-style testing. + +## Confirmed + +The repository currently uses: + +- Node.js modern ESM +- npm workspaces in the monorepo +- `berryprotocol` as the public package entrypoint + +## When to use + +Consult this file when you need: + +- first-time setup +- local workspace bootstrapping +- npm-based installation guidance +- environment compatibility notes + +## Install from npm + +```bash +npm install berryprotocol +``` + +## Install in the monorepo + +```bash +npm install +``` + +## Basic environment expectations + +- Node.js 20 or newer is strongly recommended +- ESM imports should be used +- a persistent filesystem path should be available for auth/session storage + +## Practical example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "install-check", +}); + +console.log(typeof client.connectWithQr === "function"); +``` + +## Best practices + +- use exact version pinning for production until APIs stabilize +- commit a `.env.example`, not a real `.env` +- define a dedicated session storage folder for each environment + +## Common mistakes + +- using CommonJS snippets in an ESM project without adaptation +- deleting auth folders accidentally between runs +- confusing the public package repo with the private/internal monorepo source + +## Important notes + +### Implementation suggestion + +If BerryAgent is deployed in a separate app, define these environment variables: + +- `BERRY_SESSION_ID` +- `BERRY_AUTH_FOLDER` +- `BERRY_DATABASE_PATH` +- `OPENAI_API_KEY` or equivalent for AI integration diff --git a/data/02-quickstart.md b/data/02-quickstart.md new file mode 100644 index 0000000..2ce907d --- /dev/null +++ b/data/02-quickstart.md @@ -0,0 +1,85 @@ +# Quick Start + +## Goal + +This file provides a fast path from installation to a working connection and a first message send. + +## Confirmed + +BerryProtocol currently exposes: + +- `connectWithQr()` +- `connectWithLink()` +- `connectWithPairingCode()` +- `sendText()` +- event listeners through `.on(...)` + +## When to use + +Use this file when you need the minimum working setup for: + +- local testing +- demos +- first agent connection +- onboarding new developers + +## Minimal connection flow + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "quickstart-session", +}); + +client.on("auth.qr", ({ value }) => { + console.log("Scan this QR code:", value); +}); + +client.on("connection.open", () => { + console.log("Connected"); +}); + +await client.connectWithQr(); +``` + +## Minimal send flow + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "quickstart-send", +}); + +await client.connectWithQr(); +await client.sendText("5511999999999@s.whatsapp.net", "Hello from BerryProtocol"); +``` + +## Best practices + +- keep quickstart examples isolated from production orchestration +- verify the target JID format before sending +- log both `auth.qr` and `connection.open` during onboarding + +## Common mistakes + +- calling `sendText` before the connection is established +- forgetting to persist the same `sessionId` +- assuming the QR code remains valid indefinitely + +## Important notes + +### Confirmed + +Incoming event names observed in the codebase include: + +- `auth.qr` +- `connection.open` +- `connection.close` +- `message.received` +- `message.ack` + +### Example conceptual + +If you want a fast local agent bootstrap, BerryAgent can wrap the client in a service object and expose a `start()` method that internally calls `connectWithQr()`. diff --git a/data/03-client-connection.md b/data/03-client-connection.md new file mode 100644 index 0000000..0ed1258 --- /dev/null +++ b/data/03-client-connection.md @@ -0,0 +1,94 @@ +# Client Connection and Session Lifecycle + +## Goal + +This file explains how BerryProtocol manages sessions, authentication entrypoints, reconnect behavior, and lifecycle events. + +## Confirmed + +The current BerryProtocol client supports: + +- `connect(auth?)` +- `connectWithLink()` +- `connectWithQr()` +- `connectWithPairingCode(phoneNumber, customPairingCode?)` +- `disconnect()` +- `reconnect()` +- `logout()` +- `getQrCode()` + +It also stores session/auth snapshots through the auth/store layers. + +## When to use + +Use this file when working on: + +- connection bootstrapping +- QR-based onboarding +- pairing code flows +- reconnect design +- multi-session orchestration + +## QR connection example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "qr-session", + printQrInTerminal: true, +}); + +client.on("auth.qr", ({ value }) => { + console.log("QR updated", value); +}); + +await client.connectWithQr(); +``` + +## Pairing code example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "pairing-session", +}); + +await client.connectWithPairingCode("5511999999999"); +``` + +## Best practices + +- map one business identity to one `sessionId` +- never destroy auth state on transient transport errors +- keep explicit logging for auth, reconnect, and logout actions +- implement a session supervisor if you run multiple clients + +## Common mistakes + +- calling `logout()` when the goal is only a soft reconnect +- reusing the same `sessionId` in concurrent processes +- storing auth state in a temporary filesystem path + +## Important notes + +### Confirmed + +BerryProtocol emits auth-related events such as: + +- `auth.link` +- `auth.qr` +- `auth.pairing_code` +- `auth.success` +- `auth.error` + +### Implementation suggestion + +For BerryAgent, keep a `SessionRegistry` that owns: + +- active clients +- connection state +- last QR value +- reconnection metrics +- last protocol error diff --git a/data/04-message-events.md b/data/04-message-events.md new file mode 100644 index 0000000..f57488d --- /dev/null +++ b/data/04-message-events.md @@ -0,0 +1,97 @@ +# Message Events + +## Goal + +This file documents the event model that BerryProtocol exposes for real-time message-driven applications. + +## Confirmed + +The event contracts in the current codebase include: + +- `message.received` +- `message.sent` +- `message.ack` +- `presence.update` +- `chats.update` +- `sync.history` +- `sync.contacts` +- `sync.groups` +- `sync.messages` +- `protocol.error` + +## When to use + +Use this file when you are building: + +- event processors +- inbox sync flows +- AI agents reacting to inbound messages +- observability or audit pipelines + +## Example: inbound listener + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "events-session", +}); + +client.on("message.received", (message) => { + console.log("Incoming message", { + type: message.type, + from: message.from, + chatId: message.chatId, + }); +}); + +await client.connectWithQr(); +``` + +## Example: acknowledgment listener + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "ack-session", +}); + +client.on("message.ack", (ack) => { + console.log("Ack update", ack); +}); + +await client.connectWithQr(); +``` + +## Best practices + +- normalize inbound events before passing them to business logic +- keep raw transport concerns out of your domain services +- persist message IDs if you need edits, reactions, or audits later +- observe both sent events and ack events + +## Common mistakes + +- assuming all inbound messages are text +- ignoring the difference between sender and chat identifiers +- treating `message.sent` as proof of delivery + +## Important notes + +### Confirmed + +The message contracts include message metadata such as: + +- `id` +- `to` +- `from` +- `chatId` +- `remoteJid` +- `timestamp` +- `ack` +- `type` + +### Example conceptual + +BerryAgent can subscribe to `message.received`, convert inbound payloads into embeddings or structured tasks, and then decide whether to answer directly or route to a flow engine. diff --git a/data/05-send-text.md b/data/05-send-text.md new file mode 100644 index 0000000..684e8d7 --- /dev/null +++ b/data/05-send-text.md @@ -0,0 +1,88 @@ +# Sending Text Messages + +## Goal + +This file explains how to send plain text and text-centric payloads in BerryProtocol. + +## Confirmed + +The current public client supports: + +- `sendText(to, text)` +- `sendMessage(to, { text })` +- `editMessage(to, messageId, text)` + +## When to use + +Use this file when: + +- sending plain responses +- sending confirmations, alerts, or prompts +- implementing AI assistant replies +- editing a previous text message + +## Simple text example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-text-session", +}); + +await client.connectWithQr(); +await client.sendText("5511999999999@s.whatsapp.net", "Your order has been confirmed."); +``` + +## Using sendMessage with text + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-message-text", +}); + +await client.connectWithQr(); +await client.sendMessage("5511999999999@s.whatsapp.net", { + text: "This was sent through sendMessage", +}); +``` + +## Editing a message + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "edit-message-session", +}); + +await client.connectWithQr(); + +const sent = await client.sendText("5511999999999@s.whatsapp.net", "Pending..."); +await client.editMessage("5511999999999@s.whatsapp.net", sent.id, "Done."); +``` + +## Best practices + +- use `sendText` for the simplest case +- store returned message IDs if future edits are possible +- validate JIDs before sending +- standardize message tone through an application layer + +## Common mistakes + +- attempting to edit messages without storing the original message ID +- mixing user-facing text generation with transport logic +- assuming every send succeeds immediately + +## Important notes + +### Confirmed + +`sendText` delegates to the general send path but is the clearest API for plain outbound text. + +### Example conceptual + +If you need advanced quoting or forwarding metadata on text messages, use a wrapper service and mark the logic as transport-specific until a stable high-level public method exists. diff --git a/data/06-send-media.md b/data/06-send-media.md new file mode 100644 index 0000000..69ad799 --- /dev/null +++ b/data/06-send-media.md @@ -0,0 +1,104 @@ +# Sending Media + +## Goal + +This file explains how BerryProtocol sends image, audio, and document payloads, and how media loading is normalized. + +## Confirmed + +The current public client supports: + +- `sendImage(to, mediaPayload)` +- `sendAudio(to, mediaPayload)` +- `sendDocument(to, mediaPayload)` + +Media payloads can include: + +- `url` +- `path` +- `buffer` +- `fileName` +- `mimetype` +- `caption` + +## When to use + +Use this file when sending: + +- product images +- voice/audio assets +- invoices or PDFs +- onboarding documents + +## Send image example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-image-session", +}); + +await client.connectWithQr(); +await client.sendImage("5511999999999@s.whatsapp.net", { + url: "https://example.com/catalog/pizza.jpg", + caption: "Today special", +}); +``` + +## Send audio example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-audio-session", +}); + +await client.connectWithQr(); +await client.sendAudio("5511999999999@s.whatsapp.net", { + path: "./media/instructions.ogg", + mimetype: "audio/ogg", +}); +``` + +## Send document example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-document-session", +}); + +await client.connectWithQr(); +await client.sendDocument("5511999999999@s.whatsapp.net", { + path: "./media/invoice.pdf", + fileName: "invoice.pdf", + mimetype: "application/pdf", + caption: "Invoice attached", +}); +``` + +## Best practices + +- always provide `mimetype` when known +- set `fileName` for documents +- isolate remote media downloads from message orchestration +- prefer reusable media helper services in production + +## Common mistakes + +- sending documents without a stable MIME type +- assuming remote URLs never fail +- storing large buffers unnecessarily + +## Important notes + +### Confirmed + +BerryProtocol uses a media manager internally to normalize `url`, `path`, and `buffer` inputs before transport send. + +### Example conceptual + +If you need video, GIF, or view-once wrappers and the exact high-level method is not yet stabilized, implement them behind your own message adapter and document them as transport extensions. diff --git a/data/07-send-buttons.md b/data/07-send-buttons.md new file mode 100644 index 0000000..02bb1ad --- /dev/null +++ b/data/07-send-buttons.md @@ -0,0 +1,90 @@ +# Sending Buttons + +## Goal + +This file explains how to send interactive button-based messages in BerryProtocol. + +## Confirmed + +The current client supports: + +- `sendButtons(to, payload)` +- `sendLegacyButtons(to, payload)` +- `sendMessage(to, { buttonsMessage: payload })` + +## When to use + +Use buttons when: + +- you want a short menu +- you want explicit reply choices +- you need stronger UX than free-text input + +## Reply buttons example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "buttons-session", +}); + +await client.connectWithQr(); + +await client.sendButtons("5511999999999@s.whatsapp.net", { + text: "Choose an option", + footer: "BerryProtocol demo", + buttons: [ + { id: "order_status", title: "Order status", kind: "reply" }, + { id: "speak_agent", title: "Human agent", kind: "reply" }, + ], +}); +``` + +## Legacy buttons example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "legacy-buttons-session", +}); + +await client.connectWithQr(); + +await client.sendLegacyButtons("5511999999999@s.whatsapp.net", { + text: "Choose an option", + footer: "Legacy flow", + buttons: [ + { id: "opt1", title: "Option 1" }, + { id: "opt2", title: "Option 2" }, + ], +}); +``` + +## Best practices + +- keep button labels short +- prefer stable IDs over labels for backend routing +- log click IDs rather than display text +- do not overload a single message with too many choices + +## Common mistakes + +- using display text as the only business identifier +- creating ambiguous button titles +- forgetting to handle incoming `buttonId` or `selectedButtonId` + +## Important notes + +### Confirmed + +Incoming message contracts expose fields that may contain button interaction identifiers, such as: + +- `buttonId` +- `selectedButtonId` +- `rawButtonParamsJson` + +### Example conceptual + +If you need more advanced button flows like mixed CTA and copy actions in a single wrapper, document them as conceptual until the exact stable public abstraction is finalized. diff --git a/data/08-send-lists.md b/data/08-send-lists.md new file mode 100644 index 0000000..7c812dc --- /dev/null +++ b/data/08-send-lists.md @@ -0,0 +1,78 @@ +# Sending Lists + +## Goal + +This file explains how to send WhatsApp list messages with sections and rows. + +## Confirmed + +The current client supports: + +- `sendList(to, payload)` +- `sendMessage(to, { list: payload })` +- `sendMessage(to, { listMessage: payload })` + +## When to use + +Use list messages when: + +- you have more than a few choices +- you want grouped options +- the user needs to pick one route in a structured menu + +## Practical example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "list-session", +}); + +await client.connectWithQr(); + +await client.sendList("5511999999999@s.whatsapp.net", { + title: "Main menu", + text: "Choose one option below", + footer: "BerryProtocol list demo", + buttonText: "Open options", + sections: [ + { + title: "Orders", + rows: [ + { id: "track_order", title: "Track my order" }, + { id: "cancel_order", title: "Cancel order" }, + ], + }, + { + title: "Support", + rows: [ + { id: "billing_help", title: "Billing help" }, + ], + }, + ], +}); +``` + +## Best practices + +- group rows into meaningful sections +- keep row titles short and distinct +- treat row IDs as your canonical routing keys +- keep the top-level text focused and instructional + +## Common mistakes + +- adding too many rows in a single section +- reusing the same row ID across unrelated flows +- forgetting to handle the resulting selection event in your application logic + +## Important notes + +### Confirmed + +Lists are a first-class high-level message path in BerryProtocol. + +### Example conceptual + +If your flow engine needs dynamic lists generated from business state, build the sections just before sending and keep selection IDs stable even if labels change. diff --git a/data/09-send-carousel.md b/data/09-send-carousel.md new file mode 100644 index 0000000..e3e5232 --- /dev/null +++ b/data/09-send-carousel.md @@ -0,0 +1,89 @@ +# Sending Carousel Messages + +## Goal + +This file explains how to send modern WhatsApp carousel messages in BerryProtocol. + +## Confirmed + +The current client supports: + +- `sendCarousel(to, payload)` +- `sendMessage(to, { text, footer, cards, carouselCardType, ai })` + +The current event contracts also include carousel payload types such as: + +- `CarouselMessagePayload` +- `CarouselCard` +- `CarouselButton` +- `CarouselCardType` + +## When to use + +Use carousels when: + +- you need multiple product or offer cards +- you want richer browsing inside WhatsApp +- each card needs its own image/video and action + +## Practical example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "carousel-session", +}); + +await client.connectWithQr(); + +await client.sendCarousel("5511999999999@s.whatsapp.net", { + text: "Check out our featured products", + footer: "Swipe to see more", + carouselCardType: "image", + cards: [ + { + title: "Calabresa Pizza", + body: "Large size with premium ingredients", + footer: "R$ 39,90", + image: { + url: "https://example.com/media/calabresa.jpg", + }, + buttons: [ + { + id: "buy_calabresa", + title: "Choose", + kind: "quick_reply", + }, + ], + }, + ], +}); +``` + +## Best practices + +- keep cards visually consistent +- do not mix image and video unless the business case is strong +- define stable button IDs per card +- keep each card focused on one decision + +## Common mistakes + +- building cards without image or video +- using too many cards for a simple task +- turning a carousel into a dense text wall + +## Important notes + +### Confirmed + +BerryProtocol validates important carousel constraints internally, including maximum cards and media requirements. + +### Confirmed + +AI label can be attached at the message/container level of a carousel. + +### Example conceptual + +Per-card AI label rendering should be treated as unsupported unless a future protocol-confirmed implementation exists. diff --git a/data/10-copy-buttons.md b/data/10-copy-buttons.md new file mode 100644 index 0000000..e4e9166 --- /dev/null +++ b/data/10-copy-buttons.md @@ -0,0 +1,78 @@ +# Copy Buttons + +## Goal + +This file documents copy-code style buttons and how they fit into business flows such as OTP and coupon delivery. + +## Confirmed + +The event contracts currently include button kinds such as: + +- `copy_code` +- `cta_url` +- `quick_reply` +- `reply` + +BerryOTP also uses copy-oriented interaction patterns in its current implementation. + +## When to use + +Use copy buttons when: + +- sending one-time codes +- sharing coupons +- reducing typing errors for end users + +## Example conceptual + +The exact public high-level method for standalone copy-button composition may evolve. +Until the public API is finalized, treat this example as conceptual. + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "copy-button-session", +}); + +await client.connectWithQr(); + +await client.sendButtons("5511999999999@s.whatsapp.net", { + text: "Your verification code is ready", + footer: "Tap to copy", + buttons: [ + { + id: "copy_login_code", + title: "Copy code", + kind: "copy_code", + code: "483921", + }, + ], +}); +``` + +## Best practices + +- use copy buttons for high-friction inputs +- log the flow state separately from the button press itself +- pair copy buttons with expiration guidance when the value is temporary + +## Common mistakes + +- using copy buttons for actions that should be replies +- exposing long-lived sensitive values without expiration or revocation logic + +## Important notes + +### Confirmed + +BerryOTP is currently the best confirmed reference for copy-code style flows in the BerrySDK ecosystem. + +### Implementation suggestion + +If BerryAgent sends verification or secure action codes, it should also store: + +- issuance timestamp +- expiration timestamp +- code purpose +- denial/cancel status diff --git a/data/11-cta-buttons.md b/data/11-cta-buttons.md new file mode 100644 index 0000000..cd0614e --- /dev/null +++ b/data/11-cta-buttons.md @@ -0,0 +1,75 @@ +# CTA Buttons + +## Goal + +This file explains CTA-oriented button patterns, especially URL-driven actions used in business automation. + +## Confirmed + +The event contracts currently define button kinds that include: + +- `cta_url` +- `copy_code` +- `quick_reply` +- `reply` + +## When to use + +Use CTA buttons when: + +- sending payment links +- redirecting to order tracking +- opening forms or support pages +- escalating to self-service portals + +## Example conceptual + +This is a conceptual example that shows a likely button composition pattern. + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "cta-button-session", +}); + +await client.connectWithQr(); + +await client.sendButtons("5511999999999@s.whatsapp.net", { + text: "Open your billing portal", + footer: "BerryProtocol CTA example", + buttons: [ + { + id: "open_billing", + title: "Open portal", + kind: "cta_url", + url: "https://example.com/billing", + }, + ], +}); +``` + +## Best practices + +- prefer short trusted domains +- clearly describe what happens after click +- keep CTAs aligned with the current conversation stage + +## Common mistakes + +- mixing too many different intents in one CTA message +- not validating destination URLs before sending +- using CTA where a simple reply action would be better + +## Important notes + +### Suggestion of implementation + +For agent-driven systems, represent CTA buttons with: + +- action type +- destination URL +- label +- analytics metadata + +This makes downstream reporting easier. diff --git a/data/12-native-flows.md b/data/12-native-flows.md new file mode 100644 index 0000000..8c51665 --- /dev/null +++ b/data/12-native-flows.md @@ -0,0 +1,87 @@ +# Native Flows + +## Goal + +This file explains WhatsApp-native interaction patterns and how BerryProtocol models structured interactive payloads. + +## Confirmed + +The current contracts expose: + +- `InteractivePayload` +- `InteractiveHeader` +- `InteractiveBody` +- `InteractiveFooter` +- `InteractiveNativeButton` +- `InteractiveNativeFlowPayload` + +The client also exposes: + +- `sendMessage(to, { interactiveMessage: payload })` + +## When to use + +Use native-flow style interactions when: + +- you need richer interactive experiences +- the default button/list abstractions are too limited +- your application needs structured parameters for a flow renderer + +## Practical example + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "native-flow-session", +}); + +await client.connectWithQr(); + +await client.sendMessage("5511999999999@s.whatsapp.net", { + interactiveMessage: { + header: { + title: "Berry native flow", + }, + body: { + text: "Choose a flow action", + }, + footer: { + text: "Interactive demo", + }, + nativeFlowMessage: { + buttons: [ + { + name: "quick_reply", + buttonParamsJson: JSON.stringify({ + display_text: "Continue", + id: "continue_flow", + }), + }, + ], + }, + }, +}); +``` + +## Best practices + +- keep native-flow payload generation centralized +- validate JSON payloads before sending +- document each `name` and parameter schema internally + +## Common mistakes + +- mixing multiple incompatible button payload shapes +- building `buttonParamsJson` manually without validation +- using native flows where a simple list is enough + +## Important notes + +### Confirmed + +Native-flow payload support is present at the type and client API level. + +### Example conceptual + +If BerryAgent needs a higher-level builder for native flows, create a domain-specific abstraction above `InteractivePayload` rather than embedding raw JSON across the codebase. diff --git a/data/13-ai-agent.md b/data/13-ai-agent.md new file mode 100644 index 0000000..e8adbb7 --- /dev/null +++ b/data/13-ai-agent.md @@ -0,0 +1,139 @@ +# AI Agent Integration + +## Goal + +This file explains how BerryProtocol can be used as the transport layer for AI agents, including OpenAI-compatible APIs and Groq-compatible APIs. + +## Confirmed + +BerryProtocol currently supports: + +- inbound events through `message.received` +- text sending +- interactive sending +- AI-labeled message support at the message level + +## When to use + +Use this file when building: + +- autonomous chat agents +- assisted support bots +- AI-powered product recommendation flows +- RAG-enabled WhatsApp assistants + +## Example with OpenAI-compatible API + +```js +import BerryProtocol from "berryprotocol"; +import OpenAI from "openai"; + +const client = new BerryProtocol({ + sessionId: "berryagent-openai", +}); + +const ai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const completion = await ai.chat.completions.create({ + model: "gpt-4.1-mini", + messages: [ + { + role: "system", + content: "You are BerryAgent, a helpful WhatsApp commerce assistant.", + }, + { + role: "user", + content: message.text, + }, + ], + }); + + const reply = completion.choices[0]?.message?.content ?? "I could not generate a reply."; + + await client.sendMessage(message.chatId ?? message.from, { + text: reply, + ai: true, + }); +}); + +await client.connectWithQr(); +``` + +## Example with Groq-compatible API + +```js +import BerryProtocol from "berryprotocol"; +import OpenAI from "openai"; + +const client = new BerryProtocol({ + sessionId: "berryagent-groq", +}); + +const ai = new OpenAI({ + apiKey: process.env.GROQ_API_KEY, + baseURL: "https://api.groq.com/openai/v1", +}); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const completion = await ai.chat.completions.create({ + model: "llama-3.3-70b-versatile", + messages: [ + { + role: "system", + content: "You are BerryAgent. Keep answers concise and helpful.", + }, + { + role: "user", + content: message.text, + }, + ], + }); + + const reply = completion.choices[0]?.message?.content ?? "No answer available."; + + await client.sendText(message.chatId ?? message.from, reply); +}); + +await client.connectWithQr(); +``` + +## Best practices + +- separate AI orchestration from transport +- add guardrails before calling the model +- keep a retriever layer independent from the LLM client +- log model latency and transport latency separately + +## Common mistakes + +- sending raw prompts directly from transport handlers without normalization +- letting the model choose transport semantics without validation +- mixing RAG retrieval code with WhatsApp send code in one file + +## Important notes + +### Confirmed + +AI label is supported at the message level and can also be applied to supported carousel messages. + +### Suggestion of implementation + +BerryAgent should use a layered design: + +- retriever +- prompt composer +- model client +- policy/guardrails +- action executor +- BerryProtocol transport adapter diff --git a/data/14-berryagent-architecture.md b/data/14-berryagent-architecture.md new file mode 100644 index 0000000..d8e8b72 --- /dev/null +++ b/data/14-berryagent-architecture.md @@ -0,0 +1,84 @@ +# BerryAgent Architecture + +## Goal + +This file proposes a production-ready architecture for BerryAgent as the official AI agent built on top of BerryProtocol. + +## When to use + +Use this file when designing: + +- local RAG execution +- multi-session AI orchestration +- tool calling around WhatsApp operations +- support and sales automation + +## Confirmed + +Confirmed BerryProtocol building blocks that BerryAgent can rely on: + +- session-scoped clients +- incoming message events +- outbound text and interactive messaging +- session reconnection and auth flows + +## Implementation suggestion + +Recommended architecture: + +- `SessionRegistry` + - creates and owns BerryProtocol clients +- `InboundNormalizer` + - converts BerryProtocol events into agent-friendly tasks +- `Retriever` + - reads markdown knowledge from `/data` +- `PromptBuilder` + - assembles system, context, and user content +- `LLMAdapter` + - wraps OpenAI-compatible providers +- `PolicyEngine` + - enforces tool and response constraints +- `ActionExecutor` + - decides whether to reply with text, list, buttons, or carousel +- `MemoryStore` + - stores conversation summaries and recent turns + +## Example conceptual + +```js +class BerryAgentRuntime { + constructor({ sessionRegistry, retriever, llm, actionExecutor }) { + this.sessionRegistry = sessionRegistry; + this.retriever = retriever; + this.llm = llm; + this.actionExecutor = actionExecutor; + } + + async handleInboundMessage(event) { + const context = await this.retriever.search(event.text); + const answer = await this.llm.respond({ + userInput: event.text, + context, + }); + + await this.actionExecutor.sendText(event.chatId, answer); + } +} +``` + +## Best practices + +- use retrieval before generation +- maintain explicit conversation state per chat +- do not expose raw model output directly when business actions are involved +- gate high-risk actions behind confirmation steps + +## Common mistakes + +- treating the transport client as the whole agent +- overloading a single prompt with unrelated documentation +- skipping observability for retrieval quality + +## Important notes + +The `/data` directory requested for BerryAgent should be treated as first-class retrieval content, not as generic notes. diff --git a/data/15-berrystudio.md b/data/15-berrystudio.md new file mode 100644 index 0000000..c7fd6dd --- /dev/null +++ b/data/15-berrystudio.md @@ -0,0 +1,60 @@ +# BerryStudio + +## Goal + +This file documents the role of BerryStudio inside the ecosystem as a management, orchestration, or product-layer surface above BerryProtocol. + +## When to use + +Consult this file when: + +- describing the ecosystem to users +- deciding where flow-building logic belongs +- separating SDK concerns from UI concerns + +## Confirmed + +The BerryProtocol codebase and prior project context indicate BerryStudio as a product/application layer rather than the transport SDK itself. + +## Explanation + +BerryStudio should be understood as: + +- an operator-facing application +- a workflow, session, or automation management surface +- a place where users configure behavior instead of implementing low-level protocol code + +BerryProtocol remains the runtime SDK beneath that layer. + +## Example conceptual + +BerryStudio might manage: + +- sessions +- message templates +- automation flows +- AI assistants +- dashboards + +while BerryProtocol is responsible for: + +- connectivity +- event handling +- transport-safe message delivery + +## Best practices + +- keep BerryStudio business logic separate from core transport abstractions +- use a service layer when BerryStudio calls BerryProtocol +- store operator settings and runtime state independently + +## Common mistakes + +- putting UI concerns inside the protocol layer +- assuming BerryStudio and BerryProtocol should share the same deployment topology + +## Important notes + +### Suggestion of implementation + +BerryAgent may use BerryStudio as an orchestration and operations surface, but BerryProtocol should remain the runtime source of truth for WhatsApp session behavior. diff --git a/data/16-berryapi.md b/data/16-berryapi.md new file mode 100644 index 0000000..7cd2da2 --- /dev/null +++ b/data/16-berryapi.md @@ -0,0 +1,60 @@ +# BerryAPI + +## Goal + +This file explains the purpose of BerryAPI as the REST/API surface above BerryProtocol. + +## When to use + +Use this file when: + +- exposing BerryProtocol capabilities externally +- integrating with n8n, Typebot, or backend systems +- designing webhooks and automation endpoints + +## Confirmed + +The repository includes a BerryAPI package intended to provide an API-oriented layer around BerryProtocol. + +## Explanation + +BerryAPI should be treated as: + +- the external integration surface +- the place for REST endpoints, webhooks, and event streaming +- the bridge between product UIs and transport runtimes + +BerryProtocol should be treated as: + +- the SDK runtime +- the session and message transport engine +- the source of real-time message behavior + +## Example conceptual + +Possible layering: + +- BerryProtocol + - handles session, auth, events, and sends +- BerryAPI + - exposes instance management, webhooks, and message endpoints +- BerryAgent + - consumes both the SDK and the knowledge base for intelligent behavior + +## Best practices + +- keep BerryAPI stateless where possible +- centralize session ownership in a manager +- forward important runtime events to webhooks or WebSocket clients + +## Common mistakes + +- treating API requests as the only source of truth for runtime state +- not reconciling webhook delivery failures + +## Important notes + +BerryAgent can run: + +- behind BerryAPI as an API-powered assistant +- or directly against BerryProtocol for local/private deployments diff --git a/data/17-errors-and-troubleshooting.md b/data/17-errors-and-troubleshooting.md new file mode 100644 index 0000000..d7eac70 --- /dev/null +++ b/data/17-errors-and-troubleshooting.md @@ -0,0 +1,117 @@ +# Errors and Troubleshooting + +## Goal + +This file documents common operational problems and how to debug them in BerryProtocol-based systems. + +## When to use + +Use this file when dealing with: + +- QR issues +- connection failures +- invalid JIDs +- message send failures +- session conflicts +- AI or RAG runtime confusion around transport behavior + +## Common error categories + +### Invalid JID + +Symptom: + +- send calls fail before transport delivery + +Cause: + +- the target identifier is not a valid WhatsApp JID + +Fix: + +- use full JIDs such as `5511999999999@s.whatsapp.net` +- validate before dispatch + +### Connection not open + +Symptom: + +- send operations fail right after startup + +Cause: + +- the connection lifecycle is not complete yet + +Fix: + +- wait for `connection.open` +- queue outbound tasks until ready + +### Session conflict + +Symptom: + +- repeated disconnects +- logs mentioning replacement or conflict + +Cause: + +- the same session is being used by multiple runtime processes + +Fix: + +- guarantee single ownership per `sessionId` + +### Missing QR behavior + +Symptom: + +- no visible QR onboarding flow + +Possible causes: + +- wrong auth method +- QR not being handled in listeners +- session already registered + +## Practical example: safe send wrapper + +```js +export function assertJid(jid) { + if (!jid || !jid.includes("@")) { + throw new Error("Invalid WhatsApp JID"); + } + + return jid; +} +``` + +## Best practices + +- log auth and connection events +- keep structured logs for transport and AI separately +- persist session state durably +- test with a dedicated sandbox session before production rollout + +## Common mistakes + +- retrying infinitely without classification +- hiding low-level errors from operator logs +- mixing transport failures with model failures + +## Important notes + +### Confirmed + +BerryProtocol exposes protocol and connection-related events that should be monitored in production. + +### Suggestion of implementation + +BerryAgent should classify errors into: + +- connection +- authentication +- validation +- transport send +- AI provider +- retrieval diff --git a/data/18-best-practices.md b/data/18-best-practices.md new file mode 100644 index 0000000..c0f3d03 --- /dev/null +++ b/data/18-best-practices.md @@ -0,0 +1,76 @@ +# Best Practices + +## Goal + +This file summarizes practical recommendations for building reliable systems on top of BerryProtocol. + +## When to use + +Consult this file when designing: + +- production bots +- AI-powered assistants +- multi-session operators +- integration layers + +## Recommended practices + +### Session ownership + +- use one stable `sessionId` per logical runtime session +- avoid concurrent ownership +- persist auth state outside temporary folders + +### Messaging architecture + +- wrap transport calls in an application service +- store outbound message IDs +- separate transport payload generation from business decision logic + +### AI architecture + +- normalize inbound messages before prompting +- use retrieval before generation +- define action policies for high-risk operations +- keep prompts and transport concerns separate + +### Observability + +- log connection changes +- track send success and ack updates +- measure AI latency separately from WhatsApp transport latency + +### Security + +- sanitize external inputs before using them in prompts +- protect API keys and session storage +- avoid exposing raw internal errors to end users + +## Practical example + +```js +export class OutboundMessagingService { + constructor(client) { + this.client = client; + } + + async sendOrderConfirmation(jid, orderNumber) { + return this.client.sendText( + jid, + `Your order ${orderNumber} has been confirmed.`, + ); + } +} +``` + +## Common mistakes + +- leaking transport details into UI code +- directly embedding huge prompts in event listeners +- forgetting to debounce or rate-limit AI-heavy workflows + +## Important notes + +### Suggestion of implementation + +BerryAgent should treat this file as policy guidance and not only as syntax guidance. diff --git a/data/19-security.md b/data/19-security.md new file mode 100644 index 0000000..f437661 --- /dev/null +++ b/data/19-security.md @@ -0,0 +1,67 @@ +# Security + +## Goal + +This file documents security considerations for BerryProtocol, BerryAgent, and adjacent ecosystem components. + +## When to use + +Use this file when: + +- handling auth folders +- storing session state +- managing AI provider keys +- exposing BerryAPI to external systems + +## Main risks + +### Session theft + +If auth/session files are leaked, an attacker may impersonate the connected WhatsApp session. + +### Prompt injection + +If inbound user messages are passed directly into an AI model without policy filtering, an attacker can manipulate the agent. + +### Sensitive data leakage + +Logs, prompts, or retrieval corpora may unintentionally expose: + +- phone numbers +- order details +- support transcripts +- API keys + +## Best practices + +- protect `.berry-sessions` or equivalent auth folders +- use least-privilege access for runtime processes +- redact sensitive data from logs where possible +- isolate AI keys in environment variables +- validate outbound URLs for CTA flows +- audit who can trigger admin-grade actions + +## Example conceptual + +```js +function redactPhone(value) { + return value.replace(/\d(?=\d{4})/g, "*"); +} +``` + +## Common mistakes + +- storing secrets in source control +- using production sessions for unsafe experiments +- giving an autonomous agent permission to perform sensitive actions without confirmation + +## Important notes + +### Suggestion of implementation + +BerryAgent should include: + +- tool allowlists +- action confirmation policies +- retrieval source boundaries +- audit logs for sensitive operations diff --git a/data/20-examples.md b/data/20-examples.md new file mode 100644 index 0000000..4e895fa --- /dev/null +++ b/data/20-examples.md @@ -0,0 +1,230 @@ +# Complete Examples + +## Goal + +This file contains complete examples for common BerryProtocol and BerryAgent scenarios. + +## Example 1: Basic bot + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "basic-bot", +}); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const text = message.text.trim().toLowerCase(); + + if (text === "ping") { + await client.sendText(message.chatId ?? message.from, "pong"); + } +}); + +await client.connectWithQr(); +``` + +## Example 2: Button menu + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "button-menu", +}); + +await client.connectWithQr(); + +await client.sendButtons("5511999999999@s.whatsapp.net", { + text: "Choose a path", + footer: "BerryProtocol example", + buttons: [ + { id: "sales", title: "Sales", kind: "reply" }, + { id: "support", title: "Support", kind: "reply" }, + ], +}); +``` + +## Example 3: List menu + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "list-menu", +}); + +await client.connectWithQr(); + +await client.sendList("5511999999999@s.whatsapp.net", { + title: "Departments", + text: "Select where you want to go", + footer: "BerryProtocol example", + buttonText: "Open list", + sections: [ + { + title: "General", + rows: [ + { id: "faq", title: "FAQ" }, + { id: "billing", title: "Billing" }, + ], + }, + ], +}); +``` + +## Example 4: Carousel + +```js +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "carousel-example", +}); + +await client.connectWithQr(); + +await client.sendCarousel("5511999999999@s.whatsapp.net", { + text: "Featured items", + footer: "Swipe through the cards", + carouselCardType: "image", + cards: [ + { + title: "Product A", + body: "A short description", + footer: "R$ 49,90", + image: { url: "https://example.com/product-a.jpg" }, + buttons: [ + { id: "buy_a", title: "Buy now", kind: "quick_reply" }, + ], + }, + ], +}); +``` + +## Example 5: AI reply + +```js +import BerryProtocol from "berryprotocol"; +import OpenAI from "openai"; + +const client = new BerryProtocol({ + sessionId: "ai-example", +}); + +const ai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const completion = await ai.chat.completions.create({ + model: "gpt-4.1-mini", + messages: [ + { role: "system", content: "You are BerryAgent." }, + { role: "user", content: message.text }, + ], + }); + + const answer = completion.choices[0]?.message?.content ?? "No answer available."; + + await client.sendMessage(message.chatId ?? message.from, { + text: answer, + ai: true, + }); +}); + +await client.connectWithQr(); +``` + +## Example 6: AI + retrieval + +```js +import fs from "node:fs/promises"; +import path from "node:path"; +import BerryProtocol from "berryprotocol"; +import OpenAI from "openai"; + +const client = new BerryProtocol({ + sessionId: "rag-example", +}); + +const ai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}); + +async function loadKnowledgeBase() { + const dataDir = path.resolve("./data"); + const names = await fs.readdir(dataDir); + const markdownFiles = names.filter((name) => name.endsWith(".md")); + const contents = await Promise.all( + markdownFiles.map(async (name) => { + const text = await fs.readFile(path.join(dataDir, name), "utf8"); + return { name, text }; + }), + ); + + return contents; +} + +function retrieveDocuments(documents, query) { + const normalized = query.toLowerCase(); + + return documents + .filter((doc) => doc.text.toLowerCase().includes(normalized)) + .slice(0, 3); +} + +const knowledgeBase = await loadKnowledgeBase(); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const docs = retrieveDocuments(knowledgeBase, message.text); + const context = docs.map((doc) => `# ${doc.name}\n${doc.text}`).join("\n\n"); + + const completion = await ai.chat.completions.create({ + model: "gpt-4.1-mini", + messages: [ + { + role: "system", + content: "You are BerryAgent. Answer using the provided BerryProtocol context.", + }, + { + role: "user", + content: `Context:\n${context}\n\nQuestion:\n${message.text}`, + }, + ], + }); + + const answer = completion.choices[0]?.message?.content ?? "No answer available."; + + await client.sendText(message.chatId ?? message.from, answer); +}); + +await client.connectWithQr(); +``` + +## Best practices + +- keep examples isolated by use case +- copy examples into a dedicated app instead of editing them in place +- validate environment variables before boot + +## Common mistakes + +- using example code as production architecture without adaptation +- mixing secrets directly into examples + +## Important notes + +Examples in this file aim to be practical, but orchestration details such as storage, retries, and policy enforcement should still be handled in your application layer. diff --git a/data/21-faq.md b/data/21-faq.md new file mode 100644 index 0000000..33a536a --- /dev/null +++ b/data/21-faq.md @@ -0,0 +1,66 @@ +# FAQ + +## What is BerryProtocol? + +BerryProtocol is the WhatsApp Web automation SDK/runtime layer in the BerrySDK ecosystem. + +## What is BerryAgent? + +BerryAgent is the official AI agent concept built on top of BerryProtocol, retrieval content, and an OpenAI-compatible model provider. + +## What is BerryOTP? + +BerryOTP is the OTP and verification layer of the ecosystem. + +## What is BerryAPI? + +BerryAPI is the API-oriented layer intended to expose BerryProtocol capabilities to external systems and automation tools. + +## Does BerryProtocol support QR login? + +### Confirmed + +Yes. The current client exposes `connectWithQr()`. + +## Does BerryProtocol support pairing code? + +### Confirmed + +Yes. The current client exposes `connectWithPairingCode(phoneNumber, customPairingCode?)`. + +## Does BerryProtocol support carousels? + +### Confirmed + +Yes. The current client supports carousel payloads and a dedicated carousel send path. + +## Does BerryProtocol support AI label? + +### Confirmed + +Yes, at the message level. + +## Does BerryProtocol support AI label per card in carousel? + +### Confirmed + +No validated per-card rendering support is confirmed. Treat that as unsupported unless future protocol behavior proves otherwise. + +## Should BerryAgent answer directly from the model? + +### Best practice + +No. Prefer retrieval, policy checks, and transport-safe execution. + +## What should the local RAG corpus include? + +- installation +- connection lifecycle +- message sending docs +- examples +- troubleshooting +- glossary + +## Important notes + +When answering end-user questions, BerryAgent should prioritize confirmed sections over conceptual examples. diff --git a/data/22-glossary.md b/data/22-glossary.md new file mode 100644 index 0000000..fcf7a08 --- /dev/null +++ b/data/22-glossary.md @@ -0,0 +1,57 @@ +# Glossary + +## BerryProtocol + +The WhatsApp Web automation SDK/runtime layer in the BerrySDK ecosystem. + +## BerryAgent + +The official AI agent concept or implementation that uses BerryProtocol as its transport and action layer. + +## BerryOTP + +The OTP and verification package in the BerrySDK ecosystem. + +## BerryAPI + +The API-facing layer built around BerryProtocol for integrations, webhooks, and instance management. + +## Session ID + +A stable identifier used to represent a persisted WhatsApp runtime session. + +## JID + +WhatsApp identifier format such as `5511999999999@s.whatsapp.net`. + +## QR authentication + +A connection method where the user scans a QR code emitted by the session runtime. + +## Pairing code + +A connection method where the runtime requests a code-based pairing flow using a phone number. + +## AI label + +A message-level marker used to identify supported AI-generated responses in compatible WhatsApp message flows. + +## Native flow + +A structured interactive payload pattern used for advanced WhatsApp interactions beyond simple buttons and lists. + +## RAG + +Retrieval-Augmented Generation, where an AI model receives retrieved documentation context before producing an answer. + +## Transport layer + +The part of the system responsible for connection, message delivery, and protocol interaction. + +## Orchestration layer + +The part of the system responsible for deciding what should happen, such as AI routing, flows, or business actions. + +## Important notes + +This glossary is useful for lightweight retrieval when the user asks terminology questions or when BerryAgent needs a compact semantic anchor. diff --git a/data/_index.md b/data/_index.md new file mode 100644 index 0000000..45a45b9 --- /dev/null +++ b/data/_index.md @@ -0,0 +1,92 @@ +# BerryAgent Knowledge Base Index + +This folder contains the local markdown knowledge base for BerryAgent, the official AI agent for BerryProtocol. + +The goal of this database is to support local RAG pipelines with: + +- SDK overview and positioning +- setup and onboarding +- connection lifecycle +- message sending patterns +- interactive WhatsApp features +- AI-agent integration patterns +- operational guidance +- troubleshooting and FAQ material + +## How to use this index + +Use this file as the routing map for retrieval. + +When a question is mostly about one topic, consult the relevant file first. +When a question spans architecture and implementation, retrieve multiple files. + +## File routing by question type + +### Project overview + +- `00-overview.md` +- `22-glossary.md` + +### Installation and getting started + +- `01-installation.md` +- `02-quickstart.md` + +### Session creation, QR, reconnect, and lifecycle + +- `03-client-connection.md` +- `17-errors-and-troubleshooting.md` +- `18-best-practices.md` + +### Real-time events and incoming messages + +- `04-message-events.md` + +### Sending regular messages + +- `05-send-text.md` +- `06-send-media.md` + +### Interactive messages + +- `07-send-buttons.md` +- `08-send-lists.md` +- `09-send-carousel.md` +- `10-copy-buttons.md` +- `11-cta-buttons.md` +- `12-native-flows.md` + +### AI agent integration + +- `13-ai-agent.md` +- `14-berryagent-architecture.md` + +### Ecosystem and platform context + +- `15-berrystudio.md` +- `16-berryapi.md` + +### Troubleshooting and operational issues + +- `17-errors-and-troubleshooting.md` +- `18-best-practices.md` +- `19-security.md` +- `21-faq.md` + +### Complete examples + +- `20-examples.md` + +### Terminology help + +- `22-glossary.md` + +## Confirmed vs conceptual content + +This knowledge base intentionally separates information into three classes: + +- `Confirmed`: behavior or methods directly confirmed by the current BerryProtocol codebase +- `Conceptual example`: an example that explains how a likely integration could look when the exact public API is not fully stabilized +- `Implementation suggestion`: guidance for product design, RAG pipelines, or runtime architecture + +BerryAgent should prefer confirmed sections first when generating answers, then use conceptual sections only when the user is explicitly asking for ideas, patterns, or future-facing integrations. diff --git a/examples/ai-agent.js b/examples/ai-agent.js new file mode 100644 index 0000000..66e78eb --- /dev/null +++ b/examples/ai-agent.js @@ -0,0 +1,40 @@ +import BerryProtocol from "berryprotocol"; +import OpenAI from "openai"; + +const client = new BerryProtocol({ + sessionId: "ai-agent-example", +}); + +const ai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const response = await ai.chat.completions.create({ + model: process.env.OPENAI_MODEL ?? "gpt-4.1-mini", + messages: [ + { + role: "system", + content: "You are BerryAgent, the official AI assistant for BerryProtocol.", + }, + { + role: "user", + content: message.text, + }, + ], + }); + + const answer = response.choices[0]?.message?.content ?? "I could not generate a reply."; + const chatId = message.chatId ?? message.from; + + await client.sendMessage(chatId, { + text: answer, + ai: true, + }); +}); + +await client.connectWithQr(); diff --git a/examples/basic-bot.js b/examples/basic-bot.js new file mode 100644 index 0000000..6171ffc --- /dev/null +++ b/examples/basic-bot.js @@ -0,0 +1,24 @@ +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "basic-bot-example", +}); + +client.on("auth.qr", ({ value }) => { + console.log("Scan this QR code:", value); +}); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const chatId = message.chatId ?? message.from; + const text = message.text.trim().toLowerCase(); + + if (text === "ping") { + await client.sendText(chatId, "pong"); + } +}); + +await client.connectWithQr(); diff --git a/examples/rag-agent.js b/examples/rag-agent.js new file mode 100644 index 0000000..bdbd687 --- /dev/null +++ b/examples/rag-agent.js @@ -0,0 +1,78 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import BerryProtocol from "berryprotocol"; +import OpenAI from "openai"; + +const client = new BerryProtocol({ + sessionId: "rag-agent-example", +}); + +const ai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, + baseURL: process.env.OPENAI_BASE_URL || undefined, +}); + +async function loadKnowledgeBase() { + const dataDir = path.resolve("./data"); + const files = await fs.readdir(dataDir); + const markdownFiles = files.filter((name) => name.endsWith(".md")); + + return Promise.all( + markdownFiles.map(async (name) => ({ + name, + content: await fs.readFile(path.join(dataDir, name), "utf8"), + })), + ); +} + +function retrieveTopMatches(documents, query) { + const lowered = query.toLowerCase(); + + return documents + .map((doc) => { + const score = lowered + .split(/\s+/) + .filter(Boolean) + .reduce((acc, token) => acc + (doc.content.toLowerCase().includes(token) ? 1 : 0), 0); + + return { ...doc, score }; + }) + .filter((doc) => doc.score > 0) + .sort((a, b) => b.score - a.score) + .slice(0, 4); +} + +const knowledgeBase = await loadKnowledgeBase(); + +client.on("message.received", async (message) => { + if (message.type !== "text" || !message.from) { + return; + } + + const chatId = message.chatId ?? message.from; + const matches = retrieveTopMatches(knowledgeBase, message.text); + const context = matches.map((doc) => `File: ${doc.name}\n${doc.content}`).join("\n\n---\n\n"); + + const completion = await ai.chat.completions.create({ + model: process.env.OPENAI_MODEL ?? "gpt-4.1-mini", + messages: [ + { + role: "system", + content: "You are BerryAgent. Answer only from the provided BerryProtocol knowledge base when possible.", + }, + { + role: "user", + content: `Knowledge base context:\n${context}\n\nQuestion:\n${message.text}`, + }, + ], + }); + + const answer = completion.choices[0]?.message?.content ?? "No answer available."; + + await client.sendMessage(chatId, { + text: answer, + ai: true, + }); +}); + +await client.connectWithQr(); diff --git a/examples/send-buttons.js b/examples/send-buttons.js new file mode 100644 index 0000000..375d666 --- /dev/null +++ b/examples/send-buttons.js @@ -0,0 +1,22 @@ +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-buttons-example", +}); + +await client.connectWithQr(); + +const to = process.env.BERRY_TEST_TO; + +if (!to) { + throw new Error("Set BERRY_TEST_TO with a valid WhatsApp JID."); +} + +await client.sendButtons(to, { + text: "Choose a path", + footer: "BerryProtocol button example", + buttons: [ + { id: "sales", title: "Sales", kind: "reply" }, + { id: "support", title: "Support", kind: "reply" }, + ], +}); diff --git a/examples/send-carousel.js b/examples/send-carousel.js new file mode 100644 index 0000000..a272f17 --- /dev/null +++ b/examples/send-carousel.js @@ -0,0 +1,32 @@ +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-carousel-example", +}); + +await client.connectWithQr(); + +const to = process.env.BERRY_TEST_TO; + +if (!to) { + throw new Error("Set BERRY_TEST_TO with a valid WhatsApp JID."); +} + +await client.sendCarousel(to, { + text: "Featured products", + footer: "Swipe to browse", + carouselCardType: "image", + cards: [ + { + title: "Product A", + body: "A short description", + footer: "R$ 49,90", + image: { + url: process.env.BERRY_TEST_IMAGE_URL ?? "https://picsum.photos/640/480", + }, + buttons: [ + { id: "buy_product_a", title: "Buy", kind: "quick_reply" }, + ], + }, + ], +}); diff --git a/examples/send-list.js b/examples/send-list.js new file mode 100644 index 0000000..05b622c --- /dev/null +++ b/examples/send-list.js @@ -0,0 +1,29 @@ +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-list-example", +}); + +await client.connectWithQr(); + +const to = process.env.BERRY_TEST_TO; + +if (!to) { + throw new Error("Set BERRY_TEST_TO with a valid WhatsApp JID."); +} + +await client.sendList(to, { + title: "Departments", + text: "Pick one department", + footer: "BerryProtocol list example", + buttonText: "Open menu", + sections: [ + { + title: "Main", + rows: [ + { id: "billing", title: "Billing" }, + { id: "orders", title: "Orders" }, + ], + }, + ], +}); diff --git a/examples/send-text.js b/examples/send-text.js new file mode 100644 index 0000000..ff1825d --- /dev/null +++ b/examples/send-text.js @@ -0,0 +1,15 @@ +import BerryProtocol from "berryprotocol"; + +const client = new BerryProtocol({ + sessionId: "send-text-example", +}); + +await client.connectWithQr(); + +const to = process.env.BERRY_TEST_TO; + +if (!to) { + throw new Error("Set BERRY_TEST_TO with a valid WhatsApp JID."); +} + +await client.sendText(to, "Hello from BerryProtocol send-text example."); From f9a31dbc532b11028e33bffc5ef8d1f99f420435 Mon Sep 17 00:00:00 2001 From: BerrySDK Date: Fri, 28 Aug 2026 19:42:24 -0300 Subject: [PATCH 23/23] feat: add Berry Studio and prepare npm 0.1.10 --- .gitignore | 1 + README.md | 28 + examples/ai-agent.js | 1 + examples/basic-bot.js | 1 + examples/npm-consumer/package.json | 2 +- examples/npm-consumer/test-from-npm.mjs | 1 + examples/rag-agent.js | 1 + examples/sdk/test-all.js | 64 +- .../test-berry-self-contained-proto-types.ts | 2 +- examples/send-buttons.js | 1 + examples/send-carousel.js | 1 + examples/send-list.js | 1 + examples/send-text.js | 1 + iniciar-dashboard.cmd | 116 + package-lock.json | 9004 +++++++++++++++-- package.json | 95 +- packages/auth/package.json | 7 +- packages/berry-otp/README.md | 1 + packages/berry-otp/package.json | 2 +- packages/berryapi/package.json | 4 +- packages/berryapi/src/app.ts | 4 + packages/berryapi/src/database/init.ts | 38 + packages/berryapi/src/database/schema.ts | 35 + packages/berryapi/src/docs/schema.ts | 4 +- .../berryapi/src/managers/InstanceManager.ts | 30 +- packages/berryapi/src/middlewares/auth.ts | 14 +- .../berryapi/src/modules/flow/flow.catalog.ts | 569 ++ .../src/modules/flow/flow.controller.ts | 137 + .../berryapi/src/modules/flow/flow.routes.ts | 173 + .../berryapi/src/modules/flow/flow.service.ts | 1623 +++ .../src/modules/flow/flow.validators.ts | 98 + .../src/modules/studio/assets/index.html | 125 + .../src/modules/studio/assets/studio.css | 469 + .../src/modules/studio/assets/studio.js | 1001 ++ .../src/modules/studio/studio.routes.ts | 95 + packages/berryotp/package.json | 6 +- packages/berryprotocol/package.json | 7 +- packages/cli/package.json | 2 +- packages/core/package.json | 17 +- packages/core/src/index.ts | 124 +- packages/gateway/package.json | 2 +- packages/media/package.json | 3 + packages/messages/package.json | 2 +- packages/protocol/package.json | 3 + packages/socket/package.json | 13 +- packages/socket/src/index.ts | 15 +- packages/store/package.json | 9 +- packages/studio/.gitignore | 24 + packages/studio/README.md | 73 + packages/studio/components.json | 25 + packages/studio/eslint.config.js | 26 + packages/studio/index.html | 18 + packages/studio/package.json | 43 + packages/studio/public/favicon.svg | 6 + packages/studio/public/icons.svg | 24 + packages/studio/src/App.css | 184 + packages/studio/src/App.tsx | 41 + packages/studio/src/assets/hero.png | Bin 0 -> 13057 bytes packages/studio/src/assets/react.svg | 1 + packages/studio/src/assets/vite.svg | 1 + .../src/components/flow/AnalysisView.tsx | 132 + .../studio/src/components/flow/AppShell.tsx | 26 + .../studio/src/components/flow/BlockMenu.tsx | 73 + .../studio/src/components/flow/BlockNode.tsx | 217 + .../src/components/flow/ConstructorView.tsx | 148 + .../studio/src/components/flow/EditPanel.tsx | 431 + .../src/components/flow/FlowBuilder.tsx | 749 ++ .../src/components/flow/FlowTestPanel.tsx | 451 + .../src/components/flow/FlowTriggerPanel.tsx | 204 + .../studio/src/components/flow/Sidebar.tsx | 133 + .../src/components/flow/StudioAuthGate.tsx | 142 + .../studio/src/components/flow/Topbar.tsx | 144 + .../src/components/flow/VariablesView.tsx | 72 + packages/studio/src/components/ui/badge.tsx | 49 + packages/studio/src/components/ui/button.tsx | 67 + packages/studio/src/components/ui/card.tsx | 103 + packages/studio/src/components/ui/empty.tsx | 104 + packages/studio/src/components/ui/field.tsx | 46 + packages/studio/src/components/ui/input.tsx | 19 + packages/studio/src/components/ui/label.tsx | 24 + .../studio/src/components/ui/scroll-area.tsx | 53 + packages/studio/src/components/ui/select.tsx | 190 + .../studio/src/components/ui/separator.tsx | 28 + packages/studio/src/components/ui/sheet.tsx | 145 + packages/studio/src/components/ui/sidebar.tsx | 702 ++ .../studio/src/components/ui/skeleton.tsx | 13 + packages/studio/src/components/ui/switch.tsx | 31 + packages/studio/src/components/ui/tabs.tsx | 64 + .../studio/src/components/ui/textarea.tsx | 18 + packages/studio/src/components/ui/tooltip.tsx | 57 + packages/studio/src/hooks/use-mobile.ts | 19 + packages/studio/src/index.css | 112 + packages/studio/src/lib/studio-api.ts | 366 + packages/studio/src/lib/utils.ts | 6 + packages/studio/src/main.tsx | 15 + packages/studio/src/pages/AnalyticsPage.tsx | 304 + packages/studio/src/pages/ConnectionsPage.tsx | 457 + packages/studio/src/pages/FlowEditorPage.tsx | 79 + packages/studio/src/pages/HomePage.tsx | 56 + .../studio/src/pages/NotificationsPage.tsx | 94 + packages/studio/src/pages/StudioPage.tsx | 480 + packages/studio/src/pages/TutorialsPage.tsx | 169 + packages/studio/tsconfig.app.json | 30 + packages/studio/tsconfig.json | 14 + packages/studio/tsconfig.node.json | 24 + packages/studio/vite.config.ts | 15 + packages/transport/package.json | 7 +- packages/wa-message/package.json | 11 +- packages/wa-message/src/index.ts | 7 +- parar-dashboard.cmd | 41 + 110 files changed, 20593 insertions(+), 766 deletions(-) create mode 100644 iniciar-dashboard.cmd create mode 100644 packages/berryapi/src/modules/flow/flow.catalog.ts create mode 100644 packages/berryapi/src/modules/flow/flow.controller.ts create mode 100644 packages/berryapi/src/modules/flow/flow.routes.ts create mode 100644 packages/berryapi/src/modules/flow/flow.service.ts create mode 100644 packages/berryapi/src/modules/flow/flow.validators.ts create mode 100644 packages/berryapi/src/modules/studio/assets/index.html create mode 100644 packages/berryapi/src/modules/studio/assets/studio.css create mode 100644 packages/berryapi/src/modules/studio/assets/studio.js create mode 100644 packages/berryapi/src/modules/studio/studio.routes.ts create mode 100644 packages/studio/.gitignore create mode 100644 packages/studio/README.md create mode 100644 packages/studio/components.json create mode 100644 packages/studio/eslint.config.js create mode 100644 packages/studio/index.html create mode 100644 packages/studio/package.json create mode 100644 packages/studio/public/favicon.svg create mode 100644 packages/studio/public/icons.svg create mode 100644 packages/studio/src/App.css create mode 100644 packages/studio/src/App.tsx create mode 100644 packages/studio/src/assets/hero.png create mode 100644 packages/studio/src/assets/react.svg create mode 100644 packages/studio/src/assets/vite.svg create mode 100644 packages/studio/src/components/flow/AnalysisView.tsx create mode 100644 packages/studio/src/components/flow/AppShell.tsx create mode 100644 packages/studio/src/components/flow/BlockMenu.tsx create mode 100644 packages/studio/src/components/flow/BlockNode.tsx create mode 100644 packages/studio/src/components/flow/ConstructorView.tsx create mode 100644 packages/studio/src/components/flow/EditPanel.tsx create mode 100644 packages/studio/src/components/flow/FlowBuilder.tsx create mode 100644 packages/studio/src/components/flow/FlowTestPanel.tsx create mode 100644 packages/studio/src/components/flow/FlowTriggerPanel.tsx create mode 100644 packages/studio/src/components/flow/Sidebar.tsx create mode 100644 packages/studio/src/components/flow/StudioAuthGate.tsx create mode 100644 packages/studio/src/components/flow/Topbar.tsx create mode 100644 packages/studio/src/components/flow/VariablesView.tsx create mode 100644 packages/studio/src/components/ui/badge.tsx create mode 100644 packages/studio/src/components/ui/button.tsx create mode 100644 packages/studio/src/components/ui/card.tsx create mode 100644 packages/studio/src/components/ui/empty.tsx create mode 100644 packages/studio/src/components/ui/field.tsx create mode 100644 packages/studio/src/components/ui/input.tsx create mode 100644 packages/studio/src/components/ui/label.tsx create mode 100644 packages/studio/src/components/ui/scroll-area.tsx create mode 100644 packages/studio/src/components/ui/select.tsx create mode 100644 packages/studio/src/components/ui/separator.tsx create mode 100644 packages/studio/src/components/ui/sheet.tsx create mode 100644 packages/studio/src/components/ui/sidebar.tsx create mode 100644 packages/studio/src/components/ui/skeleton.tsx create mode 100644 packages/studio/src/components/ui/switch.tsx create mode 100644 packages/studio/src/components/ui/tabs.tsx create mode 100644 packages/studio/src/components/ui/textarea.tsx create mode 100644 packages/studio/src/components/ui/tooltip.tsx create mode 100644 packages/studio/src/hooks/use-mobile.ts create mode 100644 packages/studio/src/index.css create mode 100644 packages/studio/src/lib/studio-api.ts create mode 100644 packages/studio/src/lib/utils.ts create mode 100644 packages/studio/src/main.tsx create mode 100644 packages/studio/src/pages/AnalyticsPage.tsx create mode 100644 packages/studio/src/pages/ConnectionsPage.tsx create mode 100644 packages/studio/src/pages/FlowEditorPage.tsx create mode 100644 packages/studio/src/pages/HomePage.tsx create mode 100644 packages/studio/src/pages/NotificationsPage.tsx create mode 100644 packages/studio/src/pages/StudioPage.tsx create mode 100644 packages/studio/src/pages/TutorialsPage.tsx create mode 100644 packages/studio/tsconfig.app.json create mode 100644 packages/studio/tsconfig.json create mode 100644 packages/studio/tsconfig.node.json create mode 100644 packages/studio/vite.config.ts create mode 100644 parar-dashboard.cmd diff --git a/.gitignore b/.gitignore index a803f1c..82da2f3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules dist .env *.log +.berry-dashboard.pid *.tgz coverage packages/*/dist diff --git a/README.md b/README.md index b6406b3..561ef86 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,34 @@ BerryAPI starts on: - `GET http://localhost:3000` - `GET http://localhost:3000/info` - `GET http://localhost:3000/docs` +- `GET http://localhost:3000/studio` + +## Berry Studio + +Berry Studio is the shadcn/ui dashboard bundled with BerryAPI. It includes: + +- visual flow editing with React Flow +- draft saving, validation and publishing +- automatic WhatsApp triggers by instance and keyword +- automatic continuation when a contact replies to a waiting flow +- simulation without sending messages +- real execution through a connected BerryProtocol instance +- QR code and pairing-code connection management +- nested `{{variable}}` interpolation in buttons, lists, carousels and JSON payloads +- analytics, run logs and stored flow versions +- all 34 message capabilities currently exposed by BerryAPI + +Build the frontend before starting the production API: + +```bash +npm run build --workspace studio +npm run build --workspace berryapi +npm run start --workspace berryapi +``` + +Open `http://localhost:3000/studio` and enter the configured `API_KEY`. +Static Studio pages are public so the login screen can load, while +`/studio/api/*` remains protected by bearer authentication. ## Authentication diff --git a/examples/ai-agent.js b/examples/ai-agent.js index 66e78eb..eb6de9d 100644 --- a/examples/ai-agent.js +++ b/examples/ai-agent.js @@ -38,3 +38,4 @@ client.on("message.received", async (message) => { }); await client.connectWithQr(); +await client.waitUntilConnected(); diff --git a/examples/basic-bot.js b/examples/basic-bot.js index 6171ffc..2531e46 100644 --- a/examples/basic-bot.js +++ b/examples/basic-bot.js @@ -22,3 +22,4 @@ client.on("message.received", async (message) => { }); await client.connectWithQr(); +await client.waitUntilConnected(); diff --git a/examples/npm-consumer/package.json b/examples/npm-consumer/package.json index 411fafd..cfb1cdb 100644 --- a/examples/npm-consumer/package.json +++ b/examples/npm-consumer/package.json @@ -7,7 +7,7 @@ "start": "node test-from-npm.mjs" }, "dependencies": { - "berryprotocol": "^0.1.9", + "berryprotocol": "^0.1.10", "berryotp": "^0.1.9" } } diff --git a/examples/npm-consumer/test-from-npm.mjs b/examples/npm-consumer/test-from-npm.mjs index 0e657f5..5e81c79 100644 --- a/examples/npm-consumer/test-from-npm.mjs +++ b/examples/npm-consumer/test-from-npm.mjs @@ -32,6 +32,7 @@ client.on("message.ack", (ack) => { async function main() { await client.connectWithQr(); + await client.waitUntilConnected(); const sent = await client.sendText(recipient, "Hello from berryprotocol on npm"); console.log("TEXT SENT:", sent); diff --git a/examples/rag-agent.js b/examples/rag-agent.js index bdbd687..9264018 100644 --- a/examples/rag-agent.js +++ b/examples/rag-agent.js @@ -76,3 +76,4 @@ client.on("message.received", async (message) => { }); await client.connectWithQr(); +await client.waitUntilConnected(); diff --git a/examples/sdk/test-all.js b/examples/sdk/test-all.js index 480f864..1901064 100644 --- a/examples/sdk/test-all.js +++ b/examples/sdk/test-all.js @@ -6,22 +6,16 @@ const recipient = process.env.BERRY_TEST_TO ?? "55199991466943@s.whatsapp.net"; const authMethod = process.env.BERRY_TEST_AUTH ?? "qr"; const pairingPhone = process.env.BERRY_TEST_PHONE; -function waitForOpen(client) { - return new Promise((resolve) => { - client.once("connection.open", (state) => { - console.log("🟢 CONECTADO:", state); - resolve(state); - }); - }); -} - async function safeTest(name, fn) { try { - console.log(`\n🧪 Testando: ${name}`); + console.log(`\n[Teste] ${name}`); const result = await fn(); - console.log(`✅ OK: ${name}`, result ?? ""); + console.log(`[OK] ${name}`, result ?? ""); } catch (error) { - console.log(`❌ ERRO em ${name}:`, error instanceof Error ? error.message : error); + console.log( + `[ERRO] ${name}:`, + error instanceof Error ? error.message : error, + ); } } @@ -39,7 +33,7 @@ function buildClient() { async function connectClient(client) { if (authMethod === "pairing_code") { if (!pairingPhone) { - throw new Error("Define BERRY_TEST_PHONE para usar pairing_code."); + throw new Error("Defina BERRY_TEST_PHONE para usar pairing_code."); } await client.connectWithPairingCode(pairingPhone); @@ -58,48 +52,52 @@ async function main() { const client = buildClient(); client.on("auth.link", ({ value }) => { - console.log("\n🔗 Link gerado:"); + console.log("\n[LINK]"); console.log(value); }); client.on("auth.qr", ({ value }) => { - console.log("\n📱 Escaneie este QR Code:"); + console.log("\n[QR] Escaneie este QR Code:"); qrcode.generate(value, { small: true }); }); client.on("auth.pairing_code", ({ code }) => { - console.log(`\n🔢 Pairing code: ${code}`); + console.log(`\n[PAIRING CODE] ${code}`); }); client.on("auth.success", (data) => { - console.log("✅ AUTH SUCCESS:", data); + console.log("[AUTH SUCCESS]", data); }); client.on("auth.error", (error) => { - console.log("❌ AUTH ERROR:", error); + console.log("[AUTH ERROR]", error); + }); + + client.on("connection.open", (state) => { + console.log("[CONECTADO]", state); }); client.on("connection.close", (state) => { - console.log("🔴 DESCONECTADO:", state); + console.log("[DESCONECTADO]", state); }); client.on("message.received", (message) => { - console.log("📩 MESSAGE RECEIVED:", message); + console.log("[MESSAGE RECEIVED]", message); }); - console.log(`🚀 Conectando com auth=${authMethod}...`); - const opened = waitForOpen(client); + console.log(`[INICIO] Conectando com auth=${authMethod}...`); + await connectClient(client); - await opened; + await client.waitUntilConnected(); await safeTest("sendText", () => - client.sendText(recipient, "🚀 Teste de texto BerryProtocol"), + client.sendText(recipient, "Teste de texto BerryProtocol"), ); await safeTest("sendImage", () => client.sendImage(recipient, { url: "https://picsum.photos/600/400", - caption: "🖼 Teste de imagem BerryProtocol", + caption: "Teste de imagem BerryProtocol", }), ); @@ -115,24 +113,24 @@ async function main() { url: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", fileName: "teste.pdf", mimetype: "application/pdf", - caption: "📄 Teste de documento BerryProtocol", + caption: "Teste de documento BerryProtocol", }), ); await safeTest("sendButtons", () => client.sendButtons(recipient, { - text: "Escolha uma opção", + text: "Escolha uma opcao", footer: "BerryProtocol", buttons: [ - { id: "btn_1", title: "Opção 1" }, - { id: "btn_2", title: "Opção 2" }, + { id: "btn_1", title: "Opcao 1" }, + { id: "btn_2", title: "Opcao 2" }, ], }), ); await safeTest("sendList", () => client.sendList(recipient, { - title: "🍔 Cardápio", + title: "Cardapio", text: "Escolha um lanche", footer: "BerryProtocol", buttonText: "Abrir lista", @@ -143,7 +141,7 @@ async function main() { { id: "xburger", title: "X-Burger", - description: "Pão, carne e queijo", + description: "Pao, carne e queijo", }, { id: "xbacon", @@ -182,10 +180,10 @@ async function main() { await safeTest("sendPresence", () => client.sendPresence("composing", recipient)); await safeTest("fetchGroups", () => client.fetchGroups()); - console.log("\n✅ Todos os testes executados."); + console.log("\n[FINALIZADO] Todos os testes executados."); } main().catch((error) => { - console.error("❌ Falha fatal:", error); + console.error("[FATAL]", error); process.exitCode = 1; }); diff --git a/examples/sdk/test-berry-self-contained-proto-types.ts b/examples/sdk/test-berry-self-contained-proto-types.ts index 00c6d44..2e03317 100644 --- a/examples/sdk/test-berry-self-contained-proto-types.ts +++ b/examples/sdk/test-berry-self-contained-proto-types.ts @@ -30,7 +30,7 @@ type InternalSocket = { }; const client = new BerryProtocol({ - sessionId: "self-contained-proto-types", + sessionId: "carousel-ai-example", }); const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/examples/send-buttons.js b/examples/send-buttons.js index 375d666..2244556 100644 --- a/examples/send-buttons.js +++ b/examples/send-buttons.js @@ -5,6 +5,7 @@ const client = new BerryProtocol({ }); await client.connectWithQr(); +await client.waitUntilConnected(); const to = process.env.BERRY_TEST_TO; diff --git a/examples/send-carousel.js b/examples/send-carousel.js index a272f17..8c3ab20 100644 --- a/examples/send-carousel.js +++ b/examples/send-carousel.js @@ -5,6 +5,7 @@ const client = new BerryProtocol({ }); await client.connectWithQr(); +await client.waitUntilConnected(); const to = process.env.BERRY_TEST_TO; diff --git a/examples/send-list.js b/examples/send-list.js index 05b622c..285d21d 100644 --- a/examples/send-list.js +++ b/examples/send-list.js @@ -5,6 +5,7 @@ const client = new BerryProtocol({ }); await client.connectWithQr(); +await client.waitUntilConnected(); const to = process.env.BERRY_TEST_TO; diff --git a/examples/send-text.js b/examples/send-text.js index ff1825d..b36b330 100644 --- a/examples/send-text.js +++ b/examples/send-text.js @@ -5,6 +5,7 @@ const client = new BerryProtocol({ }); await client.connectWithQr(); +await client.waitUntilConnected(); const to = process.env.BERRY_TEST_TO; diff --git a/iniciar-dashboard.cmd b/iniciar-dashboard.cmd new file mode 100644 index 0000000..40130b5 --- /dev/null +++ b/iniciar-dashboard.cmd @@ -0,0 +1,116 @@ +@echo off +setlocal +title BerryProtocol - Iniciar Dashboard + +cd /d "%~dp0" + +set "BERRY_DASHBOARD_ROOT=%~dp0" +set "BERRY_DASHBOARD_PID=%~dp0.berry-dashboard.pid" +set "BERRY_DASHBOARD_URL=http://127.0.0.1:3000/studio?apiKey=berryapi_local_dashboard" +set "PORT=3000" +set "HOST=127.0.0.1" +set "API_KEY=berryapi_local_dashboard" + +powershell -NoProfile -ExecutionPolicy Bypass -Command "try { $headers = @{ Authorization = 'Bearer ' + $env:API_KEY }; $response = Invoke-RestMethod -Uri 'http://127.0.0.1:3000/studio/api/capabilities' -Headers $headers -TimeoutSec 2; $listener = Get-NetTCPConnection -LocalAddress '127.0.0.1' -LocalPort 3000 -State Listen -ErrorAction Stop | Select-Object -First 1; $process = Get-CimInstance Win32_Process -Filter ('ProcessId = ' + $listener.OwningProcess) -ErrorAction Stop; if ($response.success -and $process.CommandLine -like '*packages\berryapi\dist\server.js*') { Set-Content -LiteralPath $env:BERRY_DASHBOARD_PID -Value $listener.OwningProcess -Encoding ascii; exit 0 } } catch {}; exit 1" +if not errorlevel 1 ( + echo. + echo A dashboard ja esta funcionando em http://127.0.0.1:3000/studio + if /I not "%BERRY_NO_BROWSER%"=="1" start "" "%BERRY_DASHBOARD_URL%" + exit /b 0 +) + +powershell -NoProfile -ExecutionPolicy Bypass -Command "Remove-Item -LiteralPath $env:BERRY_DASHBOARD_PID -Force -ErrorAction SilentlyContinue; $listener = Get-NetTCPConnection -LocalPort 3000 -State Listen -ErrorAction SilentlyContinue | Select-Object -First 1; if ($listener) { exit 1 }; exit 0" +if errorlevel 1 goto :port_error + +where node >nul 2>&1 +if errorlevel 1 ( + echo. + echo ERRO: Node.js nao foi encontrado neste computador. + echo Instale o Node.js e execute este arquivo novamente. + echo. + pause + exit /b 1 +) + +where npm >nul 2>&1 +if errorlevel 1 ( + echo. + echo ERRO: npm nao foi encontrado neste computador. + echo. + pause + exit /b 1 +) + +if not exist "node_modules" ( + echo. + echo Instalando as dependencias pela primeira vez... + call npm install + if errorlevel 1 goto :build_error +) + +if /I not "%BERRY_SKIP_BUILD%"=="1" ( + echo. + echo Preparando a BerryAPI e a dashboard... + call npm run build + if errorlevel 1 goto :build_error +) + +if not exist "packages\berryapi\dist\server.js" ( + echo. + echo ERRO: a BerryAPI ainda nao foi compilada. + echo Execute este arquivo novamente sem BERRY_SKIP_BUILD. + echo. + pause + exit /b 1 +) + +echo. +echo Iniciando a BerryAPI local... +set "NODE_ENV=production" + +powershell -NoProfile -ExecutionPolicy Bypass -Command "$root = $env:BERRY_DASHBOARD_ROOT; $stdout = Join-Path $root '.berry-dashboard.log'; $stderr = Join-Path $root '.berry-dashboard-error.log'; $node = (Get-Command node -ErrorAction Stop).Source; $process = Start-Process -FilePath $node -ArgumentList 'packages\berryapi\dist\server.js' -WorkingDirectory $root -WindowStyle Hidden -RedirectStandardOutput $stdout -RedirectStandardError $stderr -PassThru; Set-Content -LiteralPath $env:BERRY_DASHBOARD_PID -Value $process.Id -Encoding ascii" +if errorlevel 1 ( + echo. + echo ERRO: nao foi possivel iniciar a BerryAPI. + echo. + pause + exit /b 1 +) + +powershell -NoProfile -ExecutionPolicy Bypass -Command "$deadline = (Get-Date).AddSeconds(30); do { try { $processId = [int](Get-Content -Raw -LiteralPath $env:BERRY_DASHBOARD_PID); $process = Get-Process -Id $processId -ErrorAction Stop; $headers = @{ Authorization = 'Bearer ' + $env:API_KEY }; $response = Invoke-RestMethod -Uri 'http://127.0.0.1:3000/studio/api/capabilities' -Headers $headers -TimeoutSec 2; if ($process -and $response.success) { exit 0 } } catch {}; Start-Sleep -Milliseconds 500 } while ((Get-Date) -lt $deadline); exit 1" +if errorlevel 1 goto :start_error + +echo. +echo Dashboard pronta: http://127.0.0.1:3000/studio +echo Para encerrar, execute parar-dashboard.cmd. +echo. + +if /I not "%BERRY_NO_BROWSER%"=="1" start "" "%BERRY_DASHBOARD_URL%" +exit /b 0 + +:build_error +echo. +echo ERRO: nao foi possivel preparar o projeto. +echo Revise as mensagens acima e tente novamente. +echo. +pause +exit /b 1 + +:port_error +echo. +echo ERRO: a porta 3000 ja esta sendo usada por outro programa. +echo Encerre esse programa e execute iniciar-dashboard.cmd novamente. +echo. +pause +exit /b 1 + +:start_error +call "%~dp0parar-dashboard.cmd" >nul 2>&1 +echo. +echo ERRO: a BerryAPI nao respondeu em ate 30 segundos. +echo Consulte os arquivos: +echo %~dp0.berry-dashboard.log +echo %~dp0.berry-dashboard-error.log +echo. +pause +exit /b 1 diff --git a/package-lock.json b/package-lock.json index b900f96..85e11de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,21 @@ { "name": "berrysdk", - "version": "0.1.9", + "version": "0.1.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "berrysdk", - "version": "0.1.9", + "version": "0.1.10", "license": "Apache-2.0", "workspaces": [ "packages/*" ], "dependencies": { + "berryprotocol": "^0.1.10", + "dotenv": "^17.4.2", + "node-hid": "^3.3.0", + "openai": "^6.38.0", "qrcode-terminal": "^0.12.0" }, "devDependencies": { @@ -23,6 +27,279 @@ "rimraf": "^6.0.1", "tsx": "^4.19.4", "typescript": "^5.8.3" + }, + "engines": { + "node": "20.x || >=22 <27" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@berrysdk/auth": { @@ -33,6 +310,10 @@ "resolved": "packages/berry-otp", "link": true }, + "node_modules/@berrysdk/berryonepro": { + "resolved": "packages/berryonepro", + "link": true + }, "node_modules/@berrysdk/cli": { "resolved": "packages/cli", "link": true @@ -123,13 +404,33 @@ "keyv": "^5.6.0" } }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/runtime": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "license": "MIT", "optional": true, - "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "license": "MIT", + "optional": true, "dependencies": { "tslib": "^2.4.0" } @@ -141,7 +442,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -158,7 +458,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -175,7 +474,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -192,7 +490,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -209,7 +506,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -226,7 +522,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -243,7 +538,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -260,7 +554,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -277,7 +570,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -294,7 +586,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -311,7 +602,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -328,7 +618,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -345,7 +634,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -362,7 +650,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -379,7 +666,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -396,7 +682,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -413,7 +698,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -430,7 +714,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -447,7 +730,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -464,7 +746,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -481,7 +762,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -498,7 +778,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -515,7 +794,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -532,7 +810,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -549,7 +826,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -566,7 +842,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -576,6 +851,134 @@ "node": ">=18" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, "node_modules/@fastify/accept-negotiator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", @@ -846,667 +1249,4339 @@ "ws": "^8.16.0" } }, - "node_modules/@hapi/boom": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", - "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", - "license": "BSD-3-Clause", + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", "dependencies": { - "@hapi/hoek": "9.x.x" + "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@img/colour": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@lifeomic/attempt": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@lifeomic/attempt/-/attempt-3.1.0.tgz", + "integrity": "sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw==", + "license": "MIT" + }, + "node_modules/@lukeed/ms": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.130.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz", + "integrity": "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", + "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accessible-icon": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.7.tgz", + "integrity": "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", + "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", + "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-form": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.8.tgz", + "integrity": "sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-label": "2.1.7", + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-label": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-one-time-password-field": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.8.tgz", + "integrity": "sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-one-time-password-field/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-one-time-password-field/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-password-toggle-field": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.3.tgz", + "integrity": "sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-is-hydrated": "0.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-password-toggle-field/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-password-toggle-field/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", + "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toolbar": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.11.tgz", + "integrity": "sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-separator": "1.1.7", + "@radix-ui/react-toggle-group": "1.1.11" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@reactflow/background": { + "version": "11.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.14.tgz", + "integrity": "sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/controls": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.14.tgz", + "integrity": "sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/core": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.11.4.tgz", + "integrity": "sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==", + "license": "MIT", + "dependencies": { + "@types/d3": "^7.4.0", + "@types/d3-drag": "^3.0.1", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/minimap": { + "version": "11.7.14", + "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.14.tgz", + "integrity": "sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-resizer": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz", + "integrity": "sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.4", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-toolbar": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz", + "integrity": "sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.1.tgz", + "integrity": "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==", + "cpu": [ + "arm64" + ], "license": "MIT", "optional": true, - "peer": true, + "os": [ + "android" + ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==", "cpu": [ "arm64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "darwin" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz", + "integrity": "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==", "cpu": [ "x64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "darwin" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==", "cpu": [ - "arm64" + "x64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "darwin" + "freebsd" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==", "cpu": [ - "x64" + "arm" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==", "cpu": [ - "arm" + "arm64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==", "cpu": [ "arm64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==", "cpu": [ "ppc64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==", "cpu": [ - "riscv64" + "s390x" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==", "cpu": [ - "s390x" + "x64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==", "cpu": [ "x64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.1.tgz", + "integrity": "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.1.tgz", + "integrity": "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==", "cpu": [ "arm64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==", "cpu": [ "x64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], - "peer": true, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", + "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.21.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.0" } }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "node_modules/@tailwindcss/oxide": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", + "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-x64": "4.3.0", + "@tailwindcss/oxide-freebsd-x64": "4.3.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-x64-musl": "4.3.0", + "@tailwindcss/oxide-wasm32-wasi": "4.3.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", + "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", "cpu": [ - "arm" + "arm64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", + "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", "cpu": [ "arm64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", + "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", "cpu": [ - "ppc64" + "x64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", + "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", "cpu": [ - "riscv64" + "x64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "freebsd" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", + "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", "cpu": [ - "s390x" + "arm" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", + "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", "cpu": [ - "x64" + "arm64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", + "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", "cpu": [ "arm64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", + "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", "cpu": [ "x64" ], - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", + "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", "cpu": [ - "wasm32" + "x64" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "@emnapi/runtime": "^1.7.0" - }, + "os": [ + "linux" + ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">= 20" } }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", + "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], "cpu": [ - "arm64" + "wasm32" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "dependencies": { + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" }, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", + "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", "cpu": [ - "ia32" + "arm64" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">= 20" } }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", + "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", "cpu": [ "x64" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", + "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.0", + "@tailwindcss/oxide": "4.3.0", + "tailwindcss": "4.3.0" }, - "funding": { - "url": "https://opencollective.com/libvips" + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, - "node_modules/@keyv/bigmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", - "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", "license": "MIT", "dependencies": { - "hashery": "^1.4.0", - "hookified": "^1.15.0" + "debug": "^4.4.3", + "token-types": "^6.1.1" }, "engines": { - "node": ">= 18" + "node": ">=18" }, - "peerDependencies": { - "keyv": "^5.6.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "license": "MIT" }, - "node_modules/@lukeed/ms": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", - "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "license": "MIT", - "engines": { - "node": ">=8" + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@pinojs/redact": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", - "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "node_modules/@types/better-sqlite3": { + "version": "7.6.13", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", + "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/bluebird": { + "version": "3.5.42", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.42.tgz", + "integrity": "sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A==", "license": "MIT" }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", + "license": "MIT" }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", - "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", - "license": "BSD-3-Clause" + "node_modules/@types/chance": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@types/chance/-/chance-1.1.8.tgz", + "integrity": "sha512-isycXjm4a88/zl3n9lfgMcEClR9wUi+m72lkE9MvEbkgZDQrKzolWbonBiUqDNAJFIwO9GKjzmJFq79qtKVTAQ==", + "license": "MIT" }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@types/geojson": "*" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.1.tgz", - "integrity": "sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==", - "license": "BSD-3-Clause" + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", - "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", - "license": "BSD-3-Clause" + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" }, - "node_modules/@tokenizer/inflate": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", - "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", "license": "MIT", "dependencies": { - "debug": "^4.4.3", - "token-types": "^6.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "@types/d3-time": "*" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", "license": "MIT" }, - "node_modules/@types/better-sqlite3": { - "version": "7.6.13", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", - "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", - "devOptional": true, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", "license": "MIT", "dependencies": { - "@types/node": "*" + "@types/d3-path": "*" } }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", "license": "MIT", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@types/d3-selection": "*" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", "license": "MIT", "dependencies": { - "@types/node": "*" + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" } }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", @@ -1532,6 +5607,12 @@ "@types/send": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, "node_modules/@types/http-errors": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", @@ -1539,6 +5620,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.19.19", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", @@ -1548,56 +5636,370 @@ "undici-types": "~6.21.0" } }, - "node_modules/@types/qrcode-terminal": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", - "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "node_modules/@types/qrcode": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.6.tgz", + "integrity": "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qrcode-terminal": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", + "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/request": { + "version": "2.48.13", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz", + "integrity": "sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==", + "license": "MIT", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.5" + } + }, + "node_modules/@types/request-promise": { + "version": "4.1.51", + "resolved": "https://registry.npmjs.org/@types/request-promise/-/request-promise-4.1.51.tgz", + "integrity": "sha512-qVcP9Fuzh9oaAh8oPxiSoWMFGnWKkJDknnij66vi09Yiy62bsSDqtd+fG5kIM9wLLgZsRP3Y6acqj9O/v2ZtRw==", + "license": "MIT", + "dependencies": { + "@types/bluebird": "*", + "@types/request": "*" + } + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz", + "integrity": "sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/type-utils": "8.59.3", + "@typescript-eslint/utils": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.59.3", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.3.tgz", + "integrity": "sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.3.tgz", + "integrity": "sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.3", + "@typescript-eslint/types": "^8.59.3", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.3.tgz", + "integrity": "sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.3.tgz", + "integrity": "sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.3.tgz", + "integrity": "sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/utils": "8.59.3", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.3.tgz", + "integrity": "sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.3.tgz", + "integrity": "sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.59.3", + "@typescript-eslint/tsconfig-utils": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "node_modules/@typescript-eslint/utils": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.3.tgz", + "integrity": "sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.3.tgz", + "integrity": "sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==", "dev": true, "license": "MIT", "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" + "@typescript-eslint/types": "8.59.3", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "node_modules/@vitejs/plugin-react": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@rolldown/pluginutils": "^1.0.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } } }, "node_modules/@wppconnect/wa-proto": { @@ -1610,6 +6012,38 @@ "protobufjs": "^7.4.0" } }, + "node_modules/@xyflow/react": { + "version": "12.10.2", + "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.10.2.tgz", + "integrity": "sha512-CgIi6HwlcHXwlkTpr0fxLv/0sRVNZ8IdwKLzzeCscaYBwpvfcH1QFOCeaTCuEn1FQEs/B8CjnTSjhs8udgmBgQ==", + "license": "MIT", + "dependencies": { + "@xyflow/system": "0.0.76", + "classcat": "^5.0.3", + "zustand": "^4.4.0" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.76", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.76.tgz", + "integrity": "sha512-hvwvnRS1B3REwVDlWexsq7YQaPZeG3/mKo1jv38UmnpWmxihp14bW6VtEOuHEwJX2FvzFw8k77LyKSk/wiZVNA==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } + }, "node_modules/abstract-logging": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", @@ -1629,6 +6063,29 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/ajv": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", @@ -1662,6 +6119,60 @@ } } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/async-mutex": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", @@ -1671,6 +6182,12 @@ "tslib": "^2.4.0" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", @@ -1700,6 +6217,21 @@ "fastq": "^1.17.1" } }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -1729,10 +6261,36 @@ ], "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.30.tgz", + "integrity": "sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, "node_modules/berryapi": { "resolved": "packages/berryapi", "link": true }, + "node_modules/berryonepro-probe": { + "resolved": "packages/berryonepro-probe", + "link": true + }, "node_modules/berryotp": { "resolved": "packages/berryotp", "link": true @@ -1741,15 +6299,13 @@ "resolved": "packages/berryprotocol", "link": true }, - "node_modules/better-sqlite3": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", - "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", - "hasInstallScript": true, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" + "engines": { + "node": "*" } }, "node_modules/bindings": { @@ -1772,6 +6328,12 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, "node_modules/body-parser": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", @@ -1808,6 +6370,40 @@ "node": "18 || 20 || >=22" } }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1854,41 +6450,157 @@ "qified": "^0.10.1" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001792", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz", + "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chance": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.13.tgz", + "integrity": "sha512-V6lQCljcLznE7tUYUM9EOAnnKXbctE6j/rdQkYOHIWbfGQbrzTsAXNW9CdU5XCo4ArXQCj/rb6HgxPlmGJcaUg==", + "license": "MIT" + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/class-transformer": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.3.1.tgz", + "integrity": "sha512-cKFwohpJbuMovS8xVLmn8N2AUbAuc8pVo4zEfsUVo8qgECOogns1WVk/FkOZoxhOPTyTYFckuoH+13FO+MQ8GA==", + "license": "MIT" + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" + "node": ">=7.0.0" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, "node_modules/commander": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", @@ -1920,6 +6632,13 @@ "node": ">= 0.6" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -1938,12 +6657,157 @@ "node": ">=6.6.0" } }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/curve25519-js": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", "license": "MIT" }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -1961,6 +6825,15 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -1985,6 +6858,22 @@ "node": ">=4.0.0" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2012,10 +6901,22 @@ "node": ">=8" } }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" + }, "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -2175,12 +7076,35 @@ "stream-shift": "^1.0.2" } }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/electron-to-chromium": { + "version": "1.5.357", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.357.tgz", + "integrity": "sha512-NHlTIQDK8fmVwHwuIzmXYEJ1Ewq3D9wDNc0cWXxDGysP6Pb21giwGNkxiTifyKy/4SoPuN5l6GLP1W9Sv7zB2g==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -2199,6 +7123,19 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.21.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.3.tgz", + "integrity": "sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2229,11 +7166,26 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.27.7", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -2271,11 +7223,239 @@ "@esbuild/win32-x64": "0.27.7" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.0.tgz", + "integrity": "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/etag": { "version": "1.8.1", @@ -2344,6 +7524,21 @@ "url": "https://opencollective.com/express" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", @@ -2356,6 +7551,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, "node_modules/fast-json-stringify": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.4.0.tgz", @@ -2380,6 +7581,13 @@ "rfdc": "^1.2.0" } }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-querystring": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", @@ -2463,6 +7671,36 @@ "reusify": "^1.0.4" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/file-type": { "version": "21.3.4", "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", @@ -2522,6 +7760,101 @@ "node": ">=20" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flat-cache/node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2550,7 +7883,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -2570,6 +7902,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -2594,6 +7945,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -2611,7 +7971,7 @@ "version": "4.14.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -2620,6 +7980,15 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -2643,6 +8012,32 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -2655,6 +8050,57 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -2667,6 +8113,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hashery": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", @@ -2691,6 +8152,23 @@ "node": ">= 0.4" } }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, "node_modules/hookified": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", @@ -2717,6 +8195,21 @@ "url": "https://opencollective.com/express" } }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, "node_modules/iconv-lite": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", @@ -2753,6 +8246,38 @@ ], "license": "BSD-3-Clause" }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -2765,13 +8290,94 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "license": "ISC" }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/instagram-private-api": { + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/instagram-private-api/-/instagram-private-api-1.46.1.tgz", + "integrity": "sha512-fq0q6UfhpikKZ5Kw8HNwS6YpsNghE9I/uc8AM9Do9nsQ+3H1u0jLz+0t/FcGkGTjZz5VGvU8s2VbWj9wxchwYg==", + "license": "MIT", + "dependencies": { + "@lifeomic/attempt": "^3.0.0", + "@types/chance": "^1.0.2", + "@types/request-promise": "^4.1.43", + "bluebird": "^3.7.1", + "chance": "^1.0.18", + "class-transformer": "^0.3.1", + "debug": "^4.1.1", + "image-size": "^0.7.3", + "json-bigint": "^1.0.0", + "lodash": "^4.17.20", + "luxon": "^1.12.1", + "reflect-metadata": "^0.1.13", + "request": "^2.88.0", + "request-promise": "^4.2.4", + "rxjs": "^6.5.2", + "snakecase-keys": "^3.1.0", + "tough-cookie": "^2.5.0", + "ts-custom-error": "^2.2.2", + "ts-xor": "^1.0.6", + "url-regex-safe": "^3.0.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "re2": "^1.17.2" + }, + "peerDependenciesMeta": { + "re2": { + "optional": true + } + } + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-promise": { @@ -2780,6 +8386,82 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, "node_modules/json-schema-ref-resolver": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz", @@ -2822,6 +8504,47 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/keyv": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", @@ -2831,6 +8554,20 @@ "@keyv/serialize": "^1.1.1" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/libsignal": { "version": "6.0.0", "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#bcea72df9ec34d9d9140ab30619cf479c7c144c7", @@ -2854,40 +8591,311 @@ "url": "https://opencollective.com/fastify" } ], - "license": "BSD-3-Clause", - "dependencies": { - "cookie": "^1.0.1", - "process-warning": "^4.0.0", - "set-cookie-parser": "^2.6.0" + "license": "BSD-3-Clause", + "dependencies": { + "cookie": "^1.0.1", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" + } + }, + "node_modules/light-my-request/node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/light-my-request/node_modules/process-warning": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", + "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/light-my-request/node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/light-my-request/node_modules/process-warning": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", - "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/long": { @@ -2905,6 +8913,45 @@ "node": "20 || >=22" } }, + "node_modules/lucide-react": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.16.0.tgz", + "integrity": "sha512-dYwyPzb4MEKpGUmNYk3WKWPnMrHs3FKM+q94kAnJrcDIqqn1hq2xY8scaS2ovsOCM5D51ey2gaRG3PBb1vgoYQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/luxon": { + "version": "1.28.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz", + "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -3060,12 +9107,37 @@ "node": ">=18" } }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/napi-build-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", "license": "MIT" }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -3087,6 +9159,45 @@ "node": ">=10" } }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "node_modules/node-hid": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.3.0.tgz", + "integrity": "sha512-j+dFgJLRAE0nufQKXk3IfS6T6YuHhCgMvz4TrG0sgtb6DSCdYpfJ1etcdmeCmPQjUgO+yo32ktVrRliNs/+fmg==", + "hasInstallScript": true, + "license": "(MIT OR X11)", + "dependencies": { + "node-addon-api": "^3.2.1", + "pkg-prebuilds": "^1.0.0" + }, + "bin": { + "hid-showdevices": "src/show-devices.js" + }, + "engines": { + "node": ">=10.16" + } + }, + "node_modules/node-releases": { + "version": "2.0.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz", + "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -3129,12 +9240,83 @@ "wrappy": "1" } }, + "node_modules/openai": { + "version": "6.38.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.38.0.tgz", + "integrity": "sha512-AoMplt2UalrpgUDMh3L09QWjNRlgJPipclQvA6sYAaeF6nHNBMgmikAZGmcYLn8on4d9sQY9Q8bOLfrBS7Lc8g==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", "license": "MIT" }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-queue": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", @@ -3163,6 +9345,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -3179,6 +9370,25 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -3205,6 +9415,30 @@ "url": "https://opencollective.com/express" } }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/pino": { "version": "9.14.0", "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", @@ -3227,20 +9461,184 @@ "pino": "bin.js" } }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/pkg-prebuilds": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-prebuilds/-/pkg-prebuilds-1.0.0.tgz", + "integrity": "sha512-D9wlkXZCmjxj2kBHTw3fGSyjoahr33breGBoJcoezpi7ouYS59DJVOHMZ+dgqacSrZiJo4qtkXxLQTE+BqXJmQ==", + "license": "MIT", + "dependencies": { + "yargs": "^17.7.2" + }, + "bin": { + "pkg-prebuilds-copy": "bin/copy.mjs", + "pkg-prebuilds-verify": "bin/verify.mjs" + }, + "engines": { + "node": ">= 14.15.0" + } + }, + "node_modules/pkg-prebuilds/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/pkg-prebuilds/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/pkg-prebuilds/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg-prebuilds/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/pkg-prebuilds/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/playwright": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", "license": "MIT", - "dependencies": { - "split2": "^4.0.0" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/pino-std-serializers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", - "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", - "license": "MIT" + "node_modules/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } }, "node_modules/prebuild-install": { "version": "7.1.3", @@ -3269,6 +9667,16 @@ "node": ">=10" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/process-warning": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", @@ -3322,6 +9730,18 @@ "node": ">= 0.10" } }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, "node_modules/pump": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", @@ -3332,6 +9752,15 @@ "once": "^1.3.1" } }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qified": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", @@ -3350,6 +9779,23 @@ "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", "license": "MIT" }, + "node_modules/qrcode": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz", + "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/qrcode-terminal": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", @@ -3379,6 +9825,147 @@ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "license": "MIT" }, + "node_modules/radix-ui": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.4.3.tgz", + "integrity": "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-accessible-icon": "1.1.7", + "@radix-ui/react-accordion": "1.2.12", + "@radix-ui/react-alert-dialog": "1.1.15", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-aspect-ratio": "1.1.7", + "@radix-ui/react-avatar": "1.1.10", + "@radix-ui/react-checkbox": "1.3.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-context-menu": "2.2.16", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-dropdown-menu": "2.1.16", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-form": "0.1.8", + "@radix-ui/react-hover-card": "1.1.15", + "@radix-ui/react-label": "2.1.7", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-menubar": "1.1.16", + "@radix-ui/react-navigation-menu": "1.2.14", + "@radix-ui/react-one-time-password-field": "0.1.8", + "@radix-ui/react-password-toggle-field": "0.1.3", + "@radix-ui/react-popover": "1.1.15", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-progress": "1.1.7", + "@radix-ui/react-radio-group": "1.3.8", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-scroll-area": "1.2.10", + "@radix-ui/react-select": "2.2.6", + "@radix-ui/react-separator": "1.1.7", + "@radix-ui/react-slider": "1.3.6", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-switch": "1.2.6", + "@radix-ui/react-tabs": "1.1.13", + "@radix-ui/react-toast": "1.2.15", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-toggle-group": "1.1.11", + "@radix-ui/react-toolbar": "1.1.11", + "@radix-ui/react-tooltip": "1.2.8", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-escape-keydown": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/radix-ui/node_modules/@radix-ui/react-label": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/radix-ui/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/radix-ui/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -3418,6 +10005,165 @@ "rc": "cli.js" } }, + "node_modules/react": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", + "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", + "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.6" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.15.1.tgz", + "integrity": "sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.15.1.tgz", + "integrity": "sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==", + "license": "MIT", + "dependencies": { + "react-router": "7.15.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-router/node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/reactflow": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.4.tgz", + "integrity": "sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==", + "license": "MIT", + "dependencies": { + "@reactflow/background": "11.3.14", + "@reactflow/controls": "11.2.14", + "@reactflow/core": "11.11.4", + "@reactflow/minimap": "11.7.14", + "@reactflow/node-resizer": "2.2.14", + "@reactflow/node-toolbar": "1.3.14" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -3429,16 +10175,141 @@ "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 6" + "node": ">= 6" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", + "license": "Apache-2.0" + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "license": "ISC", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" } }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", "engines": { - "node": ">= 12.13.0" + "node": ">=0.10.0" } }, "node_modules/require-from-string": { @@ -3450,11 +10321,17 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -3505,6 +10382,39 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rolldown": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz", + "integrity": "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.130.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.1", + "@rolldown/binding-darwin-arm64": "1.0.1", + "@rolldown/binding-darwin-x64": "1.0.1", + "@rolldown/binding-freebsd-x64": "1.0.1", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", + "@rolldown/binding-linux-arm64-gnu": "1.0.1", + "@rolldown/binding-linux-arm64-musl": "1.0.1", + "@rolldown/binding-linux-ppc64-gnu": "1.0.1", + "@rolldown/binding-linux-s390x-gnu": "1.0.1", + "@rolldown/binding-linux-x64-gnu": "1.0.1", + "@rolldown/binding-linux-x64-musl": "1.0.1", + "@rolldown/binding-openharmony-arm64": "1.0.1", + "@rolldown/binding-wasm32-wasi": "1.0.1", + "@rolldown/binding-win32-arm64-msvc": "1.0.1", + "@rolldown/binding-win32-x64-msvc": "1.0.1" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -3521,6 +10431,24 @@ "node": ">= 18" } }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -3578,6 +10506,12 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, "node_modules/secure-json-parse": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz", @@ -3651,6 +10585,12 @@ "url": "https://opencollective.com/express" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, "node_modules/set-cookie-parser": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", @@ -3663,50 +10603,27 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, - "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.2", - "semver": "^7.7.3" + "shebang-regex": "^3.0.0" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, "node_modules/side-channel": { @@ -3826,6 +10743,19 @@ "simple-concat": "^1.0.0" } }, + "node_modules/snakecase-keys": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-3.2.1.tgz", + "integrity": "sha512-CjU5pyRfwOtaOITYv5C8DzpZ8XA/ieRsDpr93HI2r6e3YInC6moZpSQbmUtg8cTk58tq2x3jcG2gv+p1IZGmMA==", + "license": "MIT", + "dependencies": { + "map-obj": "^4.1.0", + "to-snake-case": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/sonic-boom": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", @@ -3835,6 +10765,15 @@ "atomic-sleep": "^1.0.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -3844,6 +10783,31 @@ "node": ">= 10.x" } }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -3853,6 +10817,15 @@ "node": ">= 0.8" } }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", @@ -3868,6 +10841,32 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -3893,6 +10892,39 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/studio": { + "resolved": "packages/studio", + "link": true + }, + "node_modules/tailwind-merge": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", + "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/tar-fs": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", @@ -3930,6 +10962,55 @@ "real-require": "^0.2.0" } }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tlds": { + "version": "1.261.0", + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.261.0.tgz", + "integrity": "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==", + "license": "MIT", + "bin": { + "tlds": "bin.js" + } + }, + "node_modules/to-no-case": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", + "integrity": "sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==", + "license": "MIT" + }, + "node_modules/to-snake-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-snake-case/-/to-snake-case-1.0.0.tgz", + "integrity": "sha512-joRpzBAk1Bhi2eGEYBjukEWHOe/IvclOkiJl3DtA91jV6NwQ3MwXA4FHYeqk8BNp/D8bmi9tcNbRu/SozP0jbQ==", + "license": "MIT", + "dependencies": { + "to-space-case": "^1.0.0" + } + }, + "node_modules/to-space-case": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", + "integrity": "sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==", + "license": "MIT", + "dependencies": { + "to-no-case": "^1.0.0" + } + }, "node_modules/toad-cache": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", @@ -3966,6 +11047,48 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-custom-error": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-2.2.2.tgz", + "integrity": "sha512-I0FEdfdatDjeigRqh1JFj67bcIKyRNm12UVGheBjs2pXgyELg2xeiQLVaWu1pVmNGXZVnz/fvycSU41moBIpOg==", + "deprecated": "npm package tarball contains useless codeclimate-reporter binary, please update to version 3.1.1. See https://github.com/adriengibrat/ts-custom-error/issues/32", + "license": "WTFPL", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ts-xor": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-xor/-/ts-xor-1.3.0.tgz", + "integrity": "sha512-RLXVjliCzc1gfKQFLRpfeD0rrWmjnSTgj7+RFhoq3KRkUYa8LE/TIidYOzM5h+IdFBDSjjSgk9Lto9sdMfDFEA==", + "license": "MIT" + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -3976,7 +11099,7 @@ "version": "4.21.0", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "esbuild": "~0.27.0", @@ -4004,6 +11127,25 @@ "node": "*" } }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-is": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", @@ -4032,6 +11174,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.3.tgz", + "integrity": "sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.59.3", + "@typescript-eslint/parser": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/utils": "8.59.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, "node_modules/uint8array-extras": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", @@ -4059,12 +11225,144 @@ "node": ">= 0.8" } }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-regex-safe": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-regex-safe/-/url-regex-safe-3.0.0.tgz", + "integrity": "sha512-+2U40NrcmtWFVjuxXVt9bGRw6c7/MgkGKN9xIfPrT/2RX0LTkkae6CCEDp93xqUN0UKm/rr821QnHd2dHQmN3A==", + "license": "MIT", + "dependencies": { + "ip-regex": "4.3.0", + "tlds": "^1.228.0" + }, + "engines": { + "node": ">= 10.12.0" + }, + "peerDependencies": { + "re2": "^1.17.2" + }, + "peerDependenciesMeta": { + "re2": { + "optional": true + } + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -4074,18 +11372,155 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz", + "integrity": "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==", + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.14", + "rolldown": "1.0.1", + "tinyglobby": "^0.2.16" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "node_modules/whatsapp-rust-bridge": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.3.tgz", "integrity": "sha512-Xb3GAgtWQQJ30oI4a4pjM4+YUeli9CMLTwTIewUrb+AJMFElIkiT5uo+j1Zhc+amiV0Jj+LfX76c/EEZirJbGA==", "license": "MIT" }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, "node_modules/win-guid": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", "license": "MIT" }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4113,6 +11548,19 @@ } } }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/yaml": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", @@ -4128,6 +11576,106 @@ "url": "https://github.com/sponsors/eemeli" } }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", @@ -4146,13 +11694,57 @@ "zod": "^3.25.28 || ^4" } }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, "packages/auth": { "name": "@berrysdk/auth", "version": "0.1.2", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.4", - "@berrysdk/store": "0.1.3" + "@berrysdk/events": "^0.1.4", + "@berrysdk/store": "^0.1.4" + }, + "engines": { + "node": "20.x || >=22 <27" } }, "packages/berry-otp": { @@ -4160,7 +11752,7 @@ "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.9" + "@berrysdk/core": "^0.1.9" } }, "packages/berry-otp/node_modules/@berrysdk/core/node_modules/@berrysdk/events": { @@ -4174,12 +11766,12 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.9", + "@berrysdk/core": "^0.1.10", "@fastify/cors": "^11.1.0", "@fastify/swagger": "^9.5.1", "@fastify/swagger-ui": "^5.2.3", "@fastify/websocket": "^11.2.0", - "better-sqlite3": "^11.10.0", + "better-sqlite3": "^12.11.1", "dotenv": "^16.6.1", "drizzle-orm": "^0.44.2", "fastify": "^5.6.1", @@ -4189,21 +11781,67 @@ "zod-to-json-schema": "^3.24.6" } }, + "packages/berryapi/node_modules/better-sqlite3": { + "version": "12.11.1", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz", + "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x" + } + }, + "packages/berryapi/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "packages/berryonepro": { + "name": "@berrysdk/berryonepro", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "dotenv": "^17.4.2", + "instagram-private-api": "^1.46.1", + "pino": "^9.14.0" + } + }, + "packages/berryonepro-probe": { + "version": "0.0.1", + "dependencies": { + "dotenv": "^17.4.2", + "playwright": "^1.54.2" + } + }, "packages/berryotp": { "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/berry-otp": "0.1.9" + "@berrysdk/berry-otp": "^0.1.9" }, "peerDependencies": { "berryprotocol": "^0.1.9" } }, "packages/berryprotocol": { - "version": "0.1.9", + "version": "0.1.10", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.9" + "@berrysdk/core": "^0.1.10" + }, + "engines": { + "node": "20.x || >=22 <27" } }, "packages/cli": { @@ -4211,24 +11849,27 @@ "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.9", + "@berrysdk/core": "^0.1.9", "commander": "^14.0.0", "pino": "^9.6.0" } }, "packages/core": { "name": "@berrysdk/core", - "version": "0.1.9", + "version": "0.1.10", "license": "Apache-2.0", "dependencies": { - "@berrysdk/auth": "0.1.2", - "@berrysdk/events": "0.1.4", - "@berrysdk/media": "0.1.2", - "@berrysdk/messages": "0.1.3", - "@berrysdk/socket": "0.1.9", - "@berrysdk/store": "0.1.3", + "@berrysdk/auth": "^0.1.2", + "@berrysdk/events": "^0.1.4", + "@berrysdk/media": "^0.1.2", + "@berrysdk/messages": "^0.1.3", + "@berrysdk/socket": "^0.1.10", + "@berrysdk/store": "^0.1.4", "pino": "^9.6.0", "qrcode-terminal": "^0.12.0" + }, + "engines": { + "node": "20.x || >=22 <27" } }, "packages/core/node_modules/@berrysdk/auth/node_modules/@berrysdk/events": { @@ -4266,7 +11907,7 @@ "version": "0.1.9", "license": "Apache-2.0", "dependencies": { - "@berrysdk/core": "0.1.9", + "@berrysdk/core": "^0.1.9", "express": "^5.1.0", "pino": "^9.6.0" } @@ -4274,14 +11915,17 @@ "packages/media": { "name": "@berrysdk/media", "version": "0.1.2", - "license": "Apache-2.0" + "license": "Apache-2.0", + "engines": { + "node": "20.x || >=22 <27" + } }, "packages/messages": { "name": "@berrysdk/messages", "version": "0.1.3", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.4" + "@berrysdk/events": "^0.1.4" } }, "packages/protocol": { @@ -4291,39 +11935,127 @@ "dependencies": { "@wppconnect/wa-proto": "^2.3000.1030818676", "protobufjs": "^7.4.0" + }, + "engines": { + "node": "20.x || >=22 <27" } }, "packages/socket": { "name": "@berrysdk/socket", - "version": "0.1.9", + "version": "0.1.10", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.4", - "@berrysdk/proto": "0.1.2", - "@berrysdk/transport": "0.1.8", - "@berrysdk/wa-message": "0.1.9", + "@berrysdk/events": "^0.1.4", + "@berrysdk/proto": "^0.1.2", + "@berrysdk/transport": "^0.1.9", + "@berrysdk/wa-message": "^0.1.10", "pino": "^9.6.0", "ws": "^8.18.1" + }, + "engines": { + "node": "20.x || >=22 <27" } }, "packages/store": { "name": "@berrysdk/store", - "version": "0.1.3", + "version": "0.1.4", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.4", - "better-sqlite3": "^11.10.0" + "@berrysdk/events": "^0.1.4", + "better-sqlite3": "^12.11.1" + }, + "engines": { + "node": "20.x || >=22 <27" + } + }, + "packages/store/node_modules/better-sqlite3": { + "version": "12.11.1", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz", + "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x" + } + }, + "packages/studio": { + "version": "0.0.0", + "dependencies": { + "@radix-ui/react-label": "^2.1.7", + "@tailwindcss/vite": "^4.3.0", + "@xyflow/react": "^12.10.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^1.16.0", + "qrcode": "^1.5.4", + "radix-ui": "^1.4.3", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-router-dom": "^7.15.1", + "reactflow": "^11.11.4", + "tailwind-merge": "^3.6.0", + "tailwindcss": "^4.3.0" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^24.12.3", + "@types/qrcode": "^1.5.6", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "typescript": "~6.0.2", + "typescript-eslint": "^8.59.2", + "vite": "^8.0.12" + } + }, + "packages/studio/node_modules/@types/node": { + "version": "24.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", + "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "packages/studio/node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, + "packages/studio/node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, "packages/transport": { "name": "@berrysdk/transport", - "version": "0.1.8", + "version": "0.1.9", "license": "Apache-2.0", "dependencies": { "@cacheable/node-cache": "^1.4.0", "@hapi/boom": "^9.1.3", "async-mutex": "^0.5.0", - "libsignal": "git+https://github.com/whiskeysockets/libsignal-node", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", "lru-cache": "^11.1.0", "music-metadata": "^11.12.3", "p-queue": "^9.0.0", @@ -4332,6 +12064,9 @@ "whatsapp-rust-bridge": "0.5.3", "ws": "^8.18.1" }, + "engines": { + "node": "20.x || >=22 <27" + }, "peerDependencies": { "audio-decode": "^2.1.3", "jimp": "^1.6.1", @@ -4355,12 +12090,15 @@ }, "packages/wa-message": { "name": "@berrysdk/wa-message", - "version": "0.1.9", + "version": "0.1.10", "license": "Apache-2.0", "dependencies": { - "@berrysdk/events": "0.1.4", - "@berrysdk/proto": "0.1.2", - "@berrysdk/transport": "0.1.8" + "@berrysdk/events": "^0.1.4", + "@berrysdk/proto": "^0.1.2", + "@berrysdk/transport": "^0.1.9" + }, + "engines": { + "node": "20.x || >=22 <27" } } } diff --git a/package.json b/package.json index 7e9cc8c..2081cbe 100644 --- a/package.json +++ b/package.json @@ -1,46 +1,53 @@ { - "name": "berrysdk", - "version": "0.1.9", - "private": true, - "type": "module", - "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", - "author": "Lipe Devv and Berry Protocol", - "license": "Apache-2.0", - "keywords": [ - "whatsapp", - "sdk", - "bot", - "berrysdk", - "whatsapp-web" - ], - "workspaces": [ - "packages/*" - ], - "dependencies": { - "qrcode-terminal": "^0.12.0" - }, - "scripts": { - "build": "tsc -b packages/events packages/transport packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli packages/berryapi", - "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName \u0027dist\u0027) -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName \u0027.tsbuildinfo\u0027) -ErrorAction SilentlyContinue }\"", - "prepare:publish": "npm run clean \u0026\u0026 npm run build", - "pack:check": "npm pack --workspaces --json", - "dev": "npm run dev --workspace berryapi", - "start": "npm run start --workspace berryapi", - "dev:gateway": "npm run build \u0026\u0026 node packages/gateway/dist/index.js", - "dev:cli": "npm run build \u0026\u0026 node packages/cli/dist/index.js", - "dev:berryapi": "npm run dev --workspace berryapi", - "start:berryapi": "npm run start --workspace berryapi", - "start:gateway": "node packages/gateway/dist/index.js", - "start:cli": "node packages/cli/dist/index.js" - }, - "devDependencies": { - "@types/better-sqlite3": "^7.6.13", - "@types/express": "^5.0.1", - "@types/node": "^22.15.3", - "@types/qrcode-terminal": "^0.12.2", - "@types/ws": "^8.18.1", - "rimraf": "^6.0.1", - "tsx": "^4.19.4", - "typescript": "^5.8.3" - } + "name": "berrysdk", + "version": "0.1.10", + "private": true, + "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, + "description": "Berry SDK monorepo for WhatsApp Web SDK, transport, proto wrappers, and publishing packages.", + "author": "Lipe Devv and Berry Protocol", + "license": "Apache-2.0", + "keywords": [ + "whatsapp", + "sdk", + "bot", + "berrysdk", + "whatsapp-web" + ], + "workspaces": [ + "packages/*" + ], + "dependencies": { + "berryprotocol": "^0.1.10", + "dotenv": "^17.4.2", + "node-hid": "^3.3.0", + "openai": "^6.38.0", + "qrcode-terminal": "^0.12.0" + }, + "scripts": { + "build": "tsc -b packages/events packages/transport packages/protocol packages/messages packages/wa-message packages/media packages/store packages/auth packages/socket packages/core packages/berry-otp packages/berryprotocol packages/berryotp packages/gateway packages/cli packages/berryapi && npm run build --workspace studio", + "clean": "powershell -NoProfile -Command \"Get-ChildItem packages -Directory | ForEach-Object { Remove-Item -Recurse -Force (Join-Path $_.FullName 'dist') -ErrorAction SilentlyContinue; Remove-Item -Force (Join-Path $_.FullName '.tsbuildinfo') -ErrorAction SilentlyContinue }\"", + "prepare:publish": "npm run clean && npm run build", + "pack:check": "npm pack --workspaces --json", + "dev": "npm run dev --workspace berryapi", + "start": "npm run start --workspace berryapi", + "dev:gateway": "npm run build && node packages/gateway/dist/index.js", + "dev:cli": "npm run build && node packages/cli/dist/index.js", + "dev:berryapi": "npm run dev --workspace berryapi", + "start:berryapi": "npm run start --workspace berryapi", + "start:gateway": "node packages/gateway/dist/index.js", + "start:cli": "node packages/cli/dist/index.js" + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.13", + "@types/express": "^5.0.1", + "@types/node": "^22.15.3", + "@types/qrcode-terminal": "^0.12.2", + "@types/ws": "^8.18.1", + "rimraf": "^6.0.1", + "tsx": "^4.19.4", + "typescript": "^5.8.3" + } } diff --git a/packages/auth/package.json b/packages/auth/package.json index f595253..a3be78b 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -5,6 +5,9 @@ "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ @@ -20,7 +23,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/events": "0.1.4", - "@berrysdk/store": "0.1.3" + "@berrysdk/events": "^0.1.4", + "@berrysdk/store": "^0.1.4" } } diff --git a/packages/berry-otp/README.md b/packages/berry-otp/README.md index c7b230c..f3b4106 100644 --- a/packages/berry-otp/README.md +++ b/packages/berry-otp/README.md @@ -33,6 +33,7 @@ const client = new BerryClient({ }); await client.connectWithQr(); +await client.waitUntilConnected(); const otp = BerryOTP.createLoginFlow(client, { issuer: "BerryProtocol", diff --git a/packages/berry-otp/package.json b/packages/berry-otp/package.json index 3de2f5e..44ad88e 100644 --- a/packages/berry-otp/package.json +++ b/packages/berry-otp/package.json @@ -23,6 +23,6 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.9" + "@berrysdk/core": "^0.1.9" } } diff --git a/packages/berryapi/package.json b/packages/berryapi/package.json index ca6febb..48cf69a 100644 --- a/packages/berryapi/package.json +++ b/packages/berryapi/package.json @@ -17,12 +17,12 @@ "start": "node dist/server.js" }, "dependencies": { - "@berrysdk/core": "0.1.9", + "@berrysdk/core": "^0.1.10", "@fastify/cors": "^11.1.0", "@fastify/swagger": "^9.5.1", "@fastify/swagger-ui": "^5.2.3", "@fastify/websocket": "^11.2.0", - "better-sqlite3": "^11.10.0", + "better-sqlite3": "^12.11.1", "dotenv": "^16.6.1", "drizzle-orm": "^0.44.2", "fastify": "^5.6.1", diff --git a/packages/berryapi/src/app.ts b/packages/berryapi/src/app.ts index a7b223a..0ca0486 100644 --- a/packages/berryapi/src/app.ts +++ b/packages/berryapi/src/app.ts @@ -19,6 +19,8 @@ import { registerMessageRoutes } from "./modules/message/routes/message.routes.j import { registerChatRoutes } from "./modules/chat/chat.routes.js"; import { registerProfileRoutes } from "./modules/profile/profile.routes.js"; import { registerGroupRoutes } from "./modules/group/group.routes.js"; +import { registerFlowRoutes } from "./modules/flow/flow.routes.js"; +import { registerStudioRoutes } from "./modules/studio/studio.routes.js"; import { WebhookDispatcher } from "./webhook/WebhookDispatcher.js"; export const buildApp = async () => { @@ -106,6 +108,8 @@ export const buildApp = async () => { await registerChatRoutes(app, manager); await registerProfileRoutes(app, manager); await registerGroupRoutes(app, manager); + await registerFlowRoutes(app, manager); + await registerStudioRoutes(app); return app; }; diff --git a/packages/berryapi/src/database/init.ts b/packages/berryapi/src/database/init.ts index 8157298..1192249 100644 --- a/packages/berryapi/src/database/init.ts +++ b/packages/berryapi/src/database/init.ts @@ -20,4 +20,42 @@ export const initDatabase = async (): Promise => { updated_at TEXT NOT NULL ); `); + + sqlite.exec(` + CREATE TABLE IF NOT EXISTS flows ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'draft', + draft_version_id TEXT, + published_version_id TEXT, + canvas_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + `); + + sqlite.exec(` + CREATE TABLE IF NOT EXISTS flow_versions ( + id TEXT PRIMARY KEY, + flow_id TEXT NOT NULL, + version_number INTEGER NOT NULL, + graph_json TEXT NOT NULL, + snapshot_json TEXT NOT NULL DEFAULT '{}', + created_at TEXT NOT NULL + ); + `); + + sqlite.exec(` + CREATE TABLE IF NOT EXISTS flow_runs ( + id TEXT PRIMARY KEY, + flow_id TEXT NOT NULL, + flow_version_id TEXT, + status TEXT NOT NULL DEFAULT 'idle', + current_node_id TEXT, + variables_json TEXT NOT NULL DEFAULT '{}', + history_json TEXT NOT NULL DEFAULT '[]', + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ); + `); }; diff --git a/packages/berryapi/src/database/schema.ts b/packages/berryapi/src/database/schema.ts index 3582a21..bfb8fdb 100644 --- a/packages/berryapi/src/database/schema.ts +++ b/packages/berryapi/src/database/schema.ts @@ -18,5 +18,40 @@ export const instancesTable = sqliteTable("instances", { updatedAt: text("updated_at").notNull(), }); +export const flowsTable = sqliteTable("flows", { + id: text("id").primaryKey(), + name: text("name").notNull(), + status: text("status").notNull().default("draft"), + draftVersionId: text("draft_version_id"), + publishedVersionId: text("published_version_id"), + canvasJson: text("canvas_json").notNull().default("{}"), + createdAt: text("created_at").notNull(), + updatedAt: text("updated_at").notNull(), +}); + +export const flowVersionsTable = sqliteTable("flow_versions", { + id: text("id").primaryKey(), + flowId: text("flow_id").notNull(), + versionNumber: integer("version_number").notNull(), + graphJson: text("graph_json").notNull(), + snapshotJson: text("snapshot_json").notNull().default("{}"), + createdAt: text("created_at").notNull(), +}); + +export const flowRunsTable = sqliteTable("flow_runs", { + id: text("id").primaryKey(), + flowId: text("flow_id").notNull(), + flowVersionId: text("flow_version_id"), + status: text("status").notNull().default("idle"), + currentNodeId: text("current_node_id"), + variablesJson: text("variables_json").notNull().default("{}"), + historyJson: text("history_json").notNull().default("[]"), + createdAt: text("created_at").notNull(), + updatedAt: text("updated_at").notNull(), +}); + export type InstanceRow = typeof instancesTable.$inferSelect; export type NewInstanceRow = typeof instancesTable.$inferInsert; +export type FlowRow = typeof flowsTable.$inferSelect; +export type FlowVersionRow = typeof flowVersionsTable.$inferSelect; +export type FlowRunRow = typeof flowRunsTable.$inferSelect; diff --git a/packages/berryapi/src/docs/schema.ts b/packages/berryapi/src/docs/schema.ts index 610a886..8f7b844 100644 --- a/packages/berryapi/src/docs/schema.ts +++ b/packages/berryapi/src/docs/schema.ts @@ -6,7 +6,7 @@ export const envelopeSchema = { properties: { success: { type: "boolean" }, message: { type: "string" }, - data: { type: "object", additionalProperties: true }, + data: {}, }, }; @@ -15,7 +15,7 @@ export const errorEnvelopeSchema = { properties: { success: { type: "boolean", enum: [false] }, message: { type: "string" }, - error: { type: "object", additionalProperties: true }, + error: {}, }, }; diff --git a/packages/berryapi/src/managers/InstanceManager.ts b/packages/berryapi/src/managers/InstanceManager.ts index 62298ac..ae414f3 100644 --- a/packages/berryapi/src/managers/InstanceManager.ts +++ b/packages/berryapi/src/managers/InstanceManager.ts @@ -7,6 +7,7 @@ import { BerryProtocolProvider } from "../providers/whatsapp/BerryProtocolProvid import type { ProviderEventPayload, ProviderSendOptions, WhatsAppProvider } from "../providers/whatsapp/WhatsAppProvider.js"; import { WebhookDispatcher } from "../webhook/WebhookDispatcher.js"; import { RealtimeGateway } from "../realtime/RealtimeGateway.js"; +import { logger } from "../utils/logger.js"; type CreateInstanceInput = { instanceName: string; @@ -50,6 +51,9 @@ const rowToInstance = (row: InstanceRow): InstanceRecord => ({ export class InstanceManager { private readonly providers = new Map(); + private readonly eventListeners = new Set< + (event: ProviderEventPayload) => void | Promise + >(); constructor( private readonly realtime: RealtimeGateway, @@ -119,9 +123,11 @@ export class InstanceManager { status: "connecting", connectionState: "connecting", }); - await provider.connect({ + void provider.connect({ authMethod: instance.authMethod, phoneNumber: instance.phoneNumber, + }).catch((error) => { + logger.error({ err: error, instanceName }, "failed to connect instance"); }); return this.getInstance(instanceName); } @@ -133,7 +139,9 @@ export class InstanceManager { status: "restarting", connectionState: "reconnecting", }); - await provider.reconnect(); + void provider.reconnect().catch((error) => { + logger.error({ err: error, instanceName }, "failed to restart instance"); + }); return this.getInstance(instanceName); } @@ -239,6 +247,15 @@ export class InstanceManager { return provider.fetchGroups(); } + onProviderEvent( + listener: (event: ProviderEventPayload) => void | Promise, + ): () => void { + this.eventListeners.add(listener); + return () => { + this.eventListeners.delete(listener); + }; + } + async setWebhook(instanceName: string, input: Partial): Promise { const instance = await this.getInstance(instanceName); const webhook: WebhookConfig = { @@ -339,6 +356,15 @@ export class InstanceManager { } this.realtime.broadcast(event); + for (const listener of this.eventListeners) { + void Promise.resolve(listener(event)).catch((error) => { + logger.error( + { err: error, instanceName, event: event.event }, + "provider event listener failed", + ); + }); + } + const instance = await this.getInstance(instanceName).catch(() => null); if (instance) { await this.webhooks.dispatch(instance.webhook, event); diff --git a/packages/berryapi/src/middlewares/auth.ts b/packages/berryapi/src/middlewares/auth.ts index 1eae846..c74579c 100644 --- a/packages/berryapi/src/middlewares/auth.ts +++ b/packages/berryapi/src/middlewares/auth.ts @@ -2,10 +2,20 @@ import type { FastifyReply, FastifyRequest } from "fastify"; import { env } from "../config/env.js"; import { HttpError } from "../utils/http-error.js"; -const publicPrefixes = ["/", "/info", "/docs", "/documentation", "/docs/json", env.BERRY_WS_PATH]; +const publicPrefixes = ["/info", "/docs", "/documentation", "/docs/json", env.BERRY_WS_PATH]; export const authMiddleware = async (request: FastifyRequest, _reply: FastifyReply) => { - if (publicPrefixes.some((prefix) => request.url === prefix || request.url.startsWith(`${prefix}/`))) { + const requestPath = request.url.split("?", 1)[0]; + const studioPageOrAsset = + (requestPath === "/studio" || requestPath.startsWith("/studio/")) + && !requestPath.startsWith("/studio/api/"); + + if ( + requestPath === "/" + || requestPath === "/favicon.ico" + || studioPageOrAsset + || publicPrefixes.some((prefix) => requestPath === prefix || requestPath.startsWith(`${prefix}/`)) + ) { return; } diff --git a/packages/berryapi/src/modules/flow/flow.catalog.ts b/packages/berryapi/src/modules/flow/flow.catalog.ts new file mode 100644 index 0000000..ffb4c80 --- /dev/null +++ b/packages/berryapi/src/modules/flow/flow.catalog.ts @@ -0,0 +1,569 @@ +export type StudioFieldType = + | "text" + | "textarea" + | "number" + | "checkbox" + | "select" + | "json"; + +export interface StudioFieldDefinition { + key: string; + label: string; + type: StudioFieldType; + required?: boolean; + placeholder?: string; + description?: string; + defaultValue?: unknown; + options?: Array<{ label: string; value: string }>; +} + +export interface StudioCapability { + id: string; + label: string; + description: string; + previewKind: string; + fields: StudioFieldDefinition[]; +} + +const mediaFields: StudioFieldDefinition[] = [ + { + key: "url", + label: "Media URL", + type: "text", + placeholder: "https://...", + }, + { + key: "path", + label: "Local path", + type: "text", + placeholder: "C:\\media\\image.png", + }, + { + key: "base64", + label: "Base64", + type: "textarea", + placeholder: "base64 content", + }, + { + key: "caption", + label: "Caption", + type: "textarea", + }, + { + key: "mimetype", + label: "Mime type", + type: "text", + placeholder: "image/png", + }, + { + key: "fileName", + label: "File name", + type: "text", + placeholder: "asset.png", + }, +]; + +const commonContextFields: StudioFieldDefinition[] = [ + { + key: "mentions", + label: "Mentions JSON", + type: "json", + placeholder: "[\"5511999999999@s.whatsapp.net\"]", + }, + { + key: "contextInfo", + label: "Context JSON", + type: "json", + placeholder: "{\"externalAdReply\": {}}", + }, + { + key: "forwardingScore", + label: "Forwarding score", + type: "number", + defaultValue: 0, + }, + { + key: "ephemeralExpiration", + label: "Ephemeral expiration", + type: "number", + }, +]; + +export const studioMessageCapabilities: StudioCapability[] = [ + { + id: "sendText", + label: "Text", + description: "Basic WhatsApp text message.", + previewKind: "text", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "linkPreview", label: "Link preview", type: "checkbox" }, + ...commonContextFields, + ], + }, + { + id: "sendExtendedText", + label: "Extended Text", + description: "Extended text using the same payload as text.", + previewKind: "text", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + ...commonContextFields, + ], + }, + { + id: "sendReply", + label: "Reply", + description: "Text reply linked to another message.", + previewKind: "reply", + fields: [ + { key: "text", label: "Reply text", type: "textarea", required: true }, + { + key: "quoted", + label: "Quoted message JSON", + type: "json", + required: true, + placeholder: "{\"remoteJid\":\"5511...@s.whatsapp.net\",\"id\":\"MSG_ID\"}", + }, + ...commonContextFields, + ], + }, + { + id: "sendForward", + label: "Forward", + description: "Forward an existing raw message payload.", + previewKind: "event", + fields: [ + { + key: "message", + label: "Forward message JSON", + type: "json", + required: true, + placeholder: "{\"conversation\":\"Forwarded content\"}", + }, + ...commonContextFields, + ], + }, + { + id: "delete", + label: "Delete", + description: "Delete a message in the conversation.", + previewKind: "event", + fields: [ + { key: "messageId", label: "Message ID", type: "text", required: true }, + { key: "fromMe", label: "From me", type: "checkbox", defaultValue: true }, + { key: "participant", label: "Participant", type: "text" }, + ], + }, + { + id: "edit", + label: "Edit", + description: "Edit an existing message.", + previewKind: "event", + fields: [ + { key: "messageId", label: "Message ID", type: "text", required: true }, + { key: "text", label: "New text", type: "textarea", required: true }, + ], + }, + { + id: "sendReaction", + label: "Reaction", + description: "React to an existing message.", + previewKind: "reaction", + fields: [ + { key: "emoji", label: "Emoji", type: "text", required: true, placeholder: "👍" }, + { key: "targetMessageId", label: "Target message ID", type: "text", required: true }, + ], + }, + { + id: "sendImage", + label: "Image", + description: "Send an image with optional caption.", + previewKind: "image", + fields: mediaFields, + }, + { + id: "sendVideo", + label: "Video", + description: "Send a video with optional caption.", + previewKind: "video", + fields: mediaFields, + }, + { + id: "sendAudio", + label: "Audio", + description: "Send an audio clip.", + previewKind: "audio", + fields: [ + ...mediaFields, + { key: "ptt", label: "Voice note (PTT)", type: "checkbox" }, + ], + }, + { + id: "sendWhatsAppAudio", + label: "WhatsApp Audio", + description: "Alias for WhatsApp-style audio send.", + previewKind: "audio", + fields: [ + ...mediaFields, + { key: "ptt", label: "Voice note (PTT)", type: "checkbox", defaultValue: true }, + ], + }, + { + id: "sendDocument", + label: "Document", + description: "Send a document.", + previewKind: "document", + fields: mediaFields, + }, + { + id: "sendSticker", + label: "Sticker", + description: "Send a sticker asset.", + previewKind: "sticker", + fields: mediaFields, + }, + { + id: "sendGif", + label: "GIF", + description: "Send a gif/video with gif playback.", + previewKind: "video", + fields: mediaFields, + }, + { + id: "sendMedia", + label: "Media Alias", + description: "Generic media alias routed as image.", + previewKind: "image", + fields: mediaFields, + }, + { + id: "sendButtons", + label: "Buttons", + description: "Quick replies, CTA URLs, copy buttons and native-flow style buttons.", + previewKind: "buttons", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "footer", label: "Footer", type: "text" }, + { key: "ai", label: "AI label", type: "checkbox" }, + { + key: "buttons", + label: "Buttons JSON", + type: "json", + required: true, + placeholder: "[{\"title\":\"Buy now\",\"type\":\"reply\"}]", + }, + ], + }, + { + id: "sendTemplateButtons", + label: "Template Buttons", + description: "Template buttons with reply, URL or copy code.", + previewKind: "buttons", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "footer", label: "Footer", type: "text" }, + { + key: "buttons", + label: "Buttons JSON", + type: "json", + required: true, + placeholder: "[{\"title\":\"Open site\",\"type\":\"cta_url\",\"url\":\"https://...\"}]", + }, + ], + }, + { + id: "sendCTAButton", + label: "CTA Button", + description: "CTA button payload using the button schema.", + previewKind: "buttons", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "footer", label: "Footer", type: "text" }, + { + key: "buttons", + label: "Buttons JSON", + type: "json", + required: true, + placeholder: "[{\"title\":\"Visit\",\"type\":\"cta_url\",\"url\":\"https://...\"}]", + }, + ], + }, + { + id: "sendCopyButton", + label: "Copy Button", + description: "Single copy-code button.", + previewKind: "buttons", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "footer", label: "Footer", type: "text" }, + { key: "copyCode", label: "Copy code", type: "text", required: true }, + { key: "buttonText", label: "Button text", type: "text", required: true }, + { key: "buttonId", label: "Button ID", type: "text" }, + ], + }, + { + id: "sendList", + label: "List", + description: "WhatsApp list message with sections and rows.", + previewKind: "list", + fields: [ + { key: "title", label: "Title", type: "text" }, + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "footer", label: "Footer", type: "text" }, + { key: "buttonText", label: "Button text", type: "text", required: true }, + { + key: "sections", + label: "Sections JSON", + type: "json", + required: true, + placeholder: "[{\"title\":\"Products\",\"rows\":[{\"id\":\"sku-1\",\"title\":\"Starter\"}]}]", + }, + ], + }, + { + id: "sendCarousel", + label: "Carousel", + description: "Cards with image/video and buttons.", + previewKind: "carousel", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "footer", label: "Footer", type: "text" }, + { + key: "carouselCardType", + label: "Card type", + type: "select", + options: [ + { label: "Image", value: "image" }, + { label: "Video", value: "video" }, + { label: "Mixed", value: "mixed" }, + ], + }, + { key: "ai", label: "AI label", type: "checkbox" }, + { + key: "cards", + label: "Cards JSON", + type: "json", + required: true, + placeholder: "[{\"title\":\"Card 1\",\"body\":\"Body\",\"image\":{\"url\":\"https://...\"},\"buttons\":[{\"title\":\"Buy\",\"kind\":\"reply\"}]}]", + }, + ], + }, + { + id: "sendAiText", + label: "AI Text", + description: "Text with AI label enabled.", + previewKind: "text", + fields: [{ key: "text", label: "Text", type: "textarea", required: true }], + }, + { + id: "sendAiCarousel", + label: "AI Carousel", + description: "Carousel with AI label enabled.", + previewKind: "carousel", + fields: [ + { key: "text", label: "Text", type: "textarea", required: true }, + { key: "footer", label: "Footer", type: "text" }, + { + key: "cards", + label: "Cards JSON", + type: "json", + required: true, + placeholder: "[{\"title\":\"AI Card\",\"body\":\"Generated card\",\"image\":{\"url\":\"https://...\"}}]", + }, + ], + }, + { + id: "sendPoll", + label: "Poll", + description: "Poll with options and selectable count.", + previewKind: "poll", + fields: [ + { key: "title", label: "Title", type: "text", required: true }, + { + key: "options", + label: "Options JSON", + type: "json", + required: true, + placeholder: "[\"Option 1\", \"Option 2\"]", + }, + { key: "selectableCount", label: "Selectable count", type: "number", defaultValue: 1 }, + ], + }, + { + id: "sendLocation", + label: "Location", + description: "Static location pin.", + previewKind: "location", + fields: [ + { key: "latitude", label: "Latitude", type: "number", required: true }, + { key: "longitude", label: "Longitude", type: "number", required: true }, + { key: "name", label: "Name", type: "text" }, + { key: "address", label: "Address", type: "textarea" }, + ], + }, + { + id: "sendLiveLocation", + label: "Live Location", + description: "Live location message with speed/accuracy.", + previewKind: "location", + fields: [ + { key: "latitude", label: "Latitude", type: "number", required: true }, + { key: "longitude", label: "Longitude", type: "number", required: true }, + { key: "name", label: "Name", type: "text" }, + { key: "address", label: "Address", type: "textarea" }, + { key: "speedInMps", label: "Speed m/s", type: "number" }, + { key: "accuracyInMeters", label: "Accuracy meters", type: "number" }, + { key: "degreesClockwiseFromMagneticNorth", label: "Heading", type: "number" }, + ], + }, + { + id: "sendContact", + label: "Contact", + description: "Single vCard contact.", + previewKind: "contacts", + fields: [ + { key: "displayName", label: "Display name", type: "text", required: true }, + { key: "vcard", label: "vCard", type: "textarea", required: true }, + ], + }, + { + id: "sendContacts", + label: "Contacts", + description: "Bundle of vCard contacts.", + previewKind: "contacts", + fields: [ + { key: "displayName", label: "Display name", type: "text" }, + { + key: "contacts", + label: "Contacts JSON", + type: "json", + required: true, + placeholder: "[{\"displayName\":\"Berry\",\"vcard\":\"BEGIN:VCARD...\"}]", + }, + ], + }, + { + id: "sendStatus", + label: "Status", + description: "Status text or media payload.", + previewKind: "status", + fields: [ + { key: "text", label: "Text", type: "textarea" }, + { + key: "media", + label: "Media JSON", + type: "json", + placeholder: "{\"url\":\"https://...\",\"caption\":\"Status\"}", + }, + ], + }, + { + id: "sendViewOnceImage", + label: "View Once Image", + description: "Image visible once.", + previewKind: "image", + fields: mediaFields, + }, + { + id: "sendViewOnceVideo", + label: "View Once Video", + description: "Video visible once.", + previewKind: "video", + fields: mediaFields, + }, + { + id: "sendProduct", + label: "Product", + description: "Product message payload.", + previewKind: "product", + fields: [ + { key: "title", label: "Title", type: "text", required: true }, + { key: "description", label: "Description", type: "textarea" }, + { key: "price", label: "Price", type: "text" }, + { key: "retailerId", label: "Retailer ID", type: "text" }, + { + key: "productImage", + label: "Product image JSON", + type: "json", + placeholder: "{\"url\":\"https://...\"}", + }, + ], + }, + { + id: "sendCatalog", + label: "Catalog", + description: "Catalog message payload.", + previewKind: "catalog", + fields: [ + { key: "title", label: "Title", type: "text", required: true }, + { key: "businessOwnerJid", label: "Business owner JID", type: "text" }, + ], + }, + { + id: "sendCollection", + label: "Collection", + description: "Collection message payload.", + previewKind: "catalog", + fields: [ + { key: "title", label: "Title", type: "text", required: true }, + { key: "businessOwnerJid", label: "Business owner JID", type: "text" }, + { key: "collectionId", label: "Collection ID", type: "text" }, + ], + }, +]; + +export const studioNodeTypes = [ + { + id: "start", + label: "Start", + description: "Entry point of the flow.", + }, + { + id: "message", + label: "Message", + description: "Any BerryProtocol message payload.", + }, + { + id: "input", + label: "Input", + description: "Waits for a user answer and stores it in a variable.", + }, + { + id: "condition", + label: "Condition", + description: "Branch based on variables or the last user input.", + }, + { + id: "setVariable", + label: "Set Variable", + description: "Store a literal or template value in a variable.", + }, + { + id: "delay", + label: "Delay", + description: "Adds a wait marker in the flow.", + }, + { + id: "action", + label: "Action", + description: "Non-message methods like edit, delete or reaction.", + }, + { + id: "end", + label: "End", + description: "Finish the execution.", + }, +]; + +export const studioConditionOperators = [ + { label: "Equals", value: "equals" }, + { label: "Not equals", value: "notEquals" }, + { label: "Contains", value: "contains" }, + { label: "Starts with", value: "startsWith" }, + { label: "Ends with", value: "endsWith" }, + { label: "Regex", value: "regex" }, + { label: "Exists", value: "exists" }, + { label: "Greater than", value: "gt" }, + { label: "Less than", value: "lt" }, +]; diff --git a/packages/berryapi/src/modules/flow/flow.controller.ts b/packages/berryapi/src/modules/flow/flow.controller.ts new file mode 100644 index 0000000..462469a --- /dev/null +++ b/packages/berryapi/src/modules/flow/flow.controller.ts @@ -0,0 +1,137 @@ +import type { FastifyReply, FastifyRequest } from "fastify"; +import { successResponse } from "../../utils/response.js"; +import { validateOrThrow } from "../../utils/zod.js"; +import { + createFlowBodySchema, + executeContinueBodySchema, + executeStartBodySchema, + flowIdParamsSchema, + instanceNameOnlyParamsSchema, + simulateContinueBodySchema, + simulateStartBodySchema, + studioInstanceBodySchema, + updateFlowBodySchema, + updateFlowStatusBodySchema, + validateFlowBodySchema, +} from "./flow.validators.js"; +import type { FlowService } from "./flow.service.js"; + +export class FlowController { + constructor(private readonly service: FlowService) {} + + getCapabilities = async (_request: FastifyRequest, reply: FastifyReply) => { + reply.send(successResponse("Berry Studio capabilities loaded.", this.service.getCapabilities())); + }; + + listFlows = async (_request: FastifyRequest, reply: FastifyReply) => { + reply.send(successResponse("Berry Studio flows loaded.", this.service.listFlows())); + }; + + listInstances = async (_request: FastifyRequest, reply: FastifyReply) => { + reply.send(successResponse("Berry Studio instances loaded.", await this.service.listInstances())); + }; + + createInstance = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(studioInstanceBodySchema, request.body); + reply.code(201).send(successResponse("Studio instance created successfully.", await this.service.createInstance(body))); + }; + + connectInstance = async (request: FastifyRequest, reply: FastifyReply) => { + const { instanceName } = validateOrThrow(instanceNameOnlyParamsSchema, request.params); + reply.send(successResponse("Studio instance connection started.", await this.service.connectInstance(instanceName))); + }; + + createFlow = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(createFlowBodySchema, request.body); + reply.code(201).send(successResponse("Flow created successfully.", this.service.createFlow(body))); + }; + + getFlow = async (request: FastifyRequest, reply: FastifyReply) => { + const { flowId } = validateOrThrow(flowIdParamsSchema, request.params); + reply.send(successResponse("Flow loaded successfully.", this.service.getFlow(flowId))); + }; + + updateFlow = async (request: FastifyRequest, reply: FastifyReply) => { + const { flowId } = validateOrThrow(flowIdParamsSchema, request.params); + const body = validateOrThrow(updateFlowBodySchema, request.body); + reply.send(successResponse("Flow saved successfully.", this.service.updateFlow(flowId, body))); + }; + + updateFlowStatus = async (request: FastifyRequest, reply: FastifyReply) => { + const { flowId } = validateOrThrow(flowIdParamsSchema, request.params); + const body = validateOrThrow(updateFlowStatusBodySchema, request.body); + reply.send(successResponse("Flow status updated successfully.", this.service.updateFlowStatus(flowId, body.status))); + }; + + publishFlow = async (request: FastifyRequest, reply: FastifyReply) => { + const { flowId } = validateOrThrow(flowIdParamsSchema, request.params); + reply.send(successResponse("Flow published successfully.", this.service.publishFlow(flowId))); + }; + + validateFlow = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(validateFlowBodySchema, request.body); + reply.send(successResponse("Flow validation completed.", this.service.validateFlow(body.flow))); + }; + + simulateStart = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(simulateStartBodySchema, request.body); + reply.send(successResponse("Flow simulation started.", await this.service.simulateStart(body.flow, body.variables, body.contact, body.flowId))); + }; + + simulateContinue = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(simulateContinueBodySchema, request.body); + reply.send(successResponse("Flow simulation advanced.", await this.service.simulateContinue(body.flow, body.state, body.inputText, body.flowId))); + }; + + executeStart = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(executeStartBodySchema, request.body); + reply.send(successResponse("Flow execution started.", await this.service.executeStart(body.flow, body.instanceName, body.variables, body.contact, body.flowId))); + }; + + executeContinue = async (request: FastifyRequest, reply: FastifyReply) => { + const body = validateOrThrow(executeContinueBodySchema, request.body); + reply.send(successResponse("Flow execution continued.", await this.service.executeContinue(body.flow, body.state, body.inputText, body.instanceName, body.flowId))); + }; + + deleteFlow = async (request: FastifyRequest, reply: FastifyReply) => { + const { flowId } = validateOrThrow(flowIdParamsSchema, request.params); + await this.service.deleteFlow(flowId); + reply.send(successResponse("Flow deleted successfully.", { flowId })); + }; + + duplicateFlow = async (request: FastifyRequest, reply: FastifyReply) => { + const { flowId } = validateOrThrow(flowIdParamsSchema, request.params); + reply.code(201).send(successResponse("Flow duplicated successfully.", this.service.duplicateFlow(flowId))); + }; + + getAnalytics = async (request: FastifyRequest, reply: FastifyReply) => { + const query = (request.query ?? {}) as { flowId?: string; days?: string }; + const days = query.days ? Number(query.days) : undefined; + reply.send(successResponse("Studio analytics loaded.", this.service.getAnalytics(query.flowId, days))); + }; + + resetAnalytics = async (request: FastifyRequest, reply: FastifyReply) => { + const body = (request.body ?? {}) as { flowId?: string }; + reply.send(successResponse("Studio analytics reset.", this.service.resetAnalytics(body.flowId))); + }; + + listNotifications = async (_request: FastifyRequest, reply: FastifyReply) => { + reply.send(successResponse("Studio notifications loaded.", await this.service.listNotifications())); + }; + + restartInstance = async (request: FastifyRequest, reply: FastifyReply) => { + const { instanceName } = validateOrThrow(instanceNameOnlyParamsSchema, request.params); + reply.send(successResponse("Studio instance restarted.", await this.service.restartInstance(instanceName))); + }; + + logoutInstance = async (request: FastifyRequest, reply: FastifyReply) => { + const { instanceName } = validateOrThrow(instanceNameOnlyParamsSchema, request.params); + reply.send(successResponse("Studio instance logged out.", await this.service.logoutInstance(instanceName))); + }; + + deleteInstance = async (request: FastifyRequest, reply: FastifyReply) => { + const { instanceName } = validateOrThrow(instanceNameOnlyParamsSchema, request.params); + await this.service.deleteInstance(instanceName); + reply.send(successResponse("Studio instance deleted.", { instanceName })); + }; +} diff --git a/packages/berryapi/src/modules/flow/flow.routes.ts b/packages/berryapi/src/modules/flow/flow.routes.ts new file mode 100644 index 0000000..10a235b --- /dev/null +++ b/packages/berryapi/src/modules/flow/flow.routes.ts @@ -0,0 +1,173 @@ +import { createRouteSchema } from "../../docs/schema.js"; +import { FlowController } from "./flow.controller.js"; +import { FlowService } from "./flow.service.js"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; + +export const registerFlowRoutes = async (app: any, manager: InstanceManager) => { + const controller = new FlowController(new FlowService(manager)); + + app.get("/studio/api/capabilities", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Get Berry Studio capabilities", + description: "Loads node types, message types and defaults used by Berry Studio.", + }), + }, controller.getCapabilities); + + app.get("/studio/api/instances", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "List Studio instances", + description: "Loads BerryAPI instances for Studio execution.", + }), + }, controller.listInstances); + + app.post("/studio/api/instances", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Create Studio instance", + description: "Creates a new BerryAPI instance from the Studio UI.", + }), + }, controller.createInstance); + + app.post("/studio/api/instances/:instanceName/connect", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Connect Studio instance", + description: "Starts a connection flow for a Studio instance.", + }), + }, controller.connectInstance); + + app.get("/studio/api/flows", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "List Berry Studio flows", + }), + }, controller.listFlows); + + app.post("/studio/api/flows", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Create Berry Studio flow", + }), + }, controller.createFlow); + + app.get("/studio/api/flows/:flowId", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Get Berry Studio flow", + }), + }, controller.getFlow); + + app.put("/studio/api/flows/:flowId", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Update Berry Studio flow", + }), + }, controller.updateFlow); + + app.post("/studio/api/flows/:flowId/status", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Update Berry Studio flow status", + }), + }, controller.updateFlowStatus); + + app.delete("/studio/api/flows/:flowId", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Delete Berry Studio flow", + }), + }, controller.deleteFlow); + + app.post("/studio/api/flows/:flowId/duplicate", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Duplicate Berry Studio flow", + }), + }, controller.duplicateFlow); + + app.post("/studio/api/flows/:flowId/publish", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Publish Berry Studio flow", + }), + }, controller.publishFlow); + + app.post("/studio/api/flows/validate", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Validate Berry Studio flow", + }), + }, controller.validateFlow); + + app.get("/studio/api/analytics", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Get Studio analytics", + }), + }, controller.getAnalytics); + + app.post("/studio/api/analytics/reset", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Reset Studio analytics", + }), + }, controller.resetAnalytics); + + app.get("/studio/api/notifications", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "List Studio notifications", + }), + }, controller.listNotifications); + + app.post("/studio/api/simulate/start", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Start Berry Studio simulation", + }), + }, controller.simulateStart); + + app.post("/studio/api/simulate/continue", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Continue Berry Studio simulation", + }), + }, controller.simulateContinue); + + app.post("/studio/api/execute/start", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Start real flow execution", + }), + }, controller.executeStart); + + app.post("/studio/api/execute/continue", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Continue real flow execution", + }), + }, controller.executeContinue); + + app.post("/studio/api/instances/:instanceName/restart", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Restart Studio instance", + }), + }, controller.restartInstance); + + app.post("/studio/api/instances/:instanceName/logout", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Logout Studio instance", + }), + }, controller.logoutInstance); + + app.delete("/studio/api/instances/:instanceName", { + schema: createRouteSchema({ + tags: ["Berry Studio"], + summary: "Delete Studio instance", + }), + }, controller.deleteInstance); +}; diff --git a/packages/berryapi/src/modules/flow/flow.service.ts b/packages/berryapi/src/modules/flow/flow.service.ts new file mode 100644 index 0000000..f92f987 --- /dev/null +++ b/packages/berryapi/src/modules/flow/flow.service.ts @@ -0,0 +1,1623 @@ +import { randomUUID } from "node:crypto"; +import { sqlite } from "../../database/client.js"; +import type { InstanceManager } from "../../managers/InstanceManager.js"; +import type { ProviderEventPayload } from "../../providers/whatsapp/WhatsAppProvider.js"; +import { MessageService } from "../message/services/message.service.js"; +import { + studioConditionOperators, + studioMessageCapabilities, + studioNodeTypes, +} from "./flow.catalog.js"; + +type FlowGraph = { + nodes: Array<{ + id: string; + type: string; + position: { x: number; y: number }; + data: Record; + }>; + edges: Array<{ + id: string; + source: string; + target: string; + sourceHandle?: string; + targetHandle?: string; + }>; + viewport?: Record; +}; + +type SimulatorState = { + status: "running" | "waiting_input" | "completed" | "failed"; + currentNodeId: string | null; + waitingNodeId?: string | null; + runId?: string | null; + variables: Record; + transcript: Array>; + logs: string[]; +}; + +type StudioNotification = { + id: string; + type: "flow" | "connection" | "alert"; + title: string; + body: string; + createdAt: number; +}; + +type FlowStatsSummary = { + conversas: number; + leads: number; + conversao: number; + blocos: number; + runs: number; + completed: number; + failed: number; +}; + +type StudioFlowListItem = { + id: string; + name: string; + status: string; + draft_version_id: string | null; + published_version_id: string | null; + created_at: string; + updated_at: string; + stats: FlowStatsSummary; +}; + +type FlowValidationResult = { + valid: boolean; + errors: string[]; + warnings: string[]; +}; + +type DispatchContext = { + instanceName: string; +}; + +type FlowTrigger = { + enabled?: boolean; + instanceName?: string; + keywords?: string[]; + matchMode?: "contains" | "exact" | "startsWith" | "any"; + caseSensitive?: boolean; +}; + +type IncomingFlowEvent = { + instanceName: string; + contactJid: string; + contactName: string; + inputText: string; +}; + +type FlowRecord = { + id: string; + name: string; + status: string; + draft_version_id: string | null; + published_version_id: string | null; + canvas_json: string; + created_at: string; + updated_at: string; +}; + +const now = () => new Date().toISOString(); + +const emptyGraph = (): FlowGraph => ({ + nodes: [ + { + id: "start-1", + type: "start", + position: { x: 120, y: 160 }, + data: { + label: "Start", + }, + }, + { + id: "end-1", + type: "end", + position: { x: 440, y: 160 }, + data: { + label: "End", + }, + }, + ], + edges: [ + { + id: "edge-start-end", + source: "start-1", + target: "end-1", + }, + ], + viewport: { + x: 0, + y: 0, + zoom: 1, + }, +}); + +const safeJsonParse = (value: string | null | undefined, fallback: T): T => { + if (!value) { + return fallback; + } + + try { + return JSON.parse(value) as T; + } catch { + return fallback; + } +}; + +const renderTemplate = (value: string, variables: Record): string => + value.replace(/\{\{\s*([^}]+)\s*\}\}/g, (_, key) => { + const resolved = variables[key.trim()]; + return resolved == null ? "" : String(resolved); + }); + +const parseStructuredValue = (value: unknown): unknown => { + if (typeof value !== "string") { + return value; + } + + const trimmed = value.trim(); + if (!trimmed) { + return value; + } + + if ( + (trimmed.startsWith("{") && trimmed.endsWith("}")) + || (trimmed.startsWith("[") && trimmed.endsWith("]")) + ) { + try { + return JSON.parse(trimmed); + } catch { + return value; + } + } + + return value; +}; + +const getNodeKind = (node: FlowGraph["nodes"][number]) => { + if (node.type === "block") { + const rawKind = node.data.kind; + return typeof rawKind === "string" ? rawKind : "message"; + } + + return node.type; +}; + +const renderPayloadValue = ( + value: unknown, + variables: Record, +): unknown => { + if (typeof value === "string") { + return parseStructuredValue(renderTemplate(value, variables)); + } + + if (Array.isArray(value)) { + return value.map((item) => renderPayloadValue(item, variables)); + } + + if (value && typeof value === "object") { + return Object.fromEntries( + Object.entries(value as Record).map(([key, item]) => [ + key, + renderPayloadValue(item, variables), + ]), + ); + } + + return value; +}; + +const normalizePayload = ( + payload: Record, + variables: Record, +): Record => + renderPayloadValue(payload, variables) as Record; + +export class FlowService { + private readonly messageService?: MessageService; + + constructor(private readonly manager?: InstanceManager) { + this.messageService = manager ? new MessageService(manager) : undefined; + if (manager && typeof manager.onProviderEvent === "function") { + manager.onProviderEvent((event) => this.handleProviderEvent(event)); + } + } + + getCapabilities() { + return { + nodeTypes: studioNodeTypes, + conditionOperators: studioConditionOperators, + messageCapabilities: studioMessageCapabilities, + actionCapabilities: studioMessageCapabilities.filter((capability) => + ["sendReply", "sendForward", "delete", "edit", "sendReaction"].includes(capability.id) + ), + defaultGraph: emptyGraph(), + }; + } + + async listInstances() { + if (!this.manager) { + return []; + } + + return (await this.manager.fetchInstances()).map((instance) => ({ + instanceName: instance.instanceName, + status: instance.status, + connectionState: instance.connectionState, + authMethod: instance.authMethod, + phoneNumber: instance.phoneNumber ?? null, + qrCode: instance.qrCode ?? null, + pairingCode: instance.pairingCode ?? null, + createdAt: instance.createdAt, + updatedAt: instance.updatedAt, + })); + } + + async createInstance(input: { + instanceName: string; + authMethod?: "qr" | "pairing_code" | "link"; + phoneNumber?: string; + settings?: Record; + }) { + if (!this.manager) { + throw new Error("Instance manager is not available."); + } + + return this.manager.createInstance(input); + } + + async connectInstance(instanceName: string) { + if (!this.manager) { + throw new Error("Instance manager is not available."); + } + + return this.manager.connectInstance(instanceName); + } + + async restartInstance(instanceName: string) { + if (!this.manager) { + throw new Error("Instance manager is not available."); + } + + return this.manager.restartInstance(instanceName); + } + + async logoutInstance(instanceName: string) { + if (!this.manager) { + throw new Error("Instance manager is not available."); + } + + return this.manager.logoutInstance(instanceName); + } + + async deleteInstance(instanceName: string) { + if (!this.manager) { + throw new Error("Instance manager is not available."); + } + + await this.manager.deleteInstance(instanceName); + } + + listFlows(): StudioFlowListItem[] { + const statement = sqlite.prepare(` + SELECT id, name, status, draft_version_id, published_version_id, created_at, updated_at + FROM flows + ORDER BY updated_at DESC + `); + + return (statement.all() as Array>).map((flow) => ({ + ...flow, + stats: this.getFlowStats(String(flow.id)), + })) as StudioFlowListItem[]; + } + + createFlow(input: { name: string; graph?: FlowGraph }) { + const timestamp = now(); + const flowId = randomUUID(); + const versionId = randomUUID(); + const graph = input.graph ?? emptyGraph(); + + sqlite.prepare(` + INSERT INTO flows (id, name, status, draft_version_id, published_version_id, canvas_json, created_at, updated_at) + VALUES (?, ?, 'draft', ?, NULL, ?, ?, ?) + `).run(flowId, input.name, versionId, JSON.stringify(graph), timestamp, timestamp); + + sqlite.prepare(` + INSERT INTO flow_versions (id, flow_id, version_number, graph_json, snapshot_json, created_at) + VALUES (?, ?, 1, ?, ?, ?) + `).run(versionId, flowId, JSON.stringify(graph), JSON.stringify({ name: input.name, status: "draft" }), timestamp); + + return this.getFlow(flowId); + } + + getFlow(flowId: string) { + const flow = sqlite.prepare(` + SELECT id, name, status, draft_version_id, published_version_id, canvas_json, created_at, updated_at + FROM flows + WHERE id = ? + `).get(flowId) as FlowRecord | undefined; + + if (!flow) { + return null; + } + + const versions = sqlite.prepare(` + SELECT id, flow_id, version_number, created_at + FROM flow_versions + WHERE flow_id = ? + ORDER BY version_number DESC + `).all(flowId); + + return { + ...flow, + graph: safeJsonParse(flow.canvas_json, emptyGraph()), + versions, + stats: this.getFlowStats(flowId), + }; + } + + updateFlow(flowId: string, input: { name?: string; status?: string; graph: FlowGraph }) { + const existing = this.getFlow(flowId); + if (!existing) { + return null; + } + + const versionCount = sqlite.prepare(` + SELECT COUNT(*) as count + FROM flow_versions + WHERE flow_id = ? + `).get(flowId) as { count: number }; + + const versionId = randomUUID(); + const timestamp = now(); + const nextVersion = (versionCount?.count ?? 0) + 1; + const name = input.name ?? String(existing.name); + const status = input.status ?? String(existing.status); + + sqlite.prepare(` + UPDATE flows + SET name = ?, status = ?, draft_version_id = ?, canvas_json = ?, updated_at = ? + WHERE id = ? + `).run(name, status, versionId, JSON.stringify(input.graph), timestamp, flowId); + + sqlite.prepare(` + INSERT INTO flow_versions (id, flow_id, version_number, graph_json, snapshot_json, created_at) + VALUES (?, ?, ?, ?, ?, ?) + `).run(versionId, flowId, nextVersion, JSON.stringify(input.graph), JSON.stringify({ name, status }), timestamp); + + return this.getFlow(flowId); + } + + publishFlow(flowId: string) { + const existing = this.getFlow(flowId); + if (!existing) { + return null; + } + + const timestamp = now(); + sqlite.prepare(` + UPDATE flows + SET status = 'published', published_version_id = draft_version_id, updated_at = ? + WHERE id = ? + `).run(timestamp, flowId); + + return this.getFlow(flowId); + } + + updateFlowStatus(flowId: string, status: "draft" | "published" | "archived") { + const existing = this.getFlow(flowId); + if (!existing) { + return null; + } + + sqlite.prepare(` + UPDATE flows + SET status = ?, published_version_id = CASE WHEN ? = 'published' THEN draft_version_id ELSE published_version_id END, updated_at = ? + WHERE id = ? + `).run(status, status, now(), flowId); + + return this.getFlow(flowId); + } + + deleteFlow(flowId: string) { + sqlite.prepare(`DELETE FROM flow_runs WHERE flow_id = ?`).run(flowId); + sqlite.prepare(`DELETE FROM flow_versions WHERE flow_id = ?`).run(flowId); + sqlite.prepare(`DELETE FROM flows WHERE id = ?`).run(flowId); + } + + duplicateFlow(flowId: string) { + const existing = this.getFlow(flowId); + if (!existing) { + return null; + } + + return this.createFlow({ + name: `${String(existing.name)} (copy)`, + graph: existing.graph as FlowGraph, + }); + } + + getAnalytics(flowId?: string, days = 14) { + const normalizedDays = Number.isFinite(days) && days > 0 ? Math.min(Math.max(days, 1), 90) : 14; + const cutoff = new Date(Date.now() - normalizedDays * 24 * 60 * 60 * 1000).toISOString(); + const runs = ( + flowId + ? sqlite.prepare(` + SELECT id, flow_id, status, created_at + FROM flow_runs + WHERE flow_id = ? AND created_at >= ? + ORDER BY created_at DESC + `).all(flowId, cutoff) + : sqlite.prepare(` + SELECT id, flow_id, status, created_at + FROM flow_runs + WHERE created_at >= ? + ORDER BY created_at DESC + `).all(cutoff) + ) as Array<{ id: string; flow_id: string; status: string; created_at: string }>; + + const flowOptions = this.listFlows().map((flow) => ({ + id: String(flow.id), + name: String(flow.name), + })); + + const totals = { + visitors: runs.length, + conversations: runs.length, + started: runs.length, + leads: runs.filter((run) => run.status === "waiting_input" || run.status === "completed").length, + conversions: runs.filter((run) => run.status === "completed").length, + failures: runs.filter((run) => run.status === "failed").length, + }; + + const startRate = totals.visitors ? Math.round((totals.started / totals.visitors) * 100) : 0; + const conversionRate = totals.conversations ? Math.round((totals.conversions / totals.conversations) * 100) : 0; + const labels = Array.from({ length: normalizedDays }, (_, index) => { + const date = new Date(); + date.setHours(0, 0, 0, 0); + date.setDate(date.getDate() - (normalizedDays - index - 1)); + return date.toISOString().slice(0, 10); + }); + const activity = labels.map((label) => ({ + label, + value: runs.filter((run) => run.created_at.slice(0, 10) === label).length, + })); + + const perFlow = this.listFlows().map((flow) => ({ + id: String(flow.id), + name: String(flow.name), + status: String(flow.status), + stats: this.getFlowStats(String(flow.id)), + })); + + return { + flowOptions, + periodDays: normalizedDays, + selectedFlowId: flowId ?? "all", + totals: { + ...totals, + startRate, + conversionRate, + }, + activity, + perFlow, + }; + } + + resetAnalytics(flowId?: string) { + if (flowId) { + const info = sqlite.prepare(`DELETE FROM flow_runs WHERE flow_id = ?`).run(flowId); + return { flowId, deletedRuns: info.changes }; + } + + const info = sqlite.prepare(`DELETE FROM flow_runs`).run(); + return { flowId: null, deletedRuns: info.changes }; + } + + async listNotifications(): Promise { + const flows = this.listFlows(); + const instances = await this.listInstances(); + const recentFailedRuns = sqlite.prepare(` + SELECT id, flow_id, status, created_at + FROM flow_runs + WHERE status = 'failed' + ORDER BY updated_at DESC, created_at DESC + LIMIT 10 + `).all() as Array<{ id: string; flow_id: string; status: string; created_at: string }>; + + const notifications: StudioNotification[] = [ + ...instances.map((instance): StudioNotification => ({ + id: `instance:${instance.instanceName}`, + type: instance.connectionState === "open" || instance.status === "connected" ? "connection" : "alert", + title: `Instance ${instance.instanceName}`, + body: + instance.status === "connected" + ? "Instance connected and ready to run flows." + : `Current state: ${instance.connectionState}.`, + createdAt: Date.parse(String(instance.updatedAt ?? now())), + })), + ...flows.slice(0, 10).map((flow) => ({ + id: `flow:${String(flow.id)}`, + type: "flow" as const, + title: String(flow.name), + body: `Flow is currently ${String(flow.status)}.`, + createdAt: Date.parse(String(flow.updated_at ?? now())), + })), + ...recentFailedRuns.map((run) => ({ + id: `run:${run.id}`, + type: "alert" as const, + title: "Flow execution failed", + body: `A recent execution for flow ${run.flow_id} ended with failure.`, + createdAt: Date.parse(run.created_at), + })), + ]; + + return notifications.sort((left, right) => right.createdAt - left.createdAt).slice(0, 30); + } + + validateFlow(flow: FlowGraph): FlowValidationResult { + const errors: string[] = []; + const warnings: string[] = []; + const knownNodeTypes = new Set(studioNodeTypes.map((node) => node.id)); + const knownCapabilities = new Map(studioMessageCapabilities.map((capability) => [capability.id, capability])); + const nodeIds = new Set(); + const startNodes = flow.nodes.filter((node) => { + const kind = getNodeKind(node); + return kind === "start" || node.data.isStart === true; + }); + const endNodes = flow.nodes.filter((node) => getNodeKind(node) === "end"); + + if (!startNodes.length) { + errors.push("The flow must contain at least one start node."); + } + + if (startNodes.length > 1) { + warnings.push("More than one start node was found. Only the first start node will be used."); + } + + if (!endNodes.length) { + warnings.push("The flow does not contain an end node."); + } + + const trigger = flow.viewport?.trigger as FlowTrigger | undefined; + if (trigger?.enabled && !trigger.instanceName?.trim()) { + errors.push("An enabled WhatsApp trigger needs an instance."); + } + + if ( + trigger?.enabled + && trigger.matchMode !== "any" + && (!Array.isArray(trigger.keywords) || !trigger.keywords.some((keyword) => keyword.trim())) + ) { + warnings.push("The trigger has no keywords and will match every incoming message."); + } + + for (const node of flow.nodes) { + if (nodeIds.has(node.id)) { + errors.push(`Node id '${node.id}' is duplicated.`); + } + nodeIds.add(node.id); + + const nodeKind = getNodeKind(node); + + if (!knownNodeTypes.has(nodeKind) && !["message", "media", "choice", "input", "delay", "pixel", "tags", "condition", "note", "end"].includes(nodeKind)) { + errors.push(`Node '${node.id}' uses unknown type '${nodeKind}'.`); + continue; + } + + if ((nodeKind === "message" || nodeKind === "action") && node.type !== "block") { + const messageType = String(node.data.messageType ?? ""); + const capability = knownCapabilities.get(messageType); + if (!capability) { + errors.push(`Node '${node.id}' uses unknown message capability '${messageType}'.`); + continue; + } + + for (const field of capability.fields.filter((field) => field.required)) { + const value = (node.data.payload as Record | undefined)?.[field.key]; + if (value === undefined || value === null || value === "") { + errors.push(`Node '${node.id}' is missing required field '${field.label}'.`); + } + } + } + + if (nodeKind === "message" && node.type === "block" && !String(node.data.text ?? "").trim()) { + warnings.push(`Message block '${node.id}' is empty.`); + } + + if (nodeKind === "choice") { + const responses = Array.isArray(node.data.responses) ? node.data.responses : []; + const choiceBlock = responses.find((response) => (response as Record).kind === "choice") as Record | undefined; + const options = Array.isArray(choiceBlock?.options) ? choiceBlock.options : []; + if (!options.length) { + warnings.push(`Choice block '${node.id}' does not define any options.`); + } + } + + if (nodeKind === "input" && !node.data.variableName) { + warnings.push(`Input node '${node.id}' does not define a variable name. It will default to lastInput.`); + } + + if (nodeKind === "condition") { + const hasTrue = flow.edges.some((edge) => edge.source === node.id && edge.sourceHandle === "true"); + const hasFalse = flow.edges.some((edge) => edge.source === node.id && edge.sourceHandle === "false"); + + if (!hasTrue) { + warnings.push(`Condition node '${node.id}' does not have a true branch.`); + } + + if (!hasFalse) { + warnings.push(`Condition node '${node.id}' does not have a false branch.`); + } + } + } + + for (const edge of flow.edges) { + if (!nodeIds.has(edge.source)) { + errors.push(`Edge '${edge.id}' references missing source node '${edge.source}'.`); + } + + if (!nodeIds.has(edge.target)) { + errors.push(`Edge '${edge.id}' references missing target node '${edge.target}'.`); + } + } + + return { + valid: errors.length === 0, + errors, + warnings, + }; + } + + async simulateStart( + flow: FlowGraph, + variables?: Record, + contact?: { jid?: string; name?: string }, + flowId?: string, + ) { + const initialState: SimulatorState = { + status: "running", + currentNodeId: this.findStartNode(flow)?.id ?? null, + waitingNodeId: null, + runId: null, + variables: { + contactJid: contact?.jid ?? "5511999999999@s.whatsapp.net", + contactName: contact?.name ?? "Cliente", + flowId: flowId ?? null, + ...(variables ?? {}), + }, + transcript: [], + logs: [], + }; + + return this.advance(flow, initialState); + } + + async executeStart( + flow: FlowGraph, + instanceName: string, + variables?: Record, + contact?: { jid?: string; name?: string }, + flowId?: string, + ) { + const validation = this.validateFlow(flow); + if (!validation.valid) { + return { + status: "failed", + currentNodeId: null, + waitingNodeId: null, + runId: null, + variables: variables ?? {}, + transcript: [], + logs: ["Flow validation failed before execution.", ...validation.errors], + validation, + }; + } + + const executionVariables: Record = { + contactJid: contact?.jid ?? "5511999999999@s.whatsapp.net", + contactName: contact?.name ?? "Berry Contact", + flowId: flowId ?? null, + instanceName, + ...(variables ?? {}), + }; + const initialState: SimulatorState = { + status: "running", + currentNodeId: this.findStartNode(flow)?.id ?? null, + waitingNodeId: null, + runId: flowId ? this.createRun(flowId, "running", executionVariables) : null, + variables: executionVariables, + transcript: [], + logs: [`Executing flow with instance '${instanceName}'.`], + }; + + const state = await this.advance(flow, initialState, { + instanceName, + }); + + this.updateRun(initialState.runId, state); + + return { + ...state, + validation, + }; + } + + async simulateContinue(flow: FlowGraph, state: SimulatorState, inputText: string, flowId?: string) { + if (state.status !== "waiting_input" || !state.waitingNodeId) { + return { + ...state, + logs: [...state.logs, "No pending input node to continue."], + }; + } + + const waitingNode = this.findNode(flow, state.waitingNodeId); + if (!waitingNode) { + return { + ...state, + status: "failed", + runId: state.runId ?? null, + logs: [...state.logs, `Input node ${state.waitingNodeId} not found.`], + }; + } + + const variableName = String(state.variables.waitingVariableName ?? waitingNode.data.variableName ?? "lastInput"); + const transcript = [ + ...state.transcript, + { + role: "user", + type: "text", + text: inputText, + }, + ]; + + const nextState = await this.advance(flow, { + ...state, + status: "running", + currentNodeId: this.getNextNodeId(flow, waitingNode.id), + waitingNodeId: null, + variables: { + ...state.variables, + lastInput: inputText, + [variableName]: inputText, + flowId: flowId ?? state.variables.flowId, + }, + transcript, + logs: [...state.logs, `Captured input for ${variableName}.`], + }); + this.updateRun(state.runId, nextState); + return nextState; + } + + async executeContinue(flow: FlowGraph, state: SimulatorState, inputText: string, instanceName: string, flowId?: string) { + if (state.status !== "waiting_input" || !state.waitingNodeId) { + return { + ...state, + logs: [...state.logs, "No pending input node to continue."], + }; + } + + const waitingNode = this.findNode(flow, state.waitingNodeId); + if (!waitingNode) { + return { + ...state, + status: "failed", + runId: state.runId ?? null, + logs: [...state.logs, `Input node ${state.waitingNodeId} not found.`], + }; + } + + const variableName = String(state.variables.waitingVariableName ?? waitingNode.data.variableName ?? "lastInput"); + const transcript = [ + ...state.transcript, + { + role: "user", + type: "text", + text: inputText, + }, + ]; + + const nextState = await this.advance(flow, { + ...state, + status: "running", + currentNodeId: this.getNextNodeId(flow, waitingNode.id), + waitingNodeId: null, + variables: { + ...state.variables, + lastInput: inputText, + [variableName]: inputText, + flowId: flowId ?? state.variables.flowId, + }, + transcript, + logs: [...state.logs, `Captured input for ${variableName}.`], + }, { + instanceName, + }); + this.updateRun(state.runId, nextState); + return nextState; + } + + private async advance( + flow: FlowGraph, + state: SimulatorState, + dispatchContext?: DispatchContext, + ): Promise { + let cursor = state.currentNodeId; + const transcript = [...state.transcript]; + const logs = [...state.logs]; + const variables = { ...state.variables }; + let guard = 0; + + while (cursor && guard < 100) { + guard += 1; + const node = this.findNode(flow, cursor); + + if (!node) { + return { + status: "failed", + currentNodeId: null, + waitingNodeId: null, + variables, + transcript, + logs: [...logs, `Node ${cursor} not found.`], + }; + } + + const nodeKind = getNodeKind(node); + + if (nodeKind === "start") { + logs.push("Flow started."); + cursor = this.getNextNodeId(flow, node.id); + continue; + } + + if (nodeKind === "note") { + logs.push(`Note block ${node.id} skipped.`); + cursor = this.getNextNodeId(flow, node.id); + continue; + } + + if (node.type === "message" || node.type === "action" || ["message", "media", "choice"].includes(nodeKind)) { + const executable = node.type === "block" + ? this.buildStudioBlockMessage(node, variables) + : { + messageType: String(node.data.messageType ?? "sendText"), + payload: normalizePayload( + (node.data.payload as Record) ?? {}, + variables, + ), + previewKind: studioMessageCapabilities.find((item) => item.id === String(node.data.messageType ?? "sendText"))?.previewKind ?? "text", + waitForInput: false, + variableName: null, + }; + + const { messageType, payload, previewKind } = executable; + const payloadRecord = payload as Record; + + if (dispatchContext) { + try { + const dispatchPayload = { + to: String(payloadRecord.to ?? variables.contactJid ?? ""), + ...payloadRecord, + }; + const response = await this.dispatchMessageAction( + dispatchContext.instanceName, + messageType, + dispatchPayload, + ); + + if (response && typeof response === "object" && "messageId" in (response as Record)) { + variables.lastMessageId = (response as Record).messageId; + } + } catch (error) { + return { + status: "failed", + currentNodeId: node.id, + waitingNodeId: null, + variables, + transcript, + logs: [ + ...logs, + `Failed to execute ${messageType} on node ${node.id}: ${ + error instanceof Error ? error.message : "unknown error" + }`, + ], + }; + } + } + + transcript.push({ + role: "assistant", + type: messageType, + previewKind, + payload: payloadRecord, + }); + logs.push(`Executed ${messageType}.`); + + if (executable.waitForInput) { + logs.push(`Waiting for input on node ${node.id}.`); + return { + status: "waiting_input", + currentNodeId: node.id, + waitingNodeId: node.id, + runId: state.runId ?? null, + variables: { + ...variables, + waitingVariableName: executable.variableName ?? "lastInput", + }, + transcript, + logs, + }; + } + + cursor = this.getNextNodeId(flow, node.id); + continue; + } + + if (nodeKind === "setVariable") { + const key = String(node.data.key ?? "variable"); + const value = renderTemplate(String(node.data.value ?? ""), variables); + variables[key] = parseStructuredValue(value); + logs.push(`Variable ${key} updated.`); + cursor = this.getNextNodeId(flow, node.id); + continue; + } + + if (nodeKind === "tags") { + const rawTags = Array.isArray(node.data.tags) + ? node.data.tags + : String(node.data.text ?? "") + .split(",") + .map((value) => value.trim()) + .filter(Boolean); + variables.tags = rawTags; + logs.push(`Tags updated with ${rawTags.length} item(s).`); + cursor = this.getNextNodeId(flow, node.id); + continue; + } + + if (nodeKind === "pixel") { + const eventName = String(node.data.eventName ?? node.data.text ?? "pixel_event"); + variables.lastPixelEvent = eventName; + transcript.push({ + role: "system", + type: "pixel", + eventName, + }); + logs.push(`Pixel event '${eventName}' registered.`); + cursor = this.getNextNodeId(flow, node.id); + continue; + } + + if (nodeKind === "delay") { + const requestedDelayMs = Number(node.data.delayMs ?? node.data.seconds ?? 1000); + const delayMs = Number.isFinite(requestedDelayMs) + ? Math.min(Math.max(requestedDelayMs, 0), 60_000) + : 1000; + transcript.push({ + role: "system", + type: "delay", + delayMs, + }); + if (dispatchContext && delayMs > 0) { + logs.push(`Waiting ${delayMs}ms before the next node.`); + await new Promise((resolve) => setTimeout(resolve, delayMs)); + } else { + logs.push(`Delay marker ${delayMs}ms.`); + } + cursor = this.getNextNodeId(flow, node.id); + continue; + } + + if (nodeKind === "input") { + const prompt = renderTemplate( + String(node.data.prompt ?? node.data.text ?? "Waiting for user input"), + variables, + ); + const variableName = String(node.data.variableName ?? "lastInput"); + if (prompt) { + if (dispatchContext) { + try { + await this.dispatchMessageAction( + dispatchContext.instanceName, + "sendText", + { + to: String(variables.contactJid ?? ""), + text: prompt, + }, + ); + } catch (error) { + return { + status: "failed", + currentNodeId: node.id, + waitingNodeId: null, + runId: state.runId ?? null, + variables, + transcript, + logs: [ + ...logs, + `Failed to send input prompt on node ${node.id}: ${ + error instanceof Error ? error.message : "unknown error" + }`, + ], + }; + } + } + + transcript.push({ + role: "assistant", + type: "input_prompt", + previewKind: "text", + payload: { + text: prompt, + }, + }); + } + + logs.push(`Waiting for input on node ${node.id}.`); + return { + status: "waiting_input", + currentNodeId: node.id, + waitingNodeId: node.id, + runId: state.runId ?? null, + variables: { + ...variables, + waitingVariableName: variableName, + }, + transcript, + logs: [...logs, `Input will be stored in ${variableName}.`], + }; + } + + if (nodeKind === "condition") { + const result = this.evaluateCondition(node.data, variables); + logs.push(`Condition ${node.id} resolved to ${result ? "true" : "false"}.`); + cursor = this.getNextNodeId(flow, node.id, result ? "true" : "false") + ?? this.getNextNodeId(flow, node.id); + continue; + } + + if (nodeKind === "end") { + logs.push("Flow completed."); + return { + status: "completed", + currentNodeId: node.id, + waitingNodeId: null, + runId: state.runId ?? null, + variables, + transcript, + logs, + }; + } + + logs.push(`Unknown node type ${nodeKind}, skipping.`); + cursor = this.getNextNodeId(flow, node.id); + } + + if (guard >= 100) { + logs.push("Execution stopped after reaching the safety limit."); + } + + return { + status: cursor ? "failed" : "completed", + currentNodeId: cursor, + waitingNodeId: null, + runId: state.runId ?? null, + variables, + transcript, + logs, + }; + } + + private async handleProviderEvent(event: ProviderEventPayload): Promise { + if (event.event !== "messages.upsert") { + return; + } + + const incoming = this.extractIncomingFlowEvent(event); + if (!incoming) { + return; + } + + const resumed = await this.resumeWaitingRun(incoming); + if (!resumed) { + await this.startTriggeredFlow(incoming); + } + } + + private extractIncomingFlowEvent( + event: ProviderEventPayload, + ): IncomingFlowEvent | null { + const rawPayload = Array.isArray(event.payload) + ? event.payload[0] + : event.payload; + if (!rawPayload || typeof rawPayload !== "object") { + return null; + } + + const envelope = rawPayload as Record; + const rawMessage = + envelope.message && typeof envelope.message === "object" + ? envelope.message as Record + : envelope; + const key = + rawMessage.key && typeof rawMessage.key === "object" + ? rawMessage.key as Record + : envelope.key && typeof envelope.key === "object" + ? envelope.key as Record + : {}; + const nestedContent = + rawMessage.message && typeof rawMessage.message === "object" + ? rawMessage.message as Record + : {}; + const extendedText = + nestedContent.extendedTextMessage + && typeof nestedContent.extendedTextMessage === "object" + ? nestedContent.extendedTextMessage as Record + : {}; + const fromMe = Boolean( + rawMessage.fromMe + ?? envelope.fromMe + ?? key.fromMe, + ); + if (fromMe) { + return null; + } + + const firstString = (...values: unknown[]) => + values.find((value): value is string => + typeof value === "string" && value.trim().length > 0 + )?.trim(); + + const contactJid = firstString( + rawMessage.from, + rawMessage.chatId, + rawMessage.remoteJid, + envelope.from, + envelope.chatId, + envelope.remoteJid, + key.remoteJid, + ); + const inputText = firstString( + rawMessage.buttonId, + rawMessage.selectedId, + rawMessage.listRowId, + rawMessage.text, + rawMessage.body, + envelope.buttonId, + envelope.selectedId, + envelope.text, + envelope.body, + nestedContent.conversation, + extendedText.text, + ); + + if (!contactJid || !inputText || contactJid === "status@broadcast") { + return null; + } + + return { + instanceName: event.instanceName, + contactJid, + contactName: firstString( + rawMessage.pushName, + rawMessage.senderName, + envelope.pushName, + envelope.senderName, + ) ?? "Contato WhatsApp", + inputText, + }; + } + + private async resumeWaitingRun( + incoming: IncomingFlowEvent, + ): Promise { + const waitingRuns = sqlite.prepare(` + SELECT id, flow_id, flow_version_id, current_node_id, variables_json, history_json + FROM flow_runs + WHERE status = 'waiting_input' + ORDER BY updated_at DESC + LIMIT 200 + `).all() as Array<{ + id: string; + flow_id: string; + flow_version_id: string | null; + current_node_id: string | null; + variables_json: string; + history_json: string; + }>; + + const waitingRun = waitingRuns.find((run) => { + const variables = safeJsonParse>( + run.variables_json, + {}, + ); + return variables.instanceName === incoming.instanceName + && variables.contactJid === incoming.contactJid; + }); + + if (!waitingRun) { + return false; + } + + const variables = safeJsonParse>( + waitingRun.variables_json, + {}, + ); + const graph = this.loadRunGraph( + waitingRun.flow_id, + waitingRun.flow_version_id, + ); + if (!graph) { + return false; + } + + await this.executeContinue( + graph, + { + status: "waiting_input", + currentNodeId: waitingRun.current_node_id, + waitingNodeId: waitingRun.current_node_id, + runId: waitingRun.id, + variables, + transcript: safeJsonParse>>( + waitingRun.history_json, + [], + ), + logs: ["Flow resumed from an incoming WhatsApp message."], + }, + incoming.inputText, + incoming.instanceName, + waitingRun.flow_id, + ); + + return true; + } + + private async startTriggeredFlow( + incoming: IncomingFlowEvent, + ): Promise { + const publishedFlows = sqlite.prepare(` + SELECT id, published_version_id, canvas_json + FROM flows + WHERE status = 'published' + ORDER BY updated_at DESC + `).all() as Array<{ + id: string; + published_version_id: string | null; + canvas_json: string; + }>; + + for (const flow of publishedFlows) { + const graph = this.loadRunGraph(flow.id, flow.published_version_id) + ?? safeJsonParse(flow.canvas_json, emptyGraph()); + const trigger = graph.viewport?.trigger as FlowTrigger | undefined; + if (!this.triggerMatches(trigger, incoming)) { + continue; + } + + await this.executeStart( + graph, + incoming.instanceName, + { + lastInput: incoming.inputText, + triggerText: incoming.inputText, + instanceName: incoming.instanceName, + }, + { + jid: incoming.contactJid, + name: incoming.contactName, + }, + flow.id, + ); + return true; + } + + return false; + } + + private triggerMatches( + trigger: FlowTrigger | undefined, + incoming: IncomingFlowEvent, + ): boolean { + if ( + !trigger?.enabled + || !trigger.instanceName + || trigger.instanceName !== incoming.instanceName + ) { + return false; + } + + const keywords = Array.isArray(trigger.keywords) + ? trigger.keywords.map((keyword) => keyword.trim()).filter(Boolean) + : []; + if (trigger.matchMode === "any" || !keywords.length) { + return true; + } + + const normalize = (value: string) => + trigger.caseSensitive ? value : value.toLocaleLowerCase(); + const input = normalize(incoming.inputText); + + return keywords.some((keyword) => { + const expected = normalize(keyword); + if (trigger.matchMode === "exact") { + return input === expected; + } + if (trigger.matchMode === "startsWith") { + return input.startsWith(expected); + } + return input.includes(expected); + }); + } + + private loadRunGraph( + flowId: string, + flowVersionId: string | null, + ): FlowGraph | null { + if (flowVersionId) { + const version = sqlite.prepare(` + SELECT graph_json + FROM flow_versions + WHERE id = ? AND flow_id = ? + `).get(flowVersionId, flowId) as { graph_json: string } | undefined; + if (version) { + return safeJsonParse(version.graph_json, emptyGraph()); + } + } + + const flow = sqlite.prepare(` + SELECT canvas_json + FROM flows + WHERE id = ? + `).get(flowId) as { canvas_json: string } | undefined; + return flow + ? safeJsonParse(flow.canvas_json, emptyGraph()) + : null; + } + + private evaluateCondition(nodeData: Record, variables: Record): boolean { + const variableKey = String(nodeData.variable ?? "lastInput"); + const operator = String(nodeData.operator ?? "equals"); + const expectedRaw = renderTemplate(String(nodeData.value ?? ""), variables); + const actual = variables[variableKey]; + const actualString = actual == null ? "" : String(actual); + + switch (operator) { + case "equals": + return actualString === expectedRaw; + case "notEquals": + return actualString !== expectedRaw; + case "contains": + return actualString.includes(expectedRaw); + case "startsWith": + return actualString.startsWith(expectedRaw); + case "endsWith": + return actualString.endsWith(expectedRaw); + case "regex": + return new RegExp(expectedRaw).test(actualString); + case "exists": + return actual !== undefined && actual !== null && actualString.length > 0; + case "gt": + return Number(actual) > Number(expectedRaw); + case "lt": + return Number(actual) < Number(expectedRaw); + default: + return false; + } + } + + private findStartNode(flow: FlowGraph) { + return flow.nodes.find((node) => getNodeKind(node) === "start" || node.data.isStart === true) ?? flow.nodes[0]; + } + + private findNode(flow: FlowGraph, nodeId: string) { + return flow.nodes.find((node) => node.id === nodeId); + } + + private getNextNodeId(flow: FlowGraph, nodeId: string, handle?: string) { + if (handle) { + const handledEdge = flow.edges.find((edge) => edge.source === nodeId && edge.sourceHandle === handle); + if (handledEdge) { + return handledEdge.target; + } + } + + return flow.edges.find((edge) => edge.source === nodeId)?.target ?? null; + } + + private buildStudioBlockMessage(node: FlowGraph["nodes"][number], variables: Record) { + const nodeKind = getNodeKind(node); + const renderedText = renderTemplate(String(node.data.text ?? ""), variables); + + if (nodeKind === "choice") { + const responses = Array.isArray(node.data.responses) ? node.data.responses : []; + const choiceBlock = responses.find((response) => (response as Record).kind === "choice") as Record | undefined; + const options = Array.isArray(choiceBlock?.options) ? choiceBlock.options as Array> : []; + + return { + messageType: "sendButtons", + previewKind: "buttons", + payload: { + text: renderedText || "Choose one option", + buttons: options.map((option, index) => ({ + id: String(option.id ?? `option-${index + 1}`), + title: String(option.label ?? `Option ${index + 1}`), + type: "reply", + })), + }, + waitForInput: true, + variableName: String(node.data.variableName ?? "lastChoice"), + }; + } + + if (nodeKind === "media") { + const payload = normalizePayload((node.data.payload as Record) ?? {}, variables); + const mediaType = String(node.data.mediaType ?? payload.mediaType ?? "sendImage"); + return { + messageType: mediaType, + previewKind: mediaType.includes("Video") ? "video" : mediaType.includes("Audio") ? "audio" : "image", + payload: { + caption: renderedText || payload.caption, + ...payload, + }, + waitForInput: false, + variableName: null, + }; + } + + return { + messageType: "sendText", + previewKind: "text", + payload: { + text: renderedText, + }, + waitForInput: false, + variableName: null, + }; + } + + private getFlowStats(flowId: string): FlowStatsSummary { + const flow = sqlite.prepare(` + SELECT canvas_json + FROM flows + WHERE id = ? + `).get(flowId) as { canvas_json: string } | undefined; + + const graph = safeJsonParse(flow?.canvas_json, emptyGraph()); + const runs = sqlite.prepare(` + SELECT status + FROM flow_runs + WHERE flow_id = ? + `).all(flowId) as Array<{ status: string }>; + const conversations = runs.length; + const leads = runs.filter((run) => run.status === "waiting_input" || run.status === "completed").length; + const conversions = runs.filter((run) => run.status === "completed").length; + + return { + conversas: conversations, + leads, + conversao: conversations ? Math.round((conversions / conversations) * 100) : 0, + blocos: graph.nodes.length, + runs: conversations, + completed: conversions, + failed: runs.filter((run) => run.status === "failed").length, + }; + } + + private createRun(flowId: string, status: string, variables: Record) { + const runId = randomUUID(); + const timestamp = now(); + const flow = sqlite.prepare(` + SELECT published_version_id, draft_version_id + FROM flows + WHERE id = ? + `).get(flowId) as { + published_version_id: string | null; + draft_version_id: string | null; + } | undefined; + const flowVersionId = flow?.published_version_id ?? flow?.draft_version_id ?? null; + sqlite.prepare(` + INSERT INTO flow_runs (id, flow_id, flow_version_id, status, current_node_id, variables_json, history_json, created_at, updated_at) + VALUES (?, ?, ?, ?, NULL, ?, '[]', ?, ?) + `).run( + runId, + flowId, + flowVersionId, + status, + JSON.stringify(variables), + timestamp, + timestamp, + ); + return runId; + } + + private updateRun( + runId: string | null | undefined, + state: Pick, + ) { + if (!runId) { + return; + } + + sqlite.prepare(` + UPDATE flow_runs + SET status = ?, current_node_id = ?, variables_json = ?, history_json = ?, updated_at = ? + WHERE id = ? + `).run( + state.status, + state.currentNodeId, + JSON.stringify(state.variables), + JSON.stringify(state.transcript), + now(), + runId, + ); + } + + private async dispatchMessageAction( + instanceName: string, + messageType: string, + payload: Record, + ) { + if (!this.messageService) { + throw new Error("Message service is not available."); + } + + const messageMethodMap: Record = { + sendText: "sendText", + sendExtendedText: "sendExtendedText", + sendReply: "sendReply", + sendForward: "sendForward", + delete: "deleteMessage", + edit: "editMessage", + sendReaction: "sendReaction", + sendImage: "sendImage", + sendVideo: "sendVideo", + sendAudio: "sendAudio", + sendWhatsAppAudio: "sendAudio", + sendDocument: "sendDocument", + sendSticker: "sendSticker", + sendGif: "sendGif", + sendMedia: "sendImage", + sendButtons: "sendButtons", + sendTemplateButtons: "sendTemplateButtons", + sendCTAButton: "sendCTAButton", + sendCopyButton: "sendCopyButton", + sendList: "sendList", + sendCarousel: "sendCarousel", + sendAiText: "sendAiText", + sendAiCarousel: "sendAiCarousel", + sendPoll: "sendPoll", + sendLocation: "sendLocation", + sendLiveLocation: "sendLiveLocation", + sendContact: "sendContact", + sendContacts: "sendContacts", + sendStatus: "sendStatus", + sendViewOnceImage: "sendViewOnceImage", + sendViewOnceVideo: "sendViewOnceVideo", + sendProduct: "sendProduct", + sendCatalog: "sendCatalog", + sendCollection: "sendCollection", + }; + + const methodName = messageMethodMap[messageType]; + if (!methodName) { + throw new Error(`Unsupported message capability '${messageType}'.`); + } + + const method = (this.messageService as unknown as Record)[String(methodName)]; + if (typeof method !== "function") { + throw new Error(`Mapped service method '${String(methodName)}' is not available.`); + } + + return Reflect.apply( + method as (...args: unknown[]) => Promise, + this.messageService, + [instanceName, payload], + ); + } +} diff --git a/packages/berryapi/src/modules/flow/flow.validators.ts b/packages/berryapi/src/modules/flow/flow.validators.ts new file mode 100644 index 0000000..76f25ee --- /dev/null +++ b/packages/berryapi/src/modules/flow/flow.validators.ts @@ -0,0 +1,98 @@ +import { z } from "zod"; + +const jsonRecordSchema = z.record(z.string(), z.unknown()); + +const flowNodeSchema = z.object({ + id: z.string().min(1), + type: z.string().min(1), + position: z.object({ + x: z.number(), + y: z.number(), + }), + data: jsonRecordSchema.default({}), +}); + +const flowEdgeSchema = z.object({ + id: z.string().min(1), + source: z.string().min(1), + target: z.string().min(1), + sourceHandle: z.string().optional(), + targetHandle: z.string().optional(), +}); + +export const flowGraphSchema = z.object({ + nodes: z.array(flowNodeSchema).default([]), + edges: z.array(flowEdgeSchema).default([]), + viewport: jsonRecordSchema.optional(), +}); + +export const createFlowBodySchema = z.object({ + name: z.string().min(1), + graph: flowGraphSchema.optional(), +}); + +export const updateFlowBodySchema = z.object({ + name: z.string().min(1).optional(), + status: z.enum(["draft", "published", "archived"]).optional(), + graph: flowGraphSchema, +}); + +export const updateFlowStatusBodySchema = z.object({ + status: z.enum(["draft", "published", "archived"]), +}); + +export const flowIdParamsSchema = z.object({ + flowId: z.string().min(1), +}); + +export const simulateStartBodySchema = z.object({ + flowId: z.string().min(1).optional(), + flow: flowGraphSchema, + variables: jsonRecordSchema.optional(), + contact: z.object({ + jid: z.string().optional(), + name: z.string().optional(), + }).optional(), +}); + +export const simulateContinueBodySchema = z.object({ + flowId: z.string().min(1).optional(), + flow: flowGraphSchema, + state: z.object({ + status: z.enum(["running", "waiting_input", "completed", "failed"]), + currentNodeId: z.string().nullable(), + waitingNodeId: z.string().nullable().optional(), + runId: z.string().nullable().optional(), + variables: jsonRecordSchema.default({}), + transcript: z.array(jsonRecordSchema).default([]), + logs: z.array(z.string()).default([]), + }), + inputText: z.string(), +}); + +export const studioInstanceBodySchema = z.object({ + instanceName: z.string().min(1), + authMethod: z.enum(["qr", "pairing_code", "link"]).default("qr"), + phoneNumber: z.string().optional(), + settings: z.object({ + rejectCall: z.boolean().optional(), + readMessages: z.boolean().optional(), + syncFullHistory: z.boolean().optional(), + }).optional(), +}); + +export const instanceNameOnlyParamsSchema = z.object({ + instanceName: z.string().min(1), +}); + +export const validateFlowBodySchema = z.object({ + flow: flowGraphSchema, +}); + +export const executeStartBodySchema = simulateStartBodySchema.extend({ + instanceName: z.string().min(1), +}); + +export const executeContinueBodySchema = simulateContinueBodySchema.extend({ + instanceName: z.string().min(1), +}); diff --git a/packages/berryapi/src/modules/studio/assets/index.html b/packages/berryapi/src/modules/studio/assets/index.html new file mode 100644 index 0000000..a005329 --- /dev/null +++ b/packages/berryapi/src/modules/studio/assets/index.html @@ -0,0 +1,125 @@ + + + + + + Berry Studio + + + +
+ + +
+
+
+

Visual builder

+

No flow selected

+
+
+ + + +
+
+ +
+
+
+ Canvas + +
+
+ +
+
+ +
+
+
+

Inspector

+ Select a node +
+
Select a node to edit its behavior.
+
+ +
+
+

WhatsApp Preview

+ Rendered from the selected node +
+
+
+ B +
+ Berry Demo Chat +

online

+
+
+
+
+
+ +
+
+

Simulator

+ Test the whole flow before using a real instance +
+
Run the simulation to see the transcript here.
+
+ + +
+
+
+

Variables

+
{}
+
+
+

Logs

+
[]
+
+
+
+
+
+
+
+ + + + diff --git a/packages/berryapi/src/modules/studio/assets/studio.css b/packages/berryapi/src/modules/studio/assets/studio.css new file mode 100644 index 0000000..146b69f --- /dev/null +++ b/packages/berryapi/src/modules/studio/assets/studio.css @@ -0,0 +1,469 @@ +:root { + --bg: #f3efe6; + --panel: rgba(255, 255, 255, 0.86); + --panel-strong: #ffffff; + --border: rgba(31, 41, 55, 0.12); + --text: #111827; + --muted: #6b7280; + --accent: #0a8f6a; + --accent-strong: #056647; + --warm: #f59e0b; + --shadow: 0 18px 45px rgba(17, 24, 39, 0.12); + --radius: 22px; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + font-family: "Segoe UI", sans-serif; + color: var(--text); + background: + radial-gradient(circle at top left, rgba(245, 158, 11, 0.18), transparent 24%), + radial-gradient(circle at top right, rgba(10, 143, 106, 0.12), transparent 28%), + linear-gradient(180deg, #f9f5ee 0%, #f0ebe1 100%); +} + +.studio-shell { + display: grid; + grid-template-columns: 320px 1fr; + min-height: 100vh; +} + +.sidebar { + padding: 24px; + border-right: 1px solid var(--border); + background: rgba(255, 248, 240, 0.85); + backdrop-filter: blur(16px); + overflow-y: auto; +} + +.main { + display: flex; + flex-direction: column; + min-width: 0; +} + +.brand h1, +.topbar h2, +.panel h2 { + margin: 0; +} + +.eyebrow { + margin: 0 0 8px; + font-size: 11px; + font-weight: 700; + letter-spacing: 0.16em; + text-transform: uppercase; + color: var(--accent-strong); +} + +.subtitle, +.hint, +.phone-topbar p { + margin: 0; + color: var(--muted); + font-size: 13px; +} + +.panel, +.canvas-card { + margin-top: 18px; + padding: 18px; + border: 1px solid var(--border); + border-radius: var(--radius); + background: var(--panel); + box-shadow: var(--shadow); + backdrop-filter: blur(18px); +} + +.topbar { + display: flex; + justify-content: space-between; + align-items: center; + gap: 16px; + padding: 24px 24px 0; +} + +.workspace { + display: grid; + grid-template-columns: minmax(520px, 1.2fr) minmax(420px, 0.9fr); + gap: 20px; + padding: 24px; + min-height: 0; + flex: 1; +} + +.canvas-card { + display: flex; + flex-direction: column; + min-height: calc(100vh - 120px); +} + +.canvas-toolbar, +.panel-heading, +.row-actions, +.simulator-input-row { + display: flex; + align-items: center; + gap: 10px; +} + +.panel-heading, +.canvas-toolbar { + justify-content: space-between; +} + +.sidepanes { + display: grid; + gap: 18px; + align-content: start; +} + +.button { + appearance: none; + border: 0; + border-radius: 999px; + padding: 10px 14px; + font: inherit; + font-weight: 600; + cursor: pointer; + transition: transform 120ms ease, opacity 120ms ease, background 120ms ease; +} + +.button:hover { + transform: translateY(-1px); +} + +.button-primary { + background: linear-gradient(135deg, var(--accent), var(--accent-strong)); + color: #fff; +} + +.button-secondary { + background: rgba(17, 24, 39, 0.08); + color: var(--text); +} + +.button-accent { + background: linear-gradient(135deg, #f59e0b, #d97706); + color: #fff; +} + +.button-ghost { + background: transparent; + border: 1px solid var(--border); + color: var(--muted); +} + +.field { + display: grid; + gap: 6px; + margin-top: 12px; +} + +input, +textarea, +select { + width: 100%; + border: 1px solid var(--border); + border-radius: 16px; + padding: 11px 14px; + font: inherit; + color: var(--text); + background: rgba(255, 255, 255, 0.9); +} + +textarea { + min-height: 110px; + resize: vertical; +} + +.flow-list, +.palette, +.inspector { + display: grid; + gap: 10px; + margin-top: 12px; +} + +.flow-item, +.palette-item { + display: grid; + gap: 4px; + padding: 12px 14px; + border: 1px solid var(--border); + border-radius: 18px; + background: rgba(255, 255, 255, 0.86); + cursor: pointer; +} + +.flow-item.active { + border-color: rgba(10, 143, 106, 0.35); + box-shadow: inset 0 0 0 1px rgba(10, 143, 106, 0.15); +} + +.canvas { + position: relative; + flex: 1; + min-height: 640px; + overflow: auto; + border-radius: 20px; + margin-top: 16px; + background: + linear-gradient(90deg, rgba(17, 24, 39, 0.03) 1px, transparent 1px), + linear-gradient(rgba(17, 24, 39, 0.03) 1px, transparent 1px), + linear-gradient(180deg, rgba(255, 255, 255, 0.85), rgba(247, 243, 237, 0.88)); + background-size: 32px 32px, 32px 32px, 100% 100%; +} + +.edge-layer { + position: absolute; + inset: 0; + pointer-events: none; + width: 2400px; + height: 1600px; +} + +.edge-path { + fill: none; + stroke: rgba(17, 24, 39, 0.22); + stroke-width: 2.5; +} + +.flow-node { + position: absolute; + width: 220px; + min-height: 108px; + padding: 14px; + border-radius: 22px; + border: 1px solid rgba(17, 24, 39, 0.1); + background: rgba(255, 255, 255, 0.95); + box-shadow: 0 20px 32px rgba(17, 24, 39, 0.12); + cursor: grab; +} + +.flow-node.selected { + outline: 2px solid rgba(10, 143, 106, 0.28); + box-shadow: 0 24px 36px rgba(10, 143, 106, 0.18); +} + +.node-type { + font-size: 11px; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--accent-strong); +} + +.node-title { + margin: 6px 0; + font-size: 17px; +} + +.node-summary { + font-size: 13px; + color: var(--muted); +} + +.node-link-row { + display: grid; + gap: 6px; + margin-top: 12px; +} + +.phone-shell { + margin-top: 12px; + border-radius: 34px; + overflow: hidden; + background: #d8f0e5; + border: 7px solid #16212b; +} + +.phone-topbar { + display: flex; + align-items: center; + gap: 10px; + padding: 14px 18px; + background: #f6f6f6; +} + +.avatar { + display: inline-grid; + place-items: center; + width: 38px; + height: 38px; + border-radius: 50%; + background: linear-gradient(135deg, #14b8a6, #0a8f6a); + color: #fff; + font-weight: 700; +} + +.phone-chat, +.simulator-chat { + display: grid; + gap: 10px; + padding: 18px; + min-height: 280px; + max-height: 360px; + overflow: auto; + background: + radial-gradient(circle at center, rgba(255, 255, 255, 0.18), transparent 68%), + linear-gradient(180deg, #efeae2 0%, #ebe5db 100%); +} + +.wa-message, +.sim-message { + max-width: 82%; + padding: 10px 12px; + border-radius: 16px; + font-size: 14px; + line-height: 1.45; + box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08); +} + +.wa-message.assistant, +.sim-message.assistant { + justify-self: start; + background: #fff; +} + +.wa-message.user, +.sim-message.user { + justify-self: end; + background: #dcf8c6; +} + +.wa-meta, +.sim-meta { + margin-top: 6px; + font-size: 11px; + color: rgba(17, 24, 39, 0.52); + text-align: right; +} + +.wa-chip { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 7px 10px; + border-radius: 999px; + background: rgba(10, 143, 106, 0.1); + font-size: 12px; + font-weight: 700; + color: var(--accent-strong); +} + +.wa-media, +.wa-card { + margin-top: 8px; + border-radius: 14px; + background: linear-gradient(135deg, rgba(10, 143, 106, 0.18), rgba(15, 23, 42, 0.08)); + min-height: 140px; + display: grid; + place-items: center; + color: var(--accent-strong); + font-weight: 700; + text-align: center; + padding: 16px; +} + +.wa-buttons, +.wa-list, +.wa-carousel, +.wa-options { + display: grid; + gap: 8px; + margin-top: 10px; +} + +.wa-button, +.wa-option, +.wa-list-row { + padding: 10px 12px; + border-radius: 14px; + border: 1px solid rgba(10, 143, 106, 0.16); + background: rgba(255, 255, 255, 0.76); +} + +.wa-carousel { + grid-auto-flow: column; + grid-auto-columns: 190px; + overflow-x: auto; +} + +.wa-card { + display: block; + min-height: 210px; + background: #fff; + border: 1px solid rgba(17, 24, 39, 0.08); + color: var(--text); +} + +.wa-card-cover { + min-height: 92px; + border-radius: 12px; + background: linear-gradient(135deg, rgba(10, 143, 106, 0.2), rgba(245, 158, 11, 0.18)); + display: grid; + place-items: center; + font-weight: 700; +} + +.wa-card h4, +.wa-card p { + margin: 10px 0 0; +} + +.simulator-input-row { + margin-top: 12px; +} + +.simulator-meta { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin-top: 12px; +} + +pre { + margin: 0; + padding: 12px; + border-radius: 16px; + background: rgba(17, 24, 39, 0.06); + overflow: auto; + font-size: 12px; + max-height: 160px; +} + +.empty-state { + color: var(--muted); +} + +.checkbox-row { + display: flex; + align-items: center; + gap: 8px; + margin-top: 12px; +} + +.checkbox-row input { + width: auto; +} + +@media (max-width: 1280px) { + .workspace { + grid-template-columns: 1fr; + } + + .studio-shell { + grid-template-columns: 1fr; + } + + .sidebar { + border-right: 0; + border-bottom: 1px solid var(--border); + } +} diff --git a/packages/berryapi/src/modules/studio/assets/studio.js b/packages/berryapi/src/modules/studio/assets/studio.js new file mode 100644 index 0000000..fa04629 --- /dev/null +++ b/packages/berryapi/src/modules/studio/assets/studio.js @@ -0,0 +1,1001 @@ +const state = { + apiKey: localStorage.getItem("berry_studio_api_key") || "berryapi_dev_key", + capabilities: null, + flows: [], + currentFlow: null, + selectedNodeId: null, + simulatorState: null, +}; + +const elements = { + apiKey: document.getElementById("api-key"), + connectButton: document.getElementById("connect-button"), + loadButton: document.getElementById("load-button"), + flowList: document.getElementById("flow-list"), + nodePalette: document.getElementById("node-palette"), + newFlowButton: document.getElementById("new-flow-button"), + flowTitle: document.getElementById("flow-title"), + canvas: document.getElementById("canvas"), + edgeLayer: document.getElementById("edge-layer"), + inspector: document.getElementById("inspector"), + selectedNodeLabel: document.getElementById("selected-node-label"), + previewChat: document.getElementById("preview-chat"), + simulatorChat: document.getElementById("simulator-chat"), + simulatorInput: document.getElementById("simulator-input"), + sendSimulatorInput: document.getElementById("send-simulator-input"), + variablesView: document.getElementById("variables-view"), + logsView: document.getElementById("logs-view"), + saveFlowButton: document.getElementById("save-flow-button"), + publishFlowButton: document.getElementById("publish-flow-button"), + simulateButton: document.getElementById("simulate-button"), + autoLayoutButton: document.getElementById("auto-layout-button"), +}; + +const makeHeaders = () => ({ + "Content-Type": "application/json", + Authorization: `Bearer ${state.apiKey}`, +}); + +const api = async (path, options = {}) => { + const response = await fetch(path, { + ...options, + headers: { + ...(options.body ? { "Content-Type": "application/json" } : {}), + Authorization: `Bearer ${state.apiKey}`, + ...(options.headers || {}), + }, + }); + + const json = await response.json(); + if (!response.ok || !json.success) { + throw new Error(json.message || "Berry Studio request failed."); + } + + return json.data; +}; + +const deepClone = (value) => JSON.parse(JSON.stringify(value)); + +const uid = (prefix) => `${prefix}-${Math.random().toString(36).slice(2, 8)}`; + +const getSelectedNode = () => + state.currentFlow?.graph.nodes.find((node) => node.id === state.selectedNodeId) || null; + +const getOutgoingEdges = (nodeId) => + state.currentFlow.graph.edges.filter((edge) => edge.source === nodeId); + +const getNodeById = (nodeId) => + state.currentFlow.graph.nodes.find((node) => node.id === nodeId) || null; + +const saveApiKey = () => { + state.apiKey = elements.apiKey.value.trim() || "berryapi_dev_key"; + localStorage.setItem("berry_studio_api_key", state.apiKey); +}; + +const renderFlowList = () => { + elements.flowList.innerHTML = ""; + + state.flows.forEach((flow) => { + const item = document.createElement("button"); + item.type = "button"; + item.className = `flow-item ${state.currentFlow?.id === flow.id ? "active" : ""}`; + item.innerHTML = ` + ${flow.name} + ${flow.status} + ${new Date(flow.updated_at).toLocaleString()} + `; + item.addEventListener("click", () => loadFlow(flow.id)); + elements.flowList.appendChild(item); + }); +}; + +const renderNodePalette = () => { + elements.nodePalette.innerHTML = ""; + const nodeTypes = state.capabilities?.nodeTypes || []; + + nodeTypes.forEach((nodeType) => { + const button = document.createElement("button"); + button.type = "button"; + button.className = "palette-item"; + button.draggable = true; + button.dataset.nodeType = nodeType.id; + button.innerHTML = ` + ${nodeType.label} + ${nodeType.description} + `; + button.addEventListener("dragstart", (event) => { + event.dataTransfer.setData("text/node-type", nodeType.id); + }); + button.addEventListener("click", () => addNode(nodeType.id)); + elements.nodePalette.appendChild(button); + }); +}; + +const renderCanvas = () => { + elements.canvas.querySelectorAll(".flow-node").forEach((node) => node.remove()); + if (!state.currentFlow) { + elements.flowTitle.textContent = "No flow selected"; + elements.edgeLayer.innerHTML = ""; + return; + } + + elements.flowTitle.textContent = state.currentFlow.name; + + state.currentFlow.graph.nodes.forEach((node) => { + const nodeElement = document.createElement("article"); + nodeElement.className = `flow-node ${state.selectedNodeId === node.id ? "selected" : ""}`; + nodeElement.style.left = `${node.position.x}px`; + nodeElement.style.top = `${node.position.y}px`; + nodeElement.dataset.nodeId = node.id; + + const summary = getNodeSummary(node); + nodeElement.innerHTML = ` +
${node.type}
+

${node.data.label || node.type}

+
${summary}
+ `; + + nodeElement.addEventListener("click", () => { + state.selectedNodeId = node.id; + renderAll(); + }); + + enableNodeDrag(nodeElement, node.id); + elements.canvas.appendChild(nodeElement); + }); + + renderEdges(); +}; + +const renderEdges = () => { + elements.edgeLayer.innerHTML = ""; + if (!state.currentFlow) { + return; + } + + state.currentFlow.graph.edges.forEach((edge) => { + const source = getNodeById(edge.source); + const target = getNodeById(edge.target); + if (!source || !target) { + return; + } + + const sourceX = source.position.x + 220; + const sourceY = source.position.y + 56; + const targetX = target.position.x; + const targetY = target.position.y + 56; + const curve = Math.max(60, Math.abs(targetX - sourceX) / 2); + const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); + path.setAttribute( + "d", + `M ${sourceX} ${sourceY} C ${sourceX + curve} ${sourceY}, ${targetX - curve} ${targetY}, ${targetX} ${targetY}`, + ); + path.setAttribute("class", "edge-path"); + elements.edgeLayer.appendChild(path); + }); +}; + +const getNodeSummary = (node) => { + if (node.type === "message" || node.type === "action") { + const capability = state.capabilities.messageCapabilities.find((item) => item.id === node.data.messageType); + return capability ? capability.label : "Configure payload"; + } + + if (node.type === "input") { + return `Stores in ${node.data.variableName || "lastInput"}`; + } + + if (node.type === "condition") { + return `${node.data.variable || "lastInput"} ${node.data.operator || "equals"} ${node.data.value || ""}`; + } + + if (node.type === "setVariable") { + return `${node.data.key || "variable"} = ${node.data.value || ""}`; + } + + if (node.type === "delay") { + return `${node.data.delayMs || 1000} ms`; + } + + return node.data.label || "Ready"; +}; + +const renderInspector = () => { + const node = getSelectedNode(); + if (!node) { + elements.selectedNodeLabel.textContent = "Select a node"; + elements.inspector.className = "inspector empty-state"; + elements.inspector.textContent = "Select a node to edit its behavior."; + return; + } + + elements.selectedNodeLabel.textContent = `${node.type} • ${node.id}`; + elements.inspector.className = "inspector"; + elements.inspector.innerHTML = ""; + + const labelField = createField({ + key: "label", + label: "Node label", + type: "text", + }, node.data.label || node.type, (value) => { + node.data.label = value; + renderCanvas(); + }); + elements.inspector.appendChild(labelField); + + if (node.type === "message" || node.type === "action") { + renderMessageInspector(node); + } else if (node.type === "input") { + renderInputInspector(node); + } else if (node.type === "condition") { + renderConditionInspector(node); + } else if (node.type === "setVariable") { + renderSetVariableInspector(node); + } else if (node.type === "delay") { + renderDelayInspector(node); + } + + renderEdgeControls(node); +}; + +const renderMessageInspector = (node) => { + if (!node.data.messageType) { + node.data.messageType = node.type === "action" ? "sendReply" : "sendText"; + } + if (!node.data.payload) { + node.data.payload = {}; + } + + const options = state.capabilities.messageCapabilities.map((capability) => ({ + label: capability.label, + value: capability.id, + })); + + const typeField = createField({ + key: "messageType", + label: "Berry method", + type: "select", + options, + }, node.data.messageType, (value) => { + node.data.messageType = value; + node.data.payload = {}; + renderAll(); + }); + + elements.inspector.appendChild(typeField); + + const capability = state.capabilities.messageCapabilities.find((item) => item.id === node.data.messageType); + if (!capability) { + return; + } + + capability.fields.forEach((field) => { + const value = node.data.payload[field.key] ?? field.defaultValue ?? ""; + const fieldElement = createField(field, value, (nextValue) => { + node.data.payload[field.key] = nextValue; + renderPreview(); + renderCanvas(); + }); + elements.inspector.appendChild(fieldElement); + }); +}; + +const renderInputInspector = (node) => { + const fields = [ + { key: "prompt", label: "Prompt", type: "textarea" }, + { key: "variableName", label: "Variable name", type: "text" }, + ]; + + fields.forEach((field) => { + elements.inspector.appendChild(createField(field, node.data[field.key] || "", (value) => { + node.data[field.key] = value; + renderCanvas(); + })); + }); +}; + +const renderConditionInspector = (node) => { + const fields = [ + { key: "variable", label: "Variable", type: "text" }, + { + key: "operator", + label: "Operator", + type: "select", + options: state.capabilities.conditionOperators, + }, + { key: "value", label: "Expected value", type: "text" }, + ]; + + fields.forEach((field) => { + const value = node.data[field.key] || (field.key === "operator" ? "equals" : ""); + elements.inspector.appendChild(createField(field, value, (nextValue) => { + node.data[field.key] = nextValue; + renderCanvas(); + })); + }); +}; + +const renderSetVariableInspector = (node) => { + const fields = [ + { key: "key", label: "Variable key", type: "text" }, + { key: "value", label: "Value / template", type: "textarea" }, + ]; + + fields.forEach((field) => { + elements.inspector.appendChild(createField(field, node.data[field.key] || "", (nextValue) => { + node.data[field.key] = nextValue; + renderCanvas(); + })); + }); +}; + +const renderDelayInspector = (node) => { + elements.inspector.appendChild(createField({ + key: "delayMs", + label: "Delay (ms)", + type: "number", + }, node.data.delayMs || 1000, (value) => { + node.data.delayMs = Number(value || 0); + renderCanvas(); + })); +}; + +const renderEdgeControls = (node) => { + const edgeBox = document.createElement("div"); + edgeBox.className = "node-link-row"; + + const targets = [ + { label: "No connection", value: "" }, + ...state.currentFlow.graph.nodes + .filter((candidate) => candidate.id !== node.id) + .map((candidate) => ({ + label: `${candidate.data.label || candidate.type} (${candidate.id})`, + value: candidate.id, + })), + ]; + + if (node.type === "condition") { + ["true", "false"].forEach((handle) => { + edgeBox.appendChild(createField({ + key: handle, + label: `Branch ${handle}`, + type: "select", + options: targets, + }, getEdgeTarget(node.id, handle), (value) => { + upsertEdge(node.id, value, handle); + })); + }); + } else if (node.type !== "end") { + edgeBox.appendChild(createField({ + key: "next", + label: "Next node", + type: "select", + options: targets, + }, getEdgeTarget(node.id), (value) => { + upsertEdge(node.id, value); + })); + } + + const deleteButton = document.createElement("button"); + deleteButton.type = "button"; + deleteButton.className = "button button-secondary"; + deleteButton.textContent = "Delete node"; + deleteButton.addEventListener("click", () => deleteNode(node.id)); + edgeBox.appendChild(deleteButton); + + elements.inspector.appendChild(edgeBox); +}; + +const createField = (field, value, onChange) => { + const wrapper = document.createElement("label"); + wrapper.className = field.type === "checkbox" ? "checkbox-row" : "field"; + + const label = document.createElement("span"); + label.textContent = field.label; + wrapper.appendChild(label); + + let input; + + if (field.type === "textarea" || field.type === "json") { + input = document.createElement("textarea"); + input.value = field.type === "json" + ? (typeof value === "string" ? value : JSON.stringify(value || {}, null, 2)) + : value || ""; + } else if (field.type === "select") { + input = document.createElement("select"); + (field.options || []).forEach((option) => { + const element = document.createElement("option"); + element.value = option.value; + element.textContent = option.label; + input.appendChild(element); + }); + input.value = value || ""; + } else { + input = document.createElement("input"); + input.type = field.type === "number" ? "number" : field.type === "checkbox" ? "checkbox" : "text"; + if (field.type === "checkbox") { + input.checked = Boolean(value); + } else { + input.value = value ?? ""; + } + } + + if (field.placeholder) { + input.placeholder = field.placeholder; + } + + const handler = () => { + let nextValue; + if (field.type === "checkbox") { + nextValue = input.checked; + } else if (field.type === "number") { + nextValue = input.value === "" ? "" : Number(input.value); + } else if (field.type === "json") { + nextValue = input.value; + } else { + nextValue = input.value; + } + onChange(nextValue); + }; + + input.addEventListener("change", handler); + input.addEventListener("input", handler); + wrapper.appendChild(input); + + if (field.description) { + const hint = document.createElement("small"); + hint.className = "hint"; + hint.textContent = field.description; + wrapper.appendChild(hint); + } + + return wrapper; +}; + +const renderPreview = () => { + elements.previewChat.innerHTML = ""; + const node = getSelectedNode(); + + if (!node || !["message", "action", "input", "condition", "setVariable", "delay", "start", "end"].includes(node.type)) { + elements.previewChat.innerHTML = `
Select a node to preview how it behaves in chat.
`; + return; + } + + const sampleItems = buildPreviewItems(node); + sampleItems.forEach((item) => { + elements.previewChat.appendChild(renderChatBubble(item, "wa-message")); + }); +}; + +const buildPreviewItems = (node) => { + if (node.type === "message" || node.type === "action") { + return [{ + role: "assistant", + type: node.data.messageType || "sendText", + previewKind: state.capabilities.messageCapabilities.find((item) => item.id === node.data.messageType)?.previewKind || "text", + payload: normalizePayload(node.data.payload || {}), + }]; + } + + if (node.type === "input") { + return [ + { role: "assistant", type: "input_prompt", previewKind: "text", payload: { text: node.data.prompt || "What should we ask?" } }, + { role: "user", type: "text", previewKind: "text", payload: { text: `{{${node.data.variableName || "answer"}}}` } }, + ]; + } + + if (node.type === "condition") { + return [{ role: "assistant", type: "condition", previewKind: "event", payload: { text: `${node.data.variable || "lastInput"} ${node.data.operator || "equals"} ${node.data.value || ""}` } }]; + } + + if (node.type === "setVariable") { + return [{ role: "assistant", type: "setVariable", previewKind: "event", payload: { text: `${node.data.key || "variable"} = ${node.data.value || ""}` } }]; + } + + if (node.type === "delay") { + return [{ role: "assistant", type: "delay", previewKind: "event", payload: { text: `Delay ${node.data.delayMs || 1000} ms` } }]; + } + + return [{ role: "assistant", type: node.type, previewKind: "event", payload: { text: node.type } }]; +}; + +const normalizePayload = (payload) => { + const output = {}; + Object.entries(payload || {}).forEach(([key, value]) => { + if (typeof value !== "string") { + output[key] = value; + return; + } + + const trimmed = value.trim(); + if ((trimmed.startsWith("{") && trimmed.endsWith("}")) || (trimmed.startsWith("[") && trimmed.endsWith("]"))) { + try { + output[key] = JSON.parse(trimmed); + return; + } catch {} + } + output[key] = value; + }); + return output; +}; + +const renderChatBubble = (item, className) => { + const bubble = document.createElement("div"); + bubble.className = `${className} ${item.role === "user" ? "user" : "assistant"}`; + + const payload = item.payload || {}; + const previewKind = item.previewKind || "text"; + + if (previewKind === "text" || previewKind === "status") { + bubble.innerHTML = `
${payload.text || payload.title || "Text message"}
`; + } else if (previewKind === "reply") { + bubble.innerHTML = ` + +
${payload.text || "Reply message"}
+ `; + } else if (previewKind === "image" || previewKind === "video") { + bubble.innerHTML = ` + +
${payload.caption || payload.text || "Media caption"}
+ `; + } else if (previewKind === "audio") { + bubble.innerHTML = ` + +
${payload.fileName || payload.url || "Voice note / audio file"}
+ `; + } else if (previewKind === "document") { + bubble.innerHTML = ` + +
${payload.fileName || "Document attachment"}
+
${payload.caption || ""}
+ `; + } else if (previewKind === "sticker") { + bubble.innerHTML = ``; + } else if (previewKind === "buttons") { + const buttons = Array.isArray(payload.buttons) + ? payload.buttons + : payload.copyCode + ? [{ title: payload.buttonText || "Copy", type: "cta_copy" }] + : []; + bubble.innerHTML = ` +
${payload.text || "Button message"}
+ + + `; + } else if (previewKind === "list") { + const sections = Array.isArray(payload.sections) ? payload.sections : []; + bubble.innerHTML = ` +
${payload.text || "List message"}
+ + + `; + } else if (previewKind === "carousel") { + const cards = Array.isArray(payload.cards) ? payload.cards : []; + bubble.innerHTML = ` +
${payload.text || "Carousel"}
+ + `; + } else if (previewKind === "poll") { + const options = Array.isArray(payload.options) ? payload.options : payload.values || []; + bubble.innerHTML = ` +
${payload.title || payload.name || "Poll"}
+ + `; + } else if (previewKind === "location") { + bubble.innerHTML = ` + +
${payload.name || "Pinned location"}
+
${payload.address || `${payload.latitude || ""}, ${payload.longitude || ""}`}
+ `; + } else if (previewKind === "contacts") { + const contacts = Array.isArray(payload.contacts) ? payload.contacts : payload.vcard ? [{ displayName: payload.displayName }] : []; + bubble.innerHTML = ` + + + `; + } else if (previewKind === "product") { + bubble.innerHTML = ` + + `; + } else if (previewKind === "catalog") { + bubble.innerHTML = ` + + `; + } else if (previewKind === "reaction") { + bubble.innerHTML = ``; + } else { + bubble.innerHTML = `
${payload.text || JSON.stringify(payload)}
`; + } + + const meta = document.createElement("div"); + meta.className = className === "sim-message" ? "sim-meta" : "wa-meta"; + meta.textContent = "12:34"; + bubble.appendChild(meta); + return bubble; +}; + +const renderSimulator = () => { + const transcript = state.simulatorState?.transcript || []; + if (!transcript.length) { + elements.simulatorChat.className = "simulator-chat empty-state"; + elements.simulatorChat.textContent = "Run the simulation to see the transcript here."; + } else { + elements.simulatorChat.className = "simulator-chat"; + elements.simulatorChat.innerHTML = ""; + transcript.forEach((item) => { + const bubble = renderChatBubble(item.role ? item : { role: "assistant", previewKind: "event", payload: item }, "sim-message"); + elements.simulatorChat.appendChild(bubble); + }); + } + + elements.variablesView.textContent = JSON.stringify(state.simulatorState?.variables || {}, null, 2); + elements.logsView.textContent = JSON.stringify(state.simulatorState?.logs || [], null, 2); +}; + +const renderAll = () => { + renderFlowList(); + renderNodePalette(); + renderCanvas(); + renderInspector(); + renderPreview(); + renderSimulator(); +}; + +const addNode = (type, position = null) => { + if (!state.currentFlow) { + return; + } + + const node = { + id: uid(type), + type, + position: position || { + x: 180 + state.currentFlow.graph.nodes.length * 24, + y: 120 + state.currentFlow.graph.nodes.length * 24, + }, + data: { + label: type === "message" ? "Message node" : type === "action" ? "Action node" : type.charAt(0).toUpperCase() + type.slice(1), + }, + }; + + if (type === "message") { + node.data.messageType = "sendText"; + node.data.payload = { text: "Hello from Berry Studio" }; + } + + if (type === "action") { + node.data.messageType = "sendReply"; + node.data.payload = { text: "Reply from Berry Studio", quoted: "{\"remoteJid\":\"5511999999999@s.whatsapp.net\",\"id\":\"MSG_ID\"}" }; + } + + if (type === "input") { + node.data.prompt = "How can we help you today?"; + node.data.variableName = "reply"; + } + + if (type === "condition") { + node.data.variable = "reply"; + node.data.operator = "equals"; + node.data.value = "sales"; + } + + if (type === "setVariable") { + node.data.key = "segment"; + node.data.value = "vip"; + } + + if (type === "delay") { + node.data.delayMs = 1000; + } + + state.currentFlow.graph.nodes.push(node); + state.selectedNodeId = node.id; + renderAll(); +}; + +const deleteNode = (nodeId) => { + if (!state.currentFlow) { + return; + } + + state.currentFlow.graph.nodes = state.currentFlow.graph.nodes.filter((node) => node.id !== nodeId); + state.currentFlow.graph.edges = state.currentFlow.graph.edges.filter((edge) => edge.source !== nodeId && edge.target !== nodeId); + state.selectedNodeId = state.currentFlow.graph.nodes[0]?.id || null; + renderAll(); +}; + +const getEdgeTarget = (source, handle = undefined) => + state.currentFlow.graph.edges.find((edge) => edge.source === source && edge.sourceHandle === handle)?.target || ""; + +const upsertEdge = (source, target, sourceHandle = undefined) => { + state.currentFlow.graph.edges = state.currentFlow.graph.edges.filter((edge) => !(edge.source === source && edge.sourceHandle === sourceHandle)); + if (target) { + state.currentFlow.graph.edges.push({ + id: uid("edge"), + source, + target, + sourceHandle, + }); + } + renderAll(); +}; + +const enableNodeDrag = (nodeElement, nodeId) => { + let dragging = false; + let offsetX = 0; + let offsetY = 0; + + nodeElement.addEventListener("pointerdown", (event) => { + dragging = true; + const node = getNodeById(nodeId); + offsetX = event.clientX - node.position.x; + offsetY = event.clientY - node.position.y; + nodeElement.setPointerCapture(event.pointerId); + }); + + nodeElement.addEventListener("pointermove", (event) => { + if (!dragging) { + return; + } + + const node = getNodeById(nodeId); + node.position.x = Math.max(24, event.clientX - offsetX); + node.position.y = Math.max(24, event.clientY - offsetY - 90); + renderCanvas(); + }); + + nodeElement.addEventListener("pointerup", (event) => { + dragging = false; + nodeElement.releasePointerCapture(event.pointerId); + }); +}; + +const autoLayout = () => { + if (!state.currentFlow) { + return; + } + + state.currentFlow.graph.nodes.forEach((node, index) => { + node.position.x = 120 + (index % 3) * 280; + node.position.y = 120 + Math.floor(index / 3) * 180; + }); + renderAll(); +}; + +const loadCapabilities = async () => { + state.capabilities = await api("/studio/api/capabilities"); +}; + +const loadFlows = async () => { + state.flows = await api("/studio/api/flows"); + renderFlowList(); +}; + +const loadFlow = async (flowId) => { + state.currentFlow = await api(`/studio/api/flows/${flowId}`); + state.selectedNodeId = state.currentFlow.graph.nodes[0]?.id || null; + state.simulatorState = null; + renderAll(); +}; + +const createFlow = async () => { + const name = window.prompt("Flow name", `Berry Flow ${state.flows.length + 1}`); + if (!name) { + return; + } + + const flow = await api("/studio/api/flows", { + method: "POST", + body: JSON.stringify({ + name, + graph: deepClone(state.capabilities.defaultGraph), + }), + }); + + await loadFlows(); + state.currentFlow = flow; + state.selectedNodeId = flow.graph.nodes[0]?.id || null; + renderAll(); +}; + +const saveCurrentFlow = async () => { + if (!state.currentFlow) { + return; + } + + state.currentFlow = await api(`/studio/api/flows/${state.currentFlow.id}`, { + method: "PUT", + body: JSON.stringify({ + name: state.currentFlow.name, + status: state.currentFlow.status, + graph: state.currentFlow.graph, + }), + }); + await loadFlows(); + renderAll(); +}; + +const publishCurrentFlow = async () => { + if (!state.currentFlow) { + return; + } + + state.currentFlow = await api(`/studio/api/flows/${state.currentFlow.id}/publish`, { + method: "POST", + }); + await loadFlows(); + renderAll(); +}; + +const startSimulation = async () => { + if (!state.currentFlow) { + return; + } + + state.simulatorState = await api("/studio/api/simulate/start", { + method: "POST", + body: JSON.stringify({ + flow: state.currentFlow.graph, + contact: { + jid: "5511999999999@s.whatsapp.net", + name: "Berry Demo", + }, + }), + }); + renderSimulator(); +}; + +const continueSimulation = async () => { + if (!state.currentFlow || !state.simulatorState) { + return; + } + + const inputText = elements.simulatorInput.value.trim(); + if (!inputText) { + return; + } + + state.simulatorState = await api("/studio/api/simulate/continue", { + method: "POST", + body: JSON.stringify({ + flow: state.currentFlow.graph, + state: state.simulatorState, + inputText, + }), + }); + + elements.simulatorInput.value = ""; + renderSimulator(); +}; + +const bindEvents = () => { + elements.apiKey.value = state.apiKey; + elements.connectButton.addEventListener("click", async () => { + try { + saveApiKey(); + await boot(); + } catch (error) { + alert(error.message); + } + }); + + elements.loadButton.addEventListener("click", async () => { + try { + saveApiKey(); + await loadFlows(); + } catch (error) { + alert(error.message); + } + }); + + elements.newFlowButton.addEventListener("click", async () => { + try { + await createFlow(); + } catch (error) { + alert(error.message); + } + }); + + elements.saveFlowButton.addEventListener("click", async () => { + try { + await saveCurrentFlow(); + } catch (error) { + alert(error.message); + } + }); + + elements.publishFlowButton.addEventListener("click", async () => { + try { + await publishCurrentFlow(); + } catch (error) { + alert(error.message); + } + }); + + elements.simulateButton.addEventListener("click", async () => { + try { + await startSimulation(); + } catch (error) { + alert(error.message); + } + }); + + elements.sendSimulatorInput.addEventListener("click", async () => { + try { + await continueSimulation(); + } catch (error) { + alert(error.message); + } + }); + + elements.simulatorInput.addEventListener("keydown", async (event) => { + if (event.key === "Enter") { + event.preventDefault(); + try { + await continueSimulation(); + } catch (error) { + alert(error.message); + } + } + }); + + elements.autoLayoutButton.addEventListener("click", autoLayout); + + elements.canvas.addEventListener("dragover", (event) => { + event.preventDefault(); + }); + + elements.canvas.addEventListener("drop", (event) => { + event.preventDefault(); + const nodeType = event.dataTransfer.getData("text/node-type"); + if (!nodeType) { + return; + } + + const rect = elements.canvas.getBoundingClientRect(); + addNode(nodeType, { + x: event.clientX - rect.left, + y: event.clientY - rect.top, + }); + }); +}; + +const boot = async () => { + await loadCapabilities(); + await loadFlows(); + if (!state.currentFlow && state.flows[0]?.id) { + await loadFlow(state.flows[0].id); + } else { + renderAll(); + } +}; + +bindEvents(); +boot().catch((error) => { + elements.flowList.innerHTML = `
${error.message}
`; +}); diff --git a/packages/berryapi/src/modules/studio/studio.routes.ts b/packages/berryapi/src/modules/studio/studio.routes.ts new file mode 100644 index 0000000..476fa3e --- /dev/null +++ b/packages/berryapi/src/modules/studio/studio.routes.ts @@ -0,0 +1,95 @@ +import { existsSync } from "node:fs"; +import { readFile } from "node:fs/promises"; +import { dirname, extname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import type { FastifyReply, FastifyRequest } from "fastify"; + +const currentDir = dirname(fileURLToPath(import.meta.url)); +const repoRoot = resolve(currentDir, "..", "..", "..", "..", ".."); +const studioAssetsDir = resolve(repoRoot, "packages", "berryapi", "src", "modules", "studio", "assets"); +const studioAppDistDir = resolve(repoRoot, "packages", "studio", "dist"); +const studioAppAssetsDir = join(studioAppDistDir, "assets"); + +const assetMimeTypes: Record = { + ".html": "text/html; charset=utf-8", + ".css": "text/css; charset=utf-8", + ".js": "application/javascript; charset=utf-8", + ".json": "application/json; charset=utf-8", + ".svg": "image/svg+xml", +}; + +const getAssetPath = (assetName: string) => { + const normalized = assetName.replace(/[^a-zA-Z0-9._-]/g, ""); + return join(studioAssetsDir, normalized); +}; + +const sendFile = async (reply: FastifyReply, filePath: string) => { + const extension = extname(filePath).toLowerCase(); + const file = await readFile(filePath); + reply.type(assetMimeTypes[extension] ?? "application/octet-stream").send(file); +}; + +const sendLegacyAsset = async (reply: FastifyReply, assetName: string) => { + await sendFile(reply, getAssetPath(assetName)); +}; + +export const registerStudioRoutes = async (app: any) => { + const sendStudioIndex = async (reply: FastifyReply) => { + if (existsSync(join(studioAppDistDir, "index.html"))) { + await sendFile(reply, join(studioAppDistDir, "index.html")); + return; + } + + await sendLegacyAsset(reply, "index.html"); + }; + + app.get("/studio", async (_request: FastifyRequest, reply: FastifyReply) => { + await sendStudioIndex(reply); + }); + + app.get("/studio/assets/:assetName", async (request: FastifyRequest<{ Params: { assetName: string } }>, reply: FastifyReply) => { + const normalized = request.params.assetName.replace(/[^a-zA-Z0-9._-]/g, ""); + const builtAssetPath = join(studioAppAssetsDir, normalized); + if (existsSync(builtAssetPath)) { + await sendFile(reply, builtAssetPath); + return; + } + + await sendLegacyAsset(reply, normalized); + }); + + app.get("/studio/favicon.svg", async (_request: FastifyRequest, reply: FastifyReply) => { + const builtAssetPath = join(studioAppDistDir, "favicon.svg"); + if (existsSync(builtAssetPath)) { + await sendFile(reply, builtAssetPath); + return; + } + + await sendLegacyAsset(reply, "favicon.svg"); + }); + + app.get("/favicon.ico", async (_request: FastifyRequest, reply: FastifyReply) => { + const builtAssetPath = join(studioAppDistDir, "favicon.svg"); + if (existsSync(builtAssetPath)) { + await sendFile(reply, builtAssetPath); + return; + } + + await sendLegacyAsset(reply, "favicon.svg"); + }); + + app.get("/studio/:assetName", async (request: FastifyRequest<{ Params: { assetName: string } }>, reply: FastifyReply) => { + const normalized = request.params.assetName.replace(/[^a-zA-Z0-9._-]/g, ""); + const builtAssetPath = join(studioAppDistDir, normalized); + if (existsSync(builtAssetPath)) { + await sendFile(reply, builtAssetPath); + return; + } + + await sendLegacyAsset(reply, normalized); + }); + + app.get("/studio/*", async (_request: FastifyRequest, reply: FastifyReply) => { + await sendStudioIndex(reply); + }); +}; diff --git a/packages/berryotp/package.json b/packages/berryotp/package.json index a45b003..a27dc87 100644 --- a/packages/berryotp/package.json +++ b/packages/berryotp/package.json @@ -22,9 +22,9 @@ "publishConfig": { "access": "public" }, - "dependencies": { - "@berrysdk/berry-otp": "0.1.9" - }, + "dependencies": { + "@berrysdk/berry-otp": "^0.1.9" + }, "peerDependencies": { "berryprotocol": "^0.1.9" } diff --git a/packages/berryprotocol/package.json b/packages/berryprotocol/package.json index a2db4e8..0286341 100644 --- a/packages/berryprotocol/package.json +++ b/packages/berryprotocol/package.json @@ -1,10 +1,13 @@ { "name": "berryprotocol", - "version": "0.1.9", + "version": "0.1.10", "description": "Facade package for Berry SDK that exposes BerryProtocol as the main SDK entrypoint.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ @@ -23,6 +26,6 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.9" + "@berrysdk/core": "^0.1.10" } } diff --git a/packages/cli/package.json b/packages/cli/package.json index a5a5d78..746a01a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -20,7 +20,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.9", + "@berrysdk/core": "^0.1.9", "commander": "^14.0.0", "pino": "^9.6.0" } diff --git a/packages/core/package.json b/packages/core/package.json index 15d9679..3c19bd8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,10 +1,13 @@ { "name": "@berrysdk/core", - "version": "0.1.9", + "version": "0.1.10", "description": "Public SDK for Berry Protocol WhatsApp integrations.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ @@ -22,12 +25,12 @@ "access": "public" }, "dependencies": { - "@berrysdk/auth": "0.1.2", - "@berrysdk/events": "0.1.4", - "@berrysdk/media": "0.1.2", - "@berrysdk/messages": "0.1.3", - "@berrysdk/socket": "0.1.9", - "@berrysdk/store": "0.1.3", + "@berrysdk/auth": "^0.1.2", + "@berrysdk/events": "^0.1.4", + "@berrysdk/media": "^0.1.2", + "@berrysdk/messages": "^0.1.3", + "@berrysdk/socket": "^0.1.10", + "@berrysdk/store": "^0.1.4", "pino": "^9.6.0", "qrcode-terminal": "^0.12.0" } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 3694e92..f60b7cf 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -52,6 +52,10 @@ export interface BerryClientOptions { qrSmall?: boolean; } +export interface ConnectFlowOptions { + waitForConnection?: boolean; +} + type BerryMediaSource = Buffer | { url: string | URL }; const MAX_CAROUSEL_CARDS = 10; @@ -189,22 +193,70 @@ export class BerryClient { await this.socket.connect(auth); } - async connectWithLink(): Promise { - await this.connect({ method: "link" }); + async connectWithLink(options?: ConnectFlowOptions): Promise { + await this.connectForAuthFlow({ method: "link" }, "auth.link", options); } - async connectWithQr(): Promise { - await this.connect({ method: "qr" }); + async connectWithQr(options?: ConnectFlowOptions): Promise { + await this.connectForAuthFlow({ method: "qr" }, "auth.qr", options); } async connectWithPairingCode( phoneNumber: string, customPairingCode?: string, + options?: ConnectFlowOptions, ): Promise { - await this.connect({ - method: "pairing_code", - phoneNumber, - customPairingCode, + await this.connectForAuthFlow( + { + method: "pairing_code", + phoneNumber, + customPairingCode, + }, + "auth.pairing_code", + options, + ); + } + + async waitUntilConnected(timeoutMs = 120_000): Promise { + if (this.socket.isConnected()) { + return; + } + + await new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + cleanup(); + reject(new Error(`Timed out waiting for WhatsApp connection after ${timeoutMs}ms.`)); + }, timeoutMs); + + const cleanup = () => { + clearTimeout(timeout); + this.bus.off("connection.open", handleOpen); + this.bus.off("auth.error", handleAuthError); + this.bus.off("connection.close", handleClose); + }; + + const handleOpen = () => { + cleanup(); + resolve(); + }; + + const handleAuthError = ({ error }: BerryEventMap["auth.error"]) => { + cleanup(); + reject(new Error(error)); + }; + + const handleClose = ({ reason }: BerryEventMap["connection.close"]) => { + if (reason === "restart_required") { + return; + } + + cleanup(); + reject(new Error(`WhatsApp connection closed before opening (${reason}).`)); + }; + + this.bus.on("connection.open", handleOpen); + this.bus.on("auth.error", handleAuthError); + this.bus.on("connection.close", handleClose); }); } @@ -731,6 +783,62 @@ export class BerryClient { throw new Error("Carousel media must provide url, path or buffer."); } + private async connectForAuthFlow( + auth: BerryAuthOptions, + readyEvent: "auth.qr" | "auth.link" | "auth.pairing_code", + options?: ConnectFlowOptions, + ): Promise { + if (options?.waitForConnection) { + await this.connect(auth); + return; + } + + await this.sessions.get(this.options.sessionId); + + const waitForArtifactOrOpen = new Promise((resolve, reject) => { + const cleanup = () => { + this.bus.off(readyEvent, handleReady); + this.bus.off("connection.open", handleOpen); + this.bus.off("auth.error", handleAuthError); + this.bus.off("connection.close", handleClose); + }; + + const handleReady = () => { + cleanup(); + resolve(); + }; + + const handleOpen = () => { + cleanup(); + resolve(); + }; + + const handleAuthError = ({ error }: BerryEventMap["auth.error"]) => { + cleanup(); + reject(new Error(error)); + }; + + const handleClose = ({ reason }: BerryEventMap["connection.close"]) => { + if (reason === "restart_required") { + return; + } + + cleanup(); + reject(new Error(`WhatsApp connection closed during auth flow (${reason}).`)); + }; + + this.bus.on(readyEvent, handleReady); + this.bus.on("connection.open", handleOpen); + this.bus.on("auth.error", handleAuthError); + this.bus.on("connection.close", handleClose); + }); + + const connectPromise = this.socket.connect(auth); + void connectPromise.catch(() => undefined); + + await Promise.race([waitForArtifactOrOpen, connectPromise]); + } + private bindInternals(): void { this.bus.on("qr", async (qr) => { this.lastQr = qr; diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 704cff3..c304f85 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -20,7 +20,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/core": "0.1.9", + "@berrysdk/core": "^0.1.9", "express": "^5.1.0", "pino": "^9.6.0" } diff --git a/packages/media/package.json b/packages/media/package.json index 4d31d8e..7dacf41 100644 --- a/packages/media/package.json +++ b/packages/media/package.json @@ -5,6 +5,9 @@ "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ diff --git a/packages/messages/package.json b/packages/messages/package.json index 061790e..b39b904 100644 --- a/packages/messages/package.json +++ b/packages/messages/package.json @@ -20,6 +20,6 @@ "access": "public" }, "dependencies": { - "@berrysdk/events": "0.1.4" + "@berrysdk/events": "^0.1.4" } } diff --git a/packages/protocol/package.json b/packages/protocol/package.json index e0ccf6b..ed0e7c8 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -5,6 +5,9 @@ "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ diff --git a/packages/socket/package.json b/packages/socket/package.json index c9f5695..bd0ce39 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -1,10 +1,13 @@ { "name": "@berrysdk/socket", - "version": "0.1.9", + "version": "0.1.10", "description": "Internal transport adapter for Berry Protocol.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ @@ -20,10 +23,10 @@ "access": "public" }, "dependencies": { - "@berrysdk/events": "0.1.4", - "@berrysdk/proto": "0.1.2", - "@berrysdk/transport": "0.1.8", - "@berrysdk/wa-message": "0.1.9", + "@berrysdk/events": "^0.1.4", + "@berrysdk/proto": "^0.1.2", + "@berrysdk/transport": "^0.1.9", + "@berrysdk/wa-message": "^0.1.10", "pino": "^9.6.0", "ws": "^8.18.1" } diff --git a/packages/socket/src/index.ts b/packages/socket/src/index.ts index 473b774..dfe1b5c 100644 --- a/packages/socket/src/index.ts +++ b/packages/socket/src/index.ts @@ -46,8 +46,7 @@ import { carouselPayloadToMessageContent, interactivePayloadToMessageContent, interactiveNativeFlowAdditionalNodes, - legacyListAdditionalNodes, - listToLegacyListMessageContent, + listToInteractiveMessageContent, normalizeIncomingMessage, } from "@berrysdk/wa-message"; @@ -179,6 +178,7 @@ export class BerrySocket { private reconnectAttempts = 0; private reconnectTimer?: NodeJS.Timeout; private manualClose = false; + private connected = false; private sock?: WASocket; private connectPromise?: Promise; private authFolder?: string; @@ -239,6 +239,7 @@ export class BerrySocket { async disconnect(reason = "manual"): Promise { this.manualClose = true; clearTimeout(this.reconnectTimer); + this.connected = false; this.sock?.end(new Error(reason)); this.sock?.ws.close(); this.sock = undefined; @@ -252,10 +253,15 @@ export class BerrySocket { async logout(): Promise { this.manualClose = true; clearTimeout(this.reconnectTimer); + this.connected = false; await this.sock?.logout(); this.sock = undefined; } + isConnected(): boolean { + return this.connected && Boolean(this.sock?.user?.id); + } + async sendMessage( to: string, content: MessageContent, @@ -362,7 +368,7 @@ export class BerrySocket { } const recipientJid = assertTransportJid(to); - const content = listToLegacyListMessageContent(list); + const content = listToInteractiveMessageContent(list); const fullMessage = generateWAMessageFromContent(recipientJid, content, { userJid: this.sock.user.id, }); @@ -370,7 +376,6 @@ export class BerrySocket { await this.sock.relayMessage(recipientJid, fullMessage.message!, { messageId: fullMessage.key.id!, - additionalNodes: legacyListAdditionalNodes(), }); return fullMessage as WAMessage; @@ -662,6 +667,7 @@ export class BerrySocket { } if (update.connection === "open") { + this.connected = true; this.reconnectAttempts = 0; this.bus.emit("connection.open", { sessionId: this.options.sessionId, @@ -672,6 +678,7 @@ export class BerrySocket { } if (update.connection === "close") { + this.connected = false; const statusCode = getStatusCode(update.lastDisconnect?.error); const reason = statusCode === DisconnectReason.loggedOut diff --git a/packages/store/package.json b/packages/store/package.json index c903d3c..7bf6447 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -1,10 +1,13 @@ { "name": "@berrysdk/store", - "version": "0.1.3", + "version": "0.1.4", "description": "SQLite-backed persistence for Berry Protocol sessions and metadata.", "author": "Lipe Devv and Berry Protocol", "license": "Apache-2.0", "type": "module", + "engines": { + "node": "20.x || >=22 <27" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ @@ -20,7 +23,7 @@ "access": "public" }, "dependencies": { - "@berrysdk/events": "0.1.4", - "better-sqlite3": "^11.10.0" + "@berrysdk/events": "^0.1.4", + "better-sqlite3": "^12.11.1" } } diff --git a/packages/studio/.gitignore b/packages/studio/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/packages/studio/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/studio/README.md b/packages/studio/README.md new file mode 100644 index 0000000..7dbf7eb --- /dev/null +++ b/packages/studio/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/packages/studio/components.json b/packages/studio/components.json new file mode 100644 index 0000000..5c23ec4 --- /dev/null +++ b/packages/studio/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "radix-nova", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "rtl": false, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "menuColor": "default", + "menuAccent": "subtle", + "registries": {} +} diff --git a/packages/studio/eslint.config.js b/packages/studio/eslint.config.js new file mode 100644 index 0000000..e7f2d04 --- /dev/null +++ b/packages/studio/eslint.config.js @@ -0,0 +1,26 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + globals: globals.browser, + }, + rules: { + 'react-hooks/set-state-in-effect': 'off', + 'react-refresh/only-export-components': 'off', + }, + }, +]) diff --git a/packages/studio/index.html b/packages/studio/index.html new file mode 100644 index 0000000..789f7a6 --- /dev/null +++ b/packages/studio/index.html @@ -0,0 +1,18 @@ + + + + + + + + + Berry Studio · WhatsApp Flow Builder + + +
+ + + diff --git a/packages/studio/package.json b/packages/studio/package.json new file mode 100644 index 0000000..5393abf --- /dev/null +++ b/packages/studio/package.json @@ -0,0 +1,43 @@ +{ + "name": "studio", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@radix-ui/react-label": "^2.1.7", + "@tailwindcss/vite": "^4.3.0", + "@xyflow/react": "^12.10.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^1.16.0", + "qrcode": "^1.5.4", + "radix-ui": "^1.4.3", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-router-dom": "^7.15.1", + "reactflow": "^11.11.4", + "tailwind-merge": "^3.6.0", + "tailwindcss": "^4.3.0" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^24.12.3", + "@types/qrcode": "^1.5.6", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "typescript": "~6.0.2", + "typescript-eslint": "^8.59.2", + "vite": "^8.0.12" + } +} diff --git a/packages/studio/public/favicon.svg b/packages/studio/public/favicon.svg new file mode 100644 index 0000000..8b810b3 --- /dev/null +++ b/packages/studio/public/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/studio/public/icons.svg b/packages/studio/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/packages/studio/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/studio/src/App.css b/packages/studio/src/App.css new file mode 100644 index 0000000..f90339d --- /dev/null +++ b/packages/studio/src/App.css @@ -0,0 +1,184 @@ +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/packages/studio/src/App.tsx b/packages/studio/src/App.tsx new file mode 100644 index 0000000..f148792 --- /dev/null +++ b/packages/studio/src/App.tsx @@ -0,0 +1,41 @@ +import { lazy, Suspense } from "react"; +import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; + +import { StudioAuthGate } from "@/components/flow/StudioAuthGate"; +import { Skeleton } from "@/components/ui/skeleton"; + +const AnalyticsPage = lazy(() => import("@/pages/AnalyticsPage")); +const ConnectionsPage = lazy(() => import("@/pages/ConnectionsPage")); +const FlowEditorPage = lazy(() => import("@/pages/FlowEditorPage")); +const HomePage = lazy(() => import("@/pages/HomePage")); +const NotificationsPage = lazy(() => import("@/pages/NotificationsPage")); +const StudioPage = lazy(() => import("@/pages/StudioPage")); +const TutorialsPage = lazy(() => import("@/pages/TutorialsPage")); + +export default function App() { + return ( + + + + + + + } + > + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + + + ); +} diff --git a/packages/studio/src/assets/hero.png b/packages/studio/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/packages/studio/src/assets/react.svg b/packages/studio/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/packages/studio/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/studio/src/assets/vite.svg b/packages/studio/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/packages/studio/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/packages/studio/src/components/flow/AnalysisView.tsx b/packages/studio/src/components/flow/AnalysisView.tsx new file mode 100644 index 0000000..797b03b --- /dev/null +++ b/packages/studio/src/components/flow/AnalysisView.tsx @@ -0,0 +1,132 @@ +import { useEffect, useMemo, useState } from "react"; +import { BarChart3, MessageSquare, Users, Target, TrendingUp } from "lucide-react"; +import { getStudioAnalytics } from "@/lib/studio-api"; + +type Metric = { + visitors: number; + conversations: number; + leads: number; + conversions: number; + conversionRate: number; +}; + +export function AnalysisView({ flowId, flowName }: { flowId: string; flowName: string }) { + const [metrics, setMetrics] = useState({ + visitors: 0, + conversations: 0, + leads: 0, + conversions: 0, + conversionRate: 0, + }); + const [series, setSeries] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + let active = true; + + const load = async () => { + setLoading(true); + setError(null); + try { + const analytics = await getStudioAnalytics(flowId, 7); + if (!active) { + return; + } + + setMetrics({ + visitors: analytics.totals.visitors, + conversations: analytics.totals.conversations, + leads: analytics.totals.leads, + conversions: analytics.totals.conversions, + conversionRate: analytics.totals.conversionRate, + }); + setSeries(analytics.activity.map((item) => item.value)); + } catch (loadError) { + if (!active) { + return; + } + + setError(loadError instanceof Error ? loadError.message : "Failed to load analytics."); + } finally { + if (active) { + setLoading(false); + } + } + }; + + void load(); + + return () => { + active = false; + }; + }, [flowId]); + + const max = useMemo(() => Math.max(1, ...series), [series]); + + const stats = [ + { icon: MessageSquare, label: "Conversations", value: metrics.conversations }, + { icon: Users, label: "Leads", value: metrics.leads }, + { icon: Target, label: "Conversion", value: `${metrics.conversionRate}%` }, + { icon: TrendingUp, label: "Visitors", value: metrics.visitors }, + ]; + + return ( +
+
+
+
+ +
+
+

Flow analytics

+

Performance for “{flowName}” over the last 7 days.

+
+
+ + {error ? ( +
+ {error} +
+ ) : null} + +
+ {stats.map((stat) => { + const Icon = stat.icon; + return ( +
+
+ +
+
{loading ? "…" : stat.value}
+
{stat.label}
+
+ ); + })} +
+ +
+

Conversations per day

+ {loading ? ( +
+ ) : ( +
+ {series.length === 0 ? ( +
+ No executions recorded yet. +
+ ) : ( + series.map((value, index) => ( +
+
+
D{index + 1}
+
+ )) + )} +
+ )} +
+
+
+ ); +} diff --git a/packages/studio/src/components/flow/AppShell.tsx b/packages/studio/src/components/flow/AppShell.tsx new file mode 100644 index 0000000..08b2ebe --- /dev/null +++ b/packages/studio/src/components/flow/AppShell.tsx @@ -0,0 +1,26 @@ +import type { ReactNode } from "react" + +import { Separator } from "@/components/ui/separator" +import { + SidebarInset, + SidebarProvider, + SidebarTrigger, +} from "@/components/ui/sidebar" + +import { Sidebar } from "./Sidebar" + +export function AppShell({ children }: { children: ReactNode }) { + return ( + + + +
+ + + Berry Studio +
+
{children}
+
+
+ ) +} diff --git a/packages/studio/src/components/flow/BlockMenu.tsx b/packages/studio/src/components/flow/BlockMenu.tsx new file mode 100644 index 0000000..533a10c --- /dev/null +++ b/packages/studio/src/components/flow/BlockMenu.tsx @@ -0,0 +1,73 @@ +import { Button } from "@/components/ui/button" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" + +import { BLOCK_META, type BlockKind } from "./BlockNode" + +const ORDER: BlockKind[] = [ + "message", + "action", + "input", + "condition", + "setVariable", + "delay", + "note", + "end", +] + +export function BlockMenu({ + x, + y, + onPick, + onClose, +}: { + x: number + y: number + onPick: (kind: BlockKind) => void + onClose: () => void +}) { + return ( + <> + + ) + })} + + + + ) +} diff --git a/packages/studio/src/components/flow/BlockNode.tsx b/packages/studio/src/components/flow/BlockNode.tsx new file mode 100644 index 0000000..39698c2 --- /dev/null +++ b/packages/studio/src/components/flow/BlockNode.tsx @@ -0,0 +1,217 @@ +import { Handle, Position, type NodeProps } from "@xyflow/react" +import { + Braces, + CircleStop, + Clock3, + Copy, + Flag, + GitBranch, + MessageSquare, + MousePointerClick, + Pencil, + Play, + Plus, + StickyNote, + TextCursorInput, + Trash2, +} from "lucide-react" + +import { Badge } from "@/components/ui/badge" +import { Button } from "@/components/ui/button" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import { cn } from "@/lib/utils" + +export type BlockKind = + | "start" + | "message" + | "action" + | "input" + | "condition" + | "setVariable" + | "delay" + | "end" + | "note" + +export const BLOCK_META: Record< + BlockKind, + { label: string; icon: typeof MessageSquare; description: string } +> = { + start: { label: "Início", icon: Play, description: "Ponto de entrada" }, + message: { label: "Mensagem", icon: MessageSquare, description: "Método BerryProtocol" }, + action: { label: "Ação", icon: MousePointerClick, description: "Editar, reagir ou apagar" }, + input: { label: "Capturar resposta", icon: TextCursorInput, description: "Salva uma resposta" }, + condition: { label: "Condição", icon: GitBranch, description: "Cria dois caminhos" }, + setVariable: { label: "Definir variável", icon: Braces, description: "Atualiza o contexto" }, + delay: { label: "Aguardar", icon: Clock3, description: "Pausa a execução" }, + end: { label: "Fim", icon: CircleStop, description: "Encerra o fluxo" }, + note: { label: "Nota", icon: StickyNote, description: "Visível só no editor" }, +} + +export type BlockNodeData = { + kind: BlockKind + label?: string + text?: string + messageType?: string + capabilityLabel?: string + payload?: Record + prompt?: string + variableName?: string + variable?: string + operator?: string + value?: string + key?: string + delayMs?: number + onAdd?: (id: string, handle?: string) => void + onEdit?: (id: string) => void + onDuplicate?: (id: string) => void + onDelete?: (id: string) => void +} + +const getSummary = (data: BlockNodeData) => { + if (data.kind === "message" || data.kind === "action") { + const payload = data.payload ?? {} + return String( + payload.text + ?? payload.caption + ?? payload.title + ?? data.capabilityLabel + ?? data.messageType + ?? "Configure o método", + ) + } + + if (data.kind === "input") { + return data.prompt || `Salvar em {{${data.variableName || "lastInput"}}}` + } + + if (data.kind === "condition") { + return `${data.variable || "lastInput"} ${data.operator || "equals"} ${data.value || "…"}` + } + + if (data.kind === "setVariable") { + return `${data.key || "variavel"} = ${data.value || "…"}` + } + + if (data.kind === "delay") { + return `${data.delayMs ?? 1000} ms` + } + + return data.text || BLOCK_META[data.kind].description +} + +export function BlockNode({ id, data, selected }: NodeProps) { + const block = data as unknown as BlockNodeData + const meta = BLOCK_META[block.kind] ?? BLOCK_META.message + const Icon = meta.icon + const isStart = block.kind === "start" + const isEnd = block.kind === "end" + const isCondition = block.kind === "condition" + const isNote = block.kind === "note" + + return ( +
+ {!isStart && !isNote ? ( + + ) : null} + + block.onEdit?.(id)} + > + + + + +
+ {block.label || meta.label} +

+ {block.capabilityLabel || meta.description} +

+
+ {isStart ? Entrada : null} +
+ +

+ {getSummary(block)} +

+ {isCondition ? ( +
+ Verdadeiro + Falso +
+ ) : null} +
+
+ +
+ + {!isStart ? ( + + ) : null} + {!isStart ? ( + + ) : null} +
+ + {isCondition ? ( + <> + + + + ) : !isEnd && !isNote ? ( + + ) : null} + + {!isEnd && !isNote ? ( + + ) : null} + + {isStart ? ( + + ) : null} +
+ ) +} diff --git a/packages/studio/src/components/flow/ConstructorView.tsx b/packages/studio/src/components/flow/ConstructorView.tsx new file mode 100644 index 0000000..7638cd2 --- /dev/null +++ b/packages/studio/src/components/flow/ConstructorView.tsx @@ -0,0 +1,148 @@ +import type { Edge, Node } from "@xyflow/react" +import { Pencil, Trash2 } from "lucide-react" + +import { Badge } from "@/components/ui/badge" +import { Button } from "@/components/ui/button" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { + Empty, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/components/ui/empty" + +import { BLOCK_META, type BlockNodeData } from "./BlockNode" + +export function ConstructorView({ + nodes, + edges, + onEdit, + onDelete, +}: { + nodes: Node[] + edges: Edge[] + onEdit: (id: string) => void + onDelete: (id: string) => void +}) { + const startNode = nodes.find( + (node) => (node.data as unknown as BlockNodeData).kind === "start", + ) + const ordered: Node[] = [] + const seen = new Set() + + const walk = (id: string | undefined) => { + if (!id || seen.has(id)) return + const node = nodes.find((item) => item.id === id) + if (!node) return + seen.add(id) + ordered.push(node) + const outgoing = edges.filter((edge) => edge.source === id) + outgoing.forEach((edge) => walk(edge.target)) + } + + walk(startNode?.id) + nodes.forEach((node) => { + if (!seen.has(node.id)) ordered.push(node) + }) + + return ( +
+
+
+

Visão linear

+

+ Revise a sequência e abra qualquer bloco para editar no canvas. +

+
+ + {!ordered.length ? ( + + + + + + Nenhum bloco no fluxo + + Volte ao canvas e adicione o primeiro bloco. + + + + ) : null} + + {ordered.map((node, index) => { + const data = node.data as unknown as BlockNodeData + const meta = BLOCK_META[data.kind] ?? BLOCK_META.message + const Icon = meta.icon + const outgoing = edges.filter((edge) => edge.source === node.id) + + return ( + + +
+ + + +
+ + {index + 1}. {data.label || meta.label} + + + {data.capabilityLabel || meta.description} + +
+
+ + {data.kind !== "start" && data.kind !== "end" ? ( + + ) : null} + {data.kind !== "start" ? ( + + ) : null} + +
+ + {node.type} + {outgoing.length ? ( + outgoing.map((edge) => ( + + {edge.sourceHandle && edge.sourceHandle !== "next" + ? `${edge.sourceHandle} → ` + : "Próximo → "} + {ordered.findIndex((item) => item.id === edge.target) + 1} + + )) + ) : ( + + Sem próxima etapa + + )} + +
+ ) + })} +
+
+ ) +} diff --git a/packages/studio/src/components/flow/EditPanel.tsx b/packages/studio/src/components/flow/EditPanel.tsx new file mode 100644 index 0000000..bb2797b --- /dev/null +++ b/packages/studio/src/components/flow/EditPanel.tsx @@ -0,0 +1,431 @@ +import type { Node } from "@xyflow/react" +import { Braces, Trash2 } from "lucide-react" + +import { Badge } from "@/components/ui/badge" +import { Button } from "@/components/ui/button" +import { + Field, + FieldDescription, + FieldGroup, + FieldLabel, +} from "@/components/ui/field" +import { Input } from "@/components/ui/input" +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" +import { + Sheet, + SheetContent, + SheetDescription, + SheetFooter, + SheetHeader, + SheetTitle, +} from "@/components/ui/sheet" +import { Switch } from "@/components/ui/switch" +import { Textarea } from "@/components/ui/textarea" +import type { + StudioCapability, + StudioFieldDefinition, +} from "@/lib/studio-api" + +import { BLOCK_META, type BlockKind, type BlockNodeData } from "./BlockNode" + +const payloadInputValue = (value: unknown, field: StudioFieldDefinition) => { + if (field.type === "json" && value !== undefined && typeof value !== "string") { + return JSON.stringify(value, null, 2) + } + return value == null ? "" : String(value) +} + +const defaultPayload = (capability: StudioCapability) => + Object.fromEntries( + capability.fields.map((field) => [ + field.key, + field.defaultValue ?? (field.type === "checkbox" ? false : ""), + ]), + ) + +export function EditPanel({ + node, + messageCapabilities, + actionCapabilities, + conditionOperators, + onClose, + onUpdateNodeData, + onDelete, +}: { + node: Node + messageCapabilities: StudioCapability[] + actionCapabilities: StudioCapability[] + conditionOperators: Array<{ label: string; value: string }> + onClose: () => void + onUpdateNodeData: (id: string, patch: Record) => void + onDelete: (id: string) => void +}) { + const data = node.data as unknown as BlockNodeData + const kind = (data.kind || node.type || "message") as BlockKind + const meta = BLOCK_META[kind] ?? BLOCK_META.message + const capabilities = kind === "action" ? actionCapabilities : messageCapabilities + const selectedCapability = capabilities.find( + (capability) => capability.id === data.messageType, + ) + const payload = data.payload ?? {} + + const updatePayload = (key: string, value: unknown) => { + onUpdateNodeData(node.id, { + payload: { + ...payload, + [key]: value, + }, + }) + } + + return ( + !open && onClose()}> + + + + + {meta.label} + + + Configure o comportamento deste bloco. Use {"{{variavel}}"} em textos + e estruturas JSON. + + + +
+ + + Nome do bloco + + onUpdateNodeData(node.id, { label: event.target.value }) + } + /> + + + {kind === "message" || kind === "action" ? ( + <> + + Método do BerryProtocol + + {selectedCapability ? ( + + {selectedCapability.description} + + ) : null} + + + {selectedCapability?.fields.map((field) => ( + updatePayload(field.key, value)} + /> + ))} + + ) : null} + + {kind === "input" ? ( + <> + + + Mensagem de pergunta + +